diff --git a/dist/sigpro.editor.js b/dist/sigpro.editor.js new file mode 100644 index 0000000..d90671c --- /dev/null +++ b/dist/sigpro.editor.js @@ -0,0 +1 @@ +var{$:u,isF:C}=window.SigPro,S=(x)=>{let{value:s,class:z}=x,l=u(0),g=u(""),v=u(0),h=u(0),c=u(0),w=()=>window.getSelection().rangeCount?window.getSelection().getRangeAt(0):0,o,d,R="\uD83D\uDE00 \uD83D\uDE0A \uD83D\uDE09 \uD83E\uDDD0 \uD83D\uDE2E \uD83E\uDD14 \uD83D\uDE05 \uD83D\uDE02 \uD83D\uDE0D \uD83D\uDE18 \uD83E\uDD70 \uD83D\uDC4D \uD83D\uDC4E \uD83D\uDC4C \uD83E\uDD1D \uD83E\uDD1E \uD83D\uDC4B \uD83D\uDC4F \uD83D\uDE4C \uD83D\uDE4F \uD83D\uDCAA ☝️ \uD83D\uDC47 \uD83D\uDC48 \uD83D\uDC49 \uD83D\uDD95 ✅ ⚠️ \uD83D\uDE80 \uD83D\uDCE2 ✉️ ❤️".split(" "),k=()=>{h(h()+1),o&&v(o.innerText.length)},b=()=>{if(o){let e=o.innerHTML;C(s)?s(e):x.onchange?.(e),k()}},r=(e,i=null)=>{if(o?.focus(),d){let n=window.getSelection();n.removeAllRanges(),n.addRange(d)}document.execCommand(e,0,i),d=0,b()},L=(e,i=null)=>{if(h(),!o||l())return 0;try{if(e=="formatBlock"){let n=window.getSelection().getRangeAt(0).commonAncestorContainer;while(n&&n!==o){if(n.tagName===i)return 1;n=n.parentNode}return 0}return document.queryCommandState(e)}catch(n){return 0}},T=(e)=>{if(e){let i=new FileReader;i.onload=(n)=>{let f=e.type.startsWith("image/"),m=n.target.result;r("insertHTML",f?div({style:"display:inline-block;resize:both;overflow:hidden;vertical-align:bottom;width:200px;border:1px dashed #ccc;padding:2px;cursor:pointer",class:"resizable-img-container"},[img({src:m,style:"width:100%;height:100%;object-fit:contain;pointer-events:none"})]):a({href:m,download:e.name,contenteditable:"false",style:"display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border:1px solid #ccc;border-radius:4px;background:#f9f9f9;text-decoration:none;color:#333;font-size:12px;margin:2px;cursor:pointer"},[span({class:"icon-[lucide--paperclip] w-3 h-3"}),e.name]))},i.readAsDataURL(e)}},t=(e,i,n)=>button({type:"button",class:()=>`btn btn-ghost btn-xs ${L(i,n)?"btn-active bg-primary/20":""}`,onclick:()=>typeof i=="function"?i():r(i,n)},[span({class:`icon-[lucide--${e}]`})]);return div({class:`border border-base-300 rounded-box bg-base-100 overflow-hidden flex flex-col ${z||""}`},[div({class:"flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20"},[div({class:"flex flex-wrap gap-1 flex-1"},[t("bold","bold"),t("italic","italic"),t("underline","underline"),input({type:"color",class:"w-5 h-5 p-0 bg-transparent cursor-pointer",oninput:(e)=>r("foreColor",e.target.value)}),span({class:"w-px h-5 bg-base-300 mx-1"}),t("align-left","justifyLeft"),t("align-center","justifyCenter"),t("align-right","justifyRight"),span({class:"w-px h-5 bg-base-300 mx-1"}),t("list","insertUnorderedList"),t("list-ordered","insertOrderedList"),t("indent-decrease","outdent"),t("indent-increase","indent"),t("quote",()=>r("formatBlock",L("formatBlock","BLOCKQUOTE")?"P":"BLOCKQUOTE"),"BLOCKQUOTE"),span({class:"w-px h-5 bg-base-300 mx-1"}),t("link",()=>{let e=prompt("URL:");e&&r("createLink",e)}),t("paperclip",()=>{let e=document.createElement("input");e.type="file",e.onchange=(i)=>T(i.target.files[0]),e.click()}),div({class:"relative"},[t("smile",()=>{d=w(),c(!c())}),div({class:"absolute top-full left-0 mt-1 p-2 bg-base-100 border shadow-xl rounded-box w-52 z-50 flex flex-wrap gap-1",style:()=>c()?"":"display:none"},R.map((e)=>span({class:"cursor-pointer p-1 text-lg",onclick:()=>{r("insertText",e),c(0)}},e)))]),t("undo-2","undo"),t("redo-2","redo")]),t("code-2",()=>{if(!l())g(o?.innerHTML||"");else if(o)o.innerHTML=g(),b();l(!l())})]),div({class:"relative flex-1 flex flex-col",onclick:()=>c(0)},[div({ref:(e)=>{if(e&&!o)o=e,e.innerHTML=(C(s)?s():s)||"",document.execCommand("defaultParagraphSeparator",0,"br"),e.onclick=(i)=>{let n=i.target.closest(".resizable-img-container");if(n){let f=n.querySelector("img");f&&((m)=>{let p=document.createElement("div");p.style="position:fixed;top:0;left:0;width:100%;height:100%;background:#000e;z-index:9999;display:flex;align-items:center;justify-content:center;cursor:zoom-out",p.onclick=()=>p.remove();let y=document.createElement("img");y.src=m,y.style="max-width:95%;max-height:95%",p.appendChild(y),document.body.appendChild(p)})(f.src)}}},style:()=>`min-height:22rem;${l()?"display:none":""}`,class:"p-4 outline-none text-base-content leading-relaxed [&>div]:m-0 [&>p]:m-0 [&>div]:min-h-[1em] [&_.resizable-img-container]:hover:border-primary [&_blockquote]:border-l-4 [&_blockquote]:border-base-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_ul]:list-disc [&_ul]:pl-8 [&_ol]:list-decimal [&_ol]:pl-8",contenteditable:"true",oninput:b,onkeydown:(e)=>e.key==="Tab"&&(e.preventDefault(),r("indent")),onkeyup:()=>{k(),d=w()},onmouseup:b,onpaste:(e)=>{e.preventDefault(),r("insertText",e.clipboardData.getData("text/plain"))},ondrop:(e)=>{e.preventDefault(),T(e.dataTransfer.files[0])},ondragover:(e)=>e.preventDefault()}),textarea({class:"w-full flex-1 min-h-[22rem] p-4 font-mono text-sm bg-base-200 border-0",style:()=>l()?"":"display:none",value:g,oninput:(e)=>{if(g(e.target.value),o)o.innerHTML=e.target.value;x.onchange?.(e.target.value)}})]),div({class:"px-3 py-1 border-t text-[10px] text-right opacity-60"},[span(()=>v())])])};export{S as Editor}; diff --git a/dist/sigpro.grid.js b/dist/sigpro.grid.js new file mode 100644 index 0000000..2f06c7e --- /dev/null +++ b/dist/sigpro.grid.js @@ -0,0 +1,78 @@ +function y(z){if(!z?.length)return;return z[z.length-1]}function Z0(z,J,Q){if(z===J)return!0;if(!z||!J)return z==null&&J==null;let Z=z.length;if(Z!==J.length)return!1;if(Q){for(let $=0;$=0)z.splice(Q,1)}function P2(z,J){let Q=0,Z=0;for(;Q=0;Z--)z.splice(Q,0,J[Z])}var q0=(z)=>{if(z==null||z==="")return null;return z};function P(z){return z!=null&&z!==""}function d(z){return!P(z)}var p0=(z)=>{return z!=null&&typeof z.toString==="function"?z.toString():null},s6=(z,J)=>{let Q=z?JSON.stringify(z):null,Z=J?JSON.stringify(J):null;return Q===Z},m1=(z,J,Q=!1)=>{if(typeof z==="object"&&z!==null&&typeof z.toNumber==="function")z=z.toNumber();if(typeof J==="object"&&J!==null&&typeof J.toNumber==="function")J=J.toNumber();if(z==null)return J==null?0:-1;if(J==null)return 1;if(!Q||typeof z!=="string"){if(z>J)return 1;if(z{let G=Z?()=>Z.wrapIncoming(q):q;if(J)this.dispatchAsync(G);else G()},X=this.getListeners(Q,J,!1);if((X?.size??0)>0){let q=new Set(X);for(let G of q){if(!X?.has(G))continue;$(()=>G(z))}}let Y=this.getGlobalListeners(J);if(Y.size>0){let q=new Set(Y);for(let G of q)$(()=>G(Q,z))}}getGlobalListeners(z){return z?this.globalAsyncListeners:this.globalSyncListeners}dispatchAsync(z){if(this.asyncFunctionsQueue.push(z),!this.scheduled){let J=()=>{window.setTimeout(this.flushAsyncQueue.bind(this),0)},Q=this.frameworkOverrides;if(Q)Q.wrapIncoming(J);else J();this.scheduled=!0}}flushAsyncQueue(){this.scheduled=!1;let z=this.asyncFunctionsQueue.slice();this.asyncFunctionsQueue=[];for(let J of z)J()}},UG=/[&<>"']/g,_G={"&":"&","<":"<",">":">",'"':""","'":"'"};function T2(z){return z?.toString().toString()??null}function L0(z){return T2(z)?.replace(UG,(J)=>_G[J])??null}function GZ(z){return typeof z==="string"&&z.length>1&&z.codePointAt(0)===61}function HG(z){if(!z||z==null)return null;let J=/([a-z])([A-Z])/g,Q=/([A-Z]+)([A-Z])([a-z])/g;return z.replace(J,"$1 $2").replace(Q,"$1 $2$3").replace(/\./g," ").split(" ").map(($)=>$.substring(0,1).toUpperCase()+($.length>1?$.substring(1,$.length):"")).join(" ")}function m0(z){return z.eRootDiv.getRootNode()}function n(z){return m0(z).activeElement}function Y0(z){let{gos:J,eRootDiv:Q}=z,Z=null,$=J.get("getDocument");if($&&P($))Z=$();else if(Q)Z=Q.ownerDocument;if(Z&&P(Z))return Z;return document}function Vz(z){let J=n(z);return J===null||J===Y0(z).body}function UZ(z){return Y0(z).defaultView||window}function Rz(z){let J=null,Q;try{J=Y0(z).fullscreenElement}catch{}finally{if(!J)J=m0(z);let Z=J.querySelector("body");if(Z)Q=Z;else if(J instanceof ShadowRoot)Q=J;else if(J instanceof Document)Q=J?.documentElement;else Q=J}return Q}function WG(z){return Rz(z)?.clientWidth??(window.innerWidth||-1)}function BG(z){return Rz(z)?.clientHeight??(window.innerHeight||-1)}function t0(z,J,Q){if(Q==null||typeof Q==="string"&&Q=="")_Z(z,J);else W4(z,J,Q)}function W4(z,J,Q){z.setAttribute(N8(J),Q.toString())}function _Z(z,J){z.removeAttribute(N8(J))}function N8(z){return`aria-${z}`}function U0(z,J){if(J)z.setAttribute("role",J);else z.removeAttribute("role")}function EG(z){let J=z?.direction;if(J==="asc")return"ascending";else if(J==="desc")return"descending";else if(J==="mixed")return"other";return"none"}function g8(z){return Number.parseInt(z.getAttribute("aria-posinset"),10)}function KG(z){return z.getAttribute("aria-label")}function _0(z,J){t0(z,"label",J)}function sz(z,J){t0(z,"labelledby",J)}function c1(z,J){t0(z,"describedby",J)}function h8(z,J){t0(z,"live",J)}function FG(z,J){t0(z,"atomic",J)}function LG(z,J){t0(z,"relevant",J)}function HZ(z,J){t0(z,"invalid",J)}function l6(z,J){t0(z,"level",J)}function u8(z,J){t0(z,"disabled",J)}function a6(z,J){t0(z,"hidden",J)}function j0(z,J){W4(z,"expanded",J)}function m8(z){_Z(z,"expanded")}function v2(z,J){W4(z,"setsize",J)}function I2(z,J){W4(z,"posinset",J)}function DG(z,J){W4(z,"multiselectable",J)}function MG(z,J){W4(z,"rowcount",J)}function O6(z,J){W4(z,"rowindex",J)}function kG(z,J){W4(z,"colcount",J)}function c8(z,J){W4(z,"colindex",J)}function fG(z,J){W4(z,"colspan",J)}function SG(z,J){W4(z,"sort",J)}function VG(z){_Z(z,"sort")}function o6(z,J){t0(z,"selected",J)}function e6(z,J){W4(z,"checked",J===void 0?"mixed":J)}function RG(z,J){t0(z,"controls",J)}function WZ(z,J){RG(z,J.id),sz(J,z.id)}function K7(z,J){t0(z,"owns",J)}function i8(z,J){t0(z,"haspopup",J===!1?null:J)}function BZ(z,J){return J===void 0?z("ariaIndeterminate","indeterminate"):J===!0?z("ariaChecked","checked"):z("ariaUnchecked","unchecked")}function EZ(z,J,Q){let Z=z.parentElement,$=Z&&Z.firstChild;while($){if(J)$.classList.toggle(J,$===z);if(Q)$.classList.toggle(Q,$!==z);$=$.nextSibling}}var AG="[tabindex], input, select, button, textarea, [href]",p8="[disabled], .ag-disabled:not(.ag-button), .ag-disabled *";function _2(z){if(!z)return!1;if(!z.matches("input, select, button, textarea"))return!1;if(!z.matches(p8))return!1;return B0(z)}function w(z,J,Q={}){let{skipAriaHidden:Z}=Q;if(z.classList.toggle("ag-hidden",!J),!Z)a6(z,!J)}function jG(z,J,Q={}){let{skipAriaHidden:Z}=Q;if(z.classList.toggle("ag-invisible",!J),!Z)a6(z,!J)}function L2(z,J){let Z=J?(X)=>X.setAttribute("disabled",""):(X)=>X.removeAttribute("disabled");Z(z);let $=z.querySelectorAll("input")??[];for(let X of $)Z(X)}function nz(z,J,Q){let Z=0;while(z){if(z.classList.contains(J))return!0;if(z=z.parentElement,typeof Q=="number"){if(++Z>Q)break}else if(z===Q)break}return!1}function i1(z){let{height:J,width:Q,borderTopWidth:Z,borderRightWidth:$,borderBottomWidth:X,borderLeftWidth:Y,paddingTop:q,paddingRight:G,paddingBottom:U,paddingLeft:_,marginTop:H,marginRight:W,marginBottom:B,marginLeft:E,boxSizing:K}=window.getComputedStyle(z),F=Number.parseFloat;return{height:F(J||"0"),width:F(Q||"0"),borderTopWidth:F(Z||"0"),borderRightWidth:F($||"0"),borderBottomWidth:F(X||"0"),borderLeftWidth:F(Y||"0"),paddingTop:F(q||"0"),paddingRight:F(G||"0"),paddingBottom:F(U||"0"),paddingLeft:F(_||"0"),marginTop:F(H||"0"),marginRight:F(W||"0"),marginBottom:F(B||"0"),marginLeft:F(E||"0"),boxSizing:K}}function C2(z){let J=i1(z);if(J.boxSizing==="border-box")return J.height-J.paddingTop-J.paddingBottom-J.borderTopWidth-J.borderBottomWidth;return J.height}function lz(z){let J=i1(z);if(J.boxSizing==="border-box")return J.width-J.paddingLeft-J.paddingRight-J.borderLeftWidth-J.borderRightWidth;return J.width}function n8(z){let{height:J,marginBottom:Q,marginTop:Z}=i1(z);return Math.floor(J+Q+Z)}function P6(z){let{width:J,marginLeft:Q,marginRight:Z}=i1(z);return Math.floor(J+Q+Z)}function d8(z){let J=z.getBoundingClientRect(),{borderTopWidth:Q,borderLeftWidth:Z,borderRightWidth:$,borderBottomWidth:X}=i1(z);return{top:J.top+(Q||0),left:J.left+(Z||0),right:J.right+($||0),bottom:J.bottom+(X||0)}}function T6(z,J){let Q=z.scrollLeft;if(J)Q=Math.abs(Q);return Q}function v6(z,J,Q){if(Q)J*=-1;z.scrollLeft=J}function J0(z){while(z?.firstChild)z.firstChild.remove()}function R0(z){if(z?.parentNode)z.remove()}function r8(z){return!!z.offsetParent}function B0(z){if(z.checkVisibility)return z.checkVisibility({checkVisibilityCSS:!0});return!(!r8(z)||window.getComputedStyle(z).visibility!=="visible")}function KZ(z){let J=document.createElement("div");return J.innerHTML=(z||"").trim(),J.firstChild}function t8(z,J,Q){if(Q?.nextSibling===J)return;if(!z.firstChild)z.appendChild(J);else if(Q)if(Q.nextSibling)z.insertBefore(J,Q.nextSibling);else z.appendChild(J);else if(z.firstChild&&z.firstChild!==J)z.prepend(J)}function s8(z,J){for(let Q=0;Q`-${J.toLocaleLowerCase()}`)}function y2(z,J){if(!J)return;for(let Q of Object.keys(J)){let Z=J[Q];if(!Q?.length||Z==null)continue;let $=OG(Q),X=Z.toString(),Y=X.replace(/\s*!important/g,""),q=Y.length!=X.length?"important":void 0;z.style.setProperty($,Y,q)}}function y1(z){return()=>{let J=z();if(!J)return!0;return l8(J)||PG(J)}}function l8(z){return z.clientWidthX?.disconnect()}function O4(z,J){let Q=UZ(z);if(Q.requestAnimationFrame)Q.requestAnimationFrame(J);else if(Q.webkitRequestAnimationFrame)Q.webkitRequestAnimationFrame(J);else Q.setTimeout(J,0)}var a8="data-ref",oJ;function F7(){return oJ??(oJ=document.createTextNode(" ")),oJ.cloneNode()}function H0(z){let{attrs:J,children:Q,cls:Z,ref:$,role:X,tag:Y}=z,q=document.createElement(Y);if(Z)q.className=Z;if($)q.setAttribute(a8,$);if(X)q.setAttribute("role",X);if(J)for(let G of Object.keys(J))q.setAttribute(G,J[G]);if(Q)if(typeof Q==="string")q.textContent=Q;else{let G=!0;for(let U of Q)if(U)if(typeof U==="string")q.appendChild(document.createTextNode(U)),G=!1;else if(typeof U==="function")q.appendChild(U());else{if(G)q.appendChild(F7()),G=!1;q.append(H0(U)),q.appendChild(F7())}}return q}var vG=["touchstart","touchend","touchmove","touchcancel","scroll"],IG=["wheel"],eJ={},vQ=(()=>{let z={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return(Q)=>{if(typeof eJ[Q]==="boolean")return eJ[Q];let Z=document.createElement(z[Q]||"div");return Q="on"+Q,eJ[Q]=Q in Z}})();function zJ(z,J){if(!J||!z)return!1;return yG(J).indexOf(z)>=0}function CG(z){let J=[],Q=z.target;while(Q)J.push(Q),Q=Q.parentElement;return J}function yG(z){let J=z;if(J.path)return J.path;if(J.composedPath)return J.composedPath();return CG(J)}function bG(z,J,Q){let Z=xG(J),$;if(Z!=null)$={passive:Z};z.addEventListener(J,Q,$)}var xG=(z)=>{let J=vG.includes(z),Q=IG.includes(z);if(J)return!0;if(Q)return!1};function o8(z,J,Q){if(Q===0)return!1;let Z=Math.abs(z.clientX-J.clientX),$=Math.abs(z.clientY-J.clientY);return Math.max(Z,$)<=Q}var j1=(z,J)=>{let Q=z.identifier;for(let Z=0,$=J.length;Z<$;++Z){let X=J[Z];if(X.identifier===Q)return X}return null};function D2(z,J){return z.gos.isElementInThisInstance(J.target)}function JJ(z,J,Q){let $=z.getBoundingClientRect().height,X=WG(Q)-2,Y=BG(Q)-2;if(!z.offsetParent)return;let G=d8(z.offsetParent),{clientY:U,clientX:_}=J,H=U-G.top-$/2,W=_-G.left-10,B=Y0(Q),E=B.defaultView||window,K=E.pageYOffset||B.documentElement.scrollTop,F=E.pageXOffset||B.documentElement.scrollLeft;if(X>0&&W+z.clientWidth>X+F)W=X+F-z.clientWidth;if(W<0)W=0;if(Y>0&&H+z.clientHeight>Y+K)H=Y+K-z.clientHeight;if(H<0)H=0;z.style.left=`${W}px`,z.style.top=`${H}px`}var L6=(z,...J)=>{for(let Q of J){let[Z,$,X,Y]=Q;Z.addEventListener($,X,Y),z.push(Q)}},LZ=(z)=>{if(z){for(let[J,Q,Z,$]of z)J.removeEventListener(Q,Z,$);z.length=0}},f1=(z)=>{if(z.cancelable)z.preventDefault()};function wG(z,J){return J}function e8(z){return z?.getLocaleTextFunc()??wG}function DZ(z,J,Q,Z){let $=J[Q];return z.getLocaleTextFunc()(Q,typeof $==="function"?$(Z):$,Z)}var k0=class{constructor(){this.destroyFunctions=[],this.destroyed=!1,this.__v_skip=!0,this.propertyListenerId=0,this.lastChangeSetIdLookup={},this.isAlive=()=>!this.destroyed}preWireBeans(z){this.beans=z,this.stubContext=z.context,this.eventSvc=z.eventSvc,this.gos=z.gos}destroy(){let{destroyFunctions:z}=this;for(let J=0;Jnull;let Z;if(NG(z))z.__addEventListener(J,Q),Z=()=>{return z.__removeEventListener(J,Q),null};else{let $=gG(z);if(z instanceof HTMLElement)bG(z,J,Q);else if($)z.addListener(J,Q);else z.addEventListener(J,Q);Z=$?()=>{return z.removeListener(J,Q),null}:()=>{return z.removeEventListener(J,Q),null}}return this.destroyFunctions.push(Z),()=>{return Z(),this.destroyFunctions=this.destroyFunctions.filter(($)=>$!==Z),null}}setupPropertyListener(z,J){let{gos:Q}=this;Q.addPropertyEventListener(z,J);let Z=()=>{return Q.removePropertyEventListener(z,J),null};return this.destroyFunctions.push(Z),()=>{return Z(),this.destroyFunctions=this.destroyFunctions.filter(($)=>$!==Z),null}}addManagedPropertyListener(z,J){if(this.destroyed)return()=>null;return this.setupPropertyListener(z,J)}addManagedPropertyListeners(z,J){if(this.destroyed)return;let Q=z.join("-")+this.propertyListenerId++,Z=($)=>{if($.changeSet){if($.changeSet?.id===this.lastChangeSetIdLookup[Q])return;this.lastChangeSetIdLookup[Q]=$.changeSet.id}let X={type:"propertyChanged",changeSet:$.changeSet,source:$.source};J(X)};for(let $ of z)this.setupPropertyListener($,Z)}getLocaleTextFunc(){return e8(this.beans.localeSvc)}addDestroyFunc(z){if(this.isAlive())this.destroyFunctions.push(z);else z()}createOptionalManagedBean(z,J){return z?this.createManagedBean(z,J):void 0}createManagedBean(z,J){let Q=this.createBean(z,J);return this.addDestroyFunc(this.destroyBean.bind(this,z,J)),Q}createBean(z,J,Q){return(J||this.stubContext).createBean(z,Q)}destroyBean(z,J){return(J||this.stubContext).destroyBean(z)}destroyBeans(z,J){return(J||this.stubContext).destroyBeans(z)}};function NG(z){return z.__addEventListener!==void 0}function gG(z){return z.eventServiceType==="global"}var S=class extends k0{},IQ=new Set,QJ=(z,J)=>{if(!IQ.has(J))IQ.add(J),z()};QJ._set=IQ;var hG={pending:!1,funcs:[]},uG={pending:!1,funcs:[]};function CQ(z,J="setTimeout",Q){let Z=J==="raf"?uG:hG;if(Z.funcs.push(z),Z.pending)return;Z.pending=!0;let $=()=>{let X=Z.funcs.slice();Z.funcs.length=0,Z.pending=!1;for(let Y of X)Y()};if(J==="raf")O4(Q,$);else window.setTimeout($,0)}function i0(z,J,Q){let Z;return function(...$){let X=this;return window.clearTimeout(Z),Z=window.setTimeout(function(){if(z.isAlive())J.apply(X,$)},Q),Z}}function L7(z,J){let Q=0;return function(...Z){let $=this,X=Date.now();if(X-Q{if(X!=null)window.clearInterval(X),X=null};z.addDestroyFunc(q);let G=()=>{let U=Date.now()-$>Z;if(J()||U)Q(),Y=!0,q()};if(G(),!Y)X=window.setInterval(G,10)}var mG=new Set(["__proto__","constructor","prototype"]);function cG(z,J){if(z==null)return;if(Array.isArray(z)){for(let Q=0;Q!mG.has(Z)))J(Q,z[Q])}function D0(z,J,Q=!0,Z=!1){if(!P(J))return;cG(J,($,X)=>{let Y=z[$];if(Y===X)return;if(Z){if(Y==null&&X!=null){if(typeof X==="object"&&X.constructor===Object)Y={},z[$]=Y}}if(D7(X)&&D7(Y)&&!Array.isArray(Y))D0(Y,X,Q,Z);else if(Q||X!==void 0)z[$]=X})}function D7(z){return typeof z==="object"&&z!==null}var kZ=class z{static applyGlobalGridOptions(J){if(!z.gridOptions)return{...J};let Q={};if(D0(Q,z.gridOptions,!0,!0),z.mergeStrategy==="deep")D0(Q,J,!0,!0);else Q={...Q,...J};if(z.gridOptions.context)Q.context=z.gridOptions.context;if(J.context){if(z.mergeStrategy==="deep"&&Q.context)D0(J.context,Q.context,!0,!0);Q.context=J.context}return Q}static applyGlobalGridOption(J,Q){if(z.mergeStrategy==="deep"){let Z=iG(J);if(Z&&typeof Z==="object"&&typeof Q==="object")return z.applyGlobalGridOptions({[J]:Q})[J]}return Q}};kZ.gridOptions=void 0;kZ.mergeStrategy="shallow";var fZ=kZ;function iG(z){return fZ.gridOptions?.[z]}var pG={suppressContextMenu:!1,preventDefaultOnContextMenu:!1,allowContextMenuWithControlKey:!1,suppressMenuHide:!0,enableBrowserTooltips:!1,tooltipTrigger:"hover",tooltipShowDelay:2000,tooltipSwitchShowDelay:200,tooltipHideDelay:1e4,noteTrigger:"hover",noteShowDelay:180,noteHideDelay:220,tooltipMouseTrack:!1,tooltipShowMode:"standard",tooltipInteraction:!1,copyHeadersToClipboard:!1,copyGroupHeadersToClipboard:!1,clipboardDelimiter:"\t",suppressCopyRowsToClipboard:!1,suppressCopySingleCellRanges:!1,suppressLastEmptyLineOnPaste:!1,suppressClipboardPaste:!1,suppressClipboardApi:!1,suppressCutToClipboard:!1,maintainColumnOrder:!1,enableStrictPivotColumnOrder:!1,suppressFieldDotNotation:!1,allowDragFromColumnsToolPanel:!1,suppressMovableColumns:!1,suppressColumnMoveAnimation:!1,suppressMoveWhenColumnDragging:!1,suppressDragLeaveHidesColumns:!1,suppressRowGroupHidesColumns:!1,suppressAutoSize:!1,autoSizePadding:20,skipHeaderOnAutoSize:!1,singleClickEdit:!1,suppressClickEdit:!1,readOnlyEdit:!1,stopEditingWhenCellsLoseFocus:!1,enterNavigatesVertically:!1,enterNavigatesVerticallyAfterEdit:!1,enableCellEditingOnBackspace:!1,undoRedoCellEditing:!1,undoRedoCellEditingLimit:10,suppressCsvExport:!1,suppressExcelExport:!1,cacheQuickFilter:!1,includeHiddenColumnsInQuickFilter:!1,excludeChildrenWhenTreeDataFiltering:!1,enableAdvancedFilter:!1,includeHiddenColumnsInAdvancedFilter:!1,enableCharts:!1,masterDetail:!1,keepDetailRows:!1,keepDetailRowsCount:10,detailRowAutoHeight:!1,tabIndex:0,rowBuffer:10,valueCache:!1,valueCacheNeverExpires:!1,enableCellExpressions:!1,suppressTouch:!1,suppressFocusAfterRefresh:!1,suppressBrowserResizeObserver:!1,suppressPropertyNamesCheck:!1,suppressChangeDetection:!1,debug:!1,suppressLoadingOverlay:!1,suppressNoRowsOverlay:!1,pagination:!1,paginationPageSize:100,paginationPageSizeSelector:!0,paginationAutoPageSize:!1,paginateChildRows:!1,suppressPaginationPanel:!1,pivotMode:!1,pivotPanelShow:"never",pivotDefaultExpanded:0,pivotSuppressAutoColumn:!1,suppressExpandablePivotGroups:!1,functionsReadOnly:!1,suppressAggFuncInHeader:!1,alwaysAggregateAtRootLevel:!1,aggregateOnlyChangedColumns:!1,suppressAggFilteredOnly:!1,removePivotHeaderRowWhenSingleValueColumn:!1,animateRows:!0,cellFlashDuration:500,cellFadeDuration:1000,allowShowChangeAfterFilter:!1,domLayout:"normal",ensureDomOrder:!1,enableRtl:!1,suppressColumnVirtualisation:!1,suppressMaxRenderedRowRestriction:!1,suppressRowVirtualisation:!1,rowDragManaged:!1,refreshAfterGroupEdit:!1,rowDragInsertDelay:500,suppressRowDrag:!1,suppressMoveWhenRowDragging:!1,rowDragEntireRow:!1,rowDragMultiRow:!1,embedFullWidthRows:!1,groupDisplayType:"singleColumn",groupDefaultExpanded:0,groupMaintainOrder:!1,groupSelectsChildren:!1,groupSuppressBlankHeader:!1,groupSelectsFiltered:!1,showOpenedGroup:!1,groupRemoveSingleChildren:!1,groupRemoveLowestSingleChildren:!1,groupHideOpenParents:!1,groupHideColumnsUntilExpanded:!1,groupAllowUnbalanced:!1,rowGroupPanelShow:"never",suppressMakeColumnVisibleAfterUnGroup:!1,treeData:!1,rowGroupPanelSuppressSort:!1,suppressGroupRowsSticky:!1,rowModelType:"clientSide",asyncTransactionWaitMillis:50,suppressModelUpdateAfterUpdateTransaction:!1,cacheOverflowSize:1,infiniteInitialRowCount:1,serverSideInitialRowCount:1,cacheBlockSize:100,maxBlocksInCache:-1,maxConcurrentDatasourceRequests:2,blockLoadDebounceMillis:0,purgeClosedRowNodes:!1,serverSideSortAllLevels:!1,serverSideOnlyRefreshFilteredGroups:!1,serverSidePivotResultFieldSeparator:"_",viewportRowModelPageSize:5,viewportRowModelBufferSize:5,alwaysShowHorizontalScroll:!1,alwaysShowVerticalScroll:!1,debounceVerticalScrollbar:!1,suppressHorizontalScroll:!1,suppressScrollOnNewData:!1,suppressScrollWhenPopupsAreOpen:!1,suppressAnimationFrame:!1,suppressMiddleClickScrolls:!1,suppressPreventDefaultOnMouseWheel:!1,rowMultiSelectWithClick:!1,suppressRowDeselection:!1,suppressRowClickSelection:!1,suppressCellFocus:!1,suppressHeaderFocus:!1,suppressMultiRangeSelection:!1,enableCellTextSelection:!1,enableRangeSelection:!1,enableRangeHandle:!1,enableFillHandle:!1,fillHandleDirection:"xy",suppressClearOnFillReduction:!1,accentedSort:!1,unSortIcon:!1,suppressMultiSort:!1,alwaysMultiSort:!1,suppressMaintainUnsortedOrder:!1,suppressRowHoverHighlight:!1,suppressRowTransform:!1,columnHoverHighlight:!1,deltaSort:!1,enableGroupEdit:!1,groupLockGroupColumns:0,serverSideEnableClientSideSort:!1,suppressServerSideFullWidthLoadingRow:!1,pivotMaxGeneratedColumns:-1,columnMenu:"new",reactiveCustomComponents:!0,suppressSetFilterByDefault:!1,enableFilterHandlers:!1},z9="https://www.ag-grid.com";function M2(z,J,...Q){if(z.get("debug"))console.log("AG Grid: "+J,...Q)}function y4(z,...J){QJ(()=>J9(z,...J),z+J?.join(""))}function O1(z,...J){QJ(()=>nG(z,...J),z+J?.join(""))}function nG(z,...J){console.error("AG Grid: "+z,...J)}function J9(z,...J){console.warn("AG Grid: "+z,...J)}var Q9=new Set,C6={},dz={},D6,Z9=!1,$9=!1,dG=!1;function rG(z){let[J,Q]=z.version.split(".")||[],[Z,$]=D6.split(".")||[];return J===Z&&Q===$}function tG(z){if(!D6)D6=z.version;let J=(Z)=>`You are using incompatible versions of AG Grid modules. Major and minor versions should always match across modules. ${Z} Please update all modules to the same version.`;if(!z.version)O1(J(`'${z.moduleName}' is incompatible.`));else if(!rG(z))O1(J(`'${z.moduleName}' is version ${z.version} but the other modules are version ${D6}.`));let Q=z.validate?.();if(Q&&!Q.isValid)O1(`${Q.message}`)}function k2(z,J,Q=!1){if(!Q)Z9=!0;tG(z);let Z=z.rowModels??["all"];Q9.add(z);let $;if(J!==void 0){if($9=!0,dz[J]===void 0)dz[J]={};$=dz[J]}else $=C6;for(let X of Z){if($[X]===void 0)$[X]={};$[X][z.moduleName]=z}if(z.dependsOn)for(let X of z.dependsOn)k2(X,J,Q)}function sG(z){delete dz[z]}function yQ(z,J,Q){let Z=($)=>!!C6[$]?.[z]||!!dz[J]?.[$]?.[z];return Z(Q)||Z("all")}function SZ(){return $9}function lG(z,J){let Q=dz[z]??{};return[...Object.values(C6.all??{}),...Object.values(Q.all??{}),...Object.values(C6[J]??{}),...Object.values(Q[J]??{})]}function aG(){return new Set(Q9)}function X9(z,J){let Q=dz[z]??{};return[...Object.values(Q.all??{}),...Object.values(Q[J]??{})]}function oG(){return Z9}function VZ(){return dG}var Y9=class{static register(z){k2(z,void 0)}static registerModules(z){for(let J of z)k2(J,void 0)}};var i="35.3.0",M7=2000,k7=100,q9="_version_",G9=null,P1=`${z9}/javascript-data-grid`;function eG(z){G9=z}function zU(z){P1=z}function U9(z,J,Q){return G9?.(z,J)??[$U(z,J,Q)]}function ZJ(z,J,Q,Z,$){z(`${Z?"warning":"error"} #${J}`,...U9(J,Q,$))}function JU(z){if(!z)return String(z);let J={};for(let Q of Object.keys(z))if(typeof z[Q]!=="object"&&typeof z[Q]!=="function")J[Q]=z[Q];return JSON.stringify(J)}function QU(z){let J=z;if(z instanceof Error)J=z.toString();else if(typeof z==="object")J=JU(z);return J}function M6(z){return z===void 0?"undefined":z===null?"null":z}function bQ(z,J){return`${z}?${J.toString()}`}function ZU(z,J,Q){let Z=Array.from(J.entries()).sort((X,Y)=>Y[1].length-X[1].length),$=bQ(z,J);for(let[X,Y]of Z){if(X===q9)continue;let q=$.length-Q;if(q<=0)break;let G="...",U=q+G.length,_=Y.length-U>k7?Y.slice(0,Y.length-U)+G:Y.slice(0,k7)+G;J.set(X,_),$=bQ(z,J)}return $}function _9(z,J){let Q=new URLSearchParams;if(Q.append(q9,i),J)for(let X of Object.keys(J))Q.append(X,QU(J[X]));let Z=`${P1}/errors/${z}`,$=bQ(Z,Q);return $.length<=M7?$:ZU(Z,Q,M7)}var $U=(z,J,Q)=>{let Z=_9(z,J),$=`${Q?Q+` +`:""}Visit ${Z}`;if(VZ())return $;return`${$}${Q?"":` + Alternatively register the ValidationModule to see the full message in the console.`}`};function V(...z){ZJ(y4,z[0],z[1],!0)}function r(...z){ZJ(O1,z[0],z[1],!1)}function G2(z,J,Q){ZJ(O1,z,J,!1,Q)}function H9(z,J,Q){ZJ(y4,z,J,!0,Q)}function XU(z,J){let Q=J[0];return`error #${Q} `+U9(Q,J[1],z).join(" ")}function Y4(...z){return XU(void 0,z)}function W9(z,J){return z.get("rowModelType")===J}function o(z,J){return W9(z,"clientSide")}function Az(z,J){return W9(z,"serverSide")}function A0(z,J){return z.get("domLayout")===J}function s4(z){return y6(z)!==void 0}function B9(z){return typeof z.get("getRowHeight")==="function"}function YU(z,J){if(J)return!z.get("enableStrictPivotColumnOrder");return z.get("maintainColumnOrder")}function qU({gos:z,formula:J}){let Q=z.get("rowNumbers");return Q||!!J?.active&&Q!==!1}function f2(z,J,Q=!1,Z){let{gos:$,environment:X}=z;if(Z==null)Z=X.getDefaultRowHeight();if(B9($)){if(Q)return{height:Z,estimated:!0};let G={node:J,data:J.data},U=$.getCallback("getRowHeight")(G);if(xQ(U)){if(U===0)V(23);return{height:Math.max(1,U),estimated:!1}}}if(J.detail&&$.get("masterDetail"))return GU($);let Y=$.get("rowHeight");return{height:Y&&xQ(Y)?Y:Z,estimated:!1}}function GU(z){if(z.get("detailRowAutoHeight"))return{height:1,estimated:!1};let J=z.get("detailRowHeight");if(xQ(J))return{height:J,estimated:!1};return{height:300,estimated:!1}}function E9(z){let{environment:J,gos:Q}=z,Z=Q.get("rowHeight");if(!Z||d(Z))return J.getDefaultRowHeight();let $=J.refreshRowHeightVariable();if($!==-1)return $;return V(24),J.getDefaultRowHeight()}function xQ(z){return!isNaN(z)&&typeof z==="number"&&isFinite(z)}function K9(z,J,Q){let Z=J[z.getDomDataKey()];return Z?Z[Q]:void 0}function az(z,J,Q,Z){let $=z.getDomDataKey(),X=J[$];if(d(X))X={},J[$]=X;X[Q]=Z}function T1(z){if(z.get("ensureDomOrder"))return!1;return z.get("animateRows")}function p1(z){return!(z.get("paginateChildRows")||z.get("groupHideOpenParents")||A0(z,"print"))}function b4(z){return!z.get("autoGroupColumnDef")?.comparator&&!z.get("treeData")}function u4(z){let J=z.get("groupAggFiltering");if(typeof J==="function")return z.getCallback("groupAggFiltering");if(J===!0)return()=>!0;return}function c4(z){return z.get("grandTotalRow")}function $J(z){let J=z.get("groupTotalRow");if(typeof J==="function")return z.getCallback("groupTotalRow");return()=>J??void 0}function x2(z){if(!!z.get("groupHideOpenParents"))return!0;return z.get("groupDisplayType")==="multipleColumns"}function RZ(z){return x2(z)&&z.get("groupHideColumnsUntilExpanded")&&o(z)}function XJ(z,J){if(J)return!1;return z.get("groupDisplayType")==="groupRows"}function F9(z,J,Q){return!!J.group&&!J.footer&&XJ(z,Q)}function wQ(z){let J=z.getCallback("getRowId");if(J===void 0)return J;return(Q)=>{let Z=J(Q);if(typeof Z!=="string")QJ(()=>V(25,{id:Z}),"getRowIdString"),Z=String(Z);return Z}}function UU(z,J){let Q=z.get("groupHideParentOfSingleChild");if(Q===!0)return!0;if(Q==="leafGroupsOnly"&&J.leafGroup)return!0;if(z.get("groupRemoveSingleChildren"))return!0;if(z.get("groupRemoveLowestSingleChildren")&&J.leafGroup)return!0;return!1}function YJ(z,J){let Q=z.get("suppressGroupChangesColumnVisibility");if(Q===!0)return!1;if(J&&Q==="suppressHideOnGroup")return!1;if(!J&&Q==="suppressShowOnUngroup")return!1;let Z=z.get("suppressRowGroupHidesColumns");if(J&&Z===!0)return!1;let $=z.get("suppressMakeColumnVisibleAfterUnGroup");if(!J&&$===!0)return!1;return!0}function Fz(z){return z?.checkboxes??!0}function k6(z){return z?.mode==="multiRow"&&(z.headerCheckbox??!0)}function b1(z){if(typeof z!=="object")return;return z.checkboxLocation??"selectionColumn"}function zQ(z){return z?.hideDisabledCheckboxes??!1}function _U(z){return typeof z.get("rowSelection")!=="string"}function L9(z){return z.get("cellSelection")!==void 0}function D9(z){let J=z.get("cellSelection");if(J===void 0)return z.get("suppressMultiRangeSelection");return typeof J!=="boolean"?J?.suppressMultiRanges??!1:!1}function n0(z){let J=z.get("cellSelection");return J!==void 0?!!J:z.get("enableRangeSelection")}function qJ(z){let J=z.get("cellSelection");if(J===void 0)return{mode:"fill",setFillValue:z.get("fillOperation"),direction:z.get("fillHandleDirection"),suppressClearOnFillReduction:z.get("suppressClearOnFillReduction")};return typeof J!=="boolean"&&J.handle?.mode==="fill"?J.handle:void 0}function l4(z){let J=z.get("cellSelection")??!1;return(typeof J==="object"&&J.enableColumnSelection)??!1}function M9(z){let J=z.get("rowSelection")??"single";if(typeof J==="string"){let Q=z.get("suppressRowClickSelection"),Z=z.get("suppressRowDeselection");if(Q&&Z)return!1;else if(Q)return"enableDeselection";else if(Z)return"enableSelection";else return!0}return J.mode==="singleRow"||J.mode==="multiRow"?J.enableClickSelection??!1:!1}function HU(z){let J=M9(z);return J===!0||J==="enableSelection"}function WU(z){let J=M9(z);return J===!0||J==="enableDeselection"}function NQ(z){let J=z.get("rowSelection");if(typeof J==="string")return z.get("isRowSelectable");return J?.isRowSelectable}function y6(z){let J="beanName"in z&&z.beanName==="gos"?z.get("rowSelection"):z.rowSelection;if(typeof J==="string")switch(J){case"multiple":return"multiRow";case"single":return"singleRow";default:return}switch(J?.mode){case"multiRow":case"singleRow":return J.mode;default:return}}function S2(z){return y6(z)==="multiRow"}function BU(z){let J=z.get("rowSelection");if(typeof J==="string")return z.get("rowMultiSelectWithClick");return J?.enableSelectionWithoutKeys??!1}function b6(z){let J=z.get("rowSelection");if(typeof J==="string"){let Q=z.get("groupSelectsChildren"),Z=z.get("groupSelectsFiltered");if(Q&&Z)return"filteredDescendants";else if(Q)return"descendants";else return"self"}return J?.mode==="multiRow"?J.groupSelects:void 0}function k9(z,J=!0){let Q=z.get("rowSelection");if(typeof Q!=="object")return J?"all":void 0;return Q.mode==="multiRow"?Q.selectAll:"all"}function EU(z){let J=z.get("rowSelection");if(typeof J==="string")return!1;return J?.mode==="multiRow"?J.ctrlASelectsRows??!1:!1}function V2(z){let J=b6(z);return J==="descendants"||J==="filteredDescendants"}function f7(z){let J=z.get("rowSelection");return typeof J==="object"&&J.masterSelects||"self"}function KU(z){return z.isModuleRegistered("SetFilter")&&!z.get("suppressSetFilterByDefault")}function F0(z){return z.get("columnMenu")==="legacy"}function AZ(z){return!F0(z)}function FU(z){if(!z||z.length<2)return z;return"on"+z[0].toUpperCase()+z.substring(1)}function C(z,J){return z.addCommon(J)}function jZ({gos:z},J){return J.button===2||J.ctrlKey&&z.get("allowContextMenuWithControlKey")}var LU={resizable:!0,sortable:!0},DU=0;function f9(){return DU++}function G4(z){return z instanceof B4}var MU=["asc","desc",null],kU=[{type:"absolute",direction:"asc"},{type:"absolute",direction:"desc"},null],B4=class extends S{constructor(z,J,Q,Z){super();this.colDef=z,this.userProvidedColDef=J,this.colId=Q,this.primary=Z,this.isColumn=!0,this.instanceId=f9(),this.autoHeaderHeight=null,this.sortDef=Z4(),this.moving=!1,this.resizing=!1,this.menuVisible=!1,this.formulaRef=null,this.lastLeftPinned=!1,this.firstRightPinned=!1,this.filterActive=!1,this.colEventSvc=new R4,this.tooltipEnabled=!1,this.rowGroupActive=!1,this.pivotActive=!1,this.aggregationActive=!1,this.flex=null,this.colIdSanitised=L0(Q)}destroy(){super.destroy(),this.beans.rowSpanSvc?.deregister(this)}getInstanceId(){return this.instanceId}initState(){let{colDef:z,beans:{sortSvc:J,pinnedCols:Q,colFlex:Z}}=this;J?.initCol(this);let $=z.hide;if($!==void 0)this.visible=!$;else this.visible=!z.initialHide;Q?.initCol(this),Z?.initCol(this)}setColDef(z,J,Q){let Z=z.spanRows!==this.colDef.spanRows;if(this.colDef=z,this.userProvidedColDef=J,this.initMinAndMaxWidths(),this.initDotNotation(),this.initTooltip(),Z)this.beans.rowSpanSvc?.deregister(this),this.initRowSpan();this.dispatchColEvent("colDefChanged",Q)}getUserProvidedColDef(){return this.userProvidedColDef}getParent(){return this.parent}getOriginalParent(){return this.originalParent}postConstruct(){this.initState(),this.initMinAndMaxWidths(),this.resetActualWidth("gridInitializing"),this.initDotNotation(),this.initTooltip(),this.initRowSpan(),this.addPivotListener()}initDotNotation(){let{gos:z,colDef:{field:J,tooltipField:Q}}=this,Z=z.get("suppressFieldDotNotation");this.fieldContainsDots=P(J)&&J.includes(".")&&!Z,this.tooltipFieldContainsDots=P(Q)&&Q.includes(".")&&!Z}initMinAndMaxWidths(){let z=this.colDef;this.minWidth=z.minWidth??this.beans.environment.getDefaultColumnMinWidth(),this.maxWidth=z.maxWidth??Number.MAX_SAFE_INTEGER}initTooltip(){this.beans.tooltipSvc?.initCol(this)}initRowSpan(){if(this.colDef.spanRows)this.beans.rowSpanSvc?.register(this)}addPivotListener(){let z=this.beans.pivotColDefSvc,J=this.colDef.pivotValueColumn;if(!z||!J)return;this.addManagedListeners(J,{colDefChanged:(Q)=>{let Z=z.recreateColDef(this.colDef);this.setColDef(Z,Z,Q.source)}})}resetActualWidth(z){let J=this.calculateColInitialWidth(this.colDef);this.setActualWidth(J,z,!0)}calculateColInitialWidth(z){let J=z.width??z.initialWidth??200;return Math.max(Math.min(J,this.maxWidth),this.minWidth)}isEmptyGroup(){return!1}isRowGroupDisplayed(z){return this.beans.showRowGroupCols?.isRowGroupDisplayed(this,z)??!1}isPrimary(){return this.primary}isFilterAllowed(){return!!this.colDef.filter}isFieldContainsDots(){return this.fieldContainsDots}isTooltipEnabled(){return this.tooltipEnabled}isTooltipFieldContainsDots(){return this.tooltipFieldContainsDots}getHighlighted(){return this.highlighted}__addEventListener(z,J){this.colEventSvc.addEventListener(z,J)}__removeEventListener(z,J){this.colEventSvc.removeEventListener(z,J)}addEventListener(z,J){this.frameworkEventListenerService=this.beans.frameworkOverrides.createLocalEventListenerWrapper?.(this.frameworkEventListenerService,this.colEventSvc);let Q=this.frameworkEventListenerService?.wrap(z,J)??J;this.colEventSvc.addEventListener(z,Q)}removeEventListener(z,J){let Q=this.frameworkEventListenerService?.unwrap(z,J)??J;this.colEventSvc.removeEventListener(z,Q)}createColumnFunctionCallbackParams(z){return C(this.gos,{node:z,data:z.data,column:this,colDef:this.colDef})}isSuppressNavigable(z){return this.beans.cellNavigation?.isSuppressNavigable(this,z)??!1}isCellEditable(z){return this.beans.editSvc?.isCellEditable({rowNode:z,column:this})??!1}isSuppressFillHandle(){return!!this.colDef.suppressFillHandle}isAutoHeight(){return!!this.colDef.autoHeight}isAutoHeaderHeight(){return!!this.colDef.autoHeaderHeight}isRowDrag(z){return this.isColumnFunc(z,this.colDef.rowDrag)}isDndSource(z){return this.isColumnFunc(z,this.colDef.dndSource)}isCellCheckboxSelection(z){return this.beans.selectionSvc?.isCellCheckboxSelection(this,z)??!1}isSuppressPaste(z){return this.isColumnFunc(z,this.colDef?.suppressPaste??null)}isResizable(){return!!this.getColDefValue("resizable")}getColDefValue(z){return this.colDef[z]??LU[z]}isColumnFunc(z,J){if(typeof J==="boolean")return J;if(typeof J==="function"){let Q=this.createColumnFunctionCallbackParams(z);return J(Q)}return!1}createColumnEvent(z,J){return C(this.gos,{type:z,column:this,columns:[this],source:J})}isMoving(){return this.moving}getSort(){return this.sortDef.direction}getSortDef(){if(!this.sortDef.direction)return null;return this.sortDef}getColDefAllowedSortTypes(){let z=[],{sort:J,initialSort:Q}=this.colDef,Z=J===null?J:A4(J?.type),$=Q===null?Q:A4(Q?.type);if(Z)z.push(Z);if($)z.push($);return z}getSortingOrder(){let z=this.getColDefAllowedSortTypes().includes("absolute")?kU:MU;return(this.colDef.sortingOrder??this.gos.get("sortingOrder")??z).map((J)=>Z4(J))}getAvailableSortTypes(){let z=this.getSortingOrder().reduce((J,Q)=>{if(Q.direction)J.push(Q.type);return J},this.getColDefAllowedSortTypes());return new Set(z)}setSortDef(z){this.sortDef=z}isSortable(){return!!this.getColDefValue("sortable")}isSortAscending(){return this.getSort()==="asc"}isSortDescending(){return this.getSort()==="desc"}isSortNone(){return d(this.getSort())}isSorting(){return P(this.getSort())}getSortIndex(){return this.sortIndex}isMenuVisible(){return this.menuVisible}getAggFunc(){return this.aggFunc}getLeft(){return this.left}getOldLeft(){return this.oldLeft}getRight(){return this.left+this.actualWidth}setLeft(z,J){if(this.oldLeft=this.left,this.left!==z)this.left=z,this.dispatchColEvent("leftChanged",J)}isFilterActive(){return this.filterActive}isHovered(){return V(261),!!this.beans.colHover?.isHovered(this)}setFirstRightPinned(z,J){if(this.firstRightPinned!==z)this.firstRightPinned=z,this.dispatchColEvent("firstRightPinnedChanged",J)}setLastLeftPinned(z,J){if(this.lastLeftPinned!==z)this.lastLeftPinned=z,this.dispatchColEvent("lastLeftPinnedChanged",J)}isFirstRightPinned(){return this.firstRightPinned}isLastLeftPinned(){return this.lastLeftPinned}isPinned(){return this.pinned==="left"||this.pinned==="right"}isPinnedLeft(){return this.pinned==="left"}isPinnedRight(){return this.pinned==="right"}getPinned(){return this.pinned}setVisible(z,J){let Q=z===!0;if(this.visible!==Q)this.visible=Q,this.dispatchColEvent("visibleChanged",J);this.dispatchStateUpdatedEvent("hide")}isVisible(){return this.visible}isSpanHeaderHeight(){return!this.colDef.suppressSpanHeaderHeight}getFirstRealParent(){let z=this.getOriginalParent();while(z?.isPadding())z=z.getOriginalParent();return z}getColumnGroupPaddingInfo(){let z=this.parent;if(!z?.isPadding())return{numberOfParents:0,isSpanningTotal:!1};let J=z.getPaddingLevel()+1,Q=!0;while(z){if(!z.isPadding()){Q=!1;break}z=z.parent}return{numberOfParents:J,isSpanningTotal:Q}}getColDef(){return this.colDef}getDefinition(){return this.colDef}getColumnGroupShow(){return this.colDef.columnGroupShow}getColId(){return this.colId}getId(){return this.colId}getUniqueId(){return this.colId}getActualWidth(){return this.actualWidth}getAutoHeaderHeight(){return this.autoHeaderHeight}setAutoHeaderHeight(z){let J=z!==this.autoHeaderHeight;return this.autoHeaderHeight=z,J}createBaseColDefParams(z){return C(this.gos,{node:z,data:z.data,colDef:this.colDef,column:this})}getColSpan(z){if(d(this.colDef.colSpan))return 1;let J=this.createBaseColDefParams(z),Q=this.colDef.colSpan(J);return Math.max(Q,1)}getRowSpan(z){if(d(this.colDef.rowSpan))return 1;let J=this.createBaseColDefParams(z),Q=this.colDef.rowSpan(J);return Math.max(Q,1)}setActualWidth(z,J,Q=!1){if(z=Math.max(z,this.minWidth),z=Math.min(z,this.maxWidth),this.actualWidth!==z){if(this.actualWidth=z,this.flex!=null&&J!=="flex"&&J!=="gridInitializing")this.flex=null;if(!Q)this.fireColumnWidthChangedEvent(J)}this.dispatchStateUpdatedEvent("width")}fireColumnWidthChangedEvent(z){this.dispatchColEvent("widthChanged",z)}isGreaterThanMax(z){return z>this.maxWidth}getMinWidth(){return this.minWidth}getMaxWidth(){return this.maxWidth}getFlex(){return this.flex}isRowGroupActive(){return this.rowGroupActive}isPivotActive(){return this.pivotActive}isAnyFunctionActive(){return this.isPivotActive()||this.isRowGroupActive()||this.isValueActive()}isAnyFunctionAllowed(){return this.isAllowPivot()||this.isAllowRowGroup()||this.isAllowValue()}isValueActive(){return this.aggregationActive}isAllowPivot(){return this.colDef.enablePivot===!0}isAllowValue(){return this.colDef.enableValue===!0}isAllowRowGroup(){return this.colDef.enableRowGroup===!0}isAllowFormula(){return this.colDef.allowFormula===!0}dispatchColEvent(z,J,Q){let Z=this.createColumnEvent(z,J);if(Q)D0(Z,Q);this.colEventSvc.dispatchEvent(Z)}dispatchStateUpdatedEvent(z){this.colEventSvc.dispatchEvent({type:"columnStateUpdated",key:z})}};function Z4(z){if(v1(z))return{direction:z.direction,type:z.type};return{direction:GJ(z),type:A4(z)}}function Lz(z){return z==="asc"||z==="desc"||z===null}function OZ(z){return z==="default"||z==="absolute"}function v1(z){if(!z||typeof z!=="object")return!1;let J=z;return OZ(J.type)&&Lz(J.direction)}function f6(z,J){if(!z)return J?J.direction===null:!0;if(!J)return z?z.direction===null:!0;return z.type===J.type&&z.direction===J.direction}function GJ(z){return Lz(z)?z:null}function A4(z){return OZ(z)?z:"default"}function PZ(z,J,Q){let $=Q?.()??J.sortSvc.getDisplaySortForColumn(z),X=A4($?.type),Y=GJ($?.direction),q=z.getAvailableSortTypes(),G=q.has("default"),U=q.has("absolute");return{isDefaultSortAllowed:G,isAbsoluteSortAllowed:U,isAbsoluteSort:X==="absolute",isDefaultSort:X==="default",isAscending:Y==="asc",isDescending:Y==="desc",direction:Y}}function G0(z){return z instanceof rz}var rz=class extends S{constructor(z,J,Q,Z){super();this.colGroupDef=z,this.groupId=J,this.padding=Q,this.level=Z,this.isColumn=!1,this.expandable=!1,this.instanceId=f9(),this.expandableListenerRemoveCallback=null,this.expanded=!!z?.openByDefault}destroy(){if(this.expandableListenerRemoveCallback)this.reset(null,void 0);super.destroy()}reset(z,J){if(this.colGroupDef=z,this.level=J,this.originalParent=null,this.expandableListenerRemoveCallback)this.expandableListenerRemoveCallback();this.children=void 0,this.expandable=void 0}getInstanceId(){return this.instanceId}getOriginalParent(){return this.originalParent}getLevel(){return this.level}isVisible(){if(this.children)return this.children.some((z)=>z.isVisible());return!1}isPadding(){return this.padding}setExpanded(z){this.expanded=z===void 0?!1:z,this.dispatchLocalEvent({type:"expandedChanged"})}isExpandable(){return this.expandable}isExpanded(){return this.expanded}getGroupId(){return this.groupId}getId(){return this.getGroupId()}setChildren(z){this.children=z}getChildren(){return this.children}getColGroupDef(){return this.colGroupDef}getLeafColumns(){let z=[];return this.addLeafColumns(z),z}forEachLeafColumn(z){if(!this.children)return;for(let J of this.children)if(G4(J))z(J);else if(G0(J))J.forEachLeafColumn(z)}addLeafColumns(z){if(!this.children)return;for(let J of this.children)if(G4(J))z.push(J);else if(G0(J))J.addLeafColumns(z)}getColumnGroupShow(){let z=this.colGroupDef;if(!z)return;return z.columnGroupShow}setupExpandable(){if(this.setExpandable(),this.expandableListenerRemoveCallback)this.expandableListenerRemoveCallback();let z=this.onColumnVisibilityChanged.bind(this);for(let J of this.getLeafColumns())J.__addEventListener("visibleChanged",z);this.expandableListenerRemoveCallback=()=>{for(let J of this.getLeafColumns())J.__removeEventListener("visibleChanged",z);this.expandableListenerRemoveCallback=null}}setExpandable(){if(this.isPadding())return;let z=!1,J=!1,Q=!1,Z=this.findChildrenRemovingPadding();for(let X=0,Y=Z.length;X{for(let Z of Q)if(G0(Z)&&Z.isPadding())J(Z.children);else z.push(Z)};return J(this.children),z}onColumnVisibilityChanged(){this.setExpandable()}},fU={numericColumn:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"},rightAligned:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"}};function gQ(z,J,Q){let Z={},$=z.gos;return Object.assign(Z,$.get("defaultColGroupDef")),Object.assign(Z,J),$.validateColDef(Z,Q),Z}var SU=class{constructor(){this.existingKeys={}}addExistingKeys(z){for(let J=0;J0)V(273,{providedId:z,usedId:$});return this.existingKeys[$]=!0,$}Q++}}},S9=(z,J)=>{if(G0(z))z.setupExpandable();z.originalParent=J};function V9(z,J=null,Q,Z,$){let{existingCols:X,existingGroups:Y}=R9(Z),q=new Map(X.map((K)=>[K.getId(),K])),G=new Map(Y.map((K)=>[K.getId(),K])),U=0,_=(K,F)=>{if(U=Math.max(U,F),P9(K)){if(!z.colGroupSvc)return null;let f=K.groupId,A=G.get(f),R=gQ(z,K,f),O=new rz(R,f,!1,F);if(z.context.createBean(O),A)O.setExpanded(A.isExpanded());return O.setChildren(K.children.map((v)=>_(v,F+1))),O}let L=K.colId,D=q.get(L),M=e4(z,K,D?.colId??L);if(!D)D=new B4(M,K,L,Q),z.context.createBean(D);else D.setColDef(M,K,$),O9(z,D,M,$);return z.dataTypeSvc?.addColumnListeners(D),D},H=J?.map((K)=>_(K,0))??[],W=0,B={getUniqueKey:(K,F)=>String(++W)},E=z.colGroupSvc?z.colGroupSvc.balanceColumnTree(H,0,U,B):H;return g4(null,E,S9),{columnTree:E,treeDepth:U}}function TZ(z,J=null,Q,Z,$){let X=new SU,{existingCols:Y,existingGroups:q,existingColKeys:G}=R9(Z);X.addExistingKeys(G);let U=A9(z,J,0,Q,Y,X,q,$),{colGroupSvc:_}=z,H=_?.findMaxDepth(U,0)??0,W=_?_.balanceColumnTree(U,0,H,X):U;return g4(null,W,S9),{columnTree:W,treeDepth:H}}function R9(z){let J=[],Q=[],Z=[];if(z)g4(null,z,($)=>{if(G0($)){let X=$;Q.push(X)}else{let X=$;Z.push(X.getId()),J.push(X)}});return{existingCols:J,existingGroups:Q,existingColKeys:Z}}function A9(z,J,Q,Z,$,X,Y,q){if(!J)return[];let{colGroupSvc:G}=z,U=Array(J.length);for(let _=0;_0)return;if(Q.width!=null)J.setActualWidth(Q.width,Z);else{let X=J.getActualWidth();J.setActualWidth(X,Z)}}function RU(z,J){if(!J)return;for(let Q=0;Q{for(let $=0;$J+Q.getActualWidth(),0)}function U4(z,J,Q){let Z={};if(!J)return;if(g4(null,J,(X)=>{Z[X.getInstanceId()]=X}),Q)g4(null,Q,(X)=>{Z[X.getInstanceId()]=null});let $=Object.values(Z).filter((X)=>X!=null);z.context.destroyBeans($)}function Z1(z){return z.getId().startsWith(Q1)}function i4(z){return(typeof z==="string"?z:("getColId"in z)?z.getColId():z.colId)?.startsWith(T9)??!1}function y0(z){return(typeof z==="string"?z:("getColId"in z)?z.getColId():z.colId)?.startsWith(v9)??!1}function w2(z){return i4(z)||y0(z)}function x6(z){let J=[];if(z instanceof Array)J=z;else if(typeof z==="string")J=z.split(",");return J}function N2(z,J){return Z0(z,J,(Q,Z)=>Q.colId===Z.colId)}function g2(z){z.map={};for(let J of z.list)z.map[J.getId()]=J}function Dz(z){return z==="optionsUpdated"?"gridOptionsChanged":z}function h4(z,J){return z===J||z.colId==J||z.colDef===J}var OU=(z,J)=>(Q,Z)=>{let $={value1:void 0,value2:void 0},X=!1;if(z){if(z[Q]!==void 0)$.value1=z[Q],X=!0;if(P(Z)&&z[Z]!==void 0)$.value2=z[Z],X=!0}if(!X&&J){if(J[Q]!==void 0)$.value1=J[Q];if(P(Z)&&J[Z]!==void 0)$.value2=J[Z]}return $};function vZ(z,J){let Q={...z,sort:void 0,colId:J},Z=C9(z);if(Z)Q.sort=Z.direction,Q.sortType=Z.type;return Q}function C9(z){let{sort:J,initialSort:Q}=z,Z=v1(J)||Lz(J),$=v1(Q)||Lz(Q);if(Z)return Z4(J);if($)return Z4(Q);return null}function y9(z,J){return z+"_"+J}function K0(z){return z instanceof R2}var R2=class extends S{constructor(z,J,Q,Z){super();this.providedColumnGroup=z,this.groupId=J,this.partId=Q,this.pinned=Z,this.isColumn=!1,this.displayedChildren=[],this.autoHeaderHeight=null,this.parent=null,this.colIdSanitised=L0(this.getUniqueId())}reset(){this.parent=null,this.children=null,this.displayedChildren=null}getParent(){return this.parent}getUniqueId(){return y9(this.groupId,this.partId)}isEmptyGroup(){return this.displayedChildren.length===0}isMoving(){let z=this.getProvidedColumnGroup().getLeafColumns();if(!z||z.length===0)return!1;return z.every((J)=>J.isMoving())}checkLeft(){for(let z of this.displayedChildren)if(K0(z))z.checkLeft();if(this.displayedChildren.length>0)if(this.gos.get("enableRtl")){let J=y(this.displayedChildren).getLeft();this.setLeft(J)}else{let z=this.displayedChildren[0].getLeft();this.setLeft(z)}else this.setLeft(null)}getLeft(){return this.left}getOldLeft(){return this.oldLeft}setLeft(z){if(this.oldLeft=this.left,this.left!==z)this.left=z,this.dispatchLocalEvent({type:"leftChanged"})}getPinned(){return this.pinned}getGroupId(){return this.groupId}getPartId(){return this.partId}getActualWidth(){let z=0;for(let J of this.displayedChildren??[])z+=J.getActualWidth();return z}isResizable(){if(!this.displayedChildren)return!1;let z=!1;for(let J of this.displayedChildren)if(J.isResizable())z=!0;return z}getMinWidth(){let z=0;for(let J of this.displayedChildren)z+=J.getMinWidth();return z}addChild(z){if(!this.children)this.children=[];this.children.push(z)}getDisplayedChildren(){return this.displayedChildren}getLeafColumns(){let z=[];return this.addLeafColumns(z),z}getDisplayedLeafColumns(){let z=[];return this.addDisplayedLeafColumns(z),z}getDefinition(){return this.providedColumnGroup.getColGroupDef()}getColGroupDef(){return this.providedColumnGroup.getColGroupDef()}isPadding(){return this.providedColumnGroup.isPadding()}isExpandable(){return this.providedColumnGroup.isExpandable()}isExpanded(){return this.providedColumnGroup.isExpanded()}setExpanded(z){this.providedColumnGroup.setExpanded(z)}isAutoHeaderHeight(){return!!this.getColGroupDef()?.autoHeaderHeight}getAutoHeaderHeight(){return this.autoHeaderHeight}setAutoHeaderHeight(z){let J=z!==this.autoHeaderHeight;return this.autoHeaderHeight=z,J}addDisplayedLeafColumns(z){for(let J of this.displayedChildren??[])if(G4(J))z.push(J);else if(K0(J))J.addDisplayedLeafColumns(z)}addLeafColumns(z){for(let J of this.children??[])if(G4(J))z.push(J);else if(K0(J))J.addLeafColumns(z)}getChildren(){return this.children}getColumnGroupShow(){return this.providedColumnGroup.getColumnGroupShow()}getProvidedColumnGroup(){return this.providedColumnGroup}getPaddingLevel(){let z=this.parent;if(!this.isPadding()||!z?.isPadding())return 0;return 1+z.getPaddingLevel()}calculateDisplayedColumns(){this.displayedChildren=[];let z=this;while(z?.isPadding())z=z.parent;if(!(z?z.getProvidedColumnGroup().isExpandable():!1)){this.displayedChildren=this.children,this.dispatchLocalEvent({type:"displayedChildrenChanged"});return}for(let Q of this.children??[]){if(K0(Q)&&!Q.displayedChildren?.length)continue;switch(Q.getColumnGroupShow()){case"open":if(z.getProvidedColumnGroup().isExpanded())this.displayedChildren.push(Q);break;case"closed":if(!z.getProvidedColumnGroup().isExpanded())this.displayedChildren.push(Q);break;default:this.displayedChildren.push(Q);break}}this.dispatchLocalEvent({type:"displayedChildrenChanged"})}},IZ="ROOT_NODE_ID",hQ="rowGroupFooter_",S7="detail_",PU=hQ+IZ,k={BACKSPACE:"Backspace",TAB:"Tab",ENTER:"Enter",ESCAPE:"Escape",SPACE:" ",LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",DOWN:"ArrowDown",DELETE:"Delete",F2:"F2",PAGE_UP:"PageUp",PAGE_DOWN:"PageDown",PAGE_HOME:"Home",PAGE_END:"End",A:"KeyA",C:"KeyC",D:"KeyD",V:"KeyV",X:"KeyX",Y:"KeyY",Z:"KeyZ"},TU=65,vU=67,IU=86,CU=68,yU=90,bU=89;function b9(z){let{keyCode:J}=z,Q;switch(J){case TU:Q=k.A;break;case vU:Q=k.C;break;case IU:Q=k.V;break;case CU:Q=k.D;break;case yU:Q=k.Z;break;case bU:Q=k.Y;break;default:Q=z.code}return Q}function x9(z){return typeof z.then==="function"}function xU(z,J){return new N((Q)=>{Q(window.setInterval(z,J))})}var N=class z{constructor(J){this.status=0,this.resolution=null,this.waiters=[],J((Q)=>this.onDone(Q),(Q)=>this.onReject(Q))}static all(J){return J.length?new z((Q)=>{let Z=J.length,$=Array(Z);J.forEach((X,Y)=>{X.then((q)=>{if($[Y]=q,Z--,Z===0)Q($)})})}):z.resolve()}static resolve(J=null){return new z((Q)=>Q(J))}then(J){return new z((Q)=>{if(this.status===1)Q(J(this.resolution));else this.waiters.push((Z)=>Q(J(Z)))})}onDone(J){this.status=1,this.resolution=J;for(let Q of this.waiters)Q(J)}onReject(J){}},wU=class extends k0{constructor(){super(...arguments);this.beanName="dragAndDrop",this.dragSourceAndParamsList=[],this.dragItem=null,this.dragInitialSourcePointerOffsetX=0,this.dragInitialSourcePointerOffsetY=0,this.lastMouseEvent=null,this.lastDraggingEvent=null,this.dragSource=null,this.dragImageCompPromise=null,this.dragImageComp=null,this.dragImageLastIcon=void 0,this.dragImageLastLabel=void 0,this.dropTargets=[],this.externalDropZoneCount=0,this.lastDropTarget=null}addDragSource(z,J=!1){let Q={capturePointer:!0,dragSource:z,eElement:z.eElement,dragStartPixels:z.dragStartPixels,onDragStart:(Z)=>this.onDragStart(z,Z),onDragStop:this.onDragStop.bind(this),onDragging:this.onDragging.bind(this),onDragCancel:this.onDragCancel.bind(this),includeTouch:J};this.dragSourceAndParamsList.push(Q),this.beans.dragSvc.addDragSource(Q)}setDragImageCompIcon(z,J=!1){let Q=this.dragImageComp;if(Q&&(J||this.dragImageLastIcon!==z))this.dragImageLastIcon=z,Q.setIcon(z,J)}removeDragSource(z){let{dragSourceAndParamsList:J,beans:Q}=this;for(let Z=0,$=J.length;Z<$;Z++)if(J[Z].dragSource===z){let X=J[Z];Q.dragSvc?.removeDragSource(X),J.splice(Z,1);break}}destroy(){let{dragSourceAndParamsList:z,dropTargets:J,beans:Q}=this,Z=Q.dragSvc;for(let $ of z)Z?.removeDragSource($);z.length=0,J.length=0,this.externalDropZoneCount=0,this.clearDragAndDropProperties(),super.destroy()}nudge(){let z=this.lastMouseEvent;if(z)this.onDragging(z,!0)}onDragStart(z,J){this.lastMouseEvent=J,this.dragSource=z,this.dragItem=z.getDragItem();let Q=z.eElement.getBoundingClientRect();this.dragInitialSourcePointerOffsetX=J.clientX-Q.left,this.dragInitialSourcePointerOffsetY=J.clientY-Q.top,z.onDragStarted?.(),this.createAndUpdateDragImageComp(z)}onDragStop(z){let{dragSource:J,lastDropTarget:Q}=this;if(J?.onDragStopped?.(),Q){let Z=this.dropTargetEvent(Q,z,!1);Q.onDragStop?.(Z)}this.clearDragAndDropProperties()}onDragCancel(){let{dragSource:z,lastDropTarget:J,lastMouseEvent:Q}=this;if(z?.onDragCancelled?.(),J&&Q){let Z=this.dropTargetEvent(J,Q,!1);J.onDragCancel?.(Z)}this.clearDragAndDropProperties()}onDragging(z,J=!1){this.positionDragImageComp(z);let Q=this.findCurrentDropTarget(z),{lastDropTarget:Z,dragSource:$,dragItem:X}=this,Y=!1;if(Q!==Z){if(Y=!0,Z){let q=this.dropTargetEvent(Z,z,J);Z.onDragLeave?.(q)}if(Z!==null&&!Q)this.handleExit($,X);else if(Z===null&&Q)this.handleEnter($,X);if(Q){let q=this.dropTargetEvent(Q,z,J);Q.onDragEnter?.(q)}this.lastDropTarget=Q}else if(Q){let q=this.dropTargetEvent(Q,z,J);if(Q.onDragging?.(q),q?.changed)Y=!0}if(this.lastMouseEvent=z,Y)this.updateDragImageComp()}clearDragAndDropProperties(){this.removeDragImageComp(this.dragImageComp),this.dragImageCompPromise=null,this.dragImageLastIcon=void 0,this.dragImageLastLabel=void 0,this.lastMouseEvent=null,this.lastDraggingEvent=null,this.lastDropTarget=null,this.dragItem=null,this.dragInitialSourcePointerOffsetX=0,this.dragInitialSourcePointerOffsetY=0,this.dragSource=null}getAllContainersFromDropTarget(z){let J=z.getContainer(),Q=z.getSecondaryContainers?.(),Z=Q?.length;if(!Z)return[[J]];let $=Array(Z+1);$[0]=[J];for(let X=0;X{for(let U of G){let{width:_,height:H,left:W,right:B,top:E,bottom:K}=U.getBoundingClientRect();if(_===0||H===0)return!1;let F=q.clientX>=W&&q.clientX=E&&q.clientY0}findExternalZone(z){let J=this.dropTargets;for(let Q=0,Z=J.length;Q0?"down":E<0?"up":null,hDirection:B<0?"left":B>0?"right":null,initialSourcePointerOffsetX:q,initialSourcePointerOffsetY:G,dragSource:Z,fromNudge:Q,dragItem:$,dropZoneTarget:U,dropTarget:X?.dropTarget??null,changed:!!X?.changed});return this.lastDraggingEvent=K,K}positionDragImageComp(z){let J=this.dragImageComp?.getGui();if(J)JJ(J,z,this.beans)}removeDragImageComp(z){if(this.dragImageComp===z)this.dragImageComp=null;if(z)z.getGui()?.remove(),this.destroyBean(z)}createAndUpdateDragImageComp(z){let J=this.createDragImageComp(z)??null;this.dragImageCompPromise=J,J?.then((Q)=>{let Z=this.lastMouseEvent;if(J!==this.dragImageCompPromise||!Z||!this.isAlive()){this.destroyBean(Q);return}this.dragImageCompPromise=null,this.dragImageLastIcon=void 0,this.dragImageLastLabel=void 0;let $=this.dragImageComp;if($!==Q)this.dragImageComp=Q,this.removeDragImageComp($);if(Q)this.appendDragImageComp(Q),this.updateDragImageComp(),this.positionDragImageComp(Z)})}appendDragImageComp(z){let J=z.getGui(),Q=J.style;if(Q.position="absolute",Q.zIndex="9999",this.beans.dragSvc?.hasPointerCapture())Q.pointerEvents="none";this.gos.setInstanceDomData(J),this.beans.environment.applyThemeClasses(J),Q.top="20px",Q.left="20px";let Z=Rz(this.beans);if(!Z)this.warnNoBody();else Z.appendChild(J)}updateDragImageComp(){let{dragImageComp:z,dragSource:J,lastDropTarget:Q,lastDraggingEvent:Z,dragImageLastLabel:$}=this;if(!z)return;this.setDragImageCompIcon(Q?.getIconName?.(Z)??null);let X=J?.dragItemName;if(typeof X==="function")X=X(Z);if(X||(X=""),$!==X)this.dragImageLastLabel=X,z.setLabel(X)}};function w9(z){return typeof z==="object"&&!!z.component}function NU(z){if(!z)return!1;return z.prototype&&"getGui"in z.prototype}function N9(z,J,Q,Z){let{name:$}=Q,X,Y,q,G,U,_;if(J){let H=J,W=H[$+"Selector"],B=W?W(Z):null,E=(K)=>{if(typeof K==="string")X=K;else if(K!=null&&K!==!0)if(z.isFrameworkComponent(K))q=K;else Y=K};if(B)E(B.component),G=B.params,U=B.popup,_=B.popupPosition;else E(H[$])}return{compName:X,jsComp:Y,fwComp:q,paramsFromSelector:G,popupFromSelector:U,popupPositionFromSelector:_}}var gU=class extends S{constructor(){super(...arguments);this.beanName="userCompFactory"}wireBeans(z){this.agCompUtils=z.agCompUtils,this.registry=z.registry,this.frameworkCompWrapper=z.frameworkCompWrapper,this.gridOptions=z.gridOptions}getCompDetailsFromGridOptions(z,J,Q,Z=!1){return this.getCompDetails(this.gridOptions,z,J,Q,Z)}getCompDetails(z,J,Q,Z,$=!1){let{name:X,cellRenderer:Y}=J,{compName:q,jsComp:G,fwComp:U,paramsFromSelector:_,popupFromSelector:H,popupPositionFromSelector:W}=N9(this.beans.frameworkOverrides,z,J,Z),B,E,K=(M)=>{let f=this.registry.getUserComponent(X,M);if(f)G=!f.componentFromFramework?f.component:void 0,U=f.componentFromFramework?f.component:void 0,B=f.params,E=f.processParams};if(q!=null)K(q);if(G==null&&U==null&&Q!=null)K(Q);if(G&&Y&&!NU(G))G=this.agCompUtils?.adaptFunction(J,G);if(!G&&!U){let{validation:M}=this.beans;if($&&(q!==Q||!Q))if(q){if(!M?.isProvidedUserComp(q))r(50,{compName:q})}else if(Q){if(!M)r(260,{...this.gos.getModuleErrorParams(),propName:X,compName:Q})}else r(216,{name:X});else if(Q&&!M)r(146,{comp:Q});return}let F=this.mergeParams(z,J,Z,_,B,E),L=G==null,D=G??U;return{componentFromFramework:L,componentClass:D,params:F,type:J,popupFromSelector:H,popupPositionFromSelector:W,newAgStackInstance:()=>this.newAgStackInstance(D,L,F,J)}}newAgStackInstance(z,J,Q,Z){let $=!J,X;if($)X=new z;else X=this.frameworkCompWrapper.wrap(z,Z.mandatoryMethods,Z.optionalMethods,Z);this.createBean(X);let Y=X.init?.(Q);if(Y==null)return N.resolve(X);return Y.then(()=>X)}mergeParams(z,J,Q,Z=null,$,X){let Y={...Q,...$},G=z?.[J.name+"Params"];if(typeof G==="function"){let U=G(Q);D0(Y,U)}else if(typeof G==="object")D0(Y,G);return D0(Y,Z),X?X(Y):Y}},hU={name:"dateComponent",mandatoryMethods:["getDate","setDate"],optionalMethods:["afterGuiAttached","setInputPlaceholder","setInputAriaLabel","setDisabled","refresh"]},uU={name:"dragAndDropImageComponent",mandatoryMethods:["setIcon","setLabel"]},mU={name:"headerComponent",optionalMethods:["refresh"]},cU={name:"innerHeaderComponent"},iU={name:"innerHeaderGroupComponent"},pU={name:"headerGroupComponent"},nU={name:"innerRenderer",cellRenderer:!0,optionalMethods:["afterGuiAttached"]},dU={name:"cellRenderer",optionalMethods:["refresh","afterGuiAttached"],cellRenderer:!0};var rU={name:"loadingCellRenderer",cellRenderer:!0},tU={name:"cellEditor",mandatoryMethods:["getValue"],optionalMethods:["isPopup","isCancelBeforeStart","isCancelAfterEnd","getPopupPosition","focusIn","focusOut","afterGuiAttached","refresh"]},sU={name:"tooltipComponent"},CZ={name:"filter",mandatoryMethods:["isFilterActive","doesFilterPass","getModel","setModel"],optionalMethods:["afterGuiAttached","afterGuiDetached","onNewRowsLoaded","getModelAsString","onFloatingFilterChanged","onAnyFilterChanged","refresh"]},lU={name:"floatingFilterComponent",mandatoryMethods:["onParentModelChanged"],optionalMethods:["afterGuiAttached","refresh"]},aU={name:"fullWidthCellRenderer",optionalMethods:["refresh","afterGuiAttached"],cellRenderer:!0},oU={name:"loadingCellRenderer",cellRenderer:!0},eU={name:"groupRowRenderer",optionalMethods:["afterGuiAttached"],cellRenderer:!0},z_={name:"detailCellRenderer",optionalMethods:["refresh"],cellRenderer:!0};function J_(z,J){return z.getCompDetailsFromGridOptions(uU,"agDragAndDropImage",J,!0)}function h2(z,J,Q){return z.getCompDetails(J,nU,void 0,Q)}function Q_(z,J,Q){return z.getCompDetails(J,mU,"agColumnHeader",Q)}function Z_(z,J,Q){return z.getCompDetails(J,cU,void 0,Q)}function $_(z,J){let Q=J.columnGroup.getColGroupDef();return z.getCompDetails(Q,pU,"agColumnGroupHeader",J)}function X_(z,J,Q){return z.getCompDetails(J,iU,void 0,Q)}function Y_(z,J){return z.getCompDetailsFromGridOptions(aU,void 0,J,!0)}function q_(z,J){return z.getCompDetailsFromGridOptions(oU,"agLoadingCellRenderer",J,!0)}function G_(z,J){return z.getCompDetailsFromGridOptions(eU,"agGroupRowRenderer",J,!0)}function U_(z,J){return z.getCompDetailsFromGridOptions(z_,"agDetailCellRenderer",J,!0)}function kz(z,J,Q){return z.getCompDetails(J,dU,void 0,Q)}function V7(z,J,Q){return z.getCompDetails(J,rU,"agSkeletonCellRenderer",Q,!0)}function g9(z,J,Q){return z.getCompDetails(J,tU,"agCellEditor",Q,!0)}function yZ(z,J,Q,Z){let $=J.filter;if(w9($))J={filter:$.component,filterParams:J.filterParams};return z.getCompDetails(J,CZ,Z,Q,!0)}function __(z,J,Q){return z.getCompDetails(J,hU,"agDateInput",Q,!0)}function H_(z,J){return z.getCompDetails(J.colDef,sU,"agTooltipComponent",J,!0)}function bZ(z,J,Q,Z){return z.getCompDetails(J,lU,Z,Q)}function h9(z,J){return N9(z,J,CZ)}function JQ(z,J,Q){return z.mergeParams(J,CZ,Q)}var E4=((z)=>{return z[z.ToolPanel=0]="ToolPanel",z[z.HeaderCell=1]="HeaderCell",z[z.RowDrag=2]="RowDrag",z[z.ChartPanel=3]="ChartPanel",z[z.AdvancedFilterBuilder=4]="AdvancedFilterBuilder",z})(E4||{}),W_=class extends wU{createEvent(z){return C(this.gos,z)}createDragImageComp(z){let{gos:J,beans:Q}=this;return J_(Q.userCompFactory,C(J,{dragSource:z}))?.newAgStackInstance()}handleEnter(z,J){z?.onGridEnter?.(J)}handleExit(z,J){z?.onGridExit?.(J)}warnNoBody(){V(54)}isDropZoneWithinThisGrid(z){return this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody.contains(z.dropZoneTarget)}registerGridDropTarget(z,J){let Q={getContainer:z,isInterestedIn:(Z)=>Z===1||Z===0,getIconName:()=>"notAllowed"};this.addDropTarget(Q),J.addDestroyFunc(()=>this.removeDropTarget(Q))}};function u9(z){return!!z.operator}var m9="ag-resizer-wrapper",qz=(z,J)=>({tag:"div",ref:`${z}Resizer`,cls:`ag-resizer ag-resizer-${J}`}),B_={tag:"div",cls:m9,children:[qz("eTopLeft","topLeft"),qz("eTop","top"),qz("eTopRight","topRight"),qz("eRight","right"),qz("eBottomRight","bottomRight"),qz("eBottom","bottom"),qz("eBottomLeft","bottomLeft"),qz("eLeft","left")]},xZ=class extends k0{constructor(z,J){super();this.element=z,this.dragStartPosition={x:0,y:0},this.position={x:0,y:0},this.lastSize={width:-1,height:-1},this.positioned=!1,this.resizersAdded=!1,this.resizeListeners=[],this.boundaryEl=null,this.isResizing=!1,this.isMoving=!1,this.resizable={},this.movable=!1,this.currentResizer=null,this.config={popup:!1,...J}}wireBeans(z){this.popupSvc=z.popupSvc,this.dragSvc=z.dragSvc}center(z){let{clientHeight:J,clientWidth:Q}=this.offsetParent,Z=Q/2-this.getWidth()/2,$=J/2-this.getHeight()/2;this.offsetElement(Z,$,z)}initialisePosition(z){if(this.positioned)return;let{centered:J,forcePopupParentAsOffsetParent:Q,minWidth:Z,width:$,minHeight:X,height:Y,x:q,y:G}=this.config;if(!this.offsetParent)this.setOffsetParent();let U=0,_=0,H=B0(this.element);if(H){let W=this.findBoundaryElement(),B=window.getComputedStyle(W);if(B.minWidth!=null){let E=W.offsetWidth-this.element.offsetWidth;_=Number.parseInt(B.minWidth,10)-E}if(B.minHeight!=null){let E=W.offsetHeight-this.element.offsetHeight;U=Number.parseInt(B.minHeight,10)-E}}if(this.minHeight=X||U,this.minWidth=Z||_,$)this.setWidth($);if(Y)this.setHeight(Y);if(!$||!Y)this.refreshSize();if(J)this.center(z);else if(q||G)this.offsetElement(q,G,z);else if(H&&Q){let W=this.boundaryEl,B=!0;if(!W)W=this.findBoundaryElement(),B=!1;if(W){let E=Number.parseFloat(W.style.top),K=Number.parseFloat(W.style.left);if(B)this.offsetElement(Number.isNaN(K)?0:K,Number.isNaN(E)?0:E,z);else this.setPosition(K,E)}}this.positioned=!!this.offsetParent}isPositioned(){return this.positioned}getPosition(){return this.position}setMovable(z,J){if(!this.config.popup||z===this.movable)return;this.movable=z;let Q=this.moveElementDragListener||{eElement:J,onDragStart:this.onMoveStart.bind(this),onDragging:this.onMove.bind(this),onDragStop:this.onMoveEnd.bind(this)};if(z)this.dragSvc?.addDragSource(Q),this.moveElementDragListener=Q;else this.dragSvc?.removeDragSource(Q),this.moveElementDragListener=void 0}setResizable(z){if(this.clearResizeListeners(),z)this.addResizers();else this.removeResizers();if(typeof z==="boolean"){if(z===!1)return;z={topLeft:z,top:z,topRight:z,right:z,bottomRight:z,bottom:z,bottomLeft:z,left:z}}for(let J of Object.keys(z)){let Q=!!z[J],Z=this.getResizerElement(J),$={dragStartPixels:0,eElement:Z,onDragStart:(X)=>this.onResizeStart(X,J),onDragging:this.onResize.bind(this),onDragStop:(X)=>this.onResizeEnd(X,J)};if(Q||!this.isAlive()&&!Q){if(Q)this.dragSvc?.addDragSource($),this.resizeListeners.push($),Z.style.pointerEvents="all";else Z.style.pointerEvents="none";this.resizable[J]=Q}}}removeSizeFromEl(){this.element.style.removeProperty("height"),this.element.style.removeProperty("width"),this.element.style.removeProperty("flex")}restoreLastSize(){this.element.style.flex="0 0 auto";let{height:z,width:J}=this.lastSize;if(J!==-1)this.element.style.width=`${J}px`;if(z!==-1)this.element.style.height=`${z}px`}getHeight(){return this.element.offsetHeight}setHeight(z){let{popup:J}=this.config,Q=this.element,Z=!1;if(typeof z==="string"&&z.includes("%"))H2(Q,z),z=n8(Q),Z=!0;else if(z=Math.max(this.minHeight,z),this.positioned){let $=this.getAvailableHeight();if($&&z>$)z=$}if(this.getHeight()===z)return;if(Z)Q.style.maxHeight="unset",Q.style.minHeight="unset";else if(J)H2(Q,z);else Q.style.height=`${z}px`,Q.style.flex="0 0 auto",this.lastSize.height=typeof z==="number"?z:Number.parseFloat(z)}getAvailableHeight(){let{popup:z,forcePopupParentAsOffsetParent:J}=this.config;if(!this.positioned)this.initialisePosition();let{clientHeight:Q}=this.offsetParent;if(!Q)return null;let Z=this.element.getBoundingClientRect(),$=this.offsetParent.getBoundingClientRect(),X=z?this.position.y:Z.top,Y=z?0:$.top,q=0;if(J){let U=this.element.parentElement;if(U){let{bottom:_}=U.getBoundingClientRect();q=_-Z.bottom}}return Q+Y-X-q}getWidth(){return this.element.offsetWidth}setWidth(z){let J=this.element,{popup:Q}=this.config,Z=!1;if(typeof z==="string"&&z.includes("%"))N4(J,z),z=P6(J),Z=!0;else if(this.positioned){z=Math.max(this.minWidth,z);let{clientWidth:$}=this.offsetParent,X=Q?this.position.x:this.element.getBoundingClientRect().left;if($&&z+X>$)z=$-X}if(this.getWidth()===z)return;if(Z)J.style.maxWidth="unset",J.style.minWidth="unset";else if(this.config.popup)N4(J,z);else J.style.width=`${z}px`,J.style.flex=" unset",this.lastSize.width=typeof z==="number"?z:Number.parseFloat(z)}offsetElement(z=0,J=0,Q){let{forcePopupParentAsOffsetParent:Z}=this.config,$=Z?this.boundaryEl:this.element;if(!$)return;this.popupSvc?.positionPopup({ePopup:$,keepWithinBounds:!0,skipObserver:this.movable||this.isResizable(),updatePosition:()=>({x:z,y:J}),postProcessCallback:Q}),this.setPosition(Number.parseFloat($.style.left),Number.parseFloat($.style.top))}constrainSizeToAvailableHeight(z){if(!this.config.forcePopupParentAsOffsetParent)return;let J=()=>{let Q=this.getAvailableHeight();this.element.style.setProperty("max-height",`${Q}px`)};if(z&&this.popupSvc)this.resizeObserverSubscriber?.(),this.resizeObserverSubscriber=j4(this.beans,this.popupSvc?.getPopupParent(),J);else if(this.element.style.removeProperty("max-height"),this.resizeObserverSubscriber)this.resizeObserverSubscriber(),this.resizeObserverSubscriber=void 0}setPosition(z,J){this.position.x=z,this.position.y=J}updateDragStartPosition(z,J){this.dragStartPosition={x:z,y:J}}calculateMouseMovement(z){let{e:J,isLeft:Q,isTop:Z,anywhereWithin:$,topBuffer:X}=z,Y=J.clientX-this.dragStartPosition.x,q=J.clientY-this.dragStartPosition.y,G=this.shouldSkipX(J,!!Q,!!$,Y)?0:Y,U=this.shouldSkipY(J,!!Z,X,q)?0:q;return{movementX:G,movementY:U}}shouldSkipX(z,J,Q,Z){let $=this.element.getBoundingClientRect(),X=this.offsetParent.getBoundingClientRect(),Y=this.boundaryEl.getBoundingClientRect(),q=this.config.popup?this.position.x:$.left,G=q<=0&&X.left>=z.clientX||X.right<=z.clientX&&X.right<=Y.right;if(G)return!0;if(J)G=Z<0&&z.clientX>q+X.left||Z>0&&z.clientXY.right||Z>0&&z.clientXY.right||Z>0&&z.clientX=z.clientY||X.bottom<=z.clientY&&X.bottom<=Y.bottom;if(G)return!0;if(J)G=Z<0&&z.clientY>q+X.top+Q||Z>0&&z.clientYY.bottom||Z>0&&z.clientY({element:this.element.querySelector(`[data-ref=${J}Resizer]`)});this.resizerMap={topLeft:z("eTopLeft"),top:z("eTop"),topRight:z("eTopRight"),right:z("eRight"),bottomRight:z("eBottomRight"),bottom:z("eBottom"),bottomLeft:z("eBottomLeft"),left:z("eLeft")}}addResizers(){if(this.resizersAdded)return;let z=this.element;if(!z)return;z.appendChild(H0(B_)),this.createResizeMap(),this.resizersAdded=!0}removeResizers(){this.resizerMap=void 0,this.element.querySelector(`.${m9}`)?.remove(),this.resizersAdded=!1}getResizerElement(z){return this.resizerMap[z].element}onResizeStart(z,J){if(this.boundaryEl=this.findBoundaryElement(),!this.positioned)this.initialisePosition();this.currentResizer={isTop:!!J.match(/top/i),isRight:!!J.match(/right/i),isBottom:!!J.match(/bottom/i),isLeft:!!J.match(/left/i)},this.element.classList.add("ag-resizing"),this.resizerMap[J].element.classList.add("ag-active");let{popup:Q,forcePopupParentAsOffsetParent:Z}=this.config;if(!Q&&!Z)this.applySizeToSiblings(this.currentResizer.isBottom||this.currentResizer.isTop);this.isResizing=!0,this.updateDragStartPosition(z.clientX,z.clientY)}getSiblings(){let J=this.element.parentElement;if(!J)return null;return Array.prototype.slice.call(J.children).filter((Q)=>!Q.classList.contains("ag-hidden"))}getMinSizeOfSiblings(){let z=this.getSiblings()||[],J=0,Q=0;for(let Z of z){let $=!!Z.style.flex&&Z.style.flex!=="0 0 auto";if(Z===this.element)continue;let X=this.minHeight||0,Y=this.minWidth||0;if($){let q=window.getComputedStyle(Z);if(q.minHeight)X=Number.parseInt(q.minHeight,10);if(q.minWidth)Y=Number.parseInt(q.minWidth,10)}else X=Z.offsetHeight,Y=Z.offsetWidth;J+=X,Q+=Y}return{height:J,width:Q}}applySizeToSiblings(z){let J=null,Q=this.getSiblings();if(!Q)return;for(let Z=0;Zz)}onResize(z){if(!this.isResizing||!this.currentResizer)return;let{popup:J,forcePopupParentAsOffsetParent:Q}=this.config,{isTop:Z,isRight:$,isBottom:X,isLeft:Y}=this.currentResizer,q=$||Y,G=X||Z,{movementX:U,movementY:_}=this.calculateMouseMovement({e:z,isLeft:Y,isTop:Z}),H=this.position.x,W=this.position.y,B=0,E=0;if(q&&U){let K=Y?-1:1,F=this.getWidth(),L=F+U*K,D=!1;if(Y){if(B=F-L,H+B<=0||L<=this.minWidth)D=!0,B=0}if(!D)this.setWidth(L)}if(G&&_){let K=Z?-1:1,F=this.getHeight(),L=F+_*K,D=!1;if(Z){if(E=F-L,W+E<=0||L<=this.minHeight)D=!0,E=0}else if(!this.config.popup&&!this.config.forcePopupParentAsOffsetParent&&Fthis.element.parentElement.offsetHeight)D=!0;if(!D)this.setHeight(L)}if(this.updateDragStartPosition(z.clientX,z.clientY),(J||Q)&&B||E)this.offsetElement(H+B,W+E)}onResizeEnd(z,J){this.isResizing=!1,this.currentResizer=null,this.boundaryEl=null,this.element.classList.remove("ag-resizing"),this.resizerMap[J].element.classList.remove("ag-active"),this.dispatchLocalEvent({type:"resize"})}refreshSize(){let z=this.element;if(this.config.popup){if(!this.config.width)this.setWidth(z.offsetWidth);if(!this.config.height)this.setHeight(z.offsetHeight)}}onMoveStart(z){if(this.boundaryEl=this.findBoundaryElement(),!this.positioned)this.initialisePosition();this.isMoving=!0,this.element.classList.add("ag-moving"),this.updateDragStartPosition(z.clientX,z.clientY)}onMove(z){if(!this.isMoving)return;let{x:J,y:Q}=this.position,Z;if(this.config.calculateTopBuffer)Z=this.config.calculateTopBuffer();let{movementX:$,movementY:X}=this.calculateMouseMovement({e:z,isTop:!0,anywhereWithin:!0,topBuffer:Z});this.offsetElement(J+$,Q+X),this.updateDragStartPosition(z.clientX,z.clientY)}onMoveEnd(){this.isMoving=!1,this.boundaryEl=null,this.element.classList.remove("ag-moving")}setOffsetParent(){if(this.config.forcePopupParentAsOffsetParent&&this.popupSvc)this.offsetParent=this.popupSvc.getPopupParent();else this.offsetParent=this.element.offsetParent}findBoundaryElement(){let z=this.element;while(z){if(window.getComputedStyle(z).position!=="static")return z;z=z.parentElement}return this.element}clearResizeListeners(){while(this.resizeListeners.length){let z=this.resizeListeners.pop();this.dragSvc?.removeDragSource(z)}}destroy(){if(super.destroy(),this.moveElementDragListener)this.dragSvc?.removeDragSource(this.moveElementDragListener);this.constrainSizeToAvailableHeight(!1),this.clearResizeListeners(),this.removeResizers()}},u2=class extends xZ{},j=null;function x1(z){return typeof z?.getGui==="function"}var c9=class{constructor(z){this.cssClassStates={},this.getGui=z}toggleCss(z,J){if(!z)return;if(z.includes(" ")){let Z=(z||"").split(" ");if(Z.length>1){for(let $ of Z)this.toggleCss($,J);return}}if(this.cssClassStates[z]!==J&&z.length)this.getGui()?.classList.toggle(z,J),this.cssClassStates[z]=J}},E_=0,I0=class extends k0{constructor(z,J){super();if(this.suppressDataRefValidation=!1,this.displayed=!0,this.visible=!0,this.compId=E_++,this.cssManager=new c9(()=>this.eGui),this.componentSelectors=new Map((J??[]).map((Q)=>[Q.selector,Q])),z)this.setTemplate(z)}preConstruct(){this.wireTemplate(this.getGui()),this.addGlobalCss()}wireTemplate(z,J){if(z&&this.gos)this.applyElementsToComponent(z),this.createChildComponentsFromTags(z,J)}getCompId(){return this.compId}getDataRefAttribute(z){if(z.getAttribute)return z.getAttribute(a8);return null}applyElementsToComponent(z,J,Q,Z=null){if(J===void 0)J=this.getDataRefAttribute(z);if(J){let $=this[J];if($===j)this[J]=Z??z;else{let X=Q?.[J];if(!this.suppressDataRefValidation&&!X)throw Error(`data-ref: ${J} on ${this.constructor.name} with ${$}`)}}}createChildComponentsFromTags(z,J){let Q=[];for(let Z of z.childNodes??[])Q.push(Z);for(let Z of Q){if(!(Z instanceof HTMLElement))continue;let $=this.createComponentFromElement(Z,(X)=>{let Y=X.getGui();if(Y)for(let q of Z.attributes??[])Y.setAttribute(q.name,q.value)},J);if($){if($.addItems&&Z.children.length){this.createChildComponentsFromTags(Z,J);let X=Array.prototype.slice.call(Z.children);$.addItems(X)}this.swapComponentForNode($,z,Z)}else if(Z.childNodes)this.createChildComponentsFromTags(Z,J)}}createComponentFromElement(z,J,Q){let Z=z.nodeName,$=this.getDataRefAttribute(z),X=Z.indexOf("AG-")===0,Y=X?this.componentSelectors.get(Z):null,q=null;if(Y){let G=Q&&$?Q[$]:void 0;q=new Y.component(G),q.setParentComponent(this),this.createBean(q,null,J)}else if(X)throw Error(`selector: ${Z}`);return this.applyElementsToComponent(z,$,Q,q),q}swapComponentForNode(z,J,Q){let Z=z.getGui();J.replaceChild(Z,Q),J.insertBefore(document.createComment(Q.nodeName),Z),this.addDestroyFunc(this.destroyBean.bind(this,z))}activateTabIndex(z,J){let Q=J??this.gos.get("tabIndex");if(!z)z=[];if(!z.length)z.push(this.getGui());for(let Z of z)Z.setAttribute("tabindex",Q.toString())}setTemplate(z,J,Q){let Z;if(typeof z==="string"||z==null)Z=KZ(z);else Z=H0(z);this.setTemplateFromElement(Z,J,Q)}setTemplateFromElement(z,J,Q,Z=!1){if(this.eGui=z,this.suppressDataRefValidation=Z,J)for(let $=0;$this.eGui.removeEventListener(z,J))}addCss(z){this.cssManager.toggleCss(z,!0)}removeCss(z){this.cssManager.toggleCss(z,!1)}toggleCss(z,J){this.cssManager.toggleCss(z,J)}registerCSS(z){if(this.css===R7)this.css=[z],this.addGlobalCss();else this.css||(this.css=[]),this.css.push(z)}addGlobalCss(){if(Array.isArray(this.css)){let z="component-"+Object.getPrototypeOf(this)?.constructor?.name;for(let J of this.css??[])this.beans.environment.addGlobalCSS(J,z)}this.css=R7}},R7=Symbol(),x=class extends I0{},QQ,ZQ,$Q,XQ,uQ,mQ,YQ;function jz(){if(QQ===void 0)QQ=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return QQ}function oz(){if(ZQ===void 0)ZQ=/(firefox)/i.test(navigator.userAgent);return ZQ}function i9(){if($Q===void 0)$Q=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);return $Q}function a4(){if(XQ===void 0)XQ=/iPad|iPhone|iPod/.test(navigator.platform)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1;return XQ}function cQ(z){if(!z)return null;let J=z.tabIndex,Q=z.getAttribute("tabIndex");if(J===-1&&(Q===null||Q===""&&!oz()))return null;return J.toString()}function K_(){if(YQ!==void 0)return YQ;if(!document.body)return-1;let z=1e6,J=oz()?6000000:1e9,Q=document.createElement("div");document.body.appendChild(Q);while(!0){let Z=z*2;if(Q.style.height=Z+"px",Z>J||Q.clientHeight!==Z)break;else z=Z}return Q.remove(),YQ=z,z}function wZ(){if(mQ==null)p9();return mQ}function p9(){let z=document.body,J=document.createElement("div");J.style.width=J.style.height="100px",J.style.opacity="0",J.style.overflow="scroll",J.style.msOverflowStyle="scrollbar",J.style.position="absolute",z.appendChild(J);let Q=J.offsetWidth-J.clientWidth;if(Q===0&&J.clientWidth===0)Q=null;if(J.parentNode)J.remove();if(Q!=null)mQ=Q,uQ=Q===0}function n9(){if(uQ==null)p9();return uQ}var iQ=!1,w6=0;function F_(z){if(w6>0)return;z.addEventListener("keydown",N6),z.addEventListener("mousedown",N6)}function L_(z){if(w6>0)return;z.removeEventListener("keydown",N6),z.removeEventListener("mousedown",N6)}function N6(z){let J=iQ,Q=z.type==="keydown";if(Q){if(z.ctrlKey||z.metaKey||z.altKey)return}if(J===Q)return;iQ=Q}function D_(z){let J=Y0(z);return F_(J),w6++,()=>{w6--,L_(J)}}function n1(){return iQ}function V4(z,J,Q=!1){let Z=AG,$=p8;if(J)$+=", "+J;if(Q)$+=', [tabindex="-1"]';let X=Array.prototype.slice.apply(z.querySelectorAll(Z)).filter((G)=>{return B0(G)}),Y=Array.prototype.slice.apply(z.querySelectorAll($));if(!Y.length)return X;return((G,U)=>G.filter((_)=>U.indexOf(_)===-1))(X,Y)}function E0(z,J=!1,Q=!1,Z=!1){let $=V4(z,Z?".ag-tab-guard":null,Q),X=J?y($):$[0];if(X)return X.focus({preventScroll:!0}),!0;return!1}function O0(z,J,Q,Z){let $=V4(J,Q?':not([tabindex="-1"])':null),X=n(z),Y;if(Q)Y=$.findIndex((G)=>G.contains(X));else Y=$.indexOf(X);let q=Y+(Z?-1:1);if(q<0||q>=$.length)return null;return $[q]}function _J(z,J=5){let Q=0;while(z&&cQ(z)===null&&++Q<=J)z=z.parentElement;if(cQ(z)===null)return null;return z}var NZ="ag-focus-managed",d9=class extends k0{constructor(z,J={isStopPropagation:()=>!1,stopPropagation:()=>{}},Q={}){super();this.eFocusable=z,this.stopPropagationCallbacks=J,this.callbacks=Q,this.callbacks={shouldStopEventPropagation:()=>!1,onTabKeyDown:(Z)=>{if(Z.defaultPrevented)return;let $=O0(this.beans,this.eFocusable,!1,Z.shiftKey);if(!$)return;$.focus(),Z.preventDefault()},...Q}}postConstruct(){let{eFocusable:z,callbacks:{onFocusIn:J,onFocusOut:Q}}=this;if(z.classList.add(NZ),this.addKeyDownListeners(z),J)this.addManagedElementListeners(z,{focusin:J});if(Q)this.addManagedElementListeners(z,{focusout:Q})}addKeyDownListeners(z){this.addManagedElementListeners(z,{keydown:(J)=>{if(J.defaultPrevented||this.stopPropagationCallbacks.isStopPropagation(J))return;let{callbacks:Q}=this;if(Q.shouldStopEventPropagation(J)){this.stopPropagationCallbacks.stopPropagation(J);return}if(J.key===k.TAB)Q.onTabKeyDown(J);else if(Q.handleKeyDown)Q.handleKeyDown(J)}})}},r9="__ag_Grid_Stop_Propagation";function l0(z){z[r9]=!0}function q4(z){return z[r9]===!0}var Oz={isStopPropagation:q4,stopPropagation:l0},Jz=class extends d9{constructor(z,J){super(z,Oz,J)}},M_={applyFilter:"Apply",clearFilter:"Clear",resetFilter:"Reset",cancelFilter:"Cancel",textFilter:"Text Filter",numberFilter:"Number Filter",bigintFilter:"BigInt Filter",dateFilter:"Date Filter",setFilter:"Set Filter",filterOoo:"Filter...",empty:"Choose one",equals:"Equals",notEqual:"Does not equal",lessThan:"Less than",greaterThan:"Greater than",inRange:"Between",inRangeStart:"From",inRangeEnd:"To",lessThanOrEqual:"Less than or equal to",greaterThanOrEqual:"Greater than or equal to",contains:"Contains",notContains:"Does not contain",startsWith:"Begins with",endsWith:"Ends with",blank:"Blank",notBlank:"Not blank",before:"Before",after:"After",andCondition:"AND",orCondition:"OR",dateFormatOoo:"yyyy-mm-dd",filterSummaryInactive:"is (All)",filterSummaryContains:"contains",filterSummaryNotContains:"does not contain",filterSummaryTextEquals:"equals",filterSummaryTextNotEqual:"does not equal",filterSummaryStartsWith:"begins with",filterSummaryEndsWith:"ends with",filterSummaryBlank:"is blank",filterSummaryNotBlank:"is not blank",filterSummaryEquals:"=",filterSummaryNotEqual:"!=",filterSummaryGreaterThan:">",filterSummaryGreaterThanOrEqual:">=",filterSummaryLessThan:"<",filterSummaryLessThanOrEqual:"<=",filterSummaryInRange:"between",yesterday:"Yesterday",today:"Today",tomorrow:"Tomorrow",last7Days:"Last 7 Days",lastWeek:"Last Week",thisWeek:"This Week",nextWeek:"Next Week",last30Days:"Last 30 Days",lastMonth:"Last Month",thisMonth:"This Month",nextMonth:"Next Month",last90Days:"Last 90 Days",lastQuarter:"Last Quarter",thisQuarter:"This Quarter",nextQuarter:"Next Quarter",lastYear:"Last Year",thisYear:"This Year",yearToDate:"Year To Date",nextYear:"Next Year",last6Months:"Last 6 Months",last12Months:"Last 12 Months",last24Months:"Last 24 Months",filterSummaryInRangeValues:(z)=>`(${z[0]}, ${z[1]})`,filterSummaryTextQuote:(z)=>`"${z[0]}"`,minDateValidation:(z)=>`Date must be after ${z[0]}`,maxDateValidation:(z)=>`Date must be before ${z[0]}`,strictMinValueValidation:(z)=>`Must be greater than ${z[0]}`,strictMaxValueValidation:(z)=>`Must be less than ${z[0]}`};function k4(z,J,Q){return DZ(z,M_,J,Q)}function gZ(z,J){let{debounceMs:Q}=z;if(d1(z)){if(Q!=null)V(71);return 0}return Q??J}function d1(z){return(z.buttons?.indexOf("apply")??-1)>=0}function t9(z,J,Q,Z){let $=k4(z,Q);if(typeof J==="function"){let X=k4(z,Z);$=J({filterOptionKey:Z,filterOption:X,placeholder:$})}else if(typeof J==="string")$=J;return $}var $1=class extends x{constructor(z,J){super();this.filterNameKey=z,this.cssIdentifier=J,this.applyActive=!1,this.debouncePending=!1,this.defaultDebounceMs=0}postConstruct(){let z={tag:"div",cls:`ag-filter-body-wrapper ag-${this.cssIdentifier}-body-wrapper`,children:[this.createBodyTemplate()]};this.setTemplate(z,this.getAgComponents()),this.createManagedBean(new Jz(this.getFocusableElement(),{handleKeyDown:this.handleKeyDown.bind(this)})),this.positionableFeature=this.createBean(new u2(this.getPositionableElement(),{forcePopupParentAsOffsetParent:!0}))}handleKeyDown(z){}init(z){let J=z;this.setParams(J),this.setModelIntoUi(J.state.model,!0).then(()=>this.updateUiVisibility())}areStatesEqual(z,J){return z===J}refresh(z){let J=z,Q=this.params;this.params=J;let{source:Z,state:$,additionalEventAttributes:X}=J;if(Z==="colDef")this.updateParams(J,Q);let Y=this.state;this.state=$;let q=X?.fromAction;if(q&&q!=="apply"||$.model!==Y.model||!this.areStatesEqual($.state,Y.state))this.setModelIntoUi($.model);return!0}setParams(z){this.params=z,this.state=z.state,this.commonUpdateParams(z)}updateParams(z,J){this.commonUpdateParams(z,J)}commonUpdateParams(z,J){this.applyActive=d1(z),this.setupApplyDebounced()}doesFilterPass(z){V(283);let{getHandler:J,model:Q,column:Z}=this.params;return J().doesFilterPass({...z,model:Q,handlerParams:this.beans.colFilter.getHandlerParams(Z)})}getFilterTitle(){return this.translate(this.filterNameKey)}isFilterActive(){return V(284),this.params.model!=null}setupApplyDebounced(){let z=gZ(this.params,this.defaultDebounceMs),J=i0(this,this.checkApplyDebounce.bind(this),z);this.applyDebounced=()=>{this.debouncePending=!0,J()}}checkApplyDebounce(){if(this.debouncePending)this.debouncePending=!1,this.doApplyModel()}getModel(){return V(285),this.params.model}setModel(z){V(286);let{beans:J,params:Q}=this;return J.colFilter.setModelForColumnLegacy(Q.column,z)}applyModel(z="api"){return this.doApplyModel()}canApply(z){return!0}doApplyModel(z){let{params:J,state:{valid:Q=!0,model:Z}}=this;if(!Q)return!1;let $=!this.areModelsEqual(J.model,Z);if($)J.onAction("apply",z);return $}onNewRowsLoaded(){}onUiChanged(z,J=!1){this.updateUiVisibility();let Q=this.getModelFromUi(),Z={model:Q,state:this.getState(),valid:this.canApply(Q)};this.state=Z;let{params:$,gos:X,eventSvc:Y,applyActive:q}=this;if($.onStateChange(Z),$.onUiChange(this.getUiChangeEventParams()),!X.get("enableFilterHandlers"))Y.dispatchEvent({type:"filterModified",column:$.column,filterInstance:this});if(!Z.valid)return;if(z??(z=q?void 0:"debounce"),z==="immediately")this.doApplyModel({afterFloatingFilter:J,afterDataChange:!1});else if(z==="debounce")this.applyDebounced()}getState(){return}getUiChangeEventParams(){return}afterGuiAttached(z){this.lastContainerType=z?.container,this.refreshFilterResizer(z?.container)}refreshFilterResizer(z){let{positionableFeature:J,gos:Q}=this;if(!J)return;let Z=z==="floatingFilter"||z==="columnFilter";if(Z)J.restoreLastSize(),J.setResizable(Q.get("enableRtl")?{bottom:!0,bottomLeft:!0,left:!0}:{bottom:!0,bottomRight:!0,right:!0});else J.removeSizeFromEl(),J.setResizable(!1);J.constrainSizeToAvailableHeight(Z)}afterGuiDetached(){this.checkApplyDebounce(),this.positionableFeature?.constrainSizeToAvailableHeight(!1)}destroy(){this.positionableFeature=this.destroyBean(this.positionableFeature),super.destroy()}translate(z,J){return k4(this,z,J)}getPositionableElement(){return this.getGui()}areModelsEqual(z,J){if(z===J||z==null&&J==null)return!0;if(z==null||J==null)return!1;return this.areNonNullModelsEqual(z,J)}};var hZ=class extends I0{isPopup(){return!0}setParentComponent(z){z.addCss("ag-has-popup"),super.setParentComponent(z)}destroy(){let z=this.parentComponent;if(z?.isAlive())z.getGui().classList.remove("ag-has-popup");super.destroy()}},k_=class extends hZ{constructor(){super(...arguments);this.errorMessages=null}init(z){this.params=z,this.initialiseEditor(z),this.eEditor.onValueChange(()=>z.validate())}destroy(){this.eEditor.destroy(),this.errorMessages=null,super.destroy()}};function uZ(z){let J=z.rowModel;return J.getType()==="clientSide"?J:void 0}var A7="row-group-",f_="t-",S_="b-",V_=0,Pz=class{constructor(z){this.id=void 0,this.destroyed=!1,this._groupData=void 0,this.master=!1,this.detail=void 0,this.rowIndex=null,this.field=null,this.rowGroupColumn=null,this.key=null,this.sourceRowIndex=-1,this._leafs=void 0,this.childrenAfterGroup=null,this.childrenAfterFilter=null,this.childrenAfterAggFilter=null,this.childrenAfterSort=null,this.allChildrenCount=null,this.childrenMapped=null,this.treeParent=null,this.treeNodeFlags=0,this._expanded=void 0,this.displayed=!1,this.rowTop=null,this.oldRowTop=null,this.selectable=!0,this.__objectId=V_++,this.alreadyRendered=!1,this.formulaRowIndex=null,this.hovered=!1,this.__selected=!1,this.beans=z}get groupData(){let z=this._groupData;if(z!==void 0)return z;if(this.footer)return this.sibling?.groupData;return this.beans.groupStage?.loadGroupData(this)??null}set groupData(z){this._groupData=z}get primaryRow(){let z=this.footer&&this.sibling||this;if(z.rowPinned){let J=z.pinnedSibling;if(J){if(z=J,z.footer)z=z.sibling??z}}return z}get allLeafChildren(){let z=this._leafs;return z===void 0?this.beans.groupStage?.loadLeafs?.(this)??null:z}set allLeafChildren(z){this._leafs=z}get expanded(){let z=this.beans.expansionSvc;return z?z.isExpanded(this):this.level===-1?!0:!!this._expanded}set expanded(z){this._expanded=z}setData(z){this.setDataCommon(z,"set")}updateData(z){this.setDataCommon(z,"update")}_updateDataNoSibling(z){this.setDataCommon(z,"updateNoSibling")}setDataCommon(z,J){let{valueCache:Q,eventSvc:Z}=this.beans,$=this.data,X=J!=="set";this.data=z,Q?.onDataChanged(),this.updateDataOnDetailNode(),this.resetQuickFilterAggregateText();let Y=this.createDataChangedEvent(z,$,X);if(this.__localEventService?.dispatchEvent(Y),J!=="updateNoSibling"){let G=this.sibling;if(G){G.data=z;let U=G.createDataChangedEvent(z,$,X);G.__localEventService?.dispatchEvent(U)}}Z.dispatchEvent({type:"rowNodeDataChanged",node:this});let q=this.pinnedSibling;if(q)q.data=z,q.__localEventService?.dispatchEvent(q.createDataChangedEvent(z,$,X)),Z.dispatchEvent({type:"rowNodeDataChanged",node:q})}updateDataOnDetailNode(){let z=this.detailNode;if(z)z.data=this.data}createDataChangedEvent(z,J,Q){return{type:"dataChanged",node:this,oldData:J,newData:z,update:Q}}getRowIndexString(){if(this.rowIndex==null)return r(13),null;if(this.rowPinned==="top")return f_+this.rowIndex;if(this.rowPinned==="bottom")return S_+this.rowIndex;return this.rowIndex.toString()}setDataAndId(z,J){let{selectionSvc:Q}=this.beans,Z=Q?.createDaemonNode?.(this),$=this.data;if(this.data=z,this.updateDataOnDetailNode(),this.setId(J),Q)Q.updateRowSelectable(this),Q.syncInRowNode(this,Z);let X=this.createDataChangedEvent(z,$,!1);this.__localEventService?.dispatchEvent(X)}setId(z){let J=wQ(this.beans.gos);if(J)if(this.data){let Q=this.parent?.getRoute()??[];if(this.id=J({data:this.data,parentKeys:Q.length>0?Q:void 0,level:this.level,rowPinned:this.rowPinned}),this.id.startsWith(A7))r(14,{groupPrefix:A7})}else this.id=void 0;else this.id=z}setRowTop(z){if(this.oldRowTop=this.rowTop,this.rowTop===z)return;this.rowTop=z,this.dispatchRowEvent("topChanged");let J=z!==null;if(this.displayed!==J)this.displayed=J,this.dispatchRowEvent("displayedChanged")}clearRowTopAndRowIndex(){this.oldRowTop=null,this.setRowTop(null),this.setRowIndex(null)}setHovered(z){this.hovered=z}isHovered(){return this.hovered}setRowHeight(z,J=!1){this.rowHeight=z,this.rowHeightEstimated=J,this.dispatchRowEvent("heightChanged")}setExpanded(z,J,Q){this.beans.expansionSvc?.setExpanded(this,z,J,Q)}setDataValue(z,J,Q){let{colModel:Z,valueSvc:$,gos:X,editSvc:Y}=this.beans;if(z==null)return!1;let q=Z.getColOrColDefCol(z);if(!q)return!1;let G=q.colDef.pivotValueColumn;if(!this.group&&!this.rowPinned&&G)q=G;let U=$.getValueForDisplay({column:q,node:this,from:"data"}).value;if(X.get("readOnlyEdit")){let{beans:{eventSvc:H},data:W,rowIndex:B,rowPinned:E}=this;return H.dispatchEvent({type:"cellEditRequest",event:null,rowIndex:B,rowPinned:E,column:q,colDef:q.colDef,data:W,node:this,oldValue:U,newValue:J,value:J,source:Q}),!1}if(Q!=="data"&&Y&&!Y.committing){let H=Y.setDataValue({rowNode:this,column:q},J,Q);if(H!=null)return H}let _=$.setValue(this,q,J,Q);if(this.dispatchCellChangedEvent(q,J,U),_)this.pinnedSibling?.dispatchCellChangedEvent(q,J,U);return _}getDataValue(z,J){let Q=this.beans,Z=Q.colModel.getColOrColDefCol(z);if(!Z)return;let $;if(J==="data"||!J){if($=Q.valueSvc.getValue(Z,this,"data",!1),$==null)return $}else{let X=J==="data-raw",Y=X||J==="value"?"data":J;if($=Q.valueSvc.getValue(Z,this,Y,X),X||$==null)return $;if(typeof $==="object"&&Z.aggFunc){if(typeof $.toNumber==="function")return $.toNumber();if("value"in $)return $.value}if(J!=="value")return $}if(Z.colDef.allowFormula){let X=Q.formula;if(X?.isFormula($)&&Z.isAllowFormula())$=X.resolveValue(Z,this)}return $}updateHasChildren(){let z=this.group&&!this.footer||!!this.childrenAfterGroup?.length,{rowChildrenSvc:J}=this.beans;if(J)z=J.getHasChildrenValue(this);if(z!==this.__hasChildren)this.__hasChildren=!!z,this.dispatchRowEvent("hasChildrenChanged")}hasChildren(){if(this.__hasChildren==null)this.updateHasChildren();return this.__hasChildren}dispatchCellChangedEvent(z,J,Q){let Z={type:"cellChanged",node:this,column:z,newValue:J,oldValue:Q};this.__localEventService?.dispatchEvent(Z)}resetQuickFilterAggregateText(){this.quickFilterAggregateText=null}isExpandable(){return this.beans.expansionSvc?.isExpandable(this)??!1}isSelected(){if(this.footer)return this.sibling.isSelected();let z=this.rowPinned&&this.pinnedSibling;if(z)return z.isSelected();return this.__selected}depthFirstSearch(z){let J=this.childrenAfterGroup;if(J)for(let Q=0,Z=J.length;Q{let Q=new Pz(J);for(let Z of Object.keys(z)){if(R_.has(Z))continue;Q[Z]=z[Z]}return Q.oldRowTop=null,Q},l9=(z,J,Q)=>{if(!Q)return;let Z=Q.rowIndex;if(Z==null)return;Z+=J;let $=z.getRowCount();while(Z>=0&&Z<$){let X=z.getRow(Z);if(!X||!X.footer&&!X.detail)return X;Z+=J}return};var A_=500,j_=550,q6,O_=(z)=>{if(!q6)q6=new WeakSet;else if(q6.has(z))return!1;return q6.add(z),!0},c0=class{constructor(z,J=!1){this.eElement=z,this.preventClick=J,this.startListener=null,this.handlers=[],this.eventSvc=void 0,this.touchStart=null,this.lastTapTime=null,this.longPressTimer=0,this.moved=!1}addEventListener(z,J){let Q=this.eventSvc;if(!Q){if(Q===null)return;this.eventSvc=Q=new R4;let Z=this.onTouchStart.bind(this);this.startListener=Z,this.eElement.addEventListener("touchstart",Z,{passive:!0})}Q.addEventListener(z,J)}removeEventListener(z,J){this.eventSvc?.removeEventListener(z,J)}onTouchStart(z){if(this.touchStart||!O_(z))return;let J=z.touches[0];this.touchStart=J;let Q=this.handlers;if(!Q.length){let Z=this.eElement,$=Z.ownerDocument,X=this.onTouchMove.bind(this),Y=this.onTouchEnd.bind(this),q=this.onTouchCancel.bind(this),G={passive:!0},U={passive:!1};L6(Q,[Z,"touchmove",X,G],[$,"touchcancel",q,G],[$,"touchend",Y,U],[$,"contextmenu",f1,U])}this.clearLongPress(),this.longPressTimer=window.setTimeout(()=>{if(this.longPressTimer=0,this.touchStart===J&&!this.moved)this.moved=!0,this.eventSvc?.dispatchEvent({type:"longTap",touchStart:J,touchEvent:z})},j_)}onTouchMove(z){let{moved:J,touchStart:Q}=this;if(!J&&Q){let Z=j1(Q,z.touches);if(Z&&!o8(Z,Q,4))this.clearLongPress(),this.moved=!0}}onTouchEnd(z){let J=this.touchStart;if(!J||!j1(J,z.changedTouches))return;if(!this.moved)this.eventSvc?.dispatchEvent({type:"tap",touchStart:J}),this.checkDoubleTap(J);if(this.preventClick)f1(z);this.cancel()}onTouchCancel(z){let J=this.touchStart;if(!J||!j1(J,z.changedTouches))return;this.lastTapTime=null,this.cancel()}checkDoubleTap(z){let J=Date.now(),Q=this.lastTapTime;if(Q){if(J-Q>A_)this.eventSvc?.dispatchEvent({type:"doubleTap",touchStart:z}),J=null}this.lastTapTime=J}cancel(){this.clearLongPress(),LZ(this.handlers),this.touchStart=null}clearLongPress(){if(this.longPressTimer!==0)window.clearTimeout(this.longPressTimer),this.longPressTimer=0;this.moved=!1}destroy(){let z=this.startListener;if(z)this.startListener=null,this.eElement.removeEventListener("touchstart",z);this.cancel(),this.eElement=null,this.eventSvc=null}},p4=((z)=>{return z[z.VALUE=0]="VALUE",z[z.DIMENSION=1]="DIMENSION",z})(p4||{}),P_=1,T_=class{constructor(z){if(this.beans={},this.createdBeans=[],this.destroyed=!1,this.instanceId=P_++,!z?.beanClasses)return;this.beanDestroyComparator=z.beanDestroyComparator,this.init(z)}init(z){this.id=z.id,this.beans.context=this,this.destroyCallback=z.destroyCallback;for(let J of Object.keys(z.providedBeanInstances))this.beans[J]=z.providedBeanInstances[J];for(let J of z.beanClasses){let Q=new J;if(Q.beanName)this.beans[Q.beanName]=Q;else console.error(`Bean ${J.name} is missing beanName`);this.createdBeans.push(Q)}for(let J of z.derivedBeans??[]){let{beanName:Q,bean:Z}=J(this);this.beans[Q]=Z,this.createdBeans.push(Z)}if(z.beanInitComparator)this.createdBeans.sort(z.beanInitComparator);this.initBeans(this.createdBeans)}getBeanInstances(){return Object.values(this.beans)}createBean(z,J){return this.initBeans([z],J),z}initBeans(z,J){let Q=this.beans;for(let Z of z)Z.preWireBeans?.(Q),Z.wireBeans?.(Q);for(let Z of z)Z.preConstruct?.();if(J)z.forEach(J);for(let Z of z)Z.postConstruct?.()}getBeans(){return this.beans}getBean(z){return this.beans[z]}getId(){return this.id}destroy(){if(this.destroyed)return;this.destroyed=!0;let z=this.getBeanInstances();if(this.beanDestroyComparator)z.sort(this.beanDestroyComparator);this.destroyBeans(z),this.beans={},this.createdBeans=[],this.destroyCallback?.()}destroyBean(z){z?.destroy?.()}destroyBeans(z){if(z)for(let J=0;J[z,J]));function C_(z,J){let Q=(z.beanName?j7[z.beanName]:void 0)??Number.MAX_SAFE_INTEGER,Z=(J.beanName?j7[J.beanName]:void 0)??Number.MAX_SAFE_INTEGER;return Q-Z}function y_(z,J){if(z?.beanName==="gridDestroySvc")return-1;if(J?.beanName==="gridDestroySvc")return 1;return 0}function n4(z){let{rowIndex:J,rowPinned:Q,column:Z}=z;return`${J}.${Q==null?"null":Q}.${Z.getId()}`}function r1(z,J){let Q=z.column===J.column,Z=z.rowPinned===J.rowPinned,$=z.rowIndex===J.rowIndex;return Q&&Z&&$}function W0(z,J){switch(z.rowPinned){case"top":if(J.rowPinned!=="top")return!0;break;case"bottom":if(J.rowPinned!=="bottom")return!1;break;default:if(P(J.rowPinned))return J.rowPinned!=="top";break}return z.rowIndexH.rowNode.rowIndex===J.rowIndex),G=q?X:Y,U=(Q?-1:1)*(q?-1:1),_;for(let H=0;H{if(!Z.defaultPrevented&&!N_(Z)&&Z.key===k.TAB){let $=Z.shiftKey;if(!O0(z,Q,!1,$)){if(_4(z,$))Z.preventDefault()}}}})}function D4(z){return z.gos.get("suppressHeaderFocus")||!!z.overlays?.exclusive}function g6(z){return z.gos.get("suppressCellFocus")||!!z.overlays?.exclusive}function _4(z,J,Q=!1){let Z=z.ctrlsSvc.get("gridCtrl"),$=Z.focusNextInnerContainer(J);if($===!0)return!0;if($===!1)return $;if(Q||!J&&!Z.isDetailGrid()&&Z.isFocusInsideGridBody())Z.forceFocusOutOfContainer(J);return!1}function iZ(z,J){let Q=z.focusSvc,Z=Q.getFocusedCell();if(Z&&J&&r1(Z,J)){let{rowIndex:$,rowPinned:X,column:Y}=J;if(Vz(z))Q.setFocusedCell({rowIndex:$,column:Y,rowPinned:X,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!n1()})}}function w_(z,J){let Q=z.getFocusableContainerName();if(Q==="gridBody")return J();return o9(z,()=>V4(z.getGui(),".ag-tab-guard").length>0)?Q:null}function o9(z,J){z.setAllowFocus?.(!0);try{return J()}finally{z.setAllowFocus?.(!1)}}var e9="__ag_Grid_Skip_Focusable_Container";function z$(z){z[e9]=!0}function N_(z){return z[e9]===!0}function J$(z){if(!z.cols)return-1;return z.cols.treeDepth+1}function Q4(z){return z.ctrlsSvc.getHeaderRowContainerCtrl()?.getRowCount()??0}function pZ(z){let J=[],Q=z.ctrlsSvc.getHeaderRowContainerCtrls();for(let Z of Q){if(!Z)continue;let $=Z.getGroupRowCount()||0;for(let X=0;X<$;X++){let Y=Z.getGroupRowCtrlAtIndex(X),q=J[X];if(Y){let G=g_(z,Y);if(q==null||G>q)J[X]=G}}}return J}function g_(z,J){let Z=z.colModel.pivotMode?u_(z):Z$(z),$=J.getHeaderCellCtrls();for(let X of $){let{column:Y}=X,q=Y.getAutoHeaderHeight();if(q!=null&&q>Z&&Y.isAutoHeaderHeight())Z=q}return Z}function nZ(z){let Q=z.colModel.pivotMode?h_(z):HJ(z);return z.colModel.forAllCols((Z)=>{let $=Z.getAutoHeaderHeight();if($!=null&&$>Q&&Z.isAutoHeaderHeight())Q=$}),Q}function HJ(z){return z.gos.get("headerHeight")??z.environment.getDefaultHeaderHeight()}function Q$(z){return z.gos.get("floatingFiltersHeight")??HJ(z)}function Z$(z){return z.gos.get("groupHeaderHeight")??HJ(z)}function h_(z){return z.gos.get("pivotHeaderHeight")??HJ(z)}function u_(z){return z.gos.get("pivotGroupHeaderHeight")??Z$(z)}function m_(z,J){return z.headerRowIndex===J.headerRowIndex&&z.column===J.column}function c_(z){return z?.headerRowIndex!=null}var i_=class extends S{setComp(z,J,Q){this.comp=z,this.eGui=J;let{beans:Z}=this,{headerNavigation:$,touchSvc:X,ctrlsSvc:Y}=Z;if($)this.createManagedBean(new Jz(Q,{onTabKeyDown:this.onTabKeyDown.bind(this),handleKeyDown:this.handleKeyDown.bind(this),onFocusOut:this.onFocusOut.bind(this)}));this.addManagedEventListeners({columnPivotModeChanged:this.onPivotModeChanged.bind(this,Z),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this,Z)}),this.onPivotModeChanged(Z),this.setupHeaderHeight();let q=this.onHeaderContextMenu.bind(this);this.addManagedElementListeners(this.eGui,{contextmenu:q}),X?.mockHeaderContextMenu(this,q),Y.register("gridHeaderCtrl",this)}setupHeaderHeight(){let z=this.setHeaderHeight.bind(this);z(),this.addManagedPropertyListeners(["headerHeight","pivotHeaderHeight","groupHeaderHeight","pivotGroupHeaderHeight","floatingFiltersHeight"],z),this.addManagedEventListeners({headerRowsChanged:z,columnHeaderHeightChanged:z,columnGroupHeaderHeightChanged:()=>O4(this.beans,()=>z()),stylesChanged:z,advancedFilterEnabledChanged:z})}setHeaderHeight(){let{beans:z}=this,J=0,Q=pZ(z).reduce((Y,q)=>Y+q,0),Z=nZ(z);if(z.filterManager?.hasFloatingFilters())J+=Q$(z);J+=Q,J+=Z;let $=z.environment.getHeaderRowBorderWidth(),X=J+$;if(this.headerHeightWithBorder!==X){this.headerHeightWithBorder=X;let Y=`${X}px`;this.comp.setHeightAndMinHeight(Y)}if(this.headerHeight!==J)this.headerHeight=J,this.eventSvc.dispatchEvent({type:"headerHeightChanged"})}onPivotModeChanged(z){let J=z.colModel.pivotMode;this.comp.toggleCss("ag-pivot-on",J),this.comp.toggleCss("ag-pivot-off",!J)}onDisplayedColumnsChanged(z){let Q=z.visibleCols.allCols.some((Z)=>Z.isSpanHeaderHeight());this.comp.toggleCss("ag-header-allow-overflow",Q)}onTabKeyDown(z){let J=this.gos.get("enableRtl"),Q=z.shiftKey,Z=Q!==J?"LEFT":"RIGHT",{beans:$}=this,{headerNavigation:X,focusSvc:Y}=$;if(X.navigateHorizontally(Z,!0,z)||!Q&&Y.focusOverlay(!1)||_4($,Q,!0))z.preventDefault()}handleKeyDown(z){let J=null,{headerNavigation:Q}=this.beans;switch(z.key){case k.LEFT:J="LEFT";case k.RIGHT:{if(!P(J))J="RIGHT";if(Q.navigateHorizontally(J,!1,z))z.preventDefault();break}case k.UP:J="UP";case k.DOWN:{if(!P(J))J="DOWN";if(Q.navigateVertically(J,z))z.preventDefault();break}default:return}}onFocusOut(z){let{relatedTarget:J}=z,{eGui:Q,beans:Z}=this;if(!J&&Q.contains(n(Z)))return;if(!Q.contains(J))Z.focusSvc.focusedHeader=null}onHeaderContextMenu(z,J,Q){let{menuSvc:Z,ctrlsSvc:$}=this.beans;if(!z&&!Q||!Z?.isHeaderContextMenuEnabled())return;let{target:X}=z??J;if(X===this.eGui||X===$.getHeaderRowContainerCtrl()?.eViewport)Z.showHeaderContextMenu(void 0,z,Q)}},dZ=class extends x{constructor(z,J){super(z);this.ctrl=J}getCtrl(){return this.ctrl}},p_={tag:"div",cls:"ag-header-cell",role:"columnheader",children:[{tag:"div",ref:"eResize",cls:"ag-header-cell-resize",role:"presentation"},{tag:"div",ref:"eHeaderCompWrapper",cls:"ag-header-cell-comp-wrapper",role:"presentation"}]},n_=class extends dZ{constructor(z){super(p_,z);this.eResize=j,this.eHeaderCompWrapper=j,this.headerCompVersion=0}postConstruct(){let z=this.getGui(),J=()=>{let Z=this.ctrl.getSelectAllGui();if(Z)this.eResize.insertAdjacentElement("afterend",Z),this.addDestroyFunc(()=>Z.remove())},Q={setWidth:(Z)=>z.style.width=Z,toggleCss:(Z,$)=>this.toggleCss(Z,$),setUserStyles:(Z)=>y2(z,Z),setAriaSort:(Z)=>Z?SG(z,Z):VG(z),setUserCompDetails:(Z)=>this.setUserCompDetails(Z),getUserCompInstance:()=>this.headerComp,refreshSelectAllGui:J,removeSelectAllGui:()=>this.ctrl.getSelectAllGui()?.remove()};this.ctrl.setComp(Q,this.getGui(),this.eResize,this.eHeaderCompWrapper,void 0),J()}destroy(){this.destroyHeaderComp(),super.destroy()}destroyHeaderComp(){if(this.headerComp)this.headerCompGui?.remove(),this.headerComp=this.destroyBean(this.headerComp),this.headerCompGui=void 0}setUserCompDetails(z){this.headerCompVersion++;let J=this.headerCompVersion;z.newAgStackInstance().then((Q)=>this.afterCompCreated(J,Q))}afterCompCreated(z,J){if(z!=this.headerCompVersion||!this.isAlive()){this.destroyBean(J);return}this.destroyHeaderComp(),this.headerComp=J,this.headerCompGui=J.getGui(),this.eHeaderCompWrapper.appendChild(this.headerCompGui),this.ctrl.setDragSource(this.getGui())}},d_={tag:"div",cls:"ag-header-group-cell",role:"columnheader",children:[{tag:"div",ref:"eHeaderCompWrapper",cls:"ag-header-cell-comp-wrapper",role:"presentation"},{tag:"div",ref:"eResize",cls:"ag-header-cell-resize",role:"presentation"}]},r_=class extends dZ{constructor(z){super(d_,z);this.eResize=j,this.eHeaderCompWrapper=j}postConstruct(){let z=this.getGui(),J=(Z,$)=>$!=null?z.setAttribute(Z,$):z.removeAttribute(Z),Q={toggleCss:(Z,$)=>this.toggleCss(Z,$),setUserStyles:(Z)=>y2(z,Z),setHeaderWrapperHidden:(Z)=>{if(Z)this.eHeaderCompWrapper.style.setProperty("display","none");else this.eHeaderCompWrapper.style.removeProperty("display")},setHeaderWrapperMaxHeight:(Z)=>{if(Z!=null)this.eHeaderCompWrapper.style.setProperty("max-height",`${Z}px`);else this.eHeaderCompWrapper.style.removeProperty("max-height");this.eHeaderCompWrapper.classList.toggle("ag-header-cell-comp-wrapper-limited-height",Z!=null)},setResizableDisplayed:(Z)=>w(this.eResize,Z),setWidth:(Z)=>z.style.width=Z,setAriaExpanded:(Z)=>J("aria-expanded",Z),setUserCompDetails:(Z)=>this.setUserCompDetails(Z),getUserCompInstance:()=>this.headerGroupComp};this.ctrl.setComp(Q,z,this.eResize,this.eHeaderCompWrapper,void 0)}setUserCompDetails(z){z.newAgStackInstance().then((J)=>this.afterHeaderCompCreated(J))}afterHeaderCompCreated(z){let J=()=>this.destroyBean(z);if(!this.isAlive()){J();return}let Q=this.getGui(),Z=z.getGui();this.eHeaderCompWrapper.appendChild(Z),this.addDestroyFunc(J),this.headerGroupComp=z,this.ctrl.setDragSource(Q)}},t_={tag:"div",cls:"ag-header-cell ag-floating-filter",role:"gridcell",children:[{tag:"div",ref:"eFloatingFilterBody",role:"presentation"},{tag:"div",ref:"eButtonWrapper",cls:"ag-floating-filter-button ag-hidden",role:"presentation",children:[{tag:"button",ref:"eButtonShowMainFilter",cls:"ag-button ag-floating-filter-button-button",attrs:{type:"button",tabindex:"-1"}}]}]},s_=class extends dZ{constructor(z){super(t_,z);this.eFloatingFilterBody=j,this.eButtonWrapper=j,this.eButtonShowMainFilter=j}postConstruct(){let z=this.getGui(),J={toggleCss:(Q,Z)=>this.toggleCss(Q,Z),setUserStyles:(Q)=>y2(z,Q),addOrRemoveBodyCssClass:(Q,Z)=>this.eFloatingFilterBody.classList.toggle(Q,Z),setButtonWrapperDisplayed:(Q)=>w(this.eButtonWrapper,Q),setCompDetails:(Q)=>this.setCompDetails(Q),getFloatingFilterComp:()=>this.compPromise,setWidth:(Q)=>z.style.width=Q,setMenuIcon:(Q)=>this.eButtonShowMainFilter.appendChild(Q)};this.ctrl.setComp(J,z,this.eButtonShowMainFilter,this.eFloatingFilterBody,void 0)}setCompDetails(z){if(!z){this.destroyFloatingFilterComp(),this.compPromise=null;return}this.compPromise=z.newAgStackInstance(),this.compPromise.then((J)=>this.afterCompCreated(J))}destroy(){this.destroyFloatingFilterComp(),super.destroy()}destroyFloatingFilterComp(){this.floatingFilterComp?.getGui().remove(),this.floatingFilterComp=this.destroyBean(this.floatingFilterComp)}afterCompCreated(z){if(!z)return;if(!this.isAlive()){this.destroyBean(z);return}this.destroyFloatingFilterComp(),this.floatingFilterComp=z,this.eFloatingFilterBody.appendChild(z.getGui()),z.afterGuiAttached?.()}},l_=class extends x{constructor(z){super({tag:"div",cls:z.headerRowClass,role:"row"});this.ctrl=z,this.headerComps={}}postConstruct(){this.getGui().setAttribute("tabindex",String(this.gos.get("tabIndex"))),O6(this.getGui(),this.ctrl.getAriaRowIndex());let J={setHeight:(Q)=>this.getGui().style.height=Q,setTop:(Q)=>this.getGui().style.top=Q,setHeaderCtrls:(Q,Z)=>this.setHeaderCtrls(Q,Z),setWidth:(Q)=>this.getGui().style.width=Q,setRowIndex:(Q)=>O6(this.getGui(),Q)};this.ctrl.setComp(J,void 0)}destroy(){this.setHeaderCtrls([],!1),super.destroy()}setHeaderCtrls(z,J){if(!this.isAlive())return;let Q=this.headerComps;this.headerComps={};for(let Z of z){let $=Z.instanceId,X=Q[$];if(delete Q[$],X==null)X=this.createHeaderComp(Z),this.getGui().appendChild(X.getGui());this.headerComps[$]=X}if(Object.values(Q).forEach((Z)=>{Z.getGui().remove(),this.destroyBean(Z)}),J){let Z=Object.values(this.headerComps);Z.sort((X,Y)=>{let q=X.getCtrl().column.getLeft(),G=Y.getCtrl().column.getLeft();return q-G});let $=Z.map((X)=>X.getGui());s8(this.getGui(),$)}}createHeaderComp(z){let J;switch(this.ctrl.type){case"group":J=new r_(z);break;case"filter":J=new s_(z);break;default:J=new n_(z);break}return this.createBean(J),J.setParentComponent(this),J}},rZ=class extends S{constructor(z,J=!1){super();this.callback=z,this.addSpacer=J}postConstruct(){let z=this.setWidth.bind(this);if(this.addManagedPropertyListener("domLayout",z),this.addManagedEventListeners({columnContainerWidthChanged:z,displayedColumnsChanged:z,leftPinnedWidthChanged:z}),this.addSpacer)this.addManagedEventListeners({rightPinnedWidthChanged:z,scrollVisibilityChanged:z,scrollbarWidthChanged:z});this.setWidth()}setWidth(){let z=A0(this.gos,"print"),{visibleCols:J,scrollVisibleSvc:Q}=this.beans,Z=J.bodyWidth,$=J.getColsLeftWidth(),X=J.getDisplayedColumnsRightWidth(),Y;if(z)Y=Z+$+X;else if(Y=Z,this.addSpacer){if((this.gos.get("enableRtl")?$:X)===0&&Q.verticalScrollShowing)Y+=Q.getScrollbarWidth()}this.callback(Y)}};function m2(z,J,Q){if(Q)z.addDestroyFunc(()=>J.destroyBean(Q));return Q??z}var tZ=class extends S{constructor(z,J,Q,Z){super();this.columnOrGroup=z,this.eCell=J,this.colsSpanning=Z,this.columnOrGroup=z,this.ariaEl=J.querySelector("[role=columnheader]")||J,this.beans=Q}setColsSpanning(z){this.colsSpanning=z,this.onLeftChanged()}getColumnOrGroup(){let{beans:z,colsSpanning:J}=this;if(z.gos.get("enableRtl")&&J)return y(J);return this.columnOrGroup}postConstruct(){let z=this.onLeftChanged.bind(this);this.addManagedListeners(this.columnOrGroup,{leftChanged:z}),this.setLeftFirstTime(),this.addManagedEventListeners({displayedColumnsWidthChanged:z}),this.addManagedPropertyListener("domLayout",z)}setLeftFirstTime(){let{gos:z,colAnimation:J}=this.beans,Q=z.get("suppressColumnMoveAnimation"),Z=P(this.columnOrGroup.getOldLeft());if(J?.isActive()&&Z&&!Q)this.animateInLeft();else this.onLeftChanged()}animateInLeft(){let z=this.getColumnOrGroup(),J=this.modifyLeftForPrintLayout(z,z.getOldLeft()),Q=this.modifyLeftForPrintLayout(z,z.getLeft());this.setLeft(J),this.actualLeft=Q,this.beans.colAnimation.executeNextVMTurn(()=>{if(this.actualLeft===Q)this.setLeft(Q)})}onLeftChanged(){let z=this.getColumnOrGroup(),J=z.getLeft();this.actualLeft=this.modifyLeftForPrintLayout(z,J),this.setLeft(this.actualLeft)}modifyLeftForPrintLayout(z,J){let{gos:Q,visibleCols:Z}=this.beans;if(!A0(Q,"print"))return J;if(z.getPinned()==="left")return J;let X=Z.getColsLeftWidth();if(z.getPinned()==="right"){let Y=Z.bodyWidth;return X+Y+J}return X+J}setLeft(z){if(P(z))this.eCell.style.left=`${z}px`;if(K0(this.columnOrGroup)){let J=this.columnOrGroup.getLeafColumns();if(!J.length)return;if(J.length>1)fG(this.ariaEl,J.length)}}},a_="ag-column-first",o_="ag-column-last";function WJ(z,J,Q,Z){if(d(z))return[];return X$(z.headerClass,z,J,Q,Z)}function BJ(z,J,Q,Z){if(d(z))return[];return X$(z.toolPanelClass,z,J,Q,Z)}function $$(z,J,Q){z.toggleCss(a_,Q.isColAtEdge(J,"first")),z.toggleCss(o_,Q.isColAtEdge(J,"last"))}function e_(z,J,Q,Z){return C(J,{colDef:z,column:Q,columnGroup:Z})}function X$(z,J,Q,Z,$){if(d(z))return[];let X;if(typeof z==="function"){let Y=e_(J,Q,Z,$);X=z(Y)}else X=z;if(typeof X==="string")return[X];if(Array.isArray(X))return[...X];return[]}var zH=0,Y$="headerCtrl",sZ=class extends S{constructor(z,J){super();this.column=z,this.rowCtrl=J,this.resizeToggleTimeout=0,this.resizeMultiplier=1,this.resizeFeature=null,this.lastFocusEvent=null,this.dragSource=null,this.reAttemptToFocus=!1,this.instanceId=z.getUniqueId()+"-"+zH++}postConstruct(){let z=this.refreshTabIndex.bind(this);this.addManagedPropertyListeners(["suppressHeaderFocus"],z),this.addManagedEventListeners({overlayExclusiveChanged:z})}setComp(z,J,Q,Z,$){if(J.setAttribute("col-id",this.column.colIdSanitised),this.wireComp(z,J,Q,Z,$),this.reAttemptToFocus)this.reAttemptToFocus=!1,this.focus(this.lastFocusEvent??void 0)}shouldStopEventPropagation(z){let{headerRowIndex:J,column:Q}=this.beans.focusSvc.focusedHeader,Z=Q.getDefinition(),$=Z?.suppressHeaderKeyboardEvent;if(!P($))return!1;let X=C(this.gos,{colDef:Z,column:Q,headerRowIndex:J,event:z});return!!$(X)}getWrapperHasFocus(){return n(this.beans)===this.eGui}setGui(z,J){this.eGui=z,this.addDomData(J),J.addManagedListeners(this.beans.eventSvc,{displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this)}),J.addManagedElementListeners(this.eGui,{focus:this.onGuiFocus.bind(this)}),this.onDisplayedColumnsChanged(),this.refreshTabIndex()}refreshHeaderStyles(){let z=this.column.getDefinition();if(!z)return;let{headerStyle:J}=z,Q;if(typeof J==="function"){let Z=this.getHeaderClassParams();Q=J(Z)}else Q=J;if(Q)this.comp.setUserStyles(Q)}onGuiFocus(){this.eventSvc.dispatchEvent({type:"headerFocused",column:this.column})}setupAutoHeight(z){let{wrapperElement:J,checkMeasuringCallback:Q,compBean:Z}=z,{beans:$}=this,X=(H)=>{if(!this.isAlive()||!Z.isAlive())return;let{paddingTop:W,paddingBottom:B,borderBottomWidth:E,borderTopWidth:K}=i1(this.eGui),F=W+B+E+K,D=J.offsetHeight+F;if(H<5){let f=!Y0($)?.contains(J),A=D==0;if(f||A){CQ(()=>X(H+1),"raf",$);return}}this.setColHeaderHeight(this.column,D)},Y=!1,q,G=()=>{let H=this.column.isAutoHeaderHeight();if(H&&!Y)U();if(!H&&Y)_()},U=()=>{Y=!0,this.comp.toggleCss("ag-header-cell-auto-height",!0),X(0),q=j4(this.beans,J,()=>X(0))},_=()=>{if(Y=!1,q)q();this.comp.toggleCss("ag-header-cell-auto-height",!1),q=void 0};if(G(),Z.addDestroyFunc(()=>_()),Z.addManagedListeners(this.column,{widthChanged:()=>Y&&X(0)}),Z.addManagedEventListeners({sortChanged:()=>{if(Y)window.setTimeout(()=>X(0))}}),Q)Q(G)}onDisplayedColumnsChanged(){let{comp:z,column:J,beans:Q,eGui:Z}=this;if(!z||!J||!Z)return;$$(z,J,Q.visibleCols),c8(Z,Q.visibleCols.getAriaColIndex(J))}addResizeAndMoveKeyboardListeners(z){z.addManagedListeners(this.eGui,{keydown:this.onGuiKeyDown.bind(this),keyup:this.onGuiKeyUp.bind(this)})}refreshTabIndex(){let z=D4(this.beans);if(this.eGui)f4(this.eGui,"tabindex",z?null:"-1")}onGuiKeyDown(z){let J=n(this.beans),Q=z.key===k.LEFT||z.key===k.RIGHT;if(this.isResizing)z.preventDefault(),z.stopImmediatePropagation();if(J!==this.eGui||!z.shiftKey&&!z.altKey&&!z.ctrlKey&&!z.metaKey)return;if(this.isResizing||Q)z.preventDefault(),z.stopImmediatePropagation();if((z.ctrlKey||z.metaKey)&&b9(z)===k.C)return this.beans.clipboardSvc?.copyToClipboard();if(!Q)return;let X=z.key===k.LEFT!==this.gos.get("enableRtl")?"left":"right";if(z.altKey){this.isResizing=!0,this.resizeMultiplier+=1;let Y=this.getViewportAdjustedResizeDiff(z);this.resizeHeader(Y,z.shiftKey),this.resizeFeature?.toggleColumnResizing(!0)}else this.moveHeader(X)}moveHeader(z){this.beans.colMoves?.moveHeader(z,this.eGui,this.column,this.rowCtrl.pinned,this)}getViewportAdjustedResizeDiff(z){let J=this.getResizeDiff(z),{pinnedCols:Q}=this.beans;return Q?Q.getHeaderResizeDiff(J,this.column):J}getResizeDiff(z){let{gos:J,column:Q}=this,Z=z.key===k.LEFT!==J.get("enableRtl"),$=Q.getPinned(),X=J.get("enableRtl");if($){if(X!==($==="right"))Z=!Z}return(Z?-1:1)*this.resizeMultiplier}onGuiKeyUp(){if(!this.isResizing)return;if(this.resizeToggleTimeout)window.clearTimeout(this.resizeToggleTimeout),this.resizeToggleTimeout=0;this.isResizing=!1,this.resizeMultiplier=1,this.resizeToggleTimeout=window.setTimeout(()=>{this.resizeFeature?.toggleColumnResizing(!1)},150)}handleKeyDown(z){let J=this.getWrapperHasFocus();switch(z.key){case k.PAGE_DOWN:case k.PAGE_UP:case k.PAGE_HOME:case k.PAGE_END:if(J)z.preventDefault()}}addDomData(z){let J=Y$,{eGui:Q,gos:Z}=this;az(Z,Q,J,this),z.addDestroyFunc(()=>az(Z,Q,J,null))}focus(z){if(!this.isAlive())return!1;let{eGui:J}=this;if(!J)this.reAttemptToFocus=!0;else this.lastFocusEvent=z||null,J.focus();return!0}focusThis(){this.beans.focusSvc.focusedHeader={headerRowIndex:this.rowCtrl.rowIndex,column:this.column}}removeDragSource(){if(this.dragSource)this.beans.dragAndDrop?.removeDragSource(this.dragSource),this.dragSource=null}handleContextMenuMouseEvent(z,J,Q){let Z=z??J,{menuSvc:$,gos:X}=this.beans;if(X.get("preventDefaultOnContextMenu"))Z.preventDefault();if($?.isHeaderContextMenuEnabled(Q))$.showHeaderContextMenu(Q,z,J);this.dispatchColumnMouseEvent("columnHeaderContextMenu",Q)}dispatchColumnMouseEvent(z,J){this.eventSvc.dispatchEvent({type:z,column:J})}setColHeaderHeight(z,J){if(!z.setAutoHeaderHeight(J))return;let{eventSvc:Q}=this;if(z.isColumn)Q.dispatchEvent({type:"columnHeaderHeightChanged",column:z,columns:[z],source:"autosizeColumnHeaderHeight"});else Q.dispatchEvent({type:"columnGroupHeaderHeightChanged",columnGroup:z,source:"autosizeColumnGroupHeaderHeight"})}clearComponent(){this.removeDragSource(),this.resizeFeature=null,this.comp=null,this.eGui=null}destroy(){super.destroy(),this.column=null,this.lastFocusEvent=null,this.rowCtrl=null}},JH=class extends sZ{constructor(){super(...arguments);this.refreshFunctions={},this.userHeaderClasses=new Set,this.ariaDescriptionProperties=new Map}wireComp(z,J,Q,Z,$){this.comp=z;let{rowCtrl:X,column:Y,beans:q}=this,{colResize:G,context:U,colHover:_,rangeSvc:H}=q,W=m2(this,U,$);if(this.setGui(J,W),this.updateState(),this.setupWidth(W),this.setupMovingCss(W),this.setupMenuClass(W),this.setupSortableClass(W),this.setupWrapTextClass(),this.refreshSpanHeaderHeight(),this.setupAutoHeight({wrapperElement:Z,checkMeasuringCallback:(E)=>this.setRefreshFunction("measuring",E),compBean:W}),this.addColumnHoverListener(W),this.setupFilterClass(W),this.setupStylesFromColDef(),this.setupClassesFromColDef(),this.setupTooltip(),this.addActiveHeaderMouseListeners(W),this.setupSelectAll(W),this.setupUserComp(),this.refreshAria(),G)this.resizeFeature=W.createManagedBean(G.createResizeFeature(X.pinned,Y,Q,z,this));else w(Q,!1);_?.createHoverFeature(W,[Y],J),H?.createRangeHighlightFeature(W,Y,z),W.createManagedBean(new tZ(Y,J,q)),W.createManagedBean(new Jz(J,{shouldStopEventPropagation:(E)=>this.shouldStopEventPropagation(E),onTabKeyDown:()=>null,handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this),onFocusOut:this.onFocusOut.bind(this)})),this.addResizeAndMoveKeyboardListeners(W),W.addManagedPropertyListeners(["suppressMovableColumns","suppressMenuHide","suppressAggFuncInHeader","enableAdvancedFilter"],()=>this.refresh()),W.addManagedPropertyListener("cellSelection",()=>this.refreshAria()),W.addManagedListeners(Y,{colDefChanged:()=>this.refresh(),formulaRefChanged:()=>this.refresh(),headerHighlightChanged:this.onHeaderHighlightChanged.bind(this)});let B=()=>this.checkDisplayName();W.addManagedEventListeners({columnValueChanged:B,columnRowGroupChanged:B,columnPivotChanged:B,headerHeightChanged:this.onHeaderHeightChanged.bind(this)}),W.addDestroyFunc(()=>{this.refreshFunctions={},this.selectAllFeature=null,this.dragSourceElement=void 0,this.userCompDetails=null,this.userHeaderClasses.clear(),this.ariaDescriptionProperties.clear(),this.clearComponent()})}resizeHeader(z,J){this.beans.colResize?.resizeHeader(this.column,z,J)}getHeaderClassParams(){let{column:z,beans:J}=this,Q=z.colDef;return C(J.gos,{colDef:Q,column:z,floatingFilter:!1})}setupUserComp(){let z=this.lookupUserCompDetails();if(z)this.setCompDetails(z)}setCompDetails(z){this.userCompDetails=z,this.comp.setUserCompDetails(z)}lookupUserCompDetails(){let z=this.createParams(),J=this.column.getColDef();return Q_(this.beans.userCompFactory,J,z)}createParams(){let{menuSvc:z,sortSvc:J,colFilter:Q,gos:Z}=this.beans;return C(Z,{column:this.column,displayName:this.displayName,enableSorting:this.column.isSortable(),enableMenu:this.menuEnabled,enableFilterButton:this.openFilterEnabled&&!!z?.isHeaderFilterButtonEnabled(this.column),enableFilterIcon:!!Q&&(!this.openFilterEnabled||F0(this.gos)),showColumnMenu:(X,Y)=>{z?.showColumnMenu({column:this.column,buttonElement:X,positionBy:"button",onClosedCallback:Y})},showColumnMenuAfterMouseClick:(X,Y)=>{z?.showColumnMenu({column:this.column,mouseEvent:X,positionBy:"mouse",onClosedCallback:Y})},showFilter:(X)=>{z?.showFilterMenu({column:this.column,buttonElement:X,containerType:"columnFilter",positionBy:"button"})},progressSort:(X)=>{J?.progressSort(this.column,!!X,"uiColumnSorted")},setSort:(X,Y)=>{J?.setSortForColumn(this.column,Z4(X),!!Y,"uiColumnSorted")},eGridHeader:this.eGui,setTooltip:(X,Y)=>{Z.assertModuleRegistered("Tooltip",3),this.setupTooltip(X,Y)}})}setupSelectAll(z){let{selectionSvc:J}=this.beans;if(!J)return;this.selectAllFeature=z.createOptionalManagedBean(J.createSelectAllFeature(this.column)),this.selectAllFeature?.setComp(this),z.addManagedPropertyListener("rowSelection",()=>{let Q=J.createSelectAllFeature(this.column);if(Q&&!this.selectAllFeature)this.selectAllFeature=z.createManagedBean(Q),this.selectAllFeature?.setComp(this),this.comp.refreshSelectAllGui();else if(this.selectAllFeature&&!Q)this.comp.removeSelectAllGui(),this.selectAllFeature=this.destroyBean(this.selectAllFeature)})}getSelectAllGui(){return this.selectAllFeature?.getCheckboxGui()}handleKeyDown(z){if(super.handleKeyDown(z),z.key===k.SPACE)this.selectAllFeature?.onSpaceKeyDown(z);else if(z.key===k.ENTER)this.onEnterKeyDown(z);else if(z.key===k.DOWN&&z.altKey)this.showMenuOnKeyPress(z,!1)}onEnterKeyDown(z){let{column:J,gos:Q,sortable:Z,beans:$}=this,X=!1;if(z.ctrlKey||z.metaKey)X=this.showMenuOnKeyPress(z,!0);if(!X){if(!z.altKey&&l4(Q))$.rangeSvc?.handleColumnSelection(J,z);else if(Z)$.sortSvc?.progressSort(J,z.shiftKey,"uiColumnSorted")}}showMenuOnKeyPress(z,J){let Q=this.comp.getUserCompInstance();if(!O7(Q))return!1;if(Q.onMenuKeyboardShortcut(J))return z.preventDefault(),!0;return!1}onFocusIn(z){if(!this.eGui.contains(z.relatedTarget))this.focusThis(),this.announceAriaDescription();if(n1())this.setActiveHeader(!0)}onFocusOut(z){if(this.eGui.contains(z.relatedTarget))return;this.setActiveHeader(!1)}setupTooltip(z,J){this.tooltipFeature=this.beans.tooltipSvc?.setupHeaderTooltip(this.tooltipFeature,this,z,J)}setupStylesFromColDef(){this.setRefreshFunction("headerStyles",this.refreshHeaderStyles.bind(this)),this.refreshHeaderStyles()}setupClassesFromColDef(){let z=()=>{let J=this.column.colDef,Q=WJ(J,this.gos,this.column,null),Z=this.userHeaderClasses;this.userHeaderClasses=new Set(Q);for(let $ of Q)if(Z.has($))Z.delete($);else this.comp.toggleCss($,!0);for(let $ of Z)this.comp.toggleCss($,!1)};this.setRefreshFunction("headerClasses",z),z()}setDragSource(z){if(this.dragSourceElement=z,this.removeDragSource(),!z||!this.draggable)return;this.dragSource=this.beans.colMoves?.setDragSourceForHeader(z,this.column,this.displayName)??null}updateState(){let{menuSvc:z}=this.beans;this.menuEnabled=!!z?.isColumnMenuInHeaderEnabled(this.column),this.openFilterEnabled=!!z?.isFilterMenuInHeaderEnabled(this.column),this.sortable=this.column.isSortable(),this.displayName=this.calculateDisplayName(),this.draggable=this.workOutDraggable()}setRefreshFunction(z,J){this.refreshFunctions[z]=J}refresh(){this.updateState(),this.refreshHeaderComp(),this.refreshAria();for(let z of Object.values(this.refreshFunctions))z()}refreshHeaderComp(){let z=this.lookupUserCompDetails();if(!z)return;if(this.comp.getUserCompInstance()!=null&&this.userCompDetails.componentClass==z.componentClass?this.attemptHeaderCompRefresh(z.params):!1)this.setDragSource(this.dragSourceElement);else this.setCompDetails(z)}attemptHeaderCompRefresh(z){let J=this.comp.getUserCompInstance();if(!J)return!1;if(!J.refresh)return!1;return J.refresh(z)}calculateDisplayName(){return this.beans.colNames.getDisplayNameForColumn(this.column,"header",!0)}checkDisplayName(){if(this.displayName!==this.calculateDisplayName())this.refresh()}workOutDraggable(){let z=this.column.colDef;return!this.gos.get("suppressMovableColumns")&&!z.suppressMovable&&!z.lockPosition||!!z.enableRowGroup||!!z.enablePivot}setupWidth(z){let J=()=>{let Q=this.column.getActualWidth();this.comp.setWidth(`${Q}px`)};z.addManagedListeners(this.column,{widthChanged:J}),J()}setupMovingCss(z){let J=()=>{this.comp.toggleCss("ag-header-cell-moving",this.column.isMoving())};z.addManagedListeners(this.column,{movingChanged:J}),J()}setupMenuClass(z){let J=()=>{this.comp?.toggleCss("ag-column-menu-visible",this.column.isMenuVisible())};z.addManagedListeners(this.column,{menuVisibleChanged:J}),J()}setupSortableClass(z){let J=()=>{this.comp.toggleCss("ag-header-cell-sortable",!!this.sortable)};J(),this.setRefreshFunction("updateSortable",J),z.addManagedEventListeners({sortChanged:this.refreshAriaSort.bind(this)})}setupFilterClass(z){let J=()=>{let Q=this.column.isFilterActive();this.comp.toggleCss("ag-header-cell-filtered",Q),this.refreshAria()};z.addManagedListeners(this.column,{filterActiveChanged:J}),J()}setupWrapTextClass(){let z=()=>{let J=!!this.column.getColDef().wrapHeaderText;this.comp.toggleCss("ag-header-cell-wrap-text",J)};z(),this.setRefreshFunction("wrapText",z)}onHeaderHighlightChanged(){let z=this.column.getHighlighted(),J=z===0,Q=z===1;this.comp.toggleCss("ag-header-highlight-before",J),this.comp.toggleCss("ag-header-highlight-after",Q)}onDisplayedColumnsChanged(){if(super.onDisplayedColumnsChanged(),!this.isAlive())return;this.onHeaderHeightChanged()}onHeaderHeightChanged(){this.refreshSpanHeaderHeight()}refreshSpanHeaderHeight(){let{eGui:z,column:J,comp:Q,beans:Z}=this,$=pZ(this.beans),X=$.reduce((W,B)=>W+B,0)===0;if(Q.toggleCss("ag-header-parent-hidden",X),!J.isSpanHeaderHeight()){z.style.removeProperty("top"),z.style.removeProperty("height"),Q.toggleCss("ag-header-span-height",!1),Q.toggleCss("ag-header-span-total",!1);return}let{numberOfParents:Y,isSpanningTotal:q}=this.column.getColumnGroupPaddingInfo();Q.toggleCss("ag-header-span-height",Y>0);let G=nZ(Z);if(Y===0){Q.toggleCss("ag-header-span-total",!1),z.style.setProperty("top","0px"),z.style.setProperty("height",`${G}px`);return}Q.toggleCss("ag-header-span-total",q);let U=(this.column.getFirstRealParent()?.getLevel()??-1)+1,_=$.length-U,H=0;for(let W=0;W<_;W++)H+=$[$.length-1-W];z.style.setProperty("top",`${-H}px`),z.style.setProperty("height",`${G+H}px`)}refreshAriaSort(){let z=null,{beans:J,column:Q,comp:Z,sortable:$,gos:X}=this;if($){let Y=this.getLocaleTextFunc(),q=J.sortSvc?.getDisplaySortForColumn(Q)??null;Z.setAriaSort(EG(q)),z=l4(X)?Y("ariaSortableColumnWithCellSelection","Press ALT ENTER to sort"):Y("ariaSortableColumn","Press ENTER to sort")}else Z.setAriaSort();this.setAriaDescriptionProperty("sort",z)}refreshAriaMenu(){let z=null;if(this.menuEnabled)z=this.getLocaleTextFunc()("ariaMenuColumn","Press ALT DOWN to open column menu");this.setAriaDescriptionProperty("menu",z)}refreshAriaFilterButton(){let z=null,{openFilterEnabled:J,gos:Q}=this;if(J&&!F0(Q))z=this.getLocaleTextFunc()("ariaFilterColumn","Press CTRL ENTER to open filter");this.setAriaDescriptionProperty("filterButton",z)}refreshAriaFiltered(){let z=null;if(this.column.isFilterActive())z=this.getLocaleTextFunc()("ariaColumnFiltered","Column Filtered");this.setAriaDescriptionProperty("filter",z)}refreshAriaCellSelection(){let z=null,{gos:J,column:Q}=this;if(l4(J)&&!y0(Q))z=this.getLocaleTextFunc()("ariaColumnCellSelection","Press Enter to toggle selection for all visible cells in this column");this.setAriaDescriptionProperty("cellSelection",z)}setAriaDescriptionProperty(z,J){let Q=this.ariaDescriptionProperties;if(J!=null)Q.set(z,J);else Q.delete(z)}announceAriaDescription(){let{beans:z,eGui:J,ariaDescriptionProperties:Q}=this;if(!J.contains(n(z)))return;let Z=Array.from(Q.keys()).sort(($,X)=>$==="filter"?-1:X.charCodeAt(0)-$.charCodeAt(0)).map(($)=>Q.get($)).join(". ");z.ariaAnnounce?.announceValue(Z,"columnHeader")}refreshAria(){this.refreshAriaSort(),this.refreshAriaMenu(),this.refreshAriaFilterButton(),this.refreshAriaFiltered(),this.refreshAriaCellSelection()}addColumnHoverListener(z){this.beans.colHover?.addHeaderColumnHoverListener(z,this.comp,this.column)}addActiveHeaderMouseListeners(z){let J=($)=>this.handleMouseOverChange($.type==="mouseenter"),Q=()=>{this.setActiveHeader(!0),this.dispatchColumnMouseEvent("columnHeaderClicked",this.column)},Z=($)=>this.handleContextMenuMouseEvent($,void 0,this.column);z.addManagedListeners(this.eGui,{mouseenter:J,mouseleave:J,click:Q,contextmenu:Z})}handleMouseOverChange(z){this.setActiveHeader(z),this.eventSvc.dispatchEvent({type:z?"columnHeaderMouseOver":"columnHeaderMouseLeave",column:this.column})}setActiveHeader(z){this.comp.toggleCss("ag-header-active",z)}getAnchorElementForMenu(z){let J=this.comp.getUserCompInstance();if(O7(J))return J.getAnchorElementForMenu(z);return this.eGui}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),super.destroy()}};function O7(z){return typeof z?.getAnchorElementForMenu==="function"&&typeof z.onMenuKeyboardShortcut==="function"}var QH=0,qQ=class extends S{constructor(z,J,Q){super();this.rowIndex=z,this.pinned=J,this.type=Q,this.instanceId=QH++,this.comp=null,this.allCtrls=[];let Z="ag-header-row-column";if(Q==="group")Z="ag-header-row-group";else if(Q==="filter")Z="ag-header-row-filter";this.headerRowClass=`ag-header-row ${Z}`}setRowIndex(z){this.rowIndex=z,this.comp?.setRowIndex(this.getAriaRowIndex()),this.onRowHeightChanged()}postConstruct(){this.isPrintLayout=A0(this.gos,"print"),this.isEnsureDomOrder=this.gos.get("ensureDomOrder")}areCellsRendered(){if(!this.comp)return!1;return this.allCtrls.every((z)=>z.eGui!=null)}setComp(z,J,Q=!0){if(this.comp=z,J=m2(this,this.beans.context,J),Q)this.setRowIndex(this.rowIndex),this.onVirtualColumnsChanged();this.setWidth(),this.addEventListeners(J)}getAriaRowIndex(){return this.rowIndex+1}addEventListeners(z){let J=this.onRowHeightChanged.bind(this),Q=this.onDisplayedColumnsChanged.bind(this);z.addManagedEventListeners({columnResized:this.setWidth.bind(this),displayedColumnsChanged:Q,virtualColumnsChanged:(Z)=>this.onVirtualColumnsChanged(Z.afterScroll),columnGroupHeaderHeightChanged:J,columnHeaderHeightChanged:J,stylesChanged:J,advancedFilterEnabledChanged:J}),z.addManagedPropertyListener("domLayout",Q),z.addManagedPropertyListener("ensureDomOrder",(Z)=>this.isEnsureDomOrder=Z.currentValue),z.addManagedPropertyListeners(["headerHeight","pivotHeaderHeight","groupHeaderHeight","pivotGroupHeaderHeight","floatingFiltersHeight"],J)}onDisplayedColumnsChanged(){this.isPrintLayout=A0(this.gos,"print"),this.onVirtualColumnsChanged(),this.setWidth(),this.onRowHeightChanged()}setWidth(){if(!this.comp)return;let z=this.getWidthForRow();this.comp.setWidth(`${z}px`)}getWidthForRow(){let{visibleCols:z}=this.beans;if(this.isPrintLayout){if(this.pinned!=null)return 0;return z.getContainerWidth("right")+z.getContainerWidth("left")+z.getContainerWidth(null)}return z.getContainerWidth(this.pinned)}onRowHeightChanged(){if(!this.comp)return;let{topOffset:z,rowHeight:J}=this.getTopAndHeight();this.comp.setTop(z+"px"),this.comp.setHeight(J+"px")}getTopAndHeight(){let z=0,J=pZ(this.beans);for(let $=0;${let{focusSvc:$,visibleCols:X}=this.beans;if(!$.isHeaderWrapperFocused(Z))return!1;return X.isVisible(Z.column)};if(z)for(let[Z,$]of z)if(Q($))this.ctrlsById.set(Z,$);else this.destroyBean($);return this.allCtrls=Array.from(this.ctrlsById.values()),this.allCtrls}getHeaderCellCtrls(){return this.allCtrls}recycleAndCreateHeaderCtrls(z,J,Q){if(z.isEmptyGroup())return;let Z=z.getUniqueId(),$;if(Q)$=Q.get(Z),Q.delete(Z);if($&&$.column!=z)this.destroyBean($),$=void 0;if($==null)switch(this.type){case"filter":{$=this.createBean(this.beans.registry.createDynamicBean("headerFilterCellCtrl",!0,z,this));break}case"group":$=this.createBean(this.beans.registry.createDynamicBean("headerGroupCellCtrl",!0,z,this));break;default:$=this.createBean(new JH(z,this));break}J.set(Z,$)}getColumnsInViewport(){if(!this.isPrintLayout)return this.getComponentsToRender();if(this.pinned)return[];let z=[];for(let J of["left",null,"right"])z.push(...this.getComponentsToRender(J));return z}getComponentsToRender(z=this.pinned){if(this.type==="group")return this.beans.colViewport.getHeadersToRender(z,this.rowIndex);return this.beans.colViewport.getColumnHeadersToRender(z)}focusHeader(z,J){let Q=this.allCtrls.find(($)=>$.column==z);if(!Q)return!1;return Q.focus(J)}destroy(){this.allCtrls=this.destroyBeans(this.allCtrls),this.ctrlsById=void 0,this.comp=null,super.destroy()}},ZH=class extends S{constructor(z){super();this.pinned=z,this.hidden=!1,this.includeFloatingFilter=!1,this.groupsRowCtrls=[]}setComp(z,J){this.comp=z,this.eViewport=J;let{pinnedCols:Q,ctrlsSvc:Z,colModel:$,colMoves:X}=this.beans;this.setupCenterWidth(),Q?.setupHeaderPinnedWidth(this),this.setupDragAndDrop(X,this.eViewport);let Y=this.refresh.bind(this,!0);this.addManagedEventListeners({displayedColumnsChanged:Y,advancedFilterEnabledChanged:Y});let q=`${typeof this.pinned==="string"?this.pinned:"center"}Header`;if(Z.register(q,this),$.ready)this.refresh()}getAllCtrls(){let z=[...this.groupsRowCtrls];if(this.columnsRowCtrl)z.push(this.columnsRowCtrl);if(this.filtersRowCtrl)z.push(this.filtersRowCtrl);return z}refresh(z=!1){let{focusSvc:J,filterManager:Q,visibleCols:Z}=this.beans,$=0,X=J.getFocusHeaderToUseAfterRefresh(),Y=()=>{let H=Z.headerGroupRowCount;if($=H,!z)this.groupsRowCtrls=this.destroyBeans(this.groupsRowCtrls);let W=this.groupsRowCtrls.length;if(W===H)return;if(W>H){for(let B=H;B{let H=$++;if(this.hidden){this.columnsRowCtrl=this.destroyBean(this.columnsRowCtrl);return}if(this.columnsRowCtrl==null||!z)this.columnsRowCtrl=this.destroyBean(this.columnsRowCtrl),this.columnsRowCtrl=this.createBean(new qQ(H,this.pinned,"column"));else if(this.columnsRowCtrl.rowIndex!==H)this.columnsRowCtrl.setRowIndex(H)},G=()=>{this.includeFloatingFilter=!!Q?.hasFloatingFilters()&&!this.hidden;let H=()=>{this.filtersRowCtrl=this.destroyBean(this.filtersRowCtrl)};if(!this.includeFloatingFilter){H();return}if(!z)H();let W=$++;if(this.filtersRowCtrl){if(this.filtersRowCtrl.rowIndex!==W)this.filtersRowCtrl.setRowIndex(W)}else this.filtersRowCtrl=this.createBean(new qQ(W,this.pinned,"filter"))},U=this.getAllCtrls();Y(),q(),G();let _=this.getAllCtrls();if(this.comp.setCtrls(_),this.restoreFocusOnHeader(J,X),U.length!==_.length)this.beans.eventSvc.dispatchEvent({type:"headerRowsChanged"})}getHeaderCtrlForColumn(z){let J=(Q)=>Q?.getHeaderCellCtrls().find((Z)=>Z.column===z);if(G4(z))return J(this.columnsRowCtrl);if(this.groupsRowCtrls.length===0)return;for(let Q=0;Qthis.comp.setCenterWidth(`${z}px`),!0))}},$H={tag:"div",cls:"ag-pinned-left-header",role:"rowgroup"},XH={tag:"div",cls:"ag-pinned-right-header",role:"rowgroup"},YH={tag:"div",cls:"ag-header-viewport",role:"rowgroup",attrs:{tabindex:"-1"},children:[{tag:"div",ref:"eCenterContainer",cls:"ag-header-container",role:"presentation"}]},GQ=class extends x{constructor(z){super();this.eCenterContainer=j,this.headerRowComps={},this.rowCompsList=[],this.pinned=z}postConstruct(){this.selectAndSetTemplate();let z={setDisplayed:(Q)=>this.setDisplayed(Q),setCtrls:(Q)=>this.setCtrls(Q),setCenterWidth:(Q)=>this.eCenterContainer.style.width=Q,setViewportScrollLeft:(Q)=>this.getGui().scrollLeft=Q,setPinnedContainerWidth:(Q)=>{let Z=this.getGui();Z.style.width=Q,Z.style.maxWidth=Q,Z.style.minWidth=Q}};this.createManagedBean(new ZH(this.pinned)).setComp(z,this.getGui())}selectAndSetTemplate(){let z=this.pinned=="left",J=this.pinned=="right",Q=z?$H:J?XH:YH;this.setTemplate(Q),this.eRowContainer=this.eCenterContainer!==j?this.eCenterContainer:this.getGui()}destroy(){this.setCtrls([]),super.destroy()}destroyRowComp(z){this.destroyBean(z),z.getGui().remove()}setCtrls(z){let J=this.headerRowComps;this.headerRowComps={},this.rowCompsList=[];let Q,Z=($)=>{let X=$.getGui();if(X.parentElement!=this.eRowContainer)this.eRowContainer.appendChild(X);if(Q)t8(this.eRowContainer,X,Q);Q=X};for(let $ of z){let X=$.instanceId,Y=J[X];delete J[X];let q=Y?Y:this.createBean(new l_($));this.headerRowComps[X]=q,this.rowCompsList.push(q),Z(q)}for(let $ of Object.values(J))this.destroyRowComp($)}},qH={tag:"div",cls:"ag-header",role:"presentation"},GH=class extends x{constructor(){super(qH)}postConstruct(){let z={toggleCss:(Z,$)=>this.toggleCss(Z,$),setHeightAndMinHeight:(Z)=>{this.getGui().style.height=Z,this.getGui().style.minHeight=Z}};this.createManagedBean(new i_).setComp(z,this.getGui(),this.getFocusableElement());let Q=(Z)=>{this.createManagedBean(Z),this.appendChild(Z)};Q(new GQ("left")),Q(new GQ(null)),Q(new GQ("right"))}},UH={selector:"AG-HEADER-ROOT",component:GH},M4={AUTO_HEIGHT:"ag-layout-auto-height",NORMAL:"ag-layout-normal",PRINT:"ag-layout-print"},lZ=class extends S{constructor(z){super();this.view=z}postConstruct(){this.addManagedPropertyListener("domLayout",this.updateLayoutClasses.bind(this)),this.updateLayoutClasses()}updateLayoutClasses(){let z=this.gos.get("domLayout"),J={autoHeight:z==="autoHeight",normal:z==="normal",print:z==="print"},Q=J.autoHeight?M4.AUTO_HEIGHT:J.print?M4.PRINT:M4.NORMAL;this.view.updateLayoutClasses(Q,J)}},q$=class extends x{constructor(z,J){super();this.direction=J,this.eViewport=j,this.eContainer=j,this.hideTimeout=0,this.setTemplate(z)}postConstruct(){this.addManagedEventListeners({scrollVisibilityChanged:this.onScrollVisibilityChanged.bind(this)}),this.onScrollVisibilityChanged(),this.toggleCss("ag-apple-scrollbar",i9()||a4())}destroy(){super.destroy(),window.clearTimeout(this.hideTimeout)}initialiseInvisibleScrollbar(){if(this.invisibleScrollbar!==void 0)return;if(this.invisibleScrollbar=n9(),this.invisibleScrollbar)this.hideAndShowInvisibleScrollAsNeeded(),this.addActiveListenerToggles()}addActiveListenerToggles(){let z=this.getGui(),J=()=>this.toggleCss("ag-scrollbar-active",!0),Q=()=>this.toggleCss("ag-scrollbar-active",!1);this.addManagedListeners(z,{mouseenter:J,mousedown:J,touchstart:J,mouseleave:Q,touchend:Q})}onScrollVisibilityChanged(){if(this.invisibleScrollbar===void 0)this.initialiseInvisibleScrollbar();O4(this.beans,()=>this.setScrollVisible())}hideAndShowInvisibleScrollAsNeeded(){this.addManagedEventListeners({bodyScroll:(z)=>{if(z.direction===this.direction){if(this.hideTimeout)window.clearTimeout(this.hideTimeout),this.hideTimeout=0;this.toggleCss("ag-scrollbar-scrolling",!0)}},bodyScrollEnd:()=>{this.hideTimeout=window.setTimeout(()=>{this.toggleCss("ag-scrollbar-scrolling",!1),this.hideTimeout=0},400)}})}attemptSettingScrollPosition(z){let J=this.eViewport;MZ(this,()=>B0(J),()=>this.setScrollPosition(z),100)}onScrollCallback(z){this.addManagedElementListeners(this.eViewport,{scroll:z})}},_H={tag:"div",cls:"ag-body-horizontal-scroll",attrs:{"aria-hidden":"true"},children:[{tag:"div",ref:"eLeftSpacer",cls:"ag-horizontal-left-spacer"},{tag:"div",ref:"eViewport",cls:"ag-body-horizontal-scroll-viewport",children:[{tag:"div",ref:"eContainer",cls:"ag-body-horizontal-scroll-container"}]},{tag:"div",ref:"eRightSpacer",cls:"ag-horizontal-right-spacer"}]},HH=class extends q${constructor(){super(_H,"horizontal");this.eLeftSpacer=j,this.eRightSpacer=j,this.setScrollVisibleDebounce=0}wireBeans(z){this.visibleCols=z.visibleCols,this.scrollVisibleSvc=z.scrollVisibleSvc}postConstruct(){super.postConstruct();let z=this.setFakeHScrollSpacerWidths.bind(this);this.addManagedEventListeners({displayedColumnsChanged:z,displayedColumnsWidthChanged:z,pinnedRowDataChanged:this.refreshCompBottom.bind(this)}),this.addManagedPropertyListener("domLayout",z),this.beans.ctrlsSvc.register("fakeHScrollComp",this),this.createManagedBean(new rZ((J)=>this.eContainer.style.width=`${J}px`)),this.addManagedPropertyListeners(["suppressHorizontalScroll"],this.onScrollVisibilityChanged.bind(this))}destroy(){window.clearTimeout(this.setScrollVisibleDebounce),super.destroy()}initialiseInvisibleScrollbar(){if(this.invisibleScrollbar!==void 0)return;if(this.enableRtl=this.gos.get("enableRtl"),super.initialiseInvisibleScrollbar(),this.invisibleScrollbar)this.refreshCompBottom()}refreshCompBottom(){if(!this.invisibleScrollbar)return;let z=this.beans.pinnedRowModel?.getPinnedBottomTotalHeight()??0;this.getGui().style.bottom=`${z}px`}onScrollVisibilityChanged(){super.onScrollVisibilityChanged(),this.setFakeHScrollSpacerWidths()}setFakeHScrollSpacerWidths(){let z=this.scrollVisibleSvc.verticalScrollShowing,J=this.visibleCols.getDisplayedColumnsRightWidth(),Q=!this.enableRtl&&z,Z=this.scrollVisibleSvc.getScrollbarWidth();if(Q)J+=Z;N4(this.eRightSpacer,J),this.eRightSpacer.classList.toggle("ag-scroller-corner",J<=Z);let $=this.visibleCols.getColsLeftWidth();if(this.enableRtl&&z)$+=Z;N4(this.eLeftSpacer,$),this.eLeftSpacer.classList.toggle("ag-scroller-corner",$<=Z)}setScrollVisible(){let z=this.scrollVisibleSvc.horizontalScrollShowing,J=this.invisibleScrollbar,Q=this.gos.get("suppressHorizontalScroll"),Z=z?this.scrollVisibleSvc.getScrollbarWidth()||0:0,X=!Q?Z===0&&J?16:Z:0,Y=()=>{if(this.setScrollVisibleDebounce=0,this.toggleCss("ag-scrollbar-invisible",J),H2(this.getGui(),X),H2(this.eViewport,X),H2(this.eContainer,X),!X)this.eContainer.style.setProperty("min-height","1px");this.setVisible(z,{skipAriaHidden:!0})};if(window.clearTimeout(this.setScrollVisibleDebounce),!z)Y();else this.setScrollVisibleDebounce=window.setTimeout(Y,100)}getScrollPosition(){return T6(this.eViewport,this.enableRtl)}setScrollPosition(z){if(!B0(this.eViewport))this.attemptSettingScrollPosition(z);v6(this.eViewport,z,this.enableRtl)}},WH={selector:"AG-FAKE-HORIZONTAL-SCROLL",component:HH},G$=class extends S{constructor(z,J){super();this.eContainer=z,this.eViewport=J}postConstruct(){this.addManagedEventListeners({rowContainerHeightChanged:this.onHeightChanged.bind(this,this.beans.rowContainerHeight)})}onHeightChanged(z){let J=z.uiContainerHeight,Q=J!=null?`${J}px`:"";if(this.eContainer.style.height=Q,this.eViewport)this.eViewport.style.height=Q}},BH={tag:"div",cls:"ag-body-vertical-scroll",attrs:{"aria-hidden":"true"},children:[{tag:"div",ref:"eViewport",cls:"ag-body-vertical-scroll-viewport",children:[{tag:"div",ref:"eContainer",cls:"ag-body-vertical-scroll-container"}]}]},EH=class extends q${constructor(){super(BH,"vertical")}postConstruct(){super.postConstruct(),this.createManagedBean(new G$(this.eContainer));let{ctrlsSvc:z}=this.beans;z.register("fakeVScrollComp",this),this.addManagedEventListeners({rowContainerHeightChanged:this.onRowContainerHeightChanged.bind(this,z)})}setScrollVisible(){let{scrollVisibleSvc:z}=this.beans,J=z.verticalScrollShowing,Q=this.invisibleScrollbar,Z=J?z.getScrollbarWidth()||0:0,$=Z===0&&Q?16:Z;this.toggleCss("ag-scrollbar-invisible",Q),N4(this.getGui(),$),N4(this.eViewport,$),N4(this.eContainer,$),this.setDisplayed(J,{skipAriaHidden:!0})}onRowContainerHeightChanged(z){let Q=z.getGridBodyCtrl().eBodyViewport,Z=this.getScrollPosition(),$=Q.scrollTop;if(Z!=$)this.setScrollPosition($,!0)}getScrollPosition(){return this.eViewport.scrollTop}setScrollPosition(z,J){if(!J&&!B0(this.eViewport))this.attemptSettingScrollPosition(z);this.eViewport.scrollTop=z}},KH={selector:"AG-FAKE-VERTICAL-SCROLL",component:EH};var Gz="Viewport",P7="fakeVScrollComp",UQ=["fakeHScrollComp","centerHeader","topCenter","bottomCenter","stickyTopCenter","stickyBottomCenter"],T7=100,_Q=150,FH=class extends S{constructor(z){super();this.clearRetryListenerFncs=[],this.lastScrollSource=[null,null],this.scrollLeft=-1,this.nextScrollTop=-1,this.scrollTop=-1,this.lastOffsetHeight=-1,this.lastScrollTop=-1,this.lastIsHorizontalScrollShowing=!1,this.scrollTimer=0,this.isScrollActive=!1,this.isVerticalPositionInvalidated=!0,this.isHorizontalPositionInvalidated=!0,this.eBodyViewport=z,this.resetLastHScrollDebounced=i0(this,()=>this.lastScrollSource[1]=null,_Q),this.resetLastVScrollDebounced=i0(this,()=>this.lastScrollSource[0]=null,_Q)}wireBeans(z){this.ctrlsSvc=z.ctrlsSvc,this.animationFrameSvc=z.animationFrameSvc,this.visibleCols=z.visibleCols}destroy(){super.destroy(),this.clearRetryListenerFncs=[],window.clearTimeout(this.scrollTimer)}postConstruct(){this.enableRtl=this.gos.get("enableRtl");let z=this.invalidateVerticalScroll.bind(this),J=this.invalidateHorizontalScroll.bind(this);this.addManagedEventListeners({displayedColumnsWidthChanged:this.onDisplayedColumnsWidthChanged.bind(this),bodyHeightChanged:z,scrollGapChanged:J}),this.addManagedElementListeners(this.eBodyViewport,{scroll:z}),this.ctrlsSvc.whenReady(this,(Q)=>{this.centerRowsCtrl=Q.center,this.fakeVScrollComp=Q.fakeVScrollComp,this.fakeHScrollComp=Q.fakeHScrollComp,this.onDisplayedColumnsWidthChanged(),this.addScrollListener()})}invalidateHorizontalScroll(){this.isHorizontalPositionInvalidated=!0}invalidateVerticalScroll(){this.isVerticalPositionInvalidated=!0}addScrollListener(){this.addHorizontalScrollListeners(),this.addVerticalScrollListeners()}addHorizontalScrollListeners(){this.addManagedElementListeners(this.centerRowsCtrl.eViewport,{scroll:this.onHScroll.bind(this,Gz)});for(let z of UQ){let J=this.ctrlsSvc.get(z);this.registerScrollPartner(J,this.onHScroll.bind(this,z))}}addVerticalScrollListeners(){let z=this.gos.get("debounceVerticalScrollbar"),J=z?i0(this,this.onVScroll.bind(this,Gz),T7):this.onVScroll.bind(this,Gz),Q=z?i0(this,this.onVScroll.bind(this,P7),T7):this.onVScroll.bind(this,P7);this.addManagedElementListeners(this.eBodyViewport,{scroll:J}),this.registerScrollPartner(this.fakeVScrollComp,Q)}registerScrollPartner(z,J){z.onScrollCallback(J)}onDisplayedColumnsWidthChanged(){if(this.enableRtl)this.horizontallyScrollHeaderCenterAndFloatingCenter()}horizontallyScrollHeaderCenterAndFloatingCenter(z){if(this.centerRowsCtrl==null)return;if(z===void 0)z=this.centerRowsCtrl.getCenterViewportScrollLeft();this.setScrollLeftForAllContainersExceptCurrent(Math.abs(z))}setScrollLeftForAllContainersExceptCurrent(z){for(let J of[...UQ,Gz]){if(this.lastScrollSource[1]===J)continue;let Q=this.getViewportForSource(J);v6(Q,z,this.enableRtl)}}getViewportForSource(z){if(z===Gz)return this.centerRowsCtrl.eViewport;return this.ctrlsSvc.get(z).eViewport}isControllingScroll(z,J){if(this.lastScrollSource[J]==null){if(J===0)this.lastScrollSource[0]=z;else this.lastScrollSource[1]=z;return!0}return this.lastScrollSource[J]===z}onHScroll(z){if(!this.isControllingScroll(z,1))return;let J=this.centerRowsCtrl.eViewport,{scrollLeft:Q}=J;if(this.shouldBlockScrollUpdate(1,Q,!0))return;let Z=T6(this.getViewportForSource(z),this.enableRtl);this.doHorizontalScroll(Z),this.resetLastHScrollDebounced()}onVScroll(z){if(!this.isControllingScroll(z,0))return;let J=z===Gz?this.eBodyViewport.scrollTop:this.fakeVScrollComp.getScrollPosition(),Q=J;if(this.shouldBlockScrollUpdate(0,Q,!0))return;if(z===Gz)this.fakeVScrollComp.setScrollPosition(Q);else if(this.eBodyViewport.scrollTop=J,Q=this.eBodyViewport.scrollTop,this.invalidateVerticalScroll(),Q!==J)this.fakeVScrollComp.setScrollPosition(Q,!0);let{animationFrameSvc:Z}=this;if(Z?.setScrollTop(Q),this.nextScrollTop=Q,Z?.active)Z.schedule();else this.scrollGridIfNeeded(!0);this.resetLastVScrollDebounced()}doHorizontalScroll(z){let J=this.fakeHScrollComp.getScrollPosition();if(this.scrollLeft===z&&z===J)return;this.scrollLeft=z,this.fireScrollEvent(1),this.horizontallyScrollHeaderCenterAndFloatingCenter(z),this.centerRowsCtrl.onHorizontalViewportChanged(!0)}isScrolling(){return this.isScrollActive}fireScrollEvent(z){let J={type:"bodyScroll",direction:z===1?"horizontal":"vertical",left:this.scrollLeft,top:this.scrollTop};this.isScrollActive=!0,this.eventSvc.dispatchEvent(J),window.clearTimeout(this.scrollTimer),this.scrollTimer=window.setTimeout(()=>{this.scrollTimer=0,this.isScrollActive=!1,this.eventSvc.dispatchEvent({...J,type:"bodyScrollEnd"})},_Q)}shouldBlockScrollUpdate(z,J,Q=!1){if(Q&&!a4())return!1;if(z===0)return this.shouldBlockVerticalScroll(J);return this.shouldBlockHorizontalScroll(J)}shouldBlockVerticalScroll(z){let J=C2(this.eBodyViewport),{scrollHeight:Q}=this.eBodyViewport;return z<0||z+J>Q}shouldBlockHorizontalScroll(z){let J=this.centerRowsCtrl.getCenterWidth(),{scrollWidth:Q}=this.centerRowsCtrl.eViewport;if(this.enableRtl){if(z>0)return!0}else if(z<0)return!0;return Math.abs(z)+J>Q}redrawRowsAfterScroll(){this.fireScrollEvent(0)}checkScrollLeft(){let z=this.scrollLeft,J=!1;for(let Q of UQ)if(this.getViewportForSource(Q).scrollLeft!==z){J=!0;break}if(J)this.onHScroll(Gz)}scrollGridIfNeeded(z=!1){let J=this.scrollTop!=this.nextScrollTop;if(J){if(this.scrollTop=this.nextScrollTop,z)this.invalidateVerticalScroll();this.redrawRowsAfterScroll()}return J}setHorizontalScrollPosition(z,J=!1){let Z=this.centerRowsCtrl.eViewport.scrollWidth-this.centerRowsCtrl.getCenterWidth();if(!J&&this.shouldBlockScrollUpdate(1,z))if(this.enableRtl)z=z>0?0:Z;else z=Math.min(Math.max(z,0),Z);v6(this.centerRowsCtrl.eViewport,Math.abs(z),this.enableRtl),this.doHorizontalScroll(z)}setVerticalScrollPosition(z){this.invalidateVerticalScroll(),this.eBodyViewport.scrollTop=z}getVScrollPosition(){if(!this.isVerticalPositionInvalidated){let{lastOffsetHeight:Q,lastScrollTop:Z}=this;return{top:Z,bottom:Z+Q}}this.isVerticalPositionInvalidated=!1;let{scrollTop:z,offsetHeight:J}=this.eBodyViewport;return this.lastScrollTop=z,this.lastOffsetHeight=J,{top:z,bottom:z+J}}getApproximateVScollPosition(){if(this.lastScrollTop>=0&&this.lastOffsetHeight>=0)return{top:this.scrollTop,bottom:this.scrollTop+this.lastOffsetHeight};return this.getVScrollPosition()}getHScrollPosition(){return this.centerRowsCtrl.getHScrollPosition()}isHorizontalScrollShowing(){if(this.isHorizontalPositionInvalidated)this.lastIsHorizontalScrollShowing=this.centerRowsCtrl.isHorizontalScrollShowing(),this.isHorizontalPositionInvalidated=!1;return this.lastIsHorizontalScrollShowing}scrollHorizontally(z){let J=this.centerRowsCtrl.eViewport.scrollLeft;return this.setHorizontalScrollPosition(J+z),this.centerRowsCtrl.eViewport.scrollLeft-J}scrollToTop(){this.setVerticalScrollPosition(0)}ensureNodeVisible(z,J=null){let{rowModel:Q}=this.beans,Z=Q.getRowCount(),$=-1;for(let X=0;X=0)this.ensureIndexVisible($,J)}ensureIndexVisible(z,J,Q=0){if(A0(this.gos,"print"))return;let{rowModel:Z}=this.beans,$=Z.getRowCount();if(typeof z!=="number"||z<0||z>=$){V(88,{index:z});return}this.clearRetryListeners();let{frameworkOverrides:X,pageBounds:Y,rowContainerHeight:q,rowRenderer:G}=this.beans;X.wrapIncoming(()=>{let U=this.ctrlsSvc.getGridBodyCtrl(),_=Z.getRow(z),H,W,B=0;this.invalidateVerticalScroll();do{let{stickyTopHeight:E,stickyBottomHeight:K}=U,F=_.rowTop,L=_.rowHeight,D=Y.getPixelOffset(),M=_.rowTop-D,f=M+_.rowHeight,A=this.getVScrollPosition(),R=q.divStretchOffset,O=A.top+R,v=A.bottom+R,I=v-O,b=q.getScrollPositionForPixel(M),m=q.getScrollPositionForPixel(f-I),g=Math.min((b+m)/2,M),e=O+E>M,t=v-KI)u=b-E;else u=m+K;if(u!==null)this.setVerticalScrollPosition(u),G.redraw({afterScroll:!0});H=F!==_.rowTop||L!==_.rowHeight,W=E!==U.stickyTopHeight||K!==U.stickyBottomHeight,B++}while((H||W)&&B<10);if(this.animationFrameSvc?.flushAllFrames(),Q<10&&(_?.stub||!this.beans.rowAutoHeight?.areRowsMeasured())){let E=this.getVScrollPosition().top;this.clearRetryListenerFncs=this.addManagedEventListeners({bodyScroll:()=>{let K=this.getVScrollPosition().top;if(E===K)return;this.clearRetryListeners()},modelUpdated:()=>{if(this.clearRetryListeners(),z>=Z.getRowCount())return;this.ensureIndexVisible(z,J,Q+1)}})}})}clearRetryListeners(){for(let z of this.clearRetryListenerFncs)z();this.clearRetryListenerFncs=[]}ensureColumnVisible(z,J="auto"){let{colModel:Q,frameworkOverrides:Z}=this.beans,$=Q.getCol(z);if(!$)return;if($.isPinned())return;if(!this.visibleCols.isColDisplayed($))return;let X=this.getPositionedHorizontalScroll($,J);Z.wrapIncoming(()=>{if(X!==null)this.centerRowsCtrl.setCenterViewportScrollLeft(X);this.centerRowsCtrl.onHorizontalViewportChanged(),this.animationFrameSvc?.flushAllFrames()})}getPositionedHorizontalScroll(z,J){let{columnBeforeStart:Q,columnAfterEnd:Z}=this.isColumnOutsideViewport(z),$=this.centerRowsCtrl.getCenterWidth()$:Q<$,q=X?QZ;return{columnBeforeStart:Y,columnAfterEnd:q}}getColumnBounds(z){let J=this.enableRtl,Q=this.visibleCols.bodyWidth,Z=z.getActualWidth(),$=z.getLeft(),X=J?-1:1,Y=J?Q-$:$,q=Y+Z*X,G=Y+Z/2*X;return{colLeft:Y,colMiddle:G,colRight:q}}getViewportBounds(){let z=this.centerRowsCtrl.getCenterWidth(),J=this.centerRowsCtrl.getCenterViewportScrollLeft(),Q=J,Z=z+J;return{start:Q,end:Z,width:z}}},v7={horizontal:{overflow:(z)=>z.scrollWidth-z.clientWidth,scrollSize:(z)=>z.scrollWidth,clientSize:(z)=>z.clientWidth,opposite:"vertical"},vertical:{overflow:(z)=>z.scrollHeight-z.clientHeight,scrollSize:(z)=>z.scrollHeight,clientSize:(z)=>z.clientHeight,opposite:"horizontal"}};function LH(z,J,Q=wZ()||0,Z,$){return U$(z,J,"horizontal",Q,Z,$)}function DH(z,J,Q=wZ()||0,Z,$){return U$(z,J,"vertical",Q,Z,$)}function U$(z,J,Q,Z,$,X){let Y=v7[Q],q=v7[Y.opposite],G=$?B0($):!0,U=X?B0(X):!0,_=Y.overflow(z);if(_<=0)return!1;if(!J||Z===0)return!0;let H=q.overflow(J);if(H<=0)return!0;if(_<=Z){if(G&&U&&MH({candidateOverflow:H,candidateScrollSize:q.scrollSize(J),candidateClientSize:q.clientSize(J),scrollbarWidth:Z}))return!1;let W=Y.clientSize(z)+Z;return Y.scrollSize(z)<=W}return!0}function MH({candidateOverflow:z,candidateScrollSize:J,candidateClientSize:Q,scrollbarWidth:Z}){if(z<=0||z>Z)return!1;let $=Q+Z;return J>Q&&J<=$}var kH=class extends S{constructor(z){super();this.centerContainerCtrl=z}wireBeans(z){this.scrollVisibleSvc=z.scrollVisibleSvc}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>{this.gridBodyCtrl=z.gridBodyCtrl,this.listenForResize()}),this.addManagedEventListeners({scrollbarWidthChanged:this.onScrollbarWidthChanged.bind(this)}),this.addManagedPropertyListeners(["alwaysShowHorizontalScroll","alwaysShowVerticalScroll"],()=>{this.checkViewportAndScrolls()})}listenForResize(){let{beans:z,centerContainerCtrl:J,gridBodyCtrl:Q}=this,Z=()=>{O4(z,()=>{this.onCenterViewportResized()})};J.registerViewportResizeListener(Z),Q.registerBodyViewportResizeListener(Z)}onScrollbarWidthChanged(){this.checkViewportAndScrolls()}onCenterViewportResized(){if(this.scrollVisibleSvc.updateScrollGap(),this.centerContainerCtrl.isViewportInTheDOMTree()){let{pinnedCols:z,colFlex:J}=this.beans;z?.keepPinnedColumnsNarrowerThanViewport(),this.checkViewportAndScrolls();let Q=this.centerContainerCtrl.getCenterWidth();if(Q!==this.centerWidth)this.centerWidth=Q,J?.refreshFlexedColumns({viewportWidth:this.centerWidth,updateBodyWidths:!0,fireResizedEvent:!0})}else this.bodyHeight=0}checkViewportAndScrolls(){this.updateScrollVisibleService(),this.checkBodyHeight(),this.onHorizontalViewportChanged(),this.gridBodyCtrl.scrollFeature.checkScrollLeft()}getBodyHeight(){return this.bodyHeight}checkBodyHeight(){let z=this.gridBodyCtrl.eBodyViewport,J=C2(z);if(this.bodyHeight!==J)this.bodyHeight=J,this.eventSvc.dispatchEvent({type:"bodyHeightChanged"})}updateScrollVisibleService(){this.updateScrollVisibleServiceImpl(),setTimeout(this.updateScrollVisibleServiceImpl.bind(this),500)}updateScrollVisibleServiceImpl(){if(!this.isAlive())return;let z={horizontalScrollShowing:this.centerContainerCtrl.isHorizontalScrollShowing(),verticalScrollShowing:this.gridBodyCtrl.isVerticalScrollShowing()};this.scrollVisibleSvc.setScrollsVisible(z)}onHorizontalViewportChanged(){let{centerContainerCtrl:z,beans:J}=this,Q=z.getCenterWidth(),Z=z.getViewportScrollLeft();J.colViewport.setScrollPosition(Q,Z)}};function _$(z){if(z.altKey||z.ctrlKey||z.metaKey)return!1;return z.key?.length===1}function S6(z,J,Q,Z){let $=J.getColDef().cellRendererParams?.suppressMouseEventHandling;return H$(z,J,Q,Z,$)}function fH(z,J,Q,Z){let $=J?.suppressMouseEventHandling;return H$(z,void 0,Q,Z,$)}function H$(z,J,Q,Z,$){if(!$)return!1;return $(C(z,{column:J,node:Q,event:Z}))}function W$(z,J,Q){let Z=J;while(Z){let $=K9(z,Z,Q);if($)return $;Z=Z.parentElement}return null}var h6="cellCtrl";function c2(z,J){return W$(z,J,h6)}var u6="renderedRow";function aZ(z,J){return W$(z,J,u6)}function pQ(z,J,Q,Z,$){let X=Z?Z.colDef.suppressKeyboardEvent:void 0;if(!X)return!1;let Y=C(z,{event:J,editing:$,column:Z,node:Q,data:Q.data,colDef:Z.colDef});if(X){if(X(Y))return!0}return!1}function SH(z){let{pinnedRowModel:J,rowModel:Q,rangeSvc:Z,visibleCols:$}=z;if(!Z||$.allCols.length===0)return;let X=J?.isEmpty("top")??!0,Y=J?.isEmpty("bottom")??!0,q=X?null:"top",G,U;if(Y)G=null,U=Q.getRowCount()-1;else G="bottom",U=J?.getPinnedBottomRowCount()??-1;Z.setCellRange({rowStartIndex:0,rowStartPinned:q,rowEndIndex:U,rowEndPinned:G})}var VH=class extends S{constructor(z){super();this.element=z}postConstruct(){this.addKeyboardListeners(),this.addMouseListeners(),this.beans.touchSvc?.mockRowContextMenu(this),this.editSvc=this.beans.editSvc}addKeyboardListeners(){let J=this.processKeyboardEvent.bind(this,"keydown");this.addManagedElementListeners(this.element,{["keydown"]:J})}addMouseListeners(){let z="mousedown";if(vQ("pointerdown"))z="pointerdown";else if(vQ("touchstart"))z="touchstart";let J=["dblclick","contextmenu","mouseover","mouseout","click",z];for(let Q of J){let Z=this.processMouseEvent.bind(this,Q);this.addManagedElementListeners(this.element,{[Q]:Z})}}processMouseEvent(z,J){if(!D2(this.beans,J)||q4(J))return;let{cellCtrl:Q,rowCtrl:Z}=this.getControlsForEventTarget(J.target);if(z==="contextmenu"){if(Q?.column)Q.dispatchCellContextMenuEvent(J);this.beans.contextMenuSvc?.handleContextMenuMouseEvent(J,void 0,Z,Q)}else{if(Q)Q.onMouseEvent(z,J);if(Z)Z.onMouseEvent(z,J)}}getControlsForEventTarget(z){let{gos:J}=this;return{cellCtrl:c2(J,z),rowCtrl:aZ(J,z)}}processKeyboardEvent(z,J){let{cellCtrl:Q,rowCtrl:Z}=this.getControlsForEventTarget(J.target);if(J.defaultPrevented)return;if(Q)this.processCellKeyboardEvent(Q,z,J);else if(Z?.isFullWidth())this.processFullWidthRowKeyboardEvent(Z,z,J)}processCellKeyboardEvent(z,J,Q){let Z=this.editSvc?.isEditing(z,{withOpenEditor:!0})??!1;if(!pQ(this.gos,Q,z.rowNode,z.column,Z)){if(J==="keydown"){if(!(!Z&&this.beans.navigation?.handlePageScrollingKey(Q)))z.onKeyDown(Q);if(this.doGridOperations(Q,Z),_$(Q))z.processCharacter(Q)}}if(J==="keydown")this.eventSvc.dispatchEvent(z.createEvent(Q,"cellKeyDown"))}processFullWidthRowKeyboardEvent(z,J,Q){let{rowNode:Z}=z,{focusSvc:$,navigation:X,notesSvc:Y}=this.beans,G=$.getFocusedCell()?.column;if(!pQ(this.gos,Q,Z,G,!1)&&J==="keydown")this.processFullWidthRowKeyDown(z,Q,G,X,Y);if(J==="keydown")this.eventSvc.dispatchEvent(z.createRowEvent("cellKeyDown",Q))}processFullWidthRowKeyDown(z,J,Q,Z=this.beans.navigation,$=this.beans.notesSvc){switch(J.key){case k.PAGE_HOME:case k.PAGE_END:case k.PAGE_UP:case k.PAGE_DOWN:Z?.handlePageScrollingKey(J,!0);return;case k.LEFT:case k.RIGHT:if(!this.gos.get("embedFullWidthRows"))return;case k.UP:case k.DOWN:z.onKeyboardNavigate(J);return;case k.F2:this.processFullWidthRowNoteShortcut(z,J,Q,$);return;case k.TAB:z.onTabKeyDown(J);return;default:}}processFullWidthRowNoteShortcut(z,J,Q,Z=this.beans.notesSvc){if(!J.shiftKey||!Z?.hasDataSource())return;let $=z.rowNode,X=z.findFullWidthInfoForEvent(J),Y;if(X){let{pinned:G}=X;Y={rowNode:$,location:"fullWidthRow",pinned:G==="left"||G==="right"?G:void 0}}else if(Q)Y={rowNode:$,column:Q};if(!Y)return;let q=Z.getNoteAccess(Y);if(!q)return;if(!q.isSuppressed||q.canView)Z.showNote(q.params,!0),J.preventDefault()}doGridOperations(z,J){if(!z.ctrlKey&&!z.metaKey)return;if(J)return;if(!D2(this.beans,z))return;let Q=b9(z),{clipboardSvc:Z,undoRedo:$}=this.beans;if(Q===k.A)return this.onCtrlAndA(z);if(Q===k.C)return this.onCtrlAndC(Z,z);if(Q===k.D)return this.onCtrlAndD(Z,z);if(Q===k.V)return this.onCtrlAndV(Z,z);if(Q===k.X)return this.onCtrlAndX(Z,z);if(Q===k.Y)return this.onCtrlAndY($);if(Q===k.Z)return this.onCtrlAndZ($,z)}onCtrlAndA(z){let{beans:{rowModel:J,rangeSvc:Q,selectionSvc:Z},gos:$}=this;if(Q&&n0($)&&!EU($)&&J.isRowsToRender())SH(this.beans);else if(Z)Z.selectAllRowNodes({source:"keyboardSelectAll",selectAll:k9($)});z.preventDefault()}onCtrlAndC(z,J){if(!z||this.gos.get("enableCellTextSelection"))return;let{cellCtrl:Q}=this.getControlsForEventTarget(J.target);if(this.editSvc?.isEditing(Q,{withOpenEditor:!0}))return;J.preventDefault(),z.copyToClipboard()}onCtrlAndX(z,J){if(!z||this.gos.get("enableCellTextSelection")||this.gos.get("suppressCutToClipboard"))return;let{cellCtrl:Q}=this.getControlsForEventTarget(J.target);if(this.editSvc?.isEditing(Q,{withOpenEditor:!0}))return;J.preventDefault(),z.cutToClipboard(void 0,"ui")}onCtrlAndV(z,J){let{cellCtrl:Q}=this.getControlsForEventTarget(J.target);if(this.editSvc?.isEditing(Q,{withOpenEditor:!0}))return;if(z&&!this.gos.get("suppressClipboardPaste"))z.pasteFromClipboard()}onCtrlAndD(z,J){if(z&&!this.gos.get("suppressClipboardPaste"))z.copyRangeDown();J.preventDefault()}onCtrlAndZ(z,J){if(!this.gos.get("undoRedoCellEditing")||!z)return;if(J.preventDefault(),J.shiftKey)z.redo("ui");else z.undo("ui")}onCtrlAndY(z){z?.redo("ui")}},G6=(z)=>z.topRowCtrls,U6=(z)=>z.getStickyTopRowCtrls(),_6=(z)=>z.getStickyBottomRowCtrls(),H6=(z)=>z.bottomRowCtrls,W6=(z)=>z.allRowCtrls,HQ=(z)=>z.getCtrls("top"),WQ=(z)=>z.getCtrls("center"),BQ=(z)=>z.getCtrls("bottom"),RH={center:{type:"center",name:"center-cols",getRowCtrls:W6,getSpannedRowCtrls:WQ},left:{type:"left",name:"pinned-left-cols",pinnedType:"left",getRowCtrls:W6,getSpannedRowCtrls:WQ},right:{type:"right",name:"pinned-right-cols",pinnedType:"right",getRowCtrls:W6,getSpannedRowCtrls:WQ},fullWidth:{type:"fullWidth",name:"full-width",fullWidth:!0,getRowCtrls:W6},topCenter:{type:"center",name:"floating-top",getRowCtrls:G6,getSpannedRowCtrls:HQ},topLeft:{type:"left",name:"pinned-left-floating",container:"ag-pinned-left-floating-top",pinnedType:"left",getRowCtrls:G6,getSpannedRowCtrls:HQ},topRight:{type:"right",name:"pinned-right-floating",container:"ag-pinned-right-floating-top",pinnedType:"right",getRowCtrls:G6,getSpannedRowCtrls:HQ},topFullWidth:{type:"fullWidth",name:"floating-top-full-width",fullWidth:!0,getRowCtrls:G6},stickyTopCenter:{type:"center",name:"sticky-top",getRowCtrls:U6},stickyTopLeft:{type:"left",name:"pinned-left-sticky-top",container:"ag-pinned-left-sticky-top",pinnedType:"left",getRowCtrls:U6},stickyTopRight:{type:"right",name:"pinned-right-sticky-top",container:"ag-pinned-right-sticky-top",pinnedType:"right",getRowCtrls:U6},stickyTopFullWidth:{type:"fullWidth",name:"sticky-top-full-width",fullWidth:!0,getRowCtrls:U6},stickyBottomCenter:{type:"center",name:"sticky-bottom",getRowCtrls:_6},stickyBottomLeft:{type:"left",name:"pinned-left-sticky-bottom",container:"ag-pinned-left-sticky-bottom",pinnedType:"left",getRowCtrls:_6},stickyBottomRight:{type:"right",name:"pinned-right-sticky-bottom",container:"ag-pinned-right-sticky-bottom",pinnedType:"right",getRowCtrls:_6},stickyBottomFullWidth:{type:"fullWidth",name:"sticky-bottom-full-width",fullWidth:!0,getRowCtrls:_6},bottomCenter:{type:"center",name:"floating-bottom",getRowCtrls:H6,getSpannedRowCtrls:BQ},bottomLeft:{type:"left",name:"pinned-left-floating-bottom",container:"ag-pinned-left-floating-bottom",pinnedType:"left",getRowCtrls:H6,getSpannedRowCtrls:BQ},bottomRight:{type:"right",name:"pinned-right-floating-bottom",container:"ag-pinned-right-floating-bottom",pinnedType:"right",getRowCtrls:H6,getSpannedRowCtrls:BQ},bottomFullWidth:{type:"fullWidth",name:"floating-bottom-full-width",fullWidth:!0,getRowCtrls:H6}};function B$(z){return`ag-${i2(z).name}-viewport`}function E$(z){let J=i2(z);return J.container??`ag-${J.name}-container`}function AH(z){return`ag-${i2(z).name}-spanned-cells-container`}function i2(z){return RH[z]}var jH=["topCenter","topLeft","topRight"],OH=["bottomCenter","bottomLeft","bottomRight"],PH=["center","left","right"],TH=["center","left","right","fullWidth"],vH=["stickyTopCenter","stickyBottomCenter","center","topCenter","bottomCenter"],IH=["left","bottomLeft","topLeft","stickyTopLeft","stickyBottomLeft"],CH=["right","bottomRight","topRight","stickyTopRight","stickyBottomRight"],K$=["stickyTopCenter","stickyTopLeft","stickyTopRight"],F$=["stickyBottomCenter","stickyBottomLeft","stickyBottomRight"],yH=[...K$,"stickyTopFullWidth",...F$,"stickyBottomFullWidth"],bH=[...jH,...OH,...PH,...K$,...F$],xH=class extends S{constructor(z){super();this.name=z,this.visible=!0,this.EMPTY_CTRLS=[],this.options=i2(z)}postConstruct(){this.enableRtl=this.gos.get("enableRtl"),this.forContainers(["center"],()=>{this.viewportSizeFeature=this.createManagedBean(new kH(this)),this.addManagedEventListeners({stickyTopOffsetChanged:this.onStickyTopOffsetChanged.bind(this)})})}onStickyTopOffsetChanged(z){this.comp.setOffsetTop(`${z.offset}px`)}registerWithCtrlsService(){if(this.options.fullWidth)return;this.beans.ctrlsSvc.register(this.name,this)}forContainers(z,J){if(z.indexOf(this.name)>=0)J()}setComp(z,J,Q,Z){this.comp=z,this.eContainer=J,this.eSpannedContainer=Q,this.eViewport=Z,this.createManagedBean(new VH(this.eViewport??this.eContainer)),this.addPreventScrollWhileDragging(),this.listenOnDomOrder();let{pinnedCols:$,rangeSvc:X}=this.beans,Y=()=>this.onPinnedWidthChanged();if(this.forContainers(IH,()=>{this.pinnedWidthFeature=this.createOptionalManagedBean($?.createPinnedWidthFeature(!0,this.eContainer,this.eSpannedContainer)),this.addManagedEventListeners({leftPinnedWidthChanged:Y})}),this.forContainers(CH,()=>{this.pinnedWidthFeature=this.createOptionalManagedBean($?.createPinnedWidthFeature(!1,this.eContainer,this.eSpannedContainer)),this.addManagedEventListeners({rightPinnedWidthChanged:Y})}),this.forContainers(TH,()=>this.createManagedBean(new G$(this.eContainer,this.name==="center"?Z:void 0))),X)this.forContainers(bH,()=>this.createManagedBean(X.createDragListenerFeature(this.eContainer)));this.forContainers(vH,()=>this.createManagedBean(new rZ((q)=>this.comp.setContainerWidth(`${q}px`)))),this.visible=this.isContainerVisible(),this.addListeners(),this.registerWithCtrlsService()}onScrollCallback(z){this.addManagedElementListeners(this.eViewport,{scroll:z})}addListeners(){let{spannedRowRenderer:z,gos:J}=this.beans,Q=this.onDisplayedColumnsChanged.bind(this);if(this.addManagedEventListeners({displayedColumnsChanged:Q,displayedColumnsWidthChanged:Q,displayedRowsChanged:(Z)=>this.onDisplayedRowsChanged(Z.afterScroll)}),Q(),this.onDisplayedRowsChanged(),z&&this.options.getSpannedRowCtrls&&J.get("enableCellSpan"))this.addManagedListeners(z,{spannedRowsUpdated:()=>{let Z=this.options.getSpannedRowCtrls(z);if(!Z)return;this.comp.setSpannedRowCtrls(Z,!1)}})}listenOnDomOrder(){if(yH.indexOf(this.name)>=0){this.comp.setDomOrder(!0);return}let J=()=>{let Q=this.gos.get("ensureDomOrder"),Z=A0(this.gos,"print");this.comp.setDomOrder(Q||Z)};this.addManagedPropertyListener("domLayout",J),J()}onDisplayedColumnsChanged(){this.forContainers(["center"],()=>this.onHorizontalViewportChanged())}addPreventScrollWhileDragging(){let{dragSvc:z}=this.beans;if(!z)return;let J=(Q)=>{if(z.dragging){if(Q.cancelable)Q.preventDefault()}};this.eContainer.addEventListener("touchmove",J,{passive:!1}),this.addDestroyFunc(()=>this.eContainer.removeEventListener("touchmove",J))}onHorizontalViewportChanged(z=!1){let J=this.getCenterWidth(),Q=this.getCenterViewportScrollLeft();this.beans.colViewport.setScrollPosition(J,Q,z)}hasHorizontalScrollGap(){return this.eContainer.clientWidth-this.eViewport.clientWidth<0}hasVerticalScrollGap(){return this.eContainer.clientHeight-this.eViewport.clientHeight<0}getCenterWidth(){return lz(this.eViewport)}getCenterViewportScrollLeft(){return T6(this.eViewport,this.enableRtl)}registerViewportResizeListener(z){let J=j4(this.beans,this.eViewport,z);this.addDestroyFunc(()=>J())}isViewportInTheDOMTree(){return r8(this.eViewport)}getViewportScrollLeft(){return T6(this.eViewport,this.enableRtl)}isHorizontalScrollShowing(){let{beans:z,gos:J,eViewport:Q}=this,Z=J.get("alwaysShowHorizontalScroll"),{ctrlsSvc:$}=z,X=$.getGridBodyCtrl()?.eBodyViewport,Y=$.get("fakeHScrollComp")?.getGui(),q=$.get("fakeVScrollComp")?.getGui();return Z||LH(Q,X,void 0,Y,q)}setHorizontalScroll(z){this.comp.setHorizontalScroll(z)}getHScrollPosition(){return{left:this.eViewport.scrollLeft,right:this.eViewport.scrollLeft+this.eViewport.offsetWidth}}setCenterViewportScrollLeft(z){v6(this.eViewport,z,this.enableRtl)}isContainerVisible(){return this.options.pinnedType==null||!!this.pinnedWidthFeature&&this.pinnedWidthFeature.getWidth()>0}onPinnedWidthChanged(){let z=this.isContainerVisible();if(this.visible!=z)this.visible=z,this.onDisplayedRowsChanged()}onDisplayedRowsChanged(z=!1){let J=this.options.getRowCtrls(this.beans.rowRenderer);if(!this.visible||J.length===0){this.comp.setRowCtrls({rowCtrls:this.EMPTY_CTRLS});return}let Q=A0(this.gos,"print"),$=this.gos.get("embedFullWidthRows")||Q,X=J.filter((Y)=>{let q=Y.isFullWidth();return this.options.fullWidth?!$&&q:$||!q});this.comp.setRowCtrls({rowCtrls:X,useFlushSync:z})}},L$="ag-force-vertical-scroll",wH="ag-selectable",NH="ag-column-moving",gH=class extends S{constructor(){super(...arguments);this.stickyTopHeight=0,this.stickyBottomHeight=0}wireBeans(z){this.ctrlsSvc=z.ctrlsSvc,this.colModel=z.colModel,this.scrollVisibleSvc=z.scrollVisibleSvc,this.pinnedRowModel=z.pinnedRowModel,this.filterManager=z.filterManager,this.rowGroupColsSvc=z.rowGroupColsSvc}setComp(z,J,Q,Z,$,X,Y){this.comp=z,this.eGridBody=J,this.eBodyViewport=Q,this.eTop=Z,this.eBottom=$,this.eStickyTop=X,this.eStickyBottom=Y,this.eCenterColsViewport=Q.querySelector(`.${B$("center")}`),this.eFullWidthContainer=Q.querySelector(`.${E$("fullWidth")}`),this.setCellTextSelection(this.gos.get("enableCellTextSelection")),this.addManagedPropertyListener("enableCellTextSelection",(q)=>this.setCellTextSelection(q.currentValue)),this.createManagedBean(new lZ(this.comp)),this.scrollFeature=this.createManagedBean(new FH(Q)),this.beans.rowDragSvc?.setupRowDrag(Q,this),this.setupRowAnimationCssClass(),this.addEventListeners(),this.addFocusListeners([Z,Q,$,X,Y]),this.setGridRootRole(),this.onGridColumnsChanged(),this.addBodyViewportListener(),this.setFloatingHeights(),this.disableBrowserDragging(),this.addStopEditingWhenGridLosesFocus(),this.updateScrollingClasses(),this.filterManager?.setupAdvFilterHeaderComp(Z),this.ctrlsSvc.register("gridBodyCtrl",this)}addEventListeners(){let z=this.setFloatingHeights.bind(this),J=this.setGridRootRole.bind(this),Q=this.toggleRowResizeStyles.bind(this);this.addManagedEventListeners({gridColumnsChanged:this.onGridColumnsChanged.bind(this),scrollVisibilityChanged:this.onScrollVisibilityChanged.bind(this),scrollGapChanged:this.updateScrollingClasses.bind(this),pinnedRowDataChanged:z,pinnedHeightChanged:z,pinnedRowsChanged:z,headerHeightChanged:this.setStickyTopOffsetTop.bind(this),columnRowGroupChanged:J,columnPivotChanged:J,rowResizeStarted:Q,rowResizeEnded:Q}),this.addManagedPropertyListener("treeData",J)}toggleRowResizeStyles(z){let J=z.type==="rowResizeStarted";this.eBodyViewport.classList.toggle("ag-prevent-animation",J)}onGridColumnsChanged(){let z=this.beans.colModel.getCols();this.comp.setColumnCount(z.length)}onScrollVisibilityChanged(){let{scrollVisibleSvc:z}=this,J=z.verticalScrollShowing;this.setVerticalScrollPaddingVisible(J),this.setStickyWidth(J),this.setStickyBottomOffsetBottom();let Q=J?z.getScrollbarWidth()||0:0,Z=n9()?16:0,$=`calc(100% + ${Q+Z}px)`;O4(this.beans,()=>this.comp.setBodyViewportWidth($)),this.updateScrollingClasses()}setGridRootRole(){let{rowGroupColsSvc:z,colModel:J,gos:Q}=this,Z=Q.get("treeData");if(!Z){let $=J.pivotMode;Z=(!z?0:z.columns.length)>=($?2:1)}this.comp.setGridRootRole(Z?"treegrid":"grid")}addFocusListeners(z){for(let J of z)this.addManagedElementListeners(J,{focusin:(Q)=>{let{target:Z}=Q,$=nz(Z,"ag-root",J);J.classList.toggle("ag-has-focus",!$)},focusout:(Q)=>{let{target:Z,relatedTarget:$}=Q,X=J.contains($),Y=nz($,"ag-root",J);if(nz(Z,"ag-root",J))return;if(!X||Y)J.classList.remove("ag-has-focus")}})}setColumnMovingCss(z){this.comp.setColumnMovingCss(NH,z)}setCellTextSelection(z=!1){this.comp.setCellSelectableCss(wH,z)}updateScrollingClasses(){let{eGridBody:{classList:z},scrollVisibleSvc:J}=this;z.toggle("ag-body-vertical-content-no-gap",!J.verticalScrollGap),z.toggle("ag-body-horizontal-content-no-gap",!J.horizontalScrollGap)}disableBrowserDragging(){this.addManagedElementListeners(this.eGridBody,{dragstart:(z)=>{if(z.target instanceof HTMLImageElement)return z.preventDefault(),!1}})}addStopEditingWhenGridLosesFocus(){this.beans.editSvc?.addStopEditingWhenGridLosesFocus([this.eBodyViewport,this.eBottom,this.eTop,this.eStickyTop,this.eStickyBottom])}updateRowCount(){let z=(this.ctrlsSvc.getHeaderRowContainerCtrl()?.getRowCount()??0)+(this.filterManager?.getHeaderRowCount()??0),{rowModel:J}=this.beans,Q=J.isLastRowIndexKnown()?J.getRowCount():-1,Z=Q===-1?-1:z+Q;this.comp.setRowCount(Z)}registerBodyViewportResizeListener(z){this.comp.registerBodyViewportResizeListener(z)}setVerticalScrollPaddingVisible(z){let J=z?"scroll":"hidden";this.comp.setPinnedTopBottomOverflowY(J)}isVerticalScrollShowing(){let{gos:z,comp:J,ctrlsSvc:Q}=this,Z=z.get("alwaysShowVerticalScroll"),$=Z?L$:null,X=A0(z,"normal");J.setAlwaysVerticalScrollClass($,Z);let Y=Q.get("center")?.eViewport,q=Q.get("fakeHScrollComp")?.getGui(),G=Q.get("fakeVScrollComp")?.getGui();return Z||X&&DH(this.eBodyViewport,Y,void 0,G,q)}setupRowAnimationCssClass(){let{rowContainerHeight:z,environment:J}=this.beans,Q=J.sizesMeasured,Z=()=>{let $=Q&&T1(this.gos)&&!z.stretching,X=$?"ag-row-animation":"ag-row-no-animation";this.comp.setRowAnimationCssOnBodyViewport(X,$)};Z(),this.addManagedEventListeners({heightScaleChanged:Z}),this.addManagedPropertyListener("animateRows",Z),this.addManagedEventListeners({stylesChanged:()=>{if(!Q&&J.sizesMeasured)Q=!0,Z()}})}addBodyViewportListener(){let{eBodyViewport:z,eStickyTop:J,eStickyBottom:Q,eTop:Z,eBottom:$,beans:{popupSvc:X,touchSvc:Y}}=this,q=this.onBodyViewportContextMenu.bind(this);this.addManagedElementListeners(z,{contextmenu:q}),Y?.mockBodyContextMenu(this,q),this.addManagedElementListeners(z,{wheel:this.onBodyViewportWheel.bind(this,X)});let G=this.onStickyWheel.bind(this);for(let _ of[J,Q,Z,$])this.addManagedElementListeners(_,{wheel:G});let U=this.onHorizontalWheel.bind(this);for(let _ of["left","right","topLeft","topRight","bottomLeft","bottomRight"])this.addManagedElementListeners(this.ctrlsSvc.get(_).eContainer,{wheel:U});this.addFullWidthContainerWheelListener()}addFullWidthContainerWheelListener(){this.addManagedElementListeners(this.eFullWidthContainer,{wheel:(z)=>this.onFullWidthContainerWheel(z)})}onFullWidthContainerWheel(z){let{deltaX:J,deltaY:Q,shiftKey:Z}=z;if((Z||Math.abs(J)>Math.abs(Q))&&D2(this.beans,z))this.scrollGridBodyToMatchEvent(z)}onStickyWheel(z){let{deltaY:J}=z;if(this.scrollVertically(J)>0)z.preventDefault()}onHorizontalWheel(z){let{deltaX:J,deltaY:Q,shiftKey:Z}=z;if(!(Z||Math.abs(J)>Math.abs(Q)))return;this.scrollGridBodyToMatchEvent(z)}scrollGridBodyToMatchEvent(z){let{deltaX:J,deltaY:Q}=z;z.preventDefault(),this.eCenterColsViewport.scrollBy({left:J||Q})}onBodyViewportContextMenu(z,J,Q){if(!z&&!Q)return;if(this.gos.get("preventDefaultOnContextMenu"))(z||Q).preventDefault();let{target:Z}=z||J;if(Z===this.eBodyViewport||Z===this.ctrlsSvc.get("center").eViewport)this.beans.contextMenuSvc?.showContextMenu({mouseEvent:z,touchEvent:Q,value:null,anchorToElement:this.eGridBody,source:"ui"})}onBodyViewportWheel(z,J){if(!this.gos.get("suppressScrollWhenPopupsAreOpen"))return;if(z?.hasAnchoredPopup())J.preventDefault()}scrollVertically(z){let J=this.eBodyViewport.scrollTop;return this.scrollFeature.setVerticalScrollPosition(J+z),this.eBodyViewport.scrollTop-J}setFloatingHeights(){let{pinnedRowModel:z,beans:{environment:J}}=this,Q=z?.getPinnedTopTotalHeight(),Z=z?.getPinnedBottomTotalHeight(),$=J.getPinnedRowBorderWidth(),X=J.getRowBorderWidth(),Y=$-X,q=!Q?0:Y+Q,G=!Z?0:Y+Z;this.comp.setTopHeight(q),this.comp.setBottomHeight(G),this.comp.setTopInvisible(q<=0),this.comp.setBottomInvisible(G<=0),this.setStickyTopOffsetTop(),this.setStickyBottomOffsetBottom()}setStickyTopHeight(z=0){this.comp.setStickyTopHeight(`${z}px`),this.stickyTopHeight=z}setStickyBottomHeight(z=0){this.comp.setStickyBottomHeight(`${z}px`),this.stickyBottomHeight=z}setStickyWidth(z){if(!z)this.comp.setStickyTopWidth("100%"),this.comp.setStickyBottomWidth("100%");else{let J=this.scrollVisibleSvc.getScrollbarWidth();this.comp.setStickyTopWidth(`calc(100% - ${J}px)`),this.comp.setStickyBottomWidth(`calc(100% - ${J}px)`)}}setStickyTopOffsetTop(){let J=this.ctrlsSvc.get("gridHeaderCtrl").headerHeight+(this.filterManager?.getHeaderHeight()??0),Q=this.pinnedRowModel?.getPinnedTopTotalHeight()??0,Z=0;if(J>0)Z+=J;if(Q>0)Z+=Q;if(Z>0)Z+=1;this.comp.setStickyTopTop(`${Z}px`)}setStickyBottomOffsetBottom(){let{pinnedRowModel:z,scrollVisibleSvc:J,comp:Q}=this,Z=z?.getPinnedBottomTotalHeight()??0,X=J.horizontalScrollShowing?J.getScrollbarWidth()||0:0,Y=Z+X;Q.setStickyBottomBottom(`${Y}px`)}};function z0(z){return H0(z)}var hH=class extends x{constructor(z,J,Q,Z,$){super();this.cellCtrl=J,this.rowResizerElement=null,this.rendererVersion=0,this.editorVersion=0,this.beans=z,this.gos=z.gos,this.column=J.column,this.rowNode=J.rowNode,this.eRow=Z;let X=z0({tag:"div",role:J.getCellAriaRole(),attrs:{"comp-id":`${this.getCompId()}`,"col-id":J.column.colIdSanitised}});this.eCell=X;let Y;if(J.isCellSpanning())Y=z0({tag:"div",cls:"ag-spanned-cell-wrapper",role:"presentation"}),Y.appendChild(X),this.setTemplateFromElement(Y);else this.setTemplateFromElement(X);this.cellCssManager=new c9(()=>X),this.forceWrapper=J.isForceWrapper(),this.refreshWrapper(!1);let q={toggleCss:(G,U)=>this.cellCssManager.toggleCss(G,U),setUserStyles:(G)=>y2(X,G),getFocusableElement:()=>X,setIncludeSelection:(G)=>this.includeSelection=G,setIncludeRowDrag:(G)=>this.includeRowDrag=G,setIncludeDndSource:(G)=>this.includeDndSource=G,setRowResizerElement:(G)=>this.setRowResizerElement(G),setRenderDetails:(G,U,_)=>this.setRenderDetails(G,U,_),setEditDetails:(G,U,_)=>this.setEditDetails(G,U,_),getCellEditor:()=>this.cellEditor||null,getCellRenderer:()=>this.cellRenderer||null,getParentOfValue:()=>this.getParentOfValue(),refreshEditStyles:(G,U)=>this.refreshEditStyles(G,U)};J.setComp(q,X,Y,this.eCellWrapper,Q,$,void 0)}getParentOfValue(){return this.eCellValue??this.eCellWrapper??this.eCell}setRowResizerElement(z){if(this.rowResizerElement)R0(this.rowResizerElement);if(this.rowResizerElement=z,z)this.eCell.appendChild(z)}setRenderDetails(z,J,Q){if(this.cellEditor&&!this.cellEditorPopupWrapper)return;this.firstRender=this.firstRender==null;let $=this.refreshWrapper(!1);if(this.refreshEditStyles(!1),z){if(!(Q||$?!1:this.refreshCellRenderer(z)))this.destroyRenderer(),this.createCellRendererInstance(z)}else this.destroyRenderer(),this.insertValueWithoutCellRenderer(J);if(this.rowDraggingComp?.refreshVisibility(),this.rowResizerElement&&!this.rowResizerElement.parentElement)this.eCell.appendChild(this.rowResizerElement)}setEditDetails(z,J,Q){if(z)this.createCellEditorInstance(z,J,Q);else this.destroyEditor()}removeControls(){let z=this.beans.context;this.checkboxSelectionComp=z.destroyBean(this.checkboxSelectionComp),this.dndSourceComp=z.destroyBean(this.dndSourceComp),this.rowDraggingComp=z.destroyBean(this.rowDraggingComp)}refreshWrapper(z){let J=this.includeRowDrag||this.includeDndSource||this.includeSelection,Q=J||this.forceWrapper,Z=Q&&this.eCellWrapper==null;if(Z)this.eCellWrapper=z0({tag:"div",cls:"ag-cell-wrapper",role:"presentation"}),this.eCell.appendChild(this.eCellWrapper);let $=!Q&&this.eCellWrapper!=null;if($)R0(this.eCellWrapper),this.eCellWrapper=void 0;this.cellCssManager.toggleCss("ag-cell-value",!Q);let X=!z&&Q,Y=X&&this.eCellValue==null;if(Y){let U=this.cellCtrl.getCellValueClass();this.eCellValue=z0({tag:"span",cls:U,role:"presentation"}),this.eCellWrapper.appendChild(this.eCellValue)}let q=!X&&this.eCellValue!=null;if(q)R0(this.eCellValue),this.eCellValue=void 0;let G=Z||$||Y||q;if(G)this.removeControls();if(!z&&J)this.addControls();return G}addControls(){let{cellCtrl:z,eCellWrapper:J,eCellValue:Q,includeRowDrag:Z,includeDndSource:$,includeSelection:X}=this,Y=(q)=>{if(q)J.insertBefore(q.getGui(),Q)};if(Z&&this.rowDraggingComp==null)this.rowDraggingComp=z.createRowDragComp(),Y(this.rowDraggingComp);if($&&this.dndSourceComp==null)this.dndSourceComp=z.createDndSource(),Y(this.dndSourceComp);if(X&&this.checkboxSelectionComp==null)this.checkboxSelectionComp=z.createSelectionCheckbox(),Y(this.checkboxSelectionComp)}createCellEditorInstance(z,J,Q){let Z=this.editorVersion,$=z.newAgStackInstance(),{params:X}=z;if($.then((q)=>this.afterCellEditorCreated(Z,q,X,J,Q)),d(this.cellEditor)&&X.cellStartedEdit)this.cellCtrl.focusCell(!0)}insertValueWithoutCellRenderer(z){let J=this.getParentOfValue();J0(J);let Q=T2(z);if(Q!=null)J.textContent=Q}destroyRenderer(){let{context:z}=this.beans;this.cellRenderer=z.destroyBean(this.cellRenderer),R0(this.cellRendererGui),this.cellRendererGui=null,this.rendererVersion++}destroyEditor(){let{context:z}=this.beans;if(this.cellEditorPopupWrapper?.getGui().contains(n(this.beans))||this.cellCtrl.hasBrowserFocus())this.eCell.focus({preventScroll:!0});this.hideEditorPopup?.(),this.hideEditorPopup=void 0,this.cellEditor=z.destroyBean(this.cellEditor),this.cellEditorPopupWrapper=z.destroyBean(this.cellEditorPopupWrapper),R0(this.cellEditorGui),this.cellCtrl.disableEditorTooltipFeature(),this.cellEditorGui=null,this.editorVersion++}refreshCellRenderer(z){if(this.cellRenderer?.refresh==null)return!1;if(this.cellRendererClass!==z.componentClass)return!1;let J=this.cellRenderer.refresh(z.params);return J===!0||J===void 0}createCellRendererInstance(z){let J=this.rendererVersion,Q=(X)=>(Y)=>{if(this.rendererVersion!==J||!this.isAlive())return;let G=X.newAgStackInstance(),U=this.afterCellRendererCreated.bind(this,J,X.componentClass);G?.then(U)},{animationFrameSvc:Z}=this.beans,$;if(Z?.active&&this.firstRender)$=(X,Y=!1)=>{Z.createTask(Q(X),this.rowNode.rowIndex,"p2",X.componentFromFramework,Y)};else $=(X)=>Q(X)();if(z.params?.deferRender&&!this.cellCtrl.rowNode.group){let{loadingComp:X,onReady:Y}=this.cellCtrl.getDeferLoadingCellRenderer();if(X)$(X),Y.then(()=>$(z,!0))}else $(z)}afterCellRendererCreated(z,J,Q){if(!this.isAlive()||z!==this.rendererVersion){this.beans.context.destroyBean(Q);return}this.cellRenderer=Q,this.cellRendererClass=J;let $=Q.getGui();if(this.cellRendererGui=$,$!=null){let X=this.getParentOfValue();J0(X),X.appendChild($)}}afterCellEditorCreated(z,J,Q,Z,$){let X=z!==this.editorVersion,{context:Y}=this.beans;if(X){Y.destroyBean(J);return}if(J.isCancelBeforeStart?.()){Y.destroyBean(J),this.cellCtrl.stopEditing(!0);return}if(!J.getGui){V(97,{colId:this.column.getId()}),Y.destroyBean(J);return}this.cellEditor=J,this.cellEditorGui=J.getGui();let G=Z||J.isPopup?.();if(G)this.addPopupCellEditor(Q,$);else this.addInCellEditor();this.refreshEditStyles(!0,G),J.afterGuiAttached?.(),this.cellCtrl.enableEditorTooltipFeature(J),this.cellCtrl.cellEditorAttached()}refreshEditStyles(z,J){let{cellCssManager:Q}=this;Q.toggleCss("ag-cell-inline-editing",z&&!J),Q.toggleCss("ag-cell-popup-editing",z&&!!J),Q.toggleCss("ag-cell-not-inline-editing",!z||!!J)}addInCellEditor(){let{eCell:z}=this;if(z.contains(n(this.beans)))z.focus();if(this.destroyRenderer(),this.refreshWrapper(!0),J0(this.getParentOfValue()),this.cellEditorGui)this.getParentOfValue().appendChild(this.cellEditorGui)}addPopupCellEditor(z,J){let{gos:Q,context:Z,popupSvc:$,editSvc:X}=this.beans;if(Q.get("editType")==="fullRow")V(98);let Y=this.cellEditorPopupWrapper=Z.createBean(X.createPopupEditorWrapper(z)),{cellEditor:q,cellEditorGui:G,eCell:U,rowNode:_,column:H,cellCtrl:W}=this,B=Y.getGui();if(G)B.appendChild(G);let E=Q.get("stopEditingWhenCellsLoseFocus"),K=J!=null?J:q.getPopupPosition?.()??"over",F=Q.get("enableRtl"),L={ePopup:B,additionalParams:{column:H,rowNode:_},type:"popupCellEditor",eventSource:U,position:K,alignSide:F?"right":"left",keepWithinBounds:!0},D=$.positionPopupByComponent.bind($,L),M=$.addPopup({modal:E,eChild:B,closeOnEsc:!0,closedCallback:(f)=>{W.onPopupEditorClosed(f)},anchorToElement:U,positionCallback:D,ariaOwns:U});if(M)this.hideEditorPopup=M.hideFunc}detach(){this.getGui().remove()}destroy(){this.destroyRenderer(),this.destroyEditor(),this.removeControls(),super.destroy()}},uH=class extends x{constructor(z,J,Q){super();this.cellComps=new Map,this.beans=J,this.rowCtrl=z;let Z=z0({tag:"div",role:"row",attrs:{"comp-id":`${this.getCompId()}`}});this.setInitialStyle(Z,Q),this.setTemplateFromElement(Z);let $=Z.style;this.domOrder=this.rowCtrl.getDomOrder();let X={setDomOrder:(Y)=>this.domOrder=Y,setCellCtrls:(Y)=>this.setCellCtrls(Y),showFullWidth:(Y)=>this.showFullWidth(Y),getFullWidthCellRenderer:()=>this.fullWidthCellRenderer,getFullWidthCellRendererParams:()=>this.fullWidthCellRendererParams,toggleCss:(Y,q)=>this.toggleCss(Y,q),setUserStyles:(Y)=>y2(Z,Y),setTop:(Y)=>$.top=Y,setTransform:(Y)=>$.transform=Y,setRowIndex:(Y)=>Z.setAttribute("row-index",Y),setRowId:(Y)=>Z.setAttribute("row-id",Y),setRowBusinessKey:(Y)=>Z.setAttribute("row-business-key",Y),refreshFullWidth:(Y)=>{let q=Y();return this.fullWidthCellRendererParams=q,this.fullWidthCellRenderer?.refresh?.(q)??!1}};z.setComp(X,this.getGui(),Q,void 0),this.addDestroyFunc(()=>{z.unsetComp(Q)})}setInitialStyle(z,J){let Q=this.rowCtrl.getInitialTransform(J);if(Q)z.style.setProperty("transform",Q);else{let Z=this.rowCtrl.getInitialRowTop(J);if(Z)z.style.setProperty("top",Z)}}showFullWidth(z){let J=(Z)=>{if(this.isAlive()){let $=Z.getGui();this.getGui().appendChild($),this.rowCtrl.setupDetailRowAutoHeight($),this.setFullWidthRowComp(Z,z.params)}else this.beans.context.destroyBean(Z)};z.newAgStackInstance().then(J)}setCellCtrls(z){let J=new Map(this.cellComps);for(let Q of z){let Z=Q.instanceId;if(!this.cellComps.has(Z))this.newCellComp(Q);else J.delete(Z)}this.destroyCells(J),this.ensureDomOrder(z)}ensureDomOrder(z){if(!this.domOrder)return;let J=[];for(let Q of z){let Z=this.cellComps.get(Q.instanceId);if(Z)J.push(Z.getGui())}s8(this.getGui(),J)}newCellComp(z){let J=this.beans.editSvc?.isEditing(z,{withOpenEditor:!0})??!1,Q=new hH(this.beans,z,this.rowCtrl.printLayout,this.getGui(),J);this.cellComps.set(z.instanceId,Q),this.getGui().appendChild(Q.getGui())}destroy(){super.destroy(),this.destroyCells(this.cellComps)}setFullWidthRowComp(z,J){this.fullWidthCellRenderer=z,this.fullWidthCellRendererParams=J,this.addDestroyFunc(()=>{this.fullWidthCellRenderer=this.beans.context.destroyBean(this.fullWidthCellRenderer),this.fullWidthCellRendererParams=void 0})}destroyCells(z){for(let J of z.values()){if(!J)continue;let Q=J.cellCtrl.instanceId;if(this.cellComps.get(Q)!==J)continue;J.detach(),J.destroy(),this.cellComps.delete(Q)}}};function mH(z,J,Q){let Z=!!Q.gos.get("enableCellSpan")&&!!J.getSpannedRowCtrls,$={tag:"div",ref:"eContainer",cls:E$(z),role:"rowgroup"};if(J.type==="center"||Z){let X={tag:"div",ref:"eSpannedContainer",cls:`ag-spanning-container ${AH(z)}`,role:"presentation"};return $.role="presentation",{tag:"div",ref:"eViewport",cls:`ag-viewport ${B$(z)}`,role:"rowgroup",children:[$,Z?X:null]}}return $}var cH=class extends x{constructor(z){super();this.eViewport=j,this.eContainer=j,this.eSpannedContainer=j,this.rowCompsNoSpan={},this.rowCompsWithSpan={},this.name=z?.name,this.options=i2(this.name)}postConstruct(){this.setTemplate(mH(this.name,this.options,this.beans));let z={setHorizontalScroll:(Q)=>this.eViewport.scrollLeft=Q,setViewportHeight:(Q)=>this.eViewport.style.height=Q,setRowCtrls:({rowCtrls:Q})=>this.setRowCtrls(Q),setSpannedRowCtrls:(Q)=>this.setRowCtrls(Q,!0),setDomOrder:(Q)=>{this.domOrder=Q},setContainerWidth:(Q)=>{if(this.eContainer.style.width=Q,this.eSpannedContainer)this.eSpannedContainer.style.width=Q},setOffsetTop:(Q)=>{let Z=`translateY(${Q})`;if(this.eContainer.style.transform=Z,this.eSpannedContainer)this.eSpannedContainer.style.transform=Z}};this.createManagedBean(new xH(this.name)).setComp(z,this.eContainer,this.eSpannedContainer,this.eViewport)}destroy(){this.setRowCtrls([]),this.setRowCtrls([],!0),super.destroy(),this.lastPlacedElement=null}setRowCtrls(z,J){let{beans:Q,options:Z}=this,$=J?this.eSpannedContainer:this.eContainer,X=J?{...this.rowCompsWithSpan}:{...this.rowCompsNoSpan},Y={};if(J)this.rowCompsWithSpan=Y;else this.rowCompsNoSpan=Y;this.lastPlacedElement=null;let q=[];for(let G of z){let U=G.instanceId,_=X[U],H;if(_)H=_,delete X[U];else{if(!G.rowNode.displayed)continue;H=new uH(G,Q,Z.type)}Y[U]=H,q.push([H,!_])}this.removeOldRows(Object.values(X)),this.addRowNodes(q,$)}addRowNodes(z,J){let{domOrder:Q}=this;for(let[Z,$]of z){let X=Z.getGui();if(!Q){if($)J.appendChild(X)}else this.ensureDomOrder(X,J)}}removeOldRows(z){for(let J of z)J.getGui().remove(),J.destroy()}ensureDomOrder(z,J){t8(J,z,this.lastPlacedElement),this.lastPlacedElement=z}},iH={selector:"AG-ROW-CONTAINER",component:cH};function X2(z,J){return J.map((Q)=>{let Z=`e${Q[0].toUpperCase()+Q.substring(1)}RowContainer`;return z[Z]={name:Q},{tag:"ag-row-container",ref:Z,attrs:{name:Q}}})}function pH(z){let J={},Q={tag:"div",ref:"eGridRoot",cls:"ag-root ag-unselectable",children:[{tag:"ag-header-root"},{tag:"div",ref:"eTop",cls:"ag-floating-top",role:"presentation",children:X2(J,["topLeft","topCenter","topRight","topFullWidth"])},{tag:"div",ref:"eBody",cls:"ag-body",role:"presentation",children:[{tag:"div",ref:"eBodyViewport",cls:"ag-body-viewport",role:"presentation",children:X2(J,["left","center","right","fullWidth"])},{tag:"ag-fake-vertical-scroll"}]},{tag:"div",ref:"eStickyTop",cls:"ag-sticky-top",role:"presentation",children:X2(J,["stickyTopLeft","stickyTopCenter","stickyTopRight","stickyTopFullWidth"])},{tag:"div",ref:"eStickyBottom",cls:"ag-sticky-bottom",role:"presentation",children:X2(J,["stickyBottomLeft","stickyBottomCenter","stickyBottomRight","stickyBottomFullWidth"])},{tag:"div",ref:"eBottom",cls:"ag-floating-bottom",role:"presentation",children:X2(J,["bottomLeft","bottomCenter","bottomRight","bottomFullWidth"])},{tag:"ag-fake-horizontal-scroll"},z?{tag:"ag-overlay-wrapper"}:null]};return{paramsMap:J,elementParams:Q}}var nH=class extends x{constructor(){super(...arguments);this.eGridRoot=j,this.eBodyViewport=j,this.eStickyTop=j,this.eStickyBottom=j,this.eTop=j,this.eBottom=j,this.eBody=j}postConstruct(){let{overlays:z,rangeSvc:J}=this.beans,Q=z?.getOverlayWrapperSelector(),{paramsMap:Z,elementParams:$}=pH(!!Q);this.setTemplate($,[...Q?[Q]:[],WH,KH,UH,iH],Z);let X=(q,G)=>{let U=`${q}px`;G.style.minHeight=U,G.style.height=U},Y={setRowAnimationCssOnBodyViewport:(q,G)=>this.setRowAnimationCssOnBodyViewport(q,G),setColumnCount:(q)=>kG(this.getGui(),q),setRowCount:(q)=>MG(this.getGui(),q),setTopHeight:(q)=>X(q,this.eTop),setBottomHeight:(q)=>X(q,this.eBottom),setTopInvisible:(q)=>this.eTop.classList.toggle("ag-invisible",q),setBottomInvisible:(q)=>this.eBottom.classList.toggle("ag-invisible",q),setStickyTopHeight:(q)=>this.eStickyTop.style.height=q,setStickyTopTop:(q)=>this.eStickyTop.style.top=q,setStickyTopWidth:(q)=>this.eStickyTop.style.width=q,setStickyBottomHeight:(q)=>{this.eStickyBottom.style.height=q,this.eStickyBottom.classList.toggle("ag-invisible",q==="0px")},setStickyBottomBottom:(q)=>this.eStickyBottom.style.bottom=q,setStickyBottomWidth:(q)=>this.eStickyBottom.style.width=q,setColumnMovingCss:(q,G)=>this.toggleCss(q,G),updateLayoutClasses:(q,G)=>{let U=[this.eBodyViewport.classList,this.eBody.classList];for(let _ of U)_.toggle(M4.AUTO_HEIGHT,G.autoHeight),_.toggle(M4.NORMAL,G.normal),_.toggle(M4.PRINT,G.print);this.toggleCss(M4.AUTO_HEIGHT,G.autoHeight),this.toggleCss(M4.NORMAL,G.normal),this.toggleCss(M4.PRINT,G.print)},setAlwaysVerticalScrollClass:(q,G)=>this.eBodyViewport.classList.toggle(L$,G),registerBodyViewportResizeListener:(q)=>{let G=j4(this.beans,this.eBodyViewport,q);this.addDestroyFunc(()=>G())},setPinnedTopBottomOverflowY:(q)=>this.eTop.style.overflowY=this.eBottom.style.overflowY=q,setCellSelectableCss:(q,G)=>{for(let U of[this.eTop,this.eBodyViewport,this.eBottom])U.classList.toggle(q,G)},setBodyViewportWidth:(q)=>this.eBodyViewport.style.width=q,setGridRootRole:(q)=>U0(this.eGridRoot,q)};if(this.ctrl=this.createManagedBean(new gH),this.ctrl.setComp(Y,this.getGui(),this.eBodyViewport,this.eTop,this.eBottom,this.eStickyTop,this.eStickyBottom),J&&n0(this.gos)||S2(this.gos))DG(this.getGui(),!0)}setRowAnimationCssOnBodyViewport(z,J){let Q=this.eBodyViewport.classList;Q.toggle("ag-row-animation",J),Q.toggle("ag-row-no-animation",!J)}getFocusableContainerName(){return"gridBody"}},dH={selector:"AG-GRID-BODY",component:nH},W2={TAB_GUARD:"ag-tab-guard",TAB_GUARD_TOP:"ag-tab-guard-top",TAB_GUARD_BOTTOM:"ag-tab-guard-bottom"},rH=class extends k0{constructor(z,J){super();this.stopPropagationCallbacks=J,this.skipTabGuardFocus=!1,this.forcingFocusOut=!1,this.allowFocus=!1;let{comp:Q,eTopGuard:Z,eBottomGuard:$,focusTrapActive:X,forceFocusOutWhenTabGuardsAreEmpty:Y,isFocusableContainer:q,focusInnerElement:G,onFocusIn:U,onFocusOut:_,shouldStopEventPropagation:H,onTabKeyDown:W,handleKeyDown:B,isEmpty:E,eFocusableElement:K}=z;this.comp=Q,this.eTopGuard=Z,this.eBottomGuard=$,this.providedFocusInnerElement=G,this.eFocusableElement=K,this.focusTrapActive=!!X,this.forceFocusOutWhenTabGuardsAreEmpty=!!Y,this.isFocusableContainer=!!q,this.providedFocusIn=U,this.providedFocusOut=_,this.providedShouldStopEventPropagation=H,this.providedOnTabKeyDown=W,this.providedHandleKeyDown=B,this.providedIsEmpty=E}postConstruct(){this.createManagedBean(new d9(this.eFocusableElement,this.stopPropagationCallbacks,{shouldStopEventPropagation:()=>this.shouldStopEventPropagation(),onTabKeyDown:(z)=>this.onTabKeyDown(z),handleKeyDown:(z)=>this.handleKeyDown(z),onFocusIn:(z)=>this.onFocusIn(z),onFocusOut:(z)=>this.onFocusOut(z)})),this.activateTabGuards();for(let z of[this.eTopGuard,this.eBottomGuard])this.addManagedElementListeners(z,{focus:this.onFocus.bind(this)})}handleKeyDown(z){if(this.providedHandleKeyDown)this.providedHandleKeyDown(z)}tabGuardsAreActive(){return!!this.eTopGuard&&this.eTopGuard.hasAttribute("tabIndex")}shouldStopEventPropagation(){if(this.providedShouldStopEventPropagation)return this.providedShouldStopEventPropagation();return!1}activateTabGuards(){if(this.forcingFocusOut)return;let z=this.gos.get("tabIndex");this.comp.setTabIndex(z.toString())}deactivateTabGuards(){this.comp.setTabIndex()}onFocus(z){if(this.isFocusableContainer&&!this.eFocusableElement.contains(z.relatedTarget)){if(!this.allowFocus){this.findNextElementOutsideAndFocus(z.target===this.eBottomGuard);return}}if(this.skipTabGuardFocus){this.skipTabGuardFocus=!1;return}if(this.forceFocusOutWhenTabGuardsAreEmpty){if(this.providedIsEmpty?this.providedIsEmpty():V4(this.eFocusableElement,".ag-tab-guard").length===0){this.findNextElementOutsideAndFocus(z.target===this.eBottomGuard);return}}if(this.isFocusableContainer&&this.eFocusableElement.contains(z.relatedTarget))return;let J=z.target===this.eBottomGuard;if(!(this.providedFocusInnerElement?this.providedFocusInnerElement(J):this.focusInnerElement(J))&&this.forceFocusOutWhenTabGuardsAreEmpty)this.findNextElementOutsideAndFocus(z.target===this.eBottomGuard)}findNextElementOutsideAndFocus(z){let J=Y0(this.beans),Q=V4(J.body,null,!0),Z=Q.indexOf(z?this.eTopGuard:this.eBottomGuard);if(Z===-1)return;let $,X;if(z)$=0,X=Z;else $=Z+1,X=Q.length;let Y=Q.slice($,X),q=this.gos.get("tabIndex");Y.sort((G,U)=>{let _=Number.parseInt(G.getAttribute("tabindex")||"0"),H=Number.parseInt(U.getAttribute("tabindex")||"0");if(H===q)return 1;if(_===q)return-1;if(_===0)return 1;if(H===0)return-1;return _-H}),Y[z?Y.length-1:0]?.focus()}onFocusIn(z){if(this.focusTrapActive||this.forcingFocusOut)return;if(this.providedFocusIn)this.providedFocusIn(z);if(!this.isFocusableContainer)this.deactivateTabGuards()}onFocusOut(z){if(this.focusTrapActive)return;if(this.providedFocusOut)this.providedFocusOut(z);if(!this.eFocusableElement.contains(z.relatedTarget))this.activateTabGuards()}onTabKeyDown(z){if(this.providedOnTabKeyDown){this.providedOnTabKeyDown(z);return}if(this.focusTrapActive)return;if(z.defaultPrevented)return;let J=this.tabGuardsAreActive();if(J)this.deactivateTabGuards();let Q=this.getNextFocusableElement(z.shiftKey);if(J)setTimeout(()=>this.activateTabGuards(),0);if(!Q)return;Q.focus(),z.preventDefault()}focusInnerElement(z=!1){let J=V4(this.eFocusableElement);if(this.tabGuardsAreActive())J.splice(0,1),J.splice(-1,1);if(!J.length)return!1;return J[z?J.length-1:0].focus({preventScroll:!0}),!0}getNextFocusableElement(z){return O0(this.beans,this.eFocusableElement,!1,z)}forceFocusOutOfContainer(z=!1){if(this.forcingFocusOut)return;let J=z?this.eTopGuard:this.eBottomGuard;this.activateTabGuards(),this.skipTabGuardFocus=!0,this.forcingFocusOut=!0,J.focus(),window.setTimeout(()=>{this.forcingFocusOut=!1,this.activateTabGuards()})}isTabGuard(z,J){return z===this.eTopGuard&&!J||z===this.eBottomGuard&&(J??!0)}setAllowFocus(z){this.allowFocus=z}},oZ=class extends k0{constructor(z,J){super();this.comp=z,this.stopPropagationCallbacks=J}initialiseTabGuard(z){this.eTopGuard=this.createTabGuard("top"),this.eBottomGuard=this.createTabGuard("bottom"),this.eFocusableElement=this.comp.getFocusableElement();let{eTopGuard:J,eBottomGuard:Q,eFocusableElement:Z,stopPropagationCallbacks:$}=this,X=[J,Q],Y={setTabIndex:(L)=>{for(let D of X)if(L==null)D.removeAttribute("tabindex");else D.setAttribute("tabindex",L)}};this.addTabGuards(J,Q);let{focusTrapActive:q=!1,onFocusIn:G,onFocusOut:U,focusInnerElement:_,handleKeyDown:H,onTabKeyDown:W,shouldStopEventPropagation:B,isEmpty:E,forceFocusOutWhenTabGuardsAreEmpty:K,isFocusableContainer:F}=z;this.tabGuardCtrl=this.createManagedBean(new rH({comp:Y,focusTrapActive:q,eTopGuard:J,eBottomGuard:Q,eFocusableElement:Z,onFocusIn:G,onFocusOut:U,focusInnerElement:_,handleKeyDown:H,onTabKeyDown:W,shouldStopEventPropagation:B,isEmpty:E,forceFocusOutWhenTabGuardsAreEmpty:K,isFocusableContainer:F},$))}getTabGuardCtrl(){return this.tabGuardCtrl}createTabGuard(z){let J=Y0(this.beans).createElement("div"),Q=z==="top"?W2.TAB_GUARD_TOP:W2.TAB_GUARD_BOTTOM;return J.classList.add(W2.TAB_GUARD,Q),U0(J,"presentation"),J}addTabGuards(z,J){let Q=this.eFocusableElement;Q.prepend(z),Q.append(J)}removeAllChildrenExceptTabGuards(){let z=[this.eTopGuard,this.eBottomGuard];J0(this.comp.getFocusableElement()),this.addTabGuards(...z)}forceFocusOutOfContainer(z=!1){this.tabGuardCtrl.forceFocusOutOfContainer(z)}appendChild(z,J,Q){if(!b2(J))J=J.getGui();let{eBottomGuard:Z}=this;if(Z)Z.before(J);else z(J,Q)}destroy(){let{eTopGuard:z,eBottomGuard:J}=this;R0(z),R0(J),super.destroy()}},Qz=class extends I0{initialiseTabGuard(z,J){this.tabGuardFeature=this.createManagedBean(new oZ(this,J)),this.tabGuardFeature.initialiseTabGuard(z)}forceFocusOutOfContainer(z=!1){this.tabGuardFeature.forceFocusOutOfContainer(z)}appendChild(z,J){this.tabGuardFeature.appendChild(super.appendChild.bind(this),z,J)}},eZ=class extends Qz{initialiseTabGuard(z){super.initialiseTabGuard(z,Oz)}},I7=(z,J)=>{return o9(z,()=>E0(z.getGui(),J,!1,!0))},C7=(z)=>{return z?.getFocusableContainerName()??"external"},tH=(z)=>{if(z==null)return"external";return typeof z==="string"?z:"gridBody"},sH=class extends S{constructor(){super(...arguments);this.additionalFocusableContainers=new Set}setComp(z,J,Q){this.view=z,this.eGridHostDiv=J,this.eGui=Q,this.eGui.setAttribute("grid-id",this.beans.context.getId());let{dragAndDrop:Z,ctrlsSvc:$}=this.beans;if(Z?.registerGridDropTarget(()=>this.eGui,this),this.createManagedBean(new lZ(this.view)),this.view.setRtlClass(this.gos.get("enableRtl")?"ag-rtl":"ag-ltr"),this.gos.get("suppressContentVisibilityAuto"))this.eGui.style.setProperty("content-visibility","visible");let X=j4(this.beans,this.eGridHostDiv,this.onGridSizeChanged.bind(this));this.addDestroyFunc(()=>X()),$.register("gridCtrl",this)}isDetailGrid(){return _J(this.getGui())?.getAttribute("row-id")?.startsWith("detail")||!1}getOptionalSelectors(){let z=this.beans;return{paginationSelector:z.pagination?.getPaginationSelector(),gridHeaderDropZonesSelector:z.registry?.getSelector("AG-GRID-HEADER-DROP-ZONES"),sideBarSelector:z.sideBar?.getSelector(),statusBarSelector:z.registry?.getSelector("AG-STATUS-BAR"),toolbarSelector:z.registry?.getSelector("AG-TOOLBAR"),watermarkSelector:z.licenseManager?.getWatermarkSelector()}}onGridSizeChanged(){this.eventSvc.dispatchEvent({type:"gridSizeChanged",clientWidth:this.eGridHostDiv.clientWidth,clientHeight:this.eGridHostDiv.clientHeight})}destroyGridUi(){this.view.destroyGridUi()}getGui(){return this.eGui}setResizeCursor(z){let{view:J}=this;if(z===!1)J.setCursor(null);else J.setCursor(z===1?"ew-resize":"ns-resize")}disableUserSelect(z){this.view.setUserSelect(z?"none":null)}focusNextInnerContainer(z){let J=this.getFocusableContainers(),{indexWithFocus:Q,nextIndex:Z}=this.getNextFocusableIndex(J,z),$=Q===-1?z?J.length-1:0:Z,{gos:X,beans:{focusSvc:Y,navigation:q}}=this,G=X.getCallback("tabToNextGridContainer");if(G){let U=Y.getDefaultTabToNextGridContainerTarget({backwards:z,focusableContainers:J,nextIndex:$}),_=C7(J[$]),H=U==null&&_==="gridBody"?"gridBody":tH(U),W=G({backwards:z,previousContainer:C7(J[Q]),nextContainer:H,defaultTarget:U});if(W!==void 0){if(typeof W==="boolean")return W;if(typeof W==="string"){if(W==="gridBody")return this.focusGridBodyDefault(z)||void 0;let B=J.find((E)=>E.getFocusableContainerName()===W);if(!B){J9(`tabToNextGridContainer - ${W} container not found`);return}return I7(B,z)?!0:void 0}if(c_(W))return Y.focusHeaderPosition({headerPosition:W})||void 0;return q?.ensureCellVisible(W),Y.setFocusedCell({...W,forceBrowserFocus:!0}),Y.isCellFocused(W)||void 0}}return this.focusNextInnerContainerDefault({backwards:z,focusableContainers:J,indexWithFocus:Q,nextIndex:$})||void 0}focusInnerElement(z){let{gos:J,beans:Q,beans:{focusSvc:Z,visibleCols:$}}=this;if(J.getCallback("focusGridInnerElement")?.({fromBottom:!!z}))return!0;let Y=this.getFocusableContainers();if(z){if(this.focusNextInnerContainerDefault({backwards:!0,focusableContainers:Y,indexWithFocus:Y.length,nextIndex:Y.length-1}))return!0;return Z.focusGridView({column:y($.allCols),backwards:!0})}let q=$.allCols;if(J.get("headerHeight")===0||D4(Q)){if(Z.focusGridView({column:q[0],backwards:z}))return!0;for(let G=1;G$.getGui().contains(Q));return{indexWithFocus:Z,nextIndex:Z+(J?-1:1)}}focusGridBodyDefault(z){let{gos:J,beans:Q,beans:{focusSvc:Z,visibleCols:{allCols:$}}}=this;if(z)return Z.focusGridView({column:y($),backwards:!0});if(J.get("headerHeight")===0||D4(Q))return Z.focusGridView({column:$[0]});return Z.focusFirstHeader()}focusNextInnerContainerDefault(z){let{backwards:J,focusableContainers:Q,indexWithFocus:Z}=z,$=J?-1:1;for(let X=z.nextIndex;X>=0&&XX:Zthis.destroyBean(this),setRtlClass:(X)=>this.addCss(X),forceFocusOutOfContainer:this.forceFocusOutOfContainer.bind(this),updateLayoutClasses:this.updateLayoutClasses.bind(this),getFocusableContainers:this.getFocusableContainers.bind(this),setUserSelect:(X)=>{this.getGui().style.userSelect=X!=null?X:"",this.getGui().style.webkitUserSelect=X!=null?X:""},setCursor:(X)=>{this.getGui().style.cursor=X!=null?X:""}},J=this.createManagedBean(new sH),Q=J.getOptionalSelectors(),Z=this.createTemplate(Q),$=[dH,...Object.values(Q).filter((X)=>!!X)];this.setTemplate(Z,$),J.setComp(z,this.eGridDiv,this.getGui()),this.insertGridIntoDom(),this.initialiseTabGuard({onTabKeyDown:()=>{return},focusInnerElement:(X)=>J.focusInnerElement(X),forceFocusOutWhenTabGuardsAreEmpty:!0,isEmpty:()=>!J.isFocusable()})}insertGridIntoDom(){let z=this.getGui();this.eGridDiv.appendChild(z),this.addDestroyFunc(()=>{z.remove(),M2(this.gos,"Grid removed from DOM")})}updateLayoutClasses(z,J){let Q=this.rootWrapperBody.classList,{AUTO_HEIGHT:Z,NORMAL:$,PRINT:X}=M4,{autoHeight:Y,normal:q,print:G}=J;Q.toggle(Z,Y),Q.toggle($,q),Q.toggle(X,G),this.toggleCss(Z,Y),this.toggleCss($,q),this.toggleCss(X,G)}createTemplate(z){let J=z.toolbarSelector?{tag:"ag-toolbar",ref:"toolbar"}:null,Q=z.gridHeaderDropZonesSelector?{tag:"ag-grid-header-drop-zones",ref:"gridHeaderDropZones"}:null,Z=z.sideBarSelector?{tag:"ag-side-bar",ref:"sideBar"}:null,$=z.statusBarSelector?{tag:"ag-status-bar",ref:"statusBar"}:null,X=z.watermarkSelector?{tag:"ag-watermark"}:null,Y=z.paginationSelector?{tag:"ag-pagination",ref:"pagination"}:null;return{tag:"div",cls:"ag-root-wrapper",role:"presentation",children:[J,Q,{tag:"div",ref:"rootWrapperBody",cls:"ag-root-wrapper-body",role:"presentation",children:[{tag:"ag-grid-body",ref:"gridBody"},Z]},$,Y,X]}}getFocusableElement(){return this.rootWrapperBody}forceFocusOutOfContainer(z=!1){if(!z&&this.pagination?.isDisplayed()){this.pagination.forceFocusOutOfContainer(z);return}super.forceFocusOutOfContainer(z)}getFocusableContainers(){let z=[];if(this.toolbar)z.push(this.toolbar);z.push(...this.gridHeaderDropZones?.getFocusableContainers?.()??[],this.gridBody);for(let J of[this.sideBar,this.statusBar,this.pagination])if(J)z.push(J);return z.filter((J)=>B0(J.getGui()))}},c=(z,J)=>{for(let Q of Object.keys(J))J[Q]=z;return J},y7={dispatchEvent:"CommunityCore",...c("CommunityCore",{destroy:0,getGridId:0,getGridOption:0,isDestroyed:0,setGridOption:0,updateGridOptions:0,isModuleRegistered:0}),...c("GridState",{getState:0,setState:0}),...c("SharedRowSelection",{setNodesSelected:0,selectAll:0,deselectAll:0,selectAllFiltered:0,deselectAllFiltered:0,selectAllOnCurrentPage:0,deselectAllOnCurrentPage:0,getSelectedNodes:0,getSelectedRows:0}),...c("RowApi",{redrawRows:0,setRowNodeExpanded:0,getRowNode:0,addRenderedRowListener:0,getRenderedNodes:0,forEachNode:0,getFirstDisplayedRowIndex:0,getLastDisplayedRowIndex:0,getDisplayedRowAtIndex:0,getDisplayedRowCount:0}),...c("ScrollApi",{getVerticalPixelRange:0,getHorizontalPixelRange:0,ensureColumnVisible:0,ensureIndexVisible:0,ensureNodeVisible:0}),...c("KeyboardNavigation",{getFocusedCell:0,clearFocusedCell:0,setFocusedCell:0,tabToNextCell:0,tabToPreviousCell:0,setFocusedHeader:0}),...c("EventApi",{addEventListener:0,addGlobalListener:0,removeEventListener:0,removeGlobalListener:0}),...c("ValueCache",{expireValueCache:0}),...c("CellApi",{getCellValue:0}),...c("SharedMenu",{showColumnMenu:0,hidePopupMenu:0}),...c("Sort",{onSortChanged:0}),...c("PinnedRow",{getPinnedTopRowCount:0,getPinnedBottomRowCount:0,getPinnedTopRow:0,getPinnedBottomRow:0,forEachPinnedRow:0}),...c("Overlay",{showLoadingOverlay:0,showNoRowsOverlay:0,hideOverlay:0}),...c("RenderApi",{setGridAriaProperty:0,refreshCells:0,refreshHeader:0,isAnimationFrameQueueEmpty:0,flushAllAnimationFrames:0,getSizesForCurrentTheme:0,getCellRendererInstances:0}),...c("HighlightChanges",{flashCells:0}),...c("RowDrag",{addRowDropZone:0,removeRowDropZone:0,getRowDropZoneParams:0,getRowDropPositionIndicator:0,setRowDropPositionIndicator:0}),...c("ColumnApi",{getColumnDefs:0,getColumnDef:0,getDisplayNameForColumn:0,getColumn:0,getColumns:0,applyColumnState:0,getColumnState:0,resetColumnState:0,isPinning:0,isPinningLeft:0,isPinningRight:0,getDisplayedColAfter:0,getDisplayedColBefore:0,setColumnsVisible:0,setColumnsPinned:0,getAllGridColumns:0,getDisplayedLeftColumns:0,getDisplayedCenterColumns:0,getDisplayedRightColumns:0,getAllDisplayedColumns:0,getAllDisplayedVirtualColumns:0}),...c("ColumnAutoSize",{sizeColumnsToFit:0,autoSizeColumns:0,autoSizeAllColumns:0}),...c("ColumnGroup",{setColumnGroupOpened:0,getColumnGroup:0,getProvidedColumnGroup:0,getDisplayNameForColumnGroup:0,getColumnGroupState:0,setColumnGroupState:0,resetColumnGroupState:0,getLeftDisplayedColumnGroups:0,getCenterDisplayedColumnGroups:0,getRightDisplayedColumnGroups:0,getAllDisplayedColumnGroups:0}),...c("ColumnMove",{moveColumnByIndex:0,moveColumns:0}),...c("ColumnResize",{setColumnWidths:0}),...c("ColumnHover",{isColumnHovered:0}),...c("EditCore",{getCellEditorInstances:0,getEditingCells:0,getEditRowValues:0,stopEditing:0,startEditingCell:0,isEditing:0,validateEdit:0}),...c("BatchEdit",{startBatchEdit:0,cancelBatchEdit:0,commitBatchEdit:0,isBatchEditing:0}),...c("UndoRedoEdit",{undoCellEditing:0,redoCellEditing:0,getCurrentUndoSize:0,getCurrentRedoSize:0}),...c("FilterCore",{isAnyFilterPresent:0,onFilterChanged:0}),...c("ColumnFilter",{isColumnFilterPresent:0,getColumnFilterInstance:0,destroyFilter:0,setFilterModel:0,getFilterModel:0,getColumnFilterModel:0,setColumnFilterModel:0,showColumnFilter:0,hideColumnFilter:0,getColumnFilterHandler:0,doFilterAction:0}),...c("QuickFilter",{isQuickFilterPresent:0,getQuickFilter:0,resetQuickFilter:0}),...c("Notes",{getNote:0,setNote:0,refreshNotes:0}),...c("Find",{findGetActiveMatch:0,findGetTotalMatches:0,findGoTo:0,findNext:0,findPrevious:0,findGetNumMatches:0,findGetParts:0,findClearActive:0,findRefresh:0}),...c("Pagination",{paginationIsLastPageFound:0,paginationGetPageSize:0,paginationGetCurrentPage:0,paginationGetTotalPages:0,paginationGetRowCount:0,paginationGoToNextPage:0,paginationGoToPreviousPage:0,paginationGoToFirstPage:0,paginationGoToLastPage:0,paginationGoToPage:0}),...c("CsrmSsrmSharedApi",{expandAll:0,collapseAll:0,resetRowGroupExpansion:0}),...c("SsrmInfiniteSharedApi",{setRowCount:0,getCacheBlockState:0,isLastRowIndexKnown:0}),...c("ClientSideRowModelApi",{onGroupExpandedOrCollapsed:0,refreshClientSideRowModel:0,isRowDataEmpty:0,forEachLeafNode:0,forEachNodeAfterFilter:0,forEachNodeAfterFilterAndSort:0,applyTransaction:0,applyTransactionAsync:0,flushAsyncTransactions:0,getBestCostNodeSelection:0,onRowHeightChanged:0,resetRowHeights:0}),...c("CsvExport",{getDataAsCsv:0,exportDataAsCsv:0}),...c("InfiniteRowModel",{refreshInfiniteCache:0,purgeInfiniteCache:0,getInfiniteRowCount:0}),...c("AdvancedFilter",{getAdvancedFilterModel:0,setAdvancedFilterModel:0,showAdvancedFilterBuilder:0,hideAdvancedFilterBuilder:0}),...c("IntegratedCharts",{getChartModels:0,getChartRef:0,getChartImageDataURL:0,downloadChart:0,openChartToolPanel:0,closeChartToolPanel:0,createRangeChart:0,createPivotChart:0,createCrossFilterChart:0,updateChart:0,restoreChart:0}),...c("Clipboard",{copyToClipboard:0,cutToClipboard:0,copySelectedRowsToClipboard:0,copySelectedRangeToClipboard:0,copySelectedRangeDown:0,pasteFromClipboard:0}),...c("ExcelExport",{getDataAsExcel:0,exportDataAsExcel:0,getSheetDataForExcel:0,getMultipleSheetsAsExcel:0,exportMultipleSheetsAsExcel:0}),...c("SharedMasterDetail",{addDetailGridInfo:0,removeDetailGridInfo:0,getDetailGridInfo:0,forEachDetailGridInfo:0}),...c("Formula",{refreshFormulas:0}),...c("ContextMenu",{showContextMenu:0}),...c("ColumnMenu",{showColumnChooser:0,hideColumnChooser:0}),...c("CellSelection",{getCellRanges:0,addCellRange:0,clearRangeSelection:0,clearCellSelection:0}),...c("SharedRowGrouping",{setRowGroupColumns:0,removeRowGroupColumns:0,addRowGroupColumns:0,getRowGroupColumns:0,moveRowGroupColumn:0}),...c("SharedAggregation",{addAggFuncs:0,clearAggFuncs:0,setColumnAggFunc:0}),...c("SharedPivot",{isPivotMode:0,getPivotResultColumn:0,setValueColumns:0,getValueColumns:0,removeValueColumns:0,addValueColumns:0,setPivotColumns:0,removePivotColumns:0,addPivotColumns:0,getPivotColumns:0,setPivotResultColumns:0,getPivotResultColumns:0}),...c("ServerSideRowModelApi",{getServerSideSelectionState:0,setServerSideSelectionState:0,applyServerSideTransaction:0,applyServerSideTransactionAsync:0,applyServerSideRowData:0,retryServerSideLoads:0,flushServerSideAsyncTransactions:0,refreshServerSide:0,getServerSideGroupLevelState:0,onRowHeightChanged:0,resetRowHeights:0}),...c("SideBar",{isSideBarVisible:0,setSideBarVisible:0,setSideBarPosition:0,openToolPanel:0,closeToolPanel:0,getOpenedToolPanel:0,refreshToolPanel:0,isToolPanelShowing:0,getToolPanelInstance:0,getSideBar:0}),...c("Toolbar",{getToolbarItemInstance:0}),...c("StatusBar",{getStatusPanel:0}),...c("AiToolkit",{getStructuredSchema:0})},EQ={isDestroyed:()=>!0,destroy(){},preConstruct(){},postConstruct(){},preWireBeans(){},wireBeans(){}},aH=(z,J)=>z.eventSvc.dispatchEvent(J),D$=class{};Reflect.defineProperty(D$,"name",{value:"GridApi"});var oH=class extends S{constructor(){super();this.beanName="apiFunctionSvc",this.api=new D$,this.fns={...EQ,dispatchEvent:aH},this.preDestroyLink="";let{api:z}=this;for(let J of Object.keys(y7))z[J]=this.makeApi(J)[J]}postConstruct(){this.preDestroyLink=this.beans.frameworkOverrides.getDocLink("grid-lifecycle/#grid-pre-destroyed")}addFunction(z,J){let{fns:Q,beans:Z}=this;if(Q!==EQ)Q[z]=Z?.validation?.validateApiFunction(z,J)??J}makeApi(z){return{[z]:(...J)=>{let{beans:Q,fns:{[z]:Z}}=this;return Z?Z(Q,...J):this.apiNotFound(z)}}}apiNotFound(z){let{beans:J,gos:Q,preDestroyLink:Z}=this;if(!J)V(26,{fnName:z,preDestroyLink:Z});else{let $=y7[z];if(Q.assertModuleRegistered($,`api.${z}`))V(27,{fnName:z,module:$})}}destroy(){super.destroy(),this.fns=EQ,this.beans=null}};function eH(z){return z.context.getId()}function zW(z){z.gridDestroySvc.destroy()}function JW(z){return z.gridDestroySvc.destroyCalled}function QW(z,J){return z.gos.get(J)}function ZW(z,J,Q){M$(z,{[J]:Q})}function M$(z,J){z.gos.updateGridOptions({options:J})}function $W(z,J){let Q=J.replace(/Module$/,"");return z.gos.isModuleRegistered(Q)}function vz(z,J,Q){let Z=h(z,J,Q);if(Z){let{className:X}=Z;if(typeof X==="string"&&X.includes("ag-icon")||typeof X==="object"&&X["ag-icon"])return Z}let $=z0({tag:"span"});return $.appendChild(Z),$}function h(z,J,Q){let Z=null;if(z==="smallDown")V(262);else if(z==="smallLeft")V(263);else if(z==="smallRight")V(264);let $=Q?.colDef.icons;if($)Z=$[z];if(J.gos&&!Z){let X=J.gos.get("icons");if(X)Z=X[z]}if(Z){let X;if(typeof Z==="function")X=Z();else if(typeof Z==="string")X=Z;else{V(38,{iconName:z});return}if(typeof X==="string")return KZ(X);if(b2(X))return X;V(133,{iconName:z});return}else{let X=J.registry.getIcon(z);if(!X)J.validation?.validateIcon(z);return z0({tag:"span",cls:`ag-icon ag-icon-${X??z}`,role:"presentation",attrs:{unselectable:"on"}})}}var XW=".ag-dnd-ghost{align-items:center;background-color:var(--ag-drag-and-drop-image-background-color);border:var(--ag-drag-and-drop-image-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-drag-and-drop-image-shadow);color:var(--ag-text-color);cursor:move;display:flex;font-weight:500;gap:var(--ag-cell-widget-spacing);height:var(--ag-header-height);overflow:hidden;padding-left:var(--ag-cell-horizontal-padding);padding-right:var(--ag-cell-horizontal-padding);text-overflow:ellipsis;transform:translateY(calc(var(--ag-spacing)*2));white-space:nowrap}.ag-dnd-ghost-not-allowed{border:var(--ag-drag-and-drop-image-not-allowed-border)}",YW={tag:"div",children:[{tag:"div",ref:"eGhost",cls:"ag-dnd-ghost ag-unselectable",children:[{tag:"span",ref:"eIcon",cls:"ag-dnd-ghost-icon ag-shake-left-to-right"},{tag:"div",ref:"eLabel",cls:"ag-dnd-ghost-label"}]}]},qW=class extends x{constructor(){super();this.dragSource=null,this.eIcon=j,this.eLabel=j,this.eGhost=j,this.registerCSS(XW)}postConstruct(){let z=(J)=>vz(J,this.beans,null);this.dropIconMap={pinned:z("columnMovePin"),hide:z("columnMoveHide"),move:z("columnMoveMove"),left:z("columnMoveLeft"),right:z("columnMoveRight"),group:z("columnMoveGroup"),aggregate:z("columnMoveValue"),pivot:z("columnMovePivot"),notAllowed:z("dropNotAllowed")}}init(z){this.dragSource=z.dragSource,this.setTemplate(YW),this.beans.environment.applyThemeClasses(this.eGhost)}destroy(){this.dragSource=null,super.destroy()}setIcon(z,J){let{eGhost:Q,eIcon:Z,dragSource:$,dropIconMap:X,gos:Y}=this;if(J0(Z),!z)z=$?.getDefaultIconName?$.getDefaultIconName():"notAllowed";let q=X[z];if(Q.classList.toggle("ag-dnd-ghost-not-allowed",z==="notAllowed"),Z.classList.toggle("ag-shake-left-to-right",J),q===X.hide&&Y.get("suppressDragLeaveHidesColumns"))return;if(q)Z.appendChild(q)}setLabel(z){this.eLabel.textContent=z}};var k$=(z,J)=>{if(J!=null&&z?.setPointerCapture)try{return z.setPointerCapture(J),z.hasPointerCapture(J)}catch{}return!1},GW=(z,J)=>{if(typeof PointerEvent>"u"||!(J instanceof PointerEvent))return null;let Q=J.pointerId;if(!k$(z,Q))return null;let Z={eElement:z,pointerId:Q,onLost($){_W(Z,$)}};return z.addEventListener("lostpointercapture",Z.onLost),Z},UW=(z)=>{if(!z)return;f$(z);let{eElement:J,pointerId:Q}=z;if(!J)return;try{J.releasePointerCapture(Q)}catch{}z.eElement=null},f$=(z)=>{let{eElement:J,onLost:Q}=z;if(J&&Q)J.removeEventListener("lostpointercapture",Q),z.onLost=null},_W=(z,J)=>{f$(z);let{eElement:Q,pointerId:Z}=z;if(Q&&J.pointerId===Z)k$(Q,Z)},D1,S1,KQ={passive:!0},Uz={passive:!1},T4=(z)=>{if(!S1)S1=new WeakSet;else if(S1.has(z))return!1;return S1.add(z),!0},HW=class extends k0{constructor(){super(...arguments);this.beanName="dragSvc",this.dragging=!1,this.drag=null,this.dragSources=[]}get startTarget(){return this.drag?.start.target??null}isPointer(){return!!D1?.has(m0(this.beans))}hasPointerCapture(){let z=this.drag?.pointerCapture;return!!(z&&this.beans.eRootDiv.hasPointerCapture?.(z.pointerId))}destroy(){if(this.drag)this.cancelDrag();let z=this.dragSources;for(let J of z)b7(J);z.length=0,super.destroy()}removeDragSource(z){let J=this.dragSources;for(let Q=0,Z=J.length;Qthis.onPointerDown(z,U),Uz],[J,"mousedown",(U)=>this.onMouseDown(z,U)]);let G=this.gos.get("suppressTouch");if(Q&&!G)L6(Z,[J,"touchstart",(_)=>this.onTouchStart(z,_),Uz])}cancelDrag(z){let J=this.drag;if(z??(z=J?.eElement),z)this.eventSvc.dispatchEvent({type:"dragCancelled",target:z});J?.params.onDragCancel?.(),this.destroyDrag()}shouldPreventMouseEvent(z){let J=z.type;return(J==="mousemove"||J==="pointermove")&&z.cancelable&&D2(this.beans,z)&&!_2(LQ(z))}initDrag(z,...J){this.drag=z;let Q=this.beans,Z=(q)=>this.onScroll(q),$=(q)=>this.onKeyDown(q),X=m0(Q),Y=Y0(Q);L6(z.handlers,[X,"contextmenu",f1],[X,"keydown",$],[Y,"scroll",Z,{capture:!0}],[Y.defaultView||window,"scroll",Z],...J)}destroyDrag(){this.dragging=!1;let z=this.drag;if(z){let J=z.rootEl;if(D1?.get(J)===z)D1.delete(J);this.drag=null,UW(z.pointerCapture),LZ(z.handlers)}}onPointerDown(z,J){if(this.isPointer())return;let Q=this.beans;if(S1?.has(J))return;let Z=J.pointerType;if(Z==="touch"){if(Q.gos.get("suppressTouch")||!z.includeTouch)return;if(z.stopPropagationForTouch)J.stopPropagation();if(_2(LQ(J)))return}if(!J.isPrimary)return;if(Z==="mouse"&&J.button!==0)return;this.destroyDrag();let $=m0(Q),X=z.eElement,Y=J.pointerId,q=new FQ($,z,J,Y);D1??(D1=new WeakMap),D1.set($,q);let G=(W)=>{if(W.pointerId===Y)this.onMouseOrPointerMove(W)},U=(W)=>{if(W.pointerId===Y)this.onMouseOrPointerUp(W)},_=(W)=>{if(W.pointerId===Y&&T4(W))this.cancelDrag()},H=(W)=>this.draggingPreventDefault(W);if(this.initDrag(q,[$,"pointerup",U],[$,"pointercancel",_],[$,"pointermove",G,Uz],[$,"touchmove",H,Uz],[X,"mousemove",H,Uz]),z.dragStartPixels===0)this.onMouseOrPointerMove(J);else T4(J)}onTouchStart(z,J){if(this.gos.get("suppressTouch")||!z.includeTouch)return;if(!T4(J))return;if(_2(LQ(J)))return;if(z.stopPropagationForTouch)J.stopPropagation();if(this.isPointer()){if(this.dragging)f1(J);return}this.destroyDrag();let Z=this.beans,$=m0(Z),X=new FQ($,z,J.touches[0]),Y=(W)=>this.onTouchMove(W),q=(W)=>this.onTouchUp(W),G=(W)=>this.onTouchCancel(W),U=(W)=>this.draggingPreventDefault(W),_=m0(Z),H=J.target??z.eElement;if(this.initDrag(X,[H,"touchmove",Y,KQ],[H,"touchend",q,KQ],[H,"touchcancel",G,KQ],[_,"touchmove",U,Uz],[_,"touchend",q,Uz],[_,"touchcancel",G,Uz]),z.dragStartPixels===0)this.onMove(X.start)}draggingPreventDefault(z){if(this.dragging)f1(z)}onMouseDown(z,J){if(J.button!==0)return;if(S1?.has(J))return;if(this.isPointer())return;let Q=this.beans;this.destroyDrag();let Z=new FQ(m0(Q),z,J),$=(q)=>this.onMouseOrPointerMove(q),X=(q)=>this.onMouseOrPointerUp(q),Y=m0(Q);if(this.initDrag(Z,[Y,"mousemove",$],[Y,"mouseup",X]),z.dragStartPixels===0)this.onMouseOrPointerMove(J);else T4(J)}onScroll(z){if(!T4(z))return;let J=this.drag,Q=J?.lastDrag;if(Q&&this.dragging)J.params?.onDragging?.(Q)}onMouseOrPointerMove(z){if(!T4(z))return;if(jz())Y0(this.beans).getSelection()?.removeAllRanges();if(this.shouldPreventMouseEvent(z))f1(z);this.onMove(z)}onTouchCancel(z){let J=this.drag;if(!J||!T4(z))return;if(!j1(J.start,z.changedTouches))return;this.cancelDrag()}onTouchMove(z){let J=this.drag;if(!J||!T4(z))return;let Q=j1(J.start,z.touches);if(Q)this.onMove(Q),this.draggingPreventDefault(z)}onMove(z){let J=this.drag;if(!J)return;J.lastDrag=z;let Q=J.params;if(!this.dragging){let Z=J.start,X=Q.dragStartPixels??4;if(o8(z,Z,X))return;if(this.dragging=!0,Q.capturePointer)J.pointerCapture=GW(this.beans.eRootDiv,z);if(this.eventSvc.dispatchEvent({type:"dragStarted",target:Q.eElement}),Q.onDragStart?.(Z),this.drag!==J)return;if(Q.onDragging?.(Z),this.drag!==J)return}Q.onDragging?.(z)}onTouchUp(z){let J=this.drag;if(J&&T4(z))this.onUp(j1(J.start,z.changedTouches))}onMouseOrPointerUp(z){if(T4(z))this.onUp(z)}onUp(z){let J=this.drag;if(!J)return;if(!z)z=J.lastDrag;if(z&&this.dragging)this.dragging=!1,J.params.onDragStop?.(z),this.eventSvc.dispatchEvent({type:"dragStopped",target:J.params.eElement});this.destroyDrag()}onKeyDown(z){if(z.key===k.ESCAPE)this.cancelDrag()}},b7=(z)=>{LZ(z.handlers);let J=z.oldTouchAction;if(J!=null){let Q=z.params.eElement.style;if(Q)Q.touchAction=J}},FQ=class{constructor(z,J,Q,Z=null){this.rootEl=z,this.params=J,this.start=Q,this.pointerId=Z,this.handlers=[],this.lastDrag=null,this.pointerCapture=null,this.eElement=J.eElement}},LQ=(z)=>{let J=z.target;return J instanceof Element?J:null},WW=class extends HW{shouldPreventMouseEvent(z){return this.gos.get("enableCellTextSelection")&&super.shouldPreventMouseEvent(z)}},BW=class extends S{constructor(){super(...arguments);this.beanName="horizontalResizeSvc"}addResizeBar(z){let J={dragStartPixels:z.dragStartPixels||0,eElement:z.eResizeBar,onDragStart:this.onDragStart.bind(this,z),onDragStop:this.onDragStop.bind(this,z),onDragging:this.onDragging.bind(this,z),onDragCancel:this.onDragStop.bind(this,z),includeTouch:!0,stopPropagationForTouch:!0},{dragSvc:Q}=this.beans;return Q.addDragSource(J),()=>Q.removeDragSource(J)}onDragStart(z,J){this.dragStartX=J.clientX,this.setResizeIcons();let Q=J instanceof MouseEvent&&J.shiftKey===!0;z.onResizeStart(Q)}setResizeIcons(){let z=this.beans.ctrlsSvc.get("gridCtrl");z.setResizeCursor(1),z.disableUserSelect(!0)}onDragStop(z){z.onResizeEnd(this.resizeAmount),this.resetIcons()}resetIcons(){let z=this.beans.ctrlsSvc.get("gridCtrl");z.setResizeCursor(!1),z.disableUserSelect(!1)}onDragging(z,J){this.resizeAmount=J.clientX-this.dragStartX,z.onResizing(this.resizeAmount)}};var EJ=class{constructor(z){if(this.tickingInterval=null,this.onScrollCallback=null,this.scrollContainer=z.scrollContainer,this.scrollHorizontally=z.scrollAxis.includes("x"),this.scrollVertically=z.scrollAxis.includes("y"),this.scrollByTick=z.scrollByTick??20,z.onScrollCallback)this.onScrollCallback=z.onScrollCallback;if(this.scrollVertically)this.getVerticalPosition=z.getVerticalPosition,this.setVerticalPosition=z.setVerticalPosition;if(this.scrollHorizontally)this.getHorizontalPosition=z.getHorizontalPosition,this.setHorizontalPosition=z.setHorizontalPosition;this.shouldSkipVerticalScroll=z.shouldSkipVerticalScroll||(()=>!1),this.shouldSkipHorizontalScroll=z.shouldSkipHorizontalScroll||(()=>!1)}get scrolling(){return this.tickingInterval!==null}check(z,J=!1){let Q=!this.scrollVertically||J||this.shouldSkipVerticalScroll(),Z=!this.scrollHorizontally||this.shouldSkipHorizontalScroll();if(Q&&Z)return;let $=this.scrollContainer.getBoundingClientRect(),X=this.scrollByTick;if(this.tickLeft=!Z&&z.clientX<$.left+X,this.tickRight=!Z&&z.clientX>$.right-X,this.tickUp=!Q&&z.clientY<$.top+X,this.tickDown=!Q&&z.clientY>$.bottom-X,this.tickLeft||this.tickRight||this.tickUp||this.tickDown)this.ensureTickingStarted();else this.ensureCleared()}ensureTickingStarted(){if(this.tickingInterval===null)this.tickingInterval=window.setInterval(this.doTick.bind(this),100),this.tickCount=0}doTick(){this.tickCount++;let z=this.tickCount>20?200:this.tickCount>10?80:40;if(this.scrollVertically){let J=this.getVerticalPosition();if(this.tickUp)this.setVerticalPosition(J-z);if(this.tickDown)this.setVerticalPosition(J+z)}if(this.scrollHorizontally){let J=this.getHorizontalPosition();if(this.tickLeft)this.setHorizontalPosition(J-z);if(this.tickRight)this.setHorizontalPosition(J+z)}if(this.onScrollCallback)this.onScrollCallback()}ensureCleared(){if(this.tickingInterval)window.clearInterval(this.tickingInterval),this.tickingInterval=null}},I1=class{constructor(){this.reordered=!1,this.removals=[],this.updates=new Set,this.adds=new Set}},X1=(z)=>{let J=z.childrenAfterGroup;while(J?.length){let Q=J[0];if(Q.sourceRowIndex>=0)return Q;J=Q.childrenAfterGroup}},S$=(z,J,Q,Z)=>{if(!J.size||!z)return!1;let $=!1,X=z.length??0,Y=-1;if(Q){if(Y=Q.sourceRowIndex,Q=Y<0?X1(Q):null,Q)Y=Q.sourceRowIndex}if(Y<0||Y>=X)Y=X;else if(!Z)++Y;let q=Y,G=Math.min(Y,X-1);for(let H of J){let W=H.sourceRowIndex;if(WG)G=W}let U=q;for(let H=q;H=Y;--H){let W=z[H];if(J.has(W))continue;if(W.sourceRowIndex!==_)W.sourceRowIndex=_,z[_]=W,$=!0;--_}for(let H of J){if(H.sourceRowIndex!==U)H.sourceRowIndex=U,z[U]=H,$=!0;++U}return $};function z5(z,J){return c2(z,J.target)?.getFocusedCellPosition()??null}function J5(z,J){let Q=A0(z.gos,"normal"),Z=J,$,X;if(Z.clientX!=null||Z.clientY!=null)$=Z.clientX,X=Z.clientY;else $=Z.x,X=Z.y;let{pageFirstPixel:Y}=z.pageBounds.getCurrentPagePixelRange();if(X+=Y,Q){let q=z.ctrlsSvc.getScrollFeature(),G=q.getVScrollPosition(),U=q.getHScrollPosition();$+=U.left,X+=G.top}return{x:$,y:X}}var KJ={moduleName:"Drag",version:i,beans:[WW]};var p2={moduleName:"SharedDragAndDrop",version:i,beans:[W_],dependsOn:[KJ],userComponents:{agDragAndDropImage:qW},icons:{columnMovePin:"pin",columnMoveHide:"eye-slash",columnMoveMove:"arrows",columnMoveLeft:"left",columnMoveRight:"right",columnMoveGroup:"group",columnMoveValue:"aggregation",columnMovePivot:"pivot",dropNotAllowed:"not-allowed",rowDrag:"grip"}};var Q5={moduleName:"HorizontalResize",version:i,beans:[BW],dependsOn:[KJ]},EW=":where(.ag-ltr) :where(.ag-column-moving){.ag-cell,.ag-header-cell,.ag-spanned-cell-wrapper{transition:left .2s}.ag-header-group-cell{transition:left .2s,width .2s}}:where(.ag-rtl) :where(.ag-column-moving){.ag-cell,.ag-header-cell,.ag-spanned-cell-wrapper{transition:right .2s}.ag-header-group-cell{transition:right .2s,width .2s}}",KW=class extends S{constructor(){super(...arguments);this.beanName="colAnimation",this.executeNextFuncs=[],this.executeLaterFuncs=[],this.active=!1,this.activeNext=!1,this.suppressAnimation=!1,this.animationThreadCount=0}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>this.gridBodyCtrl=z.gridBodyCtrl)}isActive(){return this.active&&!this.suppressAnimation}setSuppressAnimation(z){this.suppressAnimation=z}start(){if(this.active)return;let{gos:z}=this;if(z.get("suppressColumnMoveAnimation"))return;if(z.get("enableRtl"))return;this.ensureAnimationCssClassPresent(),this.active=!0,this.activeNext=!0}finish(){if(!this.active)return;this.flush(()=>this.activeNext=!1,()=>this.active=!1)}executeNextVMTurn(z){if(this.activeNext)this.executeNextFuncs.push(z);else z()}executeLaterVMTurn(z){if(this.active)this.executeLaterFuncs.push(z);else z()}ensureAnimationCssClassPresent(){this.animationThreadCount++;let z=this.animationThreadCount,{gridBodyCtrl:J}=this;J.setColumnMovingCss(!0),this.executeLaterFuncs.push(()=>{if(this.animationThreadCount===z)J.setColumnMovingCss(!1)})}flush(z,J){let{executeNextFuncs:Q,executeLaterFuncs:Z}=this;if(Q.length===0&&Z.length===0){z(),J();return}let $=(X)=>{while(X.length){let Y=X.pop();if(Y)Y()}};this.beans.frameworkOverrides.wrapIncoming(()=>{window.setTimeout(()=>{z(),$(Q)},0),window.setTimeout(()=>{J(),$(Z)},200)})}};function FW(z,J,Q){z.colMoves?.moveColumnByIndex(J,Q,"api")}function LW(z,J,Q){z.colMoves?.moveColumns(J,Q,"api")}var DW=class extends S{constructor(z){super();this.pinned=z,this.columnsToAggregate=[],this.columnsToGroup=[],this.columnsToPivot=[]}onDragEnter(z){if(this.clearColumnsList(),this.gos.get("functionsReadOnly"))return;let J=z.dragItem.columns;if(!J)return;for(let Q of J){if(!Q.primary)continue;if(Q.isAnyFunctionActive())continue;if(Q.isAllowValue())this.columnsToAggregate.push(Q);else if(Q.isAllowRowGroup())this.columnsToGroup.push(Q);else if(Q.isAllowPivot())this.columnsToPivot.push(Q)}}getIconName(){if(this.columnsToAggregate.length+this.columnsToGroup.length+this.columnsToPivot.length>0)return this.pinned?"pinned":"move";return null}onDragLeave(z){this.clearColumnsList()}clearColumnsList(){this.columnsToAggregate.length=0,this.columnsToGroup.length=0,this.columnsToPivot.length=0}onDragging(z){}onDragStop(z){let{valueColsSvc:J,rowGroupColsSvc:Q,pivotColsSvc:Z}=this.beans;if(this.columnsToAggregate.length>0)J?.addColumns(this.columnsToAggregate,"toolPanelDragAndDrop");if(this.columnsToGroup.length>0)Q?.addColumns(this.columnsToGroup,"toolPanelDragAndDrop");if(this.columnsToPivot.length>0)Z?.addColumns(this.columnsToPivot,"toolPanelDragAndDrop")}onDragCancel(){this.clearColumnsList()}};function MW(z,J){if(!J||J.length<=1)return;if(J.filter((Z)=>z.indexOf(Z)<0).length>0)return;J.sort((Z,$)=>{let X=z.indexOf(Z),Y=z.indexOf($);return X-Y})}function kW(z){let J=[...z];for(let Q of z){let Z=null,$=Q.parent;while($?.getDisplayedLeafColumns().length===1)Z=$,$=$.parent;if(Z!=null){let Y=Z.getColGroupDef()?.marryChildren?Z.getProvidedColumnGroup().getLeafColumns():Z.getLeafColumns();for(let q of Y)if(!J.includes(q))J.push(q)}}return J}function fW(z,J,Q,Z){let $=Z.allCols,X=null,Y=null;for(let q=0;q$.includes(W));if(Y===null)Y=_;else if(!Z0(_,Y))break;let H=VW(U);if(X===null||H=E)return;if(Q&&K<=E)return}let L=fW(B,W,U,_);if(!L)return;let D=L.move;if(D>G.getCols().length-W.length)return;return{columns:W,toIndex:D}}function R$(z){let{columns:J,toIndex:Q}=V$(z)||{},{finished:Z,colMoves:$}=z;if(!J||Q==null)return null;return $.moveColumns(J,Q,"uiColumnMoved",Z),Z?null:{columns:J,toIndex:Q}}function SW(z,J){let Q=J.getCols(),Z=z.map((G)=>Q.indexOf(G)).sort((G,U)=>G-U),$=Z[0];return y(Z)-$!==Z.length-1?null:$}function VW(z){function J(Z){let $=[],X=Z.getOriginalParent();while(X!=null)$.push(X),X=X.getOriginalParent();return $}let Q=0;for(let Z=0;ZX.length?[$,X]:[X,$];for(let Y of $)if(X.indexOf(Y)===-1)Q++}return Q}function RW(z,J){switch(J){case"left":return z.leftCols;case"right":return z.rightCols;default:return z.centerCols}}function AW(z){let{movingCols:J,draggingRight:Q,xPosition:Z,pinned:$,gos:X,colModel:Y,visibleCols:q}=z;if(X.get("suppressMovableColumns")||J.some((M)=>M.colDef.suppressMovable))return[];let U=RW(q,$),_=Y.getCols(),H=U.filter((M)=>J.includes(M)),W=U.filter((M)=>!J.includes(M)),B=_.filter((M)=>!J.includes(M)),E=0,K=Z;if(Q){let M=0;for(let f of H)M+=f.getActualWidth();K-=M}if(K>0){for(let M=0;M0){let M=W[E-1];F=B.indexOf(M)+1}else if(F=B.indexOf(W[0]),F===-1)F=0;let L=[F],D=(M,f)=>M-f;if(Q){let M=F+1,f=_.length-1;while(M<=f)L.push(M),M++;L.sort(D)}else{let M=F,f=_.length-1,A=_[M];while(M<=f&&U.indexOf(A)<0)M++,L.push(M),A=_[M];M=F-1;let R=0;while(M>=R)L.push(M),M--;L.sort(D).reverse()}return L}function nQ(z){let{pinned:J,fromKeyboard:Q,gos:Z,ctrlsSvc:$,useHeaderRow:X,skipScrollPadding:Y}=z,q=$.getHeaderRowContainerCtrl(J)?.eViewport,{x:G}=z;if(!q)return 0;if(Q)G-=q.getBoundingClientRect().left;if(Z.get("enableRtl")){if(X)q=q.querySelector(".ag-header-row");G=q.clientWidth-G}if(J==null&&!Y)G+=$.get("center").getCenterViewportScrollLeft();return G}function DQ(z,J){for(let Q of z)Q.moving=J,Q.dispatchColEvent("movingChanged","uiColumnMoved")}var x7=7,dQ=100,B6=dQ/2,jW=5,OW=100,PW=class extends S{constructor(z){super();this.pinned=z,this.needToMoveLeft=!1,this.needToMoveRight=!1,this.lastMovedInfo=null,this.isCenterContainer=!P(z)}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>{this.gridBodyCon=z.gridBodyCtrl})}getIconName(){let{pinned:z,lastDraggingEvent:J}=this,{dragItem:Q}=J||{},Z=Q?.columns??[];for(let $ of Z){let X=$.getPinned();if($.getColDef().lockPinned){if(X==z)return"move";continue}let Y=Q?.containerType;if(Y===z||!z)return"move";if(z&&(!X||Y!==z))return"pinned"}return"notAllowed"}onDragEnter(z){let J=z.dragItem,Q=J.columns;if(z.dragSource.type===0)this.setColumnsVisible(Q,!0,"uiColumnDragged");else{let $=J.visibleState,X=(Q||[]).filter((Y)=>$[Y.getId()]&&!Y.isVisible());this.setColumnsVisible(X,!0,"uiColumnDragged")}if(!this.gos.get("suppressMoveWhenColumnDragging"))this.attemptToPinColumns(Q,this.pinned);this.onDragging(z,!0,!0)}onDragging(z=this.lastDraggingEvent,J=!1,Q=!1,Z=!1){let{gos:$,ctrlsSvc:X}=this.beans,Y=$.get("suppressMoveWhenColumnDragging");if(Z&&!Y){this.finishColumnMoving();return}if(this.lastDraggingEvent=z,!z||!Z&&d(z.hDirection))return;let q=nQ({x:z.x,pinned:this.pinned,gos:$,ctrlsSvc:X});if(!J)this.checkCenterForScrolling(q);if(Y)this.handleColumnDragWhileSuppressingMovement(z,J,Q,q,Z);else this.handleColumnDragWhileAllowingMovement(z,J,Q,q,Z)}onDragLeave(){this.ensureIntervalCleared(),this.clearHighlighted(),this.updateDragItemContainerType(),this.lastMovedInfo=null}onDragStop(){this.onDragging(this.lastDraggingEvent,!1,!0,!0),this.ensureIntervalCleared(),this.lastMovedInfo=null}onDragCancel(){this.clearHighlighted(),this.ensureIntervalCleared(),this.lastMovedInfo=null}setColumnsVisible(z,J,Q){if(!z?.length)return;let Z=z.filter(($)=>!$.getColDef().lockVisible);if(!Z.length)return;this.beans.colModel.setColsVisible(Z,J,Q)}finishColumnMoving(){this.clearHighlighted();let z=this.lastMovedInfo;if(!z)return;let{columns:J,toIndex:Q}=z;this.beans.colMoves.moveColumns(J,Q,"uiColumnMoved",!0)}updateDragItemContainerType(){let{lastDraggingEvent:z}=this;if(this.gos.get("suppressMoveWhenColumnDragging")||!z)return;let J=z.dragItem;if(!J)return;J.containerType=this.pinned}handleColumnDragWhileSuppressingMovement(z,J,Q,Z,$){let X=this.getAllMovingColumns(z,!0);if($){let Y=this.isAttemptingToPin(X);if(Y)this.attemptToPinColumns(X,void 0,!0);let{fromLeft:q,xPosition:G}=this.getNormalisedXPositionInfo(X,Y)||{};if(q==null||G==null){this.finishColumnMoving();return}this.moveColumnsAfterHighlight({allMovingColumns:X,xPosition:G,fromEnter:J,fakeEvent:Q,fromLeft:q})}else{if(!this.beans.dragAndDrop.isDropZoneWithinThisGrid(z))return;this.highlightHoveredColumn(X,Z)}}handleColumnDragWhileAllowingMovement(z,J,Q,Z,$){let X=this.getAllMovingColumns(z),Y=this.normaliseDirection(z.hDirection)==="right",q=z.dragSource.type===1,G=this.getMoveColumnParams({allMovingColumns:X,isFromHeader:q,xPosition:Z,fromLeft:Y,fromEnter:J,fakeEvent:Q}),U=R$({...G,finished:$});if(U)this.lastMovedInfo=U}getAllMovingColumns(z,J=!1){let Q=z.dragSource.getDragItem(),Z;if(J){if(Z=Q.columnsInSplit,!Z)Z=Q.columns}else Z=Q.columns;let $=(X)=>X.colDef.lockPinned?X.getPinned()==this.pinned:!0;if(!Z)return[];return Z.filter($)}getMoveColumnParams(z){let{allMovingColumns:J,isFromHeader:Q,xPosition:Z,fromLeft:$,fromEnter:X,fakeEvent:Y}=z,{gos:q,colModel:G,colMoves:U,visibleCols:_}=this.beans;return{allMovingColumns:J,isFromHeader:Q,fromLeft:$,xPosition:Z,pinned:this.pinned,fromEnter:X,fakeEvent:Y,gos:q,colModel:G,colMoves:U,visibleCols:_}}highlightHoveredColumn(z,J){let{gos:Q,colModel:Z}=this.beans,$=Q.get("enableRtl"),X=Z.getCols().filter((_)=>_.isVisible()&&_.getPinned()===this.pinned),Y=null,q=null,G=null;for(let _ of X){if(q=_.getActualWidth(),Y=this.getNormalisedColumnLeft(_,0,$),Y!=null){let H=Y+q;if(Y<=J&&H>=J){G=_;break}}Y=null,q=null}if(!G){for(let _=X.length-1;_>=0;_--){let H=X[_],W=X[_].parent;if(!W){G=H;break}let B=W?.getDisplayedLeafColumns();if(B.length){G=y(B);break}}if(!G)return;Y=this.getNormalisedColumnLeft(G,0,$),q=G.getActualWidth()}else if(z.indexOf(G)!==-1)G=null;if(G==null||Y==null||q==null){if(this.lastHighlightedColumn?.column!==G)this.clearHighlighted();return}let U;if(J-Yx7;return J&&Q||z.some((Z)=>Z.getPinned()!==this.pinned)}moveColumnsAfterHighlight(z){let{allMovingColumns:J,xPosition:Q,fromEnter:Z,fakeEvent:$,fromLeft:X}=z,Y=this.getMoveColumnParams({allMovingColumns:J,isFromHeader:!0,xPosition:Q,fromLeft:X,fromEnter:Z,fakeEvent:$}),{columns:q,toIndex:G}=V$(Y)||{};if(q&&G!=null)this.lastMovedInfo={columns:q,toIndex:G};this.finishColumnMoving()}clearHighlighted(){let{lastHighlightedColumn:z}=this;if(!z)return;w7(z.column,null),this.lastHighlightedColumn=null}checkCenterForScrolling(z){if(!this.isCenterContainer)return;let J=this.beans.ctrlsSvc.get("center"),Q=J.getCenterViewportScrollLeft(),Z=Q+J.getCenterWidth(),$,X;if(this.gos.get("enableRtl"))$=zZ-B6;else X=zZ-B6;if(this.needToMoveRight=$,this.needToMoveLeft=X,X||$)this.ensureIntervalStarted();else this.ensureIntervalCleared()}ensureIntervalStarted(){if(this.movingIntervalId)return;this.intervalCount=0,this.failedMoveAttempts=0,this.movingIntervalId=window.setInterval(this.moveInterval.bind(this),OW),this.beans.dragAndDrop.setDragImageCompIcon(this.needToMoveLeft?"left":"right",!0)}ensureIntervalCleared(){if(!this.movingIntervalId)return;window.clearInterval(this.movingIntervalId),this.movingIntervalId=null,this.failedMoveAttempts=0,this.beans.dragAndDrop.setDragImageCompIcon(this.getIconName())}moveInterval(){let z;if(this.intervalCount++,z=10+this.intervalCount*jW,z>dQ)z=dQ;let J=null,Q=this.gridBodyCon.scrollFeature;if(this.needToMoveLeft)J=Q.scrollHorizontally(-z);else if(this.needToMoveRight)J=Q.scrollHorizontally(z);if(J!==0)this.onDragging(this.lastDraggingEvent),this.failedMoveAttempts=0;else{this.failedMoveAttempts++;let{pinnedCols:Z,dragAndDrop:$,gos:X}=this.beans;if(this.failedMoveAttempts<=x7+1||!Z)return;if($.setDragImageCompIcon("pinned"),!X.get("suppressMoveWhenColumnDragging")){let Y=this.lastDraggingEvent?.dragItem.columns;this.attemptToPinColumns(Y,void 0,!0)}}}getPinDirection(){if(this.needToMoveLeft||this.pinned==="left")return"left";if(this.needToMoveRight||this.pinned==="right")return"right"}attemptToPinColumns(z,J,Q=!1){let Z=(z||[]).filter((Y)=>!Y.colDef.lockPinned);if(!Z.length)return 0;if(Q)J=this.getPinDirection();let{pinnedCols:$,dragAndDrop:X}=this.beans;if($?.setColsPinned(Z,J,"uiColumnDragged"),Q)X.nudge();return Z.length}destroy(){super.destroy(),this.lastDraggingEvent=null,this.clearHighlighted(),this.lastMovedInfo=null}};function w7(z,J){if(z.highlighted===J)return;z.highlighted=J,z.dispatchColEvent("headerHighlightChanged","uiColumnMoved")}function TW(z){let J=z.length,Q,Z;for(let $=0;${let $,X=Z.gridBodyCtrl.eBodyViewport;switch(Q){case"left":$=[[X,Z.left.eContainer],[Z.bottomLeft.eContainer],[Z.topLeft.eContainer]];break;case"right":$=[[X,Z.right.eContainer],[Z.bottomRight.eContainer],[Z.topRight.eContainer]];break;default:$=[[X,Z.center.eViewport],[Z.bottomCenter.eViewport],[Z.topCenter.eViewport]];break}this.eSecondaryContainers=$}),this.moveColumnFeature=this.createManagedBean(new PW(Q)),this.bodyDropPivotTarget=this.createManagedBean(new DW(Q)),J.addDropTarget(this),this.addDestroyFunc(()=>J.removeDropTarget(this))}isInterestedIn(z){return z===1||z===0&&this.gos.get("allowDragFromColumnsToolPanel")}getSecondaryContainers(){return this.eSecondaryContainers}getContainer(){return this.eContainer}getIconName(){return this.currentDropListener.getIconName()}isDropColumnInPivotMode(z){return this.beans.colModel.pivotMode&&z.dragSource.type===0}onDragEnter(z){this.currentDropListener=this.isDropColumnInPivotMode(z)?this.bodyDropPivotTarget:this.moveColumnFeature,this.currentDropListener.onDragEnter(z)}onDragLeave(z){this.currentDropListener.onDragLeave(z)}onDragging(z){this.currentDropListener.onDragging(z)}onDragStop(z){this.currentDropListener.onDragStop(z)}onDragCancel(){this.currentDropListener.onDragCancel()}};function A$(z,J){let Q=[],Z=[],$=[];if(z.forEach((Y)=>{let q=Y.colDef.lockPosition;if(q==="right")$.push(Y);else if(q==="left"||q===!0)Q.push(Y);else Z.push(Y)}),J.get("enableRtl"))return[...$,...Z,...Q];return[...Q,...Z,...$]}function j$(z,J){let Q=!0;return g4(null,J,(Z)=>{if(!G0(Z))return;let $=Z;if(!$.getColGroupDef()?.marryChildren)return;let q=[];for(let W of $.getLeafColumns()){let B=z.indexOf(W);q.push(B)}let G=Math.max.apply(Math,q),U=Math.min.apply(Math,q),_=G-U,H=$.getLeafColumns().length-1;if(_>H)Q=!1}),Q}var IW=class extends S{constructor(){super(...arguments);this.beanName="colMoves"}moveColumnByIndex(z,J,Q){let Z=this.beans.colModel.getCols();if(!Z)return;let $=Z[z];this.moveColumns([$],J,Q)}moveColumns(z,J,Q,Z=!0){let{colModel:$,colAnimation:X,visibleCols:Y,eventSvc:q}=this.beans,G=$.getCols();if(!G)return;if(J>G.length-z.length){V(30,{toIndex:J});return}X?.start();let U=$.getColsForKeys(z);if(this.doesMovePassRules(U,J))E7($.getCols(),U,J),Y.refresh(Q),q.dispatchEvent({type:"columnMoved",columns:U,column:U.length===1?U[0]:null,toIndex:J,finished:Z,source:Q});X?.finish()}doesMovePassRules(z,J){let Q=this.getProposedColumnOrder(z,J);return this.doesOrderPassRules(Q)}doesOrderPassRules(z){let{colModel:J,gos:Q}=this.beans;if(!j$(z,J.getColTree()))return!1;if(!(($)=>{let X=(U)=>{if(!U)return 0;return U==="left"||U===!0?-1:1},Y=Q.get("enableRtl"),q=Y?1:-1,G=!0;for(let U of $){let _=X(U.colDef.lockPosition);if(Y){if(_>q)G=!1}else if(_q?"hide":"notAllowed",getDragItem:G?()=>bW(J,Y.allCols):()=>yW(J),dragItemName:Q,onDragStarted:()=>{q=!Z.get("suppressDragLeaveHidesColumns"),DQ(U,!0)},onDragStopped:()=>DQ(U,!1),onDragCancelled:()=>DQ(U,!1),onGridEnter:(W)=>{if(q){let{columns:B=[],visibleState:E}=W??{},K=G?(L)=>!E||E[L.getColId()]:()=>!0,F=B.filter((L)=>!L.getColDef().lockVisible&&K(L));$.setColsVisible(F,!0,"uiColumnMoved")}},onGridExit:(W)=>{if(q){let B=W?.columns?.filter((E)=>!E.getColDef().lockVisible)||[];$.setColsVisible(B,!1,"uiColumnMoved")}}};return X.addDragSource(H,!0),H}};function CW(z,J){while(z){if(z.getGroupId()===J)return z;z=z.parent}return}function yW(z){let J={};return J[z.getId()]=z.isVisible(),{columns:[z],visibleState:J,containerType:z.pinned}}function bW(z,J){let Q=z.getProvidedColumnGroup().getLeafColumns(),Z={};for(let q of Q)Z[q.getId()]=q.isVisible();let $=[];for(let q of J)if(Q.indexOf(q)>=0)$.push(q),X0(Q,q);for(let q of Q)$.push(q);let X=[],Y=z.getLeafColumns();for(let q of $)if(Y.indexOf(q)!==-1)X.push(q);return{columns:$,columnsInSplit:X,visibleState:Z,containerType:X[0]?.pinned}}var n2={moduleName:"ColumnMove",version:i,beans:[IW,KW],apiFunctions:{moveColumnByIndex:FW,moveColumns:LW},dependsOn:[p2],css:[EW]},xW=class extends S{constructor(){super(...arguments);this.beanName="autoWidthCalc"}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>{this.centerRowContainerCtrl=z.center})}getPreferredWidthForColumn(z,J){let Q=this.getHeaderCellForColumn(z);if(!Q)return-1;let Z=this.beans.rowRenderer.getAllCellsNotSpanningForColumn(z);if(!J)Z.push(Q);return this.getPreferredWidthForElements(Z)}getPreferredWidthForColumnGroup(z){let J=this.getHeaderCellForColumn(z);if(!J)return-1;return this.getPreferredWidthForElements([J])}getPreferredWidthForElements(z,J){let Q=document.createElement("form");Q.style.position="fixed";let Z=this.centerRowContainerCtrl.eContainer;for(let X of z)this.cloneItemIntoDummy(X,Q);Z.appendChild(Q);let $=Math.ceil(Q.getBoundingClientRect().width);return Q.remove(),J=J??this.gos.get("autoSizePadding"),$+J}getHeaderCellForColumn(z){let J=null;for(let Q of this.beans.ctrlsSvc.getHeaderRowContainerCtrls()){let Z=Q.getHtmlElementForColumnHeader(z);if(Z!=null)J=Z}return J}cloneItemIntoDummy(z,J){let Q=z.cloneNode(!0);Q.style.width="",Q.style.position="static",Q.style.left="";let Z=document.createElement("div"),$=Z.classList;if(["ag-header-cell","ag-header-group-cell"].some((q)=>Q.classList.contains(q)))$.add("ag-header","ag-header-row"),Z.style.position="static";else $.add("ag-row");let Y=z.parentElement;while(Y){if(["ag-header-row","ag-row"].some((G)=>Y.classList.contains(G))){for(let G=0;GX.getPinned());z.dispatchEvent({type:"columnPinned",pinned:$!=null?$:null,columns:J,column:Z,source:Q})}function NW(z,J,Q){if(!J.length)return;let Z=J.length===1?J[0]:null,$=P$(J,(X)=>X.isVisible());z.dispatchEvent({type:"columnVisible",visible:$,columns:J,column:Z,source:Q})}function v$(z,J,Q,Z){z.dispatchEvent({type:J,columns:Q,column:Q?.length==1?Q[0]:null,source:Z})}function N1(z,J,Q,Z,$=null){if(J?.length)z.dispatchEvent({type:"columnResized",columns:J,column:J.length===1?J[0]:null,flexColumns:$,finished:Q,source:Z})}var gW=class extends S{constructor(z,J,Q,Z){super();this.comp=z,this.eResize=J,this.pinned=Q,this.columnGroup=Z}postConstruct(){if(!this.columnGroup.isResizable()){this.comp.setResizableDisplayed(!1);return}let{horizontalResizeSvc:z,gos:J,colAutosize:Q}=this.beans,Z=z.addResizeBar({eResizeBar:this.eResize,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this,!1),onResizeEnd:this.onResizing.bind(this,!0)});if(this.addDestroyFunc(Z),!J.get("suppressAutoSize")&&Q)this.addDestroyFunc(Q.addColumnGroupResize(this.eResize,this.columnGroup,()=>this.resizeLeafColumnsToFit("uiColumnResized")))}onResizeStart(z){let{columnsToResize:J,resizeStartWidth:Q,resizeRatios:Z,groupAfterColumns:$,groupAfterStartWidth:X,groupAfterRatios:Y}=this.getInitialValues(z);this.resizeCols=J,this.resizeStartWidth=Q,this.resizeRatios=Z,this.resizeTakeFromCols=$,this.resizeTakeFromStartWidth=X,this.resizeTakeFromRatios=Y,this.toggleColumnResizing(!0)}onResizing(z,J,Q="uiColumnResized"){let Z=this.normaliseDragChange(J),$=this.resizeStartWidth+Z;this.resizeColumnsFromLocalValues($,Q,z)}getInitialValues(z){let J=(G)=>G.reduce((U,_)=>U+_.getActualWidth(),0),Q=(G,U)=>G.map((_)=>_.getActualWidth()/U),Z=this.getColumnsToResize(),$=J(Z),X=Q(Z,$),Y={columnsToResize:Z,resizeStartWidth:$,resizeRatios:X},q=null;if(z)q=this.beans.colGroupSvc?.getGroupAtDirection(this.columnGroup,"After")??null;if(q){let G=q.getDisplayedLeafColumns(),U=Y.groupAfterColumns=G.filter((H)=>H.isResizable()),_=Y.groupAfterStartWidth=J(U);Y.groupAfterRatios=Q(U,_)}else Y.groupAfterColumns=void 0,Y.groupAfterStartWidth=void 0,Y.groupAfterRatios=void 0;return Y}resizeLeafColumnsToFit(z){let J=this.beans.autoWidthCalc.getPreferredWidthForColumnGroup(this.columnGroup),Q=this.getInitialValues();if(J>Q.resizeStartWidth)this.resizeColumns(Q,J,z,!0)}resizeColumnsFromLocalValues(z,J,Q=!0){if(!this.resizeCols||!this.resizeRatios)return;let Z={columnsToResize:this.resizeCols,resizeStartWidth:this.resizeStartWidth,resizeRatios:this.resizeRatios,groupAfterColumns:this.resizeTakeFromCols,groupAfterStartWidth:this.resizeTakeFromStartWidth,groupAfterRatios:this.resizeTakeFromRatios};this.resizeColumns(Z,z,J,Q)}resizeColumns(z,J,Q,Z=!0){let{columnsToResize:$,resizeStartWidth:X,resizeRatios:Y,groupAfterColumns:q,groupAfterStartWidth:G,groupAfterRatios:U}=z,_=[];if(_.push({columns:$,ratios:Y,width:J}),q){let H=J-X;_.push({columns:q,ratios:U,width:G-H})}if(this.beans.colResize?.resizeColumnSets({resizeSets:_,finished:Z,source:Q}),Z)this.toggleColumnResizing(!1)}toggleColumnResizing(z){this.comp.toggleCss("ag-column-resizing",z)}getColumnsToResize(){return this.columnGroup.getDisplayedLeafColumns().filter((J)=>J.isResizable())}normaliseDragChange(z){let J=z;if(this.gos.get("enableRtl")){if(this.pinned!=="left")J*=-1}else if(this.pinned==="right")J*=-1;return J}destroy(){super.destroy(),this.resizeCols=void 0,this.resizeRatios=void 0,this.resizeTakeFromCols=void 0,this.resizeTakeFromRatios=void 0}},hW=class extends S{constructor(z,J,Q,Z,$){super();this.pinned=z,this.column=J,this.eResize=Q,this.comp=Z,this.ctrl=$}postConstruct(){let z=[],J,Q,Z=()=>{if(w(this.eResize,J),!J)return;let{horizontalResizeSvc:Y,colAutosize:q}=this.beans,G=Y.addResizeBar({eResizeBar:this.eResize,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this,!1),onResizeEnd:this.onResizing.bind(this,!0)});if(z.push(G),Q&&q)z.push(q.addColumnAutosizeListeners(this.eResize,this.column))},$=()=>{for(let Y of z)Y();z.length=0},X=()=>{let Y=this.column.isResizable(),q=!this.gos.get("suppressAutoSize")&&!this.column.colDef.suppressAutoSize;if(Y!==J||q!==Q)J=Y,Q=q,$(),Z()};X(),this.addDestroyFunc($),this.ctrl.setRefreshFunction("resize",X)}onResizing(z,J){let{column:Q,lastResizeAmount:Z,resizeStartWidth:$,beans:X}=this,Y=this.normaliseResizeAmount(J),q=$+Y,G=[{key:Q,newWidth:q}],{pinnedCols:U,ctrlsSvc:_,colResize:H}=X;if(this.column.getPinned()){let W=U?.leftWidth??0,B=U?.rightWidth??0,E=lz(_.getGridBodyCtrl().eBodyViewport)-50;if(W+B+(Y-Z)>E)return}if(this.lastResizeAmount=Y,H?.setColumnWidths(G,this.resizeWithShiftKey,z,"uiColumnResized"),z)this.toggleColumnResizing(!1)}onResizeStart(z){this.resizeStartWidth=this.column.getActualWidth(),this.lastResizeAmount=0,this.resizeWithShiftKey=z,this.toggleColumnResizing(!0)}toggleColumnResizing(z){this.column.resizing=z,this.comp.toggleCss("ag-column-resizing",z)}normaliseResizeAmount(z){let J=z,Q=this.pinned!=="left",Z=this.pinned==="right";if(this.gos.get("enableRtl")){if(Q)J*=-1}else if(Z)J*=-1;return J}},uW=class extends S{constructor(){super(...arguments);this.beanName="colResize"}setColumnWidths(z,J,Q,Z){let $=[],{colModel:X,gos:Y,visibleCols:q}=this.beans;for(let G of z){let U=X.getColDefColOrCol(G.key);if(!U)continue;if($.push({width:G.newWidth,ratios:[1],columns:[U]}),Y.get("colResizeDefault")==="shift")J=!J;if(J){let H=q.getColAfter(U);if(!H)continue;let W=U.getActualWidth()-G.newWidth,B=H.getActualWidth()+W;$.push({width:B,ratios:[1],columns:[H]})}}if($.length===0)return;this.resizeColumnSets({resizeSets:$,finished:Q,source:Z})}resizeColumnSets(z){let{resizeSets:J,finished:Q,source:Z}=z;if(!(!J||J.every((_)=>mW(_)))){if(Q){let _=J&&J.length>0?J[0].columns:null;N1(this.eventSvc,_,Q,Z)}return}let X=[],Y=[];for(let _ of J){let{width:H,columns:W,ratios:B}=_,E={},K={};for(let D of W)Y.push(D);let F=!0,L=0;while(F){if(L++,L>1000){r(31);break}F=!1;let D=[],M=0,f=H;W.forEach((R,O)=>{if(K[R.getId()])f-=E[R.getId()];else{D.push(R);let I=B[O];M+=I}});let A=1/M;D.forEach((R,O)=>{let v=O===D.length-1,I;if(v)I=f;else I=Math.round(B[O]*H*A),f-=I;let b=R.getMinWidth(),m=R.getMaxWidth();if(I0&&I>m)I=m,K[R.getId()]=!0,F=!0;E[R.getId()]=I})}for(let D of W){let M=E[D.getId()];if(D.getActualWidth()!==M)D.setActualWidth(M,Z),X.push(D)}}let q=X.length>0,G=[];if(q){let{colFlex:_,visibleCols:H,colViewport:W}=this.beans;G=_?.refreshFlexedColumns({resizingCols:Y,skipSetLeft:!0})??[],H.setLeftValues(Z),H.updateBodyWidths(),W.checkViewportColumns()}let U=Y.concat(G);if(q||Q)N1(this.eventSvc,U,Q,Z,G)}resizeHeader(z,J,Q){if(!z.isResizable())return;let Z=z.getActualWidth(),$=z.getMinWidth(),X=z.getMaxWidth(),Y=Math.min(Math.max(Z+J,$),X);this.setColumnWidths([{key:z,newWidth:Y}],Q,!0,"uiColumnResized")}createResizeFeature(z,J,Q,Z,$){return new hW(z,J,Q,Z,$)}createGroupResizeFeature(z,J,Q,Z){return new gW(z,J,Q,Z)}};function mW(z){let{columns:J,width:Q}=z,Z=0,$=0,X=!0;for(let G of J){let U=G.getMinWidth();Z+=U||0;let _=G.getMaxWidth();if(_>0)$+=_;else X=!1}let Y=Q>=Z,q=!X||Q<=$;return Y&&q}var cW={moduleName:"ColumnResize",version:i,beans:[uW],apiFunctions:{setColumnWidths:wW},dependsOn:[Q5,O$]},iW=class extends S{constructor(z,J){super();this.removeChildListenersFuncs=[],this.columnGroup=J,this.comp=z}postConstruct(){this.addListenersToChildrenColumns(),this.addManagedListeners(this.columnGroup,{displayedChildrenChanged:this.onDisplayedChildrenChanged.bind(this)}),this.onWidthChanged(),this.addDestroyFunc(this.removeListenersOnChildrenColumns.bind(this))}addListenersToChildrenColumns(){this.removeListenersOnChildrenColumns();let z=this.onWidthChanged.bind(this);for(let J of this.columnGroup.getLeafColumns())J.__addEventListener("widthChanged",z),J.__addEventListener("visibleChanged",z),this.removeChildListenersFuncs.push(()=>{J.__removeEventListener("widthChanged",z),J.__removeEventListener("visibleChanged",z)})}removeListenersOnChildrenColumns(){for(let z of this.removeChildListenersFuncs)z();this.removeChildListenersFuncs=[]}onDisplayedChildrenChanged(){this.addListenersToChildrenColumns(),this.onWidthChanged()}onWidthChanged(){let z=this.columnGroup.getActualWidth();this.comp.setWidth(`${z}px`),this.comp.toggleCss("ag-hidden",z===0)}},pW=class extends sZ{constructor(){super(...arguments);this.onSuppressColMoveChange=()=>{if(!this.isAlive()||this.isSuppressMoving())this.removeDragSource();else if(!this.dragSource)this.setDragSource(this.eGui)}}wireComp(z,J,Q,Z,$){let{column:X,beans:Y}=this,{context:q,colNames:G,colHover:U,rangeSvc:_,colResize:H}=Y;this.comp=z,$=m2(this,q,$),this.setGui(J,$),this.displayName=G.getDisplayNameForColumnGroup(X,"header"),this.refreshHeaderStyles(),this.addClasses(),this.setupMovingCss($),this.setupExpandable($),this.setupTooltip(),this.refreshAnnouncement(),this.setupAutoHeight({wrapperElement:Z,compBean:$}),this.setupUserComp(),this.addHeaderMouseListeners($,Z),this.addManagedPropertyListener("groupHeaderHeight",this.refreshMaxHeaderHeight.bind(this)),this.refreshMaxHeaderHeight();let W=this.rowCtrl.pinned,B=X.getProvidedColumnGroup().getLeafColumns();if(U?.createHoverFeature($,B,J),_?.createRangeHighlightFeature($,X,z),$.createManagedBean(new tZ(X,J,Y)),$.createManagedBean(new iW(z,X)),H)this.resizeFeature=$.createManagedBean(H.createGroupResizeFeature(z,Q,W,X));else z.setResizableDisplayed(!1);$.createManagedBean(new Jz(J,{shouldStopEventPropagation:this.shouldStopEventPropagation.bind(this),onTabKeyDown:()=>{return},handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this)})),this.addHighlightListeners($,B),this.addManagedEventListeners({cellSelectionChanged:()=>this.refreshAnnouncement()}),$.addManagedPropertyListener("cellSelection",()=>this.refreshAnnouncement()),$.addManagedPropertyListener("suppressMovableColumns",this.onSuppressColMoveChange),this.addResizeAndMoveKeyboardListeners($),$.addDestroyFunc(()=>this.clearComponent())}getHeaderClassParams(){let{column:z,beans:J}=this,Q=z.getDefinition();return C(J.gos,{colDef:Q,columnGroup:z,floatingFilter:!1})}refreshMaxHeaderHeight(){let{gos:z,comp:J}=this,Q=z.get("groupHeaderHeight");if(Q!=null)if(Q===0)J.setHeaderWrapperHidden(!0);else J.setHeaderWrapperMaxHeight(Q);else J.setHeaderWrapperHidden(!1),J.setHeaderWrapperMaxHeight(null)}addHighlightListeners(z,J){if(!this.beans.gos.get("suppressMoveWhenColumnDragging"))return;for(let Q of J)z.addManagedListeners(Q,{headerHighlightChanged:this.onLeafColumnHighlightChanged.bind(this,Q)})}onLeafColumnHighlightChanged(z){let J=this.column.getDisplayedLeafColumns(),Q=J[0]===z,Z=y(J)===z;if(!Q&&!Z)return;let $=z.getHighlighted(),X=!!this.rowCtrl.getHeaderCellCtrls().find((G)=>{return G.column.isMoving()}),Y=!1,q=!1;if(X){let G=this.beans.gos.get("enableRtl"),U=$===1,_=$===0;if(Q)if(G)q=U;else Y=_;if(Z)if(G)Y=_;else q=U}this.comp.toggleCss("ag-header-highlight-before",Y),this.comp.toggleCss("ag-header-highlight-after",q)}resizeHeader(z,J){let{resizeFeature:Q}=this;if(!Q)return;let Z=Q.getInitialValues(J);Q.resizeColumns(Z,Z.resizeStartWidth+z,"uiColumnResized",!0)}resizeLeafColumnsToFit(z){this.resizeFeature?.resizeLeafColumnsToFit(z)}setupUserComp(){let{colGroupSvc:z,userCompFactory:J,gos:Q,enterpriseMenuFactory:Z}=this.beans,$=this.column,X=$.getProvidedColumnGroup(),Y=C(Q,{displayName:this.displayName,columnGroup:$,setExpanded:(G)=>{z.setColumnGroupOpened(X,G,"gridInitializing")},setTooltip:(G,U)=>{Q.assertModuleRegistered("Tooltip",3),this.setupTooltip(G,U)},showColumnMenu:(G,U)=>Z?.showMenuAfterButtonClick(X,G,"columnMenu",U),showColumnMenuAfterMouseClick:(G,U)=>Z?.showMenuAfterMouseEvent(X,G,"columnMenu",U),eGridHeader:this.eGui}),q=$_(J,Y);if(q)this.comp.setUserCompDetails(q)}addHeaderMouseListeners(z,J){let{column:Q,comp:Z,beans:{rangeSvc:$},gos:X}=this,Y=(_)=>this.handleMouseOverChange(_.type==="mouseenter"),q=()=>this.dispatchColumnMouseEvent("columnHeaderClicked",Q.getProvidedColumnGroup()),G=(_)=>this.handleContextMenuMouseEvent(_,void 0,Q.getProvidedColumnGroup());z.addManagedListeners(this.eGui,{mouseenter:Y,mouseleave:Y,click:q,contextmenu:G}),Z.toggleCss("ag-header-group-cell-selectable",l4(X));let U=$?.createHeaderGroupCellMouseListenerFeature(this.column,J);if(U)this.createManagedBean(U)}handleMouseOverChange(z){this.eventSvc.dispatchEvent({type:z?"columnHeaderMouseOver":"columnHeaderMouseLeave",column:this.column.getProvidedColumnGroup()})}setupTooltip(z,J){this.tooltipFeature=this.beans.tooltipSvc?.setupHeaderGroupTooltip(this.tooltipFeature,this,z,J)}setupExpandable(z){let J=this.column.getProvidedColumnGroup();this.refreshExpanded();let Q=this.refreshExpanded.bind(this);z.addManagedListeners(J,{expandedChanged:Q,expandableChanged:Q})}refreshExpanded(){let{column:z}=this;this.expandable=z.isExpandable();let J=z.isExpanded();if(this.expandable)this.comp.setAriaExpanded(J?"true":"false");else this.comp.setAriaExpanded(void 0);this.refreshHeaderStyles(),this.refreshAnnouncement()}addClasses(){let{column:z}=this,J=z.getColGroupDef(),Q=WJ(J,this.gos,null,z);if(z.isPadding()){if(Q.push("ag-header-group-cell-no-group"),z.getLeafColumns().every(($)=>$.isSpanHeaderHeight()))Q.push("ag-header-span-height")}else if(Q.push("ag-header-group-cell-with-group"),J?.wrapHeaderText)Q.push("ag-header-cell-wrap-text");for(let Z of Q)this.comp.toggleCss(Z,!0)}setupMovingCss(z){let{column:J}=this,Z=J.getProvidedColumnGroup().getLeafColumns(),$=()=>this.comp.toggleCss("ag-header-cell-moving",J.isMoving());for(let X of Z)z.addManagedListeners(X,{movingChanged:$});$()}onFocusIn(z){if(!this.eGui.contains(z.relatedTarget))this.focusThis(),this.announceAriaDescription()}handleKeyDown(z){if(super.handleKeyDown(z),!this.getWrapperHasFocus())return;let{column:Q,expandable:Z,gos:$,beans:X}=this,Y=l4($);if(z.key!=k.ENTER)return;if(Y&&!z.altKey)X.rangeSvc?.handleColumnSelection(Q,z);else if(Z){let q=!Q.isExpanded();X.colGroupSvc.setColumnGroupOpened(Q.getProvidedColumnGroup(),q,"uiColumnExpanded")}}refreshAnnouncement(){let z,{gos:J,expandable:Q}=this,Z=l4(J),$=this.getLocaleTextFunc();if(Z&&Q)z=$("ariaColumnGroupCellSelectionAndExpansion","Press Enter to toggle selection for all visible cells in this column group. Press ALT ENTER to expand or collapse this column group");else if(Z)z=$("ariaColumnGroupCellSelection","Press Enter to toggle selection for all visible cells in this column group");else if(Q)z=$("ariaColumnGroupExpansion","Press ENTER to expand or collapse this column group");this.ariaAnnouncement=z}announceAriaDescription(){let{beans:z,eGui:J,ariaAnnouncement:Q}=this;if(!Q||!J.contains(n(z)))return;z.ariaAnnounce?.announceValue(Q,"columnHeader")}setDragSource(z){if(!this.isAlive()||this.isSuppressMoving())return;if(this.removeDragSource(),!z)return;this.dragSource=this.beans.colMoves?.setDragSourceForHeader(z,this.column,this.displayName)??null}isSuppressMoving(){return this.gos.get("suppressMovableColumns")||this.column.getLeafColumns().some((z)=>z.colDef.suppressMovable||z.colDef.lockPosition)}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),super.destroy()}};function nW(z,J,Q){z.colGroupSvc?.setColumnGroupOpened(J,Q,"api")}function dW(z,J,Q){return z.colGroupSvc?.getColumnGroup(J,Q)??null}function rW(z,J){return z.colGroupSvc?.getProvidedColGroup(J)??null}function tW(z,J,Q){return z.colNames.getDisplayNameForColumnGroup(J,Q)||""}function sW(z){return z.colGroupSvc?.getColumnGroupState()??[]}function lW(z,J){z.colGroupSvc?.setColumnGroupState(J,"api")}function aW(z){z.colGroupSvc?.resetColumnGroupState("api")}function oW(z){return z.visibleCols.treeLeft}function eW(z){return z.visibleCols.treeCenter}function zB(z){return z.visibleCols.treeRight}function JB(z){return z.visibleCols.getAllTrees()}var I$=class{constructor(){this.existingIds={}}getInstanceIdForKey(z){let J=this.existingIds[z],Q;if(typeof J!=="number")Q=0;else Q=J+1;return this.existingIds[z]=Q,Q}};function QB(z,J){for(let Q=0;Q=0)z[Z]=z[z.length-1],z.pop()}}var ZB=class extends S{constructor(){super(...arguments);this.beanName="visibleCols",this.colsAndGroupsMap={},this.leftCols=[],this.rightCols=[],this.centerCols=[],this.allCols=[],this.headerGroupRowCount=0,this.bodyWidth=0,this.leftWidth=0,this.rightWidth=0,this.isBodyWidthDirty=!0}refresh(z,J=!1){let{colFlex:Q,colModel:Z,colGroupSvc:$,colViewport:X,selectionColSvc:Y}=this.beans;if(!J)this.buildTrees(Z,$);$?.updateOpenClosedVisibility(),this.leftCols=MQ(this.treeLeft),this.centerCols=MQ(this.treeCenter),this.rightCols=MQ(this.treeRight),Y?.refreshVisibility(this.leftCols,this.centerCols,this.rightCols),this.joinColsAriaOrder(Z),this.joinCols(),this.headerGroupRowCount=this.getHeaderRowCount(),this.setLeftValues(z),this.autoHeightCols=this.allCols.filter((q)=>q.isAutoHeight()),Q?.refreshFlexedColumns(),this.updateBodyWidths(),this.setFirstRightAndLastLeftPinned(Z,this.leftCols,this.rightCols,z),X.checkViewportColumns(!1),this.eventSvc.dispatchEvent({type:"displayedColumnsChanged",source:z})}getHeaderRowCount(){if(!this.gos.get("hidePaddedHeaderRows"))return this.beans.colModel.cols.treeDepth;let z=0;for(let J of this.allCols){let Q=J.parent;while(Q){if(!Q.isPadding()){let Z=Q.getProvidedColumnGroup().getLevel()+1;if(Z>z)z=Z;break}Q=Q.parent}}return z}updateBodyWidths(){let z=t4(this.centerCols),J=t4(this.leftCols),Q=t4(this.rightCols);if(this.isBodyWidthDirty=this.bodyWidth!==z,this.bodyWidth!==z||this.leftWidth!==J||this.rightWidth!==Q)this.bodyWidth=z,this.leftWidth=J,this.rightWidth=Q,this.eventSvc.dispatchEvent({type:"columnContainerWidthChanged"}),this.eventSvc.dispatchEvent({type:"displayedColumnsWidthChanged"})}setLeftValues(z){this.setLeftValuesOfCols(z),this.setLeftValuesOfGroups()}setFirstRightAndLastLeftPinned(z,J,Q,Z){let $,X;if(this.gos.get("enableRtl"))$=J?J[0]:null,X=Q?y(Q):null;else $=J?y(J):null,X=Q?Q[0]:null;for(let Y of z.getCols())Y.setLastLeftPinned(Y===$,Z),Y.setFirstRightPinned(Y===X,Z)}buildTrees(z,J){let Q=z.getColsToShow(),Z=Q.filter((G)=>G.getPinned()=="left"),$=Q.filter((G)=>G.getPinned()=="right"),X=Q.filter((G)=>G.getPinned()!="left"&&G.getPinned()!="right"),Y=new I$,q=(G)=>{return J?J.createColumnGroups(G):G.columns};this.treeLeft=q({columns:Z,idCreator:Y,pinned:"left",oldDisplayedGroups:this.treeLeft}),this.treeRight=q({columns:$,idCreator:Y,pinned:"right",oldDisplayedGroups:this.treeRight}),this.treeCenter=q({columns:X,idCreator:Y,pinned:null,oldDisplayedGroups:this.treeCenter}),this.updateColsAndGroupsMap()}clear(){this.leftCols=[],this.rightCols=[],this.centerCols=[],this.allCols=[],this.ariaOrderColumns=[]}joinColsAriaOrder(z){let J=z.getCols(),Q=[],Z=[],$=[];for(let X of J){let Y=X.getPinned();if(!Y)Z.push(X);else if(Y===!0||Y==="left")Q.push(X);else $.push(X)}this.ariaOrderColumns=Q.concat(Z).concat($)}getAriaColIndex(z){let J;if(K0(z))J=z.getLeafColumns()[0];else J=z;return this.ariaOrderColumns.indexOf(J)+1}setLeftValuesOfGroups(){for(let z of[this.treeLeft,this.treeRight,this.treeCenter])for(let J of z)if(K0(J))J.checkLeft()}setLeftValuesOfCols(z){let{colModel:J}=this.beans;if(!J.getColDefCols())return;let Z=J.getCols().slice(0),$=this.gos.get("enableRtl");for(let X of[this.leftCols,this.rightCols,this.centerCols]){if($){let Y=t4(X);for(let q of X)Y-=q.getActualWidth(),q.setLeft(Y,z)}else{let Y=0;for(let q of X)q.setLeft(Y,z),Y+=q.getActualWidth()}QB(Z,X)}for(let X of Z)X.setLeft(null,z)}joinCols(){if(this.gos.get("enableRtl"))this.allCols=this.rightCols.concat(this.centerCols).concat(this.leftCols);else this.allCols=this.leftCols.concat(this.centerCols).concat(this.rightCols)}getAllTrees(){if(this.treeLeft&&this.treeRight&&this.treeCenter)return this.treeLeft.concat(this.treeCenter).concat(this.treeRight);return null}isColDisplayed(z){return this.allCols.indexOf(z)>=0}getLeftColsForRow(z){let{leftCols:J,beans:{colModel:Q}}=this;if(!Q.colSpanActive)return J;return this.getColsForRow(z,J)}getRightColsForRow(z){let{rightCols:J,beans:{colModel:Q}}=this;if(!Q.colSpanActive)return J;return this.getColsForRow(z,J)}getColsForRow(z,J,Q,Z){let $=[],X=null;for(let Y=0;Y1){let W=U-1;for(let B=1;B<=W;B++)_.push(J[Y+B]);Y+=W}let H;if(Q){H=!1;for(let W of _)if(Q(W))H=!0}else H=!0;if(H){if($.length===0&&X){if(Z?Z(q):!1)$.push(X)}$.push(q)}X=q}return $}getContainerWidth(z){switch(z){case"left":return this.leftWidth;case"right":return this.rightWidth;default:return this.bodyWidth}}getColBefore(z){let J=this.allCols,Q=J.indexOf(z);if(Q>0)return J[Q-1];return null}isPinningLeft(){return this.leftCols.length>0}isPinningRight(){return this.rightCols.length>0}updateColsAndGroupsMap(){this.colsAndGroupsMap={};let z=(J)=>{this.colsAndGroupsMap[J.getUniqueId()]=J};tz(this.treeCenter,!1,z),tz(this.treeLeft,!1,z),tz(this.treeRight,!1,z)}isVisible(z){return this.colsAndGroupsMap[z.getUniqueId()]===z}getFirstColumn(){let z=this.gos.get("enableRtl"),J=["leftCols","centerCols","rightCols"];if(z)J.reverse();for(let Q=0;Q{if(G4(Q))J.push(Q)}),J}var $B=class extends S{constructor(){super(...arguments);this.beanName="colGroupSvc"}getColumnGroupState(){let z=[],J=this.beans.colModel.getColTree();return g4(null,J,(Q)=>{if(G0(Q))z.push({groupId:Q.getGroupId(),open:Q.isExpanded()})}),z}resetColumnGroupState(z){let J=this.beans.colModel.getColDefColTree();if(!J)return;let Q=[];g4(null,J,(Z)=>{if(G0(Z)){let $=Z.getColGroupDef(),X={groupId:Z.getGroupId(),open:!$?void 0:$.openByDefault};Q.push(X)}}),this.setColumnGroupState(Q,z)}setColumnGroupState(z,J){let{colModel:Q,colAnimation:Z,visibleCols:$,eventSvc:X}=this.beans;if(!Q.getColTree().length)return;Z?.start();let q=[];for(let G of z){let{groupId:U,open:_}=G,H=this.getProvidedColGroup(U);if(!H)continue;if(H.isExpanded()===_)continue;H.setExpanded(_),q.push(H)}if($.refresh(J,!0),q.length)X.dispatchEvent({type:"columnGroupOpened",columnGroup:q.length===1?q[0]:void 0,columnGroups:q});Z?.finish()}setColumnGroupOpened(z,J,Q){let Z;if(G0(z))Z=z.getId();else Z=z||"";this.setColumnGroupState([{groupId:Z,open:J}],Q)}getProvidedColGroup(z){let J=null;return g4(null,this.beans.colModel.getColTree(),(Q)=>{if(G0(Q)){if(Q.getId()===z)J=Q}}),J}getGroupAtDirection(z,J){let Q=z.getProvidedColumnGroup().getLevel()+z.getPaddingLevel(),Z=z.getDisplayedLeafColumns(),$=J==="After"?y(Z):Z[0],X=`getCol${J}`;while(!0){let Y=this.beans.visibleCols[X]($);if(!Y)return null;let q=this.getColGroupAtLevel(Y,Q);if(q!==z)return q}}getColGroupAtLevel(z,J){let Q=z.parent,Z,$;while(!0){if(Z=Q.getProvidedColumnGroup().getLevel(),$=Q.getPaddingLevel(),Z+$<=J)break;Q=Q.parent}return Q}updateOpenClosedVisibility(){let z=this.beans.visibleCols.getAllTrees();tz(z,!1,(J)=>{if(K0(J))J.calculateDisplayedColumns()})}getColumnGroup(z,J){if(!z)return null;if(K0(z))return z;let Q=this.beans.visibleCols.getAllTrees(),Z=typeof J==="number",$=null;return tz(Q,!1,(X)=>{if(K0(X)){let Y=X,q;if(Z)q=z===Y.getGroupId()&&J===Y.getPartId();else q=z===Y.getGroupId();if(q)$=Y}}),$}createColumnGroups(z){let{columns:J,idCreator:Q,pinned:Z,oldDisplayedGroups:$,isStandaloneStructure:X}=z,Y=this.mapOldGroupsById($),q=[],G=J;while(G.length){let U=G;G=[];let _=0,H=(W)=>{let B=_;_=W;let E=U[B],F=(K0(E)?E.getProvidedColumnGroup():E).getOriginalParent();if(F==null){for(let D=B;DG0(_))){G.setChildren([Y]);continue}else{G.setChildren(z);break}$.push(Y)}}return $}findDepth(z){let J=0,Q=z;while(Q?.[0]&&G0(Q[0]))J++,Q=Q[0].getChildren();return J}findMaxDepth(z,J){let Q=J;for(let Z=0;Z=0;X--){let Y=new rz(null,`FAKE_PATH_${Z.getId()}_${X}`,!0,X);this.createBean(Y),Y.setChildren([$]),$.originalParent=Y,$=Y}if(J===0)Z.originalParent=null;Q.push($)}return Q}findExistingGroup(z,J){if(z.groupId==null)return;for(let Z=0;Z{for(let $ of Z)if(K0($)){let X=$;J[$.getUniqueId()]=X,Q(X.getChildren())}};if(z)Q(z);return J}setupParentsIntoCols(z,J){for(let Q of z??[]){if(Q.parent!==J)this.beans.colViewport.colsWithinViewportHash="";if(Q.parent=J,K0(Q)){let Z=Q;this.setupParentsIntoCols(Z.getChildren(),Z)}}}},Z5={moduleName:"ColumnGroup",version:i,dynamicBeans:{headerGroupCellCtrl:pW},beans:[$B],apiFunctions:{getAllDisplayedColumnGroups:JB,getCenterDisplayedColumnGroups:eW,getColumnGroup:dW,getColumnGroupState:sW,getDisplayNameForColumnGroup:tW,getLeftDisplayedColumnGroups:oW,getProvidedColumnGroup:rW,getRightDisplayedColumnGroups:zB,resetColumnGroupState:aW,setColumnGroupOpened:nW,setColumnGroupState:lW}};function a0(z,J,Q){let{colModel:Z,rowGroupColsSvc:$,pivotColsSvc:X,autoColSvc:Y,selectionColSvc:q,colAnimation:G,visibleCols:U,pivotResultCols:_,environment:H,valueColsSvc:W,eventSvc:B,gos:E}=z,K=Z.getColDefCols()??[],F=q?.getColumns();if(!K.length&&!F?.length)return!1;if(J?.state&&!J.state.forEach)return V(32),!1;let L=(A,R,O,v,I)=>{if(!A)return;let b=OU(R,J.defaultState),m=b("flex").value1,g=b("sort").value1,e=b("sortType").value1,t=Lz(g)||OZ(e),u=A4(e),Q0=GJ(g),s=t?{type:u,direction:Q0}:void 0;if(j9(z,A,b("hide").value1,s,b("sortIndex").value1,b("pinned").value1,m,Q),m==null){let P0=b("width").value1;if(P0!=null){let T0=A.getColDef().minWidth??H.getDefaultColumnMinWidth();if(T0!=null&&P0>=T0)A.setActualWidth(P0,Q)}}if(I||!A.primary)return;W?.syncColumnWithState(A,Q,b),$?.syncColumnWithState(A,Q,b,O),X?.syncColumnWithState(A,Q,b,v)},D=(A,R,O)=>{let v=y$(z,Q),I=R.slice(),b={},m={},g=[],e=[],t=[],u=0,Q0=$?.columns.slice()??[],s=X?.columns.slice()??[];for(let V0 of A){let uz=V0.colId;if(uz.startsWith(Q1)){g.push(V0),t.push(V0);continue}if(i4(uz)){e.push(V0),t.push(V0);continue}let L1=O(uz);if(!L1)t.push(V0),u+=1;else L(L1,V0,b,m,!1),X0(I,L1)}let P0=(V0)=>L(V0,null,b,m,!1);I.forEach(P0),$?.sortColumns(g7.bind($,b,Q0)),X?.sortColumns(g7.bind(X,m,s)),Z.refreshCols(!1,Q);let T0=(V0,uz,aJ=[])=>{for(let L1 of uz){let B7=V0(L1.colId);X0(aJ,B7),L(B7,L1,null,null,!0)}aJ.forEach(P0)};return T0((V0)=>Y?.getColumn(V0)??null,g,Y?.getColumns()?.slice()),T0((V0)=>q?.getColumn(V0)??null,e,q?.getColumns()?.slice()),XB(J,Z,E),U.refresh(Q),B.dispatchEvent({type:"columnEverythingChanged",source:Q}),v(),{unmatchedAndAutoStates:t,unmatchedCount:u}};G?.start();let{unmatchedAndAutoStates:M,unmatchedCount:f}=D(J.state||[],K,(A)=>Z.getColDefCol(A));if(M.length>0||P(J.defaultState)){let A=_?.getPivotResultCols()?.list??[];f=D(M,A,(R)=>_?.getPivotResultCol(R)??null).unmatchedCount}return G?.finish(),f===0}function C$(z,J){let{colModel:Q,autoColSvc:Z,selectionColSvc:$,eventSvc:X,gos:Y}=z;if(!Q.getColDefCols()?.length)return;let G=Q.getColDefColTree(),U=UJ(G),_=[],H=1000,W=1000,B=(D)=>{let M=b$(D);if(d(M.rowGroupIndex)&&M.rowGroup)M.rowGroupIndex=H++;if(d(M.pivotIndex)&&M.pivot)M.pivotIndex=W++;_.push(M)};Z?.getColumns()?.forEach(B),$?.getColumns()?.forEach(B),U?.forEach(B),a0(z,{state:_},J);let E=Z?.getColumns()??[],L=[...$?.getColumns()??[],...E,...U].map((D)=>({colId:D.colId}));a0(z,{state:L,applyOrder:!0},J),X.dispatchEvent(C(Y,{type:"columnsReset",source:J}))}function y$(z,J){let{rowGroupColsSvc:Q,pivotColsSvc:Z,valueColsSvc:$,colModel:X,sortSvc:Y,eventSvc:q}=z,G={rowGroupColumns:Q?.columns.slice()??[],pivotColumns:Z?.columns.slice()??[],valueColumns:$?.columns.slice()??[]},U=N7(z),_={};for(let H of U)_[H.colId]=H;return()=>{let H=(R,O,v,I)=>{let b=O.map(I),m=v.map(I);if(Z0(b,m))return;let e=new Set(O);for(let u of v)if(!e.delete(u))e.add(u);let t=[...e];q.dispatchEvent({type:R,columns:t,column:t.length===1?t[0]:null,source:J})},W=(R)=>{let O=[];return X.forAllCols((v)=>{let I=_[v.colId];if(I&&R(I,v))O.push(v)}),O},B=(R)=>R.colId;H("columnRowGroupChanged",G.rowGroupColumns,Q?.columns??[],B),H("columnPivotChanged",G.pivotColumns,Z?.columns??[],B);let K=W((R,O)=>{let v=R.aggFunc!=null,I=v!=O.isValueActive(),b=v&&R.aggFunc!=O.getAggFunc();return I||b});if(K.length>0)v$(q,"columnValueChanged",K,J);N1(q,W((R,O)=>R.width!=O.getActualWidth()),!0,J),T$(q,W((R,O)=>R.pinned!=O.getPinned()),J),NW(q,W((R,O)=>R.hide==O.isVisible()),J);let f=W((R,O)=>!f6(O.getSortDef(),{type:A4(R.sortType),direction:GJ(R.sort)})||R.sortIndex!=O.getSortIndex());if(f.length>0)Y?.dispatchSortChangedEvents(J,f);let A=N7(z);qB(U,A,J,X,q)}}function N7(z){let{colModel:J,rowGroupColsSvc:Q,pivotColsSvc:Z}=z,$=J.getColDefCols();if(d($)||!J.isAlive())return[];let X=Q?.columns,Y=Z?.columns,q=[],G=(_)=>{let H=_.isRowGroupActive()&&X?X.indexOf(_):null,W=_.isPivotActive()&&Y?Y.indexOf(_):null,B=_.isValueActive()?_.getAggFunc():null,E=_.getSortIndex()!=null?_.getSortIndex():null;q.push({colId:_.colId,width:_.getActualWidth(),hide:!_.isVisible(),pinned:_.getPinned(),sort:_.getSort(),sortType:_.getSortDef()?.type,sortIndex:E,aggFunc:B,rowGroup:_.isRowGroupActive(),rowGroupIndex:H,pivot:_.isPivotActive(),pivotIndex:W,flex:_.getFlex()??null})};J.forAllCols((_)=>G(_));let U=new Map(J.getCols().map((_,H)=>[_.colId,H]));return q.sort((_,H)=>{let W=U.has(_.colId)?U.get(_.colId):-1,B=U.has(H.colId)?U.get(H.colId):-1;return W-B}),q}function b$(z){let J=(F,L)=>F!=null?F:L!=null?L:null,Q=z.colDef,Z=Z4(J(Q.sort,Q.initialSort)),$=Z.direction,X=Z.type,Y=J(Q.sortIndex,Q.initialSortIndex),q=J(Q.hide,Q.initialHide),G=J(Q.pinned,Q.initialPinned),U=J(Q.width,Q.initialWidth),_=J(Q.flex,Q.initialFlex),H=J(Q.rowGroupIndex,Q.initialRowGroupIndex),W=J(Q.rowGroup,Q.initialRowGroup);if(H==null&&!W)H=null,W=null;let B=J(Q.pivotIndex,Q.initialPivotIndex),E=J(Q.pivot,Q.initialPivot);if(B==null&&!E)B=null,E=null;let K=J(Q.aggFunc,Q.initialAggFunc);return{colId:z.colId,sort:$,sortType:X,sortIndex:Y,hide:q,pinned:G,width:U,flex:_,rowGroup:W,rowGroupIndex:H,pivot:E,pivotIndex:B,aggFunc:K}}function XB(z,J,Q){if(!z.applyOrder||!z.state)return;let Z=[];for(let $ of z.state)if($.colId!=null)Z.push($.colId);YB(J.cols,Z,J,Q)}function YB(z,J,Q,Z){if(z==null)return;let $=[],X={};for(let q of J){if(X[q])continue;let G=z.map[q];if(G)$.push(G),X[q]=!0}let Y=0;for(let q of z.list){let G=q.colId;if(X[G]!=null)continue;if(G.startsWith(Q1))$.splice(Y++,0,q);else $.push(q)}if($=A$($,Z),!j$($,Q.getColTree())){V(39);return}z.list=$}function qB(z,J,Q,Z,$){let X={};for(let _ of J)X[_.colId]=_;let Y={};for(let _ of z)if(X[_.colId])Y[_.colId]=!0;let q=z.filter((_)=>Y[_.colId]),G=J.filter((_)=>Y[_.colId]),U=[];if(G.forEach((_,H)=>{let W=q?.[H];if(W&&W.colId!==_.colId){let B=Z.getCol(W.colId);if(B)U.push(B)}}),!U.length)return;$.dispatchEvent({type:"columnMoved",columns:U,column:U.length===1?U[0]:null,finished:!0,source:Q})}var g7=(z,J,Q,Z)=>{let $=z[Q.getId()],X=z[Z.getId()],Y=$!=null,q=X!=null;if(Y&&q)return $-X;if(Y)return-1;if(q)return 1;let G=J.indexOf(Q),U=J.indexOf(Z),_=G>=0,H=U>=0;if(_&&H)return G-U;if(_)return-1;return 1},GB=class extends S{constructor(){super(...arguments);this.beanName="colModel",this.pivotMode=!1,this.ready=!1,this.changeEventsDispatching=!1}postConstruct(){this.pivotMode=this.gos.get("pivotMode"),this.addManagedPropertyListeners(["groupDisplayType","treeData","treeDataDisplayType","groupHideOpenParents","groupHideColumnsUntilExpanded","rowNumbers","hidePaddedHeaderRows"],(z)=>this.refreshAll(Dz(z.source))),this.addManagedPropertyListeners(["defaultColDef","defaultColGroupDef","columnTypes","suppressFieldDotNotation"],this.recreateColumnDefs.bind(this)),this.addManagedPropertyListener("pivotMode",(z)=>this.setPivotMode(this.gos.get("pivotMode"),Dz(z.source)))}createColsFromColDefs(z){let{beans:J}=this,{valueCache:Q,colAutosize:Z,rowGroupColsSvc:$,pivotColsSvc:X,valueColsSvc:Y,visibleCols:q,eventSvc:G,groupHierarchyColSvc:U}=J,_=this.colDefs?y$(J,z):void 0;Q?.expire();let H=this.colDefCols?.list,W=this.colDefCols?.tree,B=TZ(J,this.colDefs,!0,W,z);U4(J,this.colDefCols?.tree,B.columnTree);let{columnTree:E,treeDepth:K}=B,F=UJ(E),L={};for(let D of F)L[D.getId()]=D;if(this.colDefCols={tree:E,treeDepth:K,list:F,map:L},this.createColumnsForService([U],this.colDefCols,z),$?.extractCols(z,H),X?.extractCols(z,H),Y?.extractCols(z,H),this.ready=!0,this.changeEventsDispatching=!0,this.refreshCols(!0,z),this.changeEventsDispatching=!1,q.refresh(z),G.dispatchEvent({type:"columnEverythingChanged",source:z}),_)this.changeEventsDispatching=!0,_(),this.changeEventsDispatching=!1;if(G.dispatchEvent({type:"newColumnsLoaded",source:z}),z==="gridInitializing")Z?.applyAutosizeStrategy()}refreshCols(z,J){if(!this.colDefCols)return;let Q=this.cols?.tree;this.saveColOrder();let{autoColSvc:Z,selectionColSvc:$,rowNumbersSvc:X,quickFilter:Y,pivotResultCols:q,showRowGroupCols:G,rowAutoHeight:U,visibleCols:_,colViewport:H,eventSvc:W,formula:B}=this.beans,E=this.selectCols(q,this.colDefCols);B?.setFormulasActive(E),this.createColumnsForService([Z,$,X],E,J);let K=YU(this.gos,this.showingPivotResult);if(!z||K)this.restoreColOrder(E);if(this.positionLockedCols(E),G?.refresh(),Y?.refreshCols(),this.setColSpanActive(),U?.setAutoHeightActive(E),_.clear(),H.clear(),!Z0(Q,this.cols.tree))W.dispatchEvent({type:"gridColumnsChanged"})}createColumnsForService(z,J,Q){for(let Z of z){if(!Z)continue;Z.createColumns(J,($)=>{this.lastOrder=$(this.lastOrder),this.lastPivotOrder=$(this.lastPivotOrder)},Q),Z.addColumns(J)}}selectCols(z,J){let Q=z?.getPivotResultCols()??null;this.showingPivotResult=Q!=null;let{map:Z,list:$,tree:X,treeDepth:Y}=Q??J;if(this.cols={list:$.slice(),map:{...Z},tree:X.slice(),treeDepth:Y},Q){if(!Q.list.some((G)=>this.cols?.map[G.colId]!==void 0))this.lastPivotOrder=null}return this.cols}getColsToShow(){if(!this.cols)return[];let{beans:z,showingPivotResult:J,cols:Q}=this,{valueColsSvc:Z,selectionColSvc:$,gos:X}=z,Y=this.pivotMode&&!J,q=$?.isSelectionColumnEnabled(),G=qU(z),U=Z?.columns,_=RZ(X);return Q.list.filter((W)=>{let B=Z1(W);if(Y)return U?.includes(W)||B&&(!_||W.isVisible())||q&&i4(W)||G&&y0(W);else return B&&!_||W.isVisible()})}refreshAll(z){if(!this.ready)return;this.refreshCols(!1,z),this.beans.visibleCols.refresh(z)}setColsVisible(z,J=!1,Q){a0(this.beans,{state:z.map((Z)=>({colId:typeof Z==="string"?Z:Z.colId,hide:!J}))},Q)}restoreColOrder(z){let J=this.showingPivotResult?this.lastPivotOrder:this.lastOrder;if(!J)return;let Q=J.filter((H)=>z.map[H.getId()]!=null);if(Q.length===0)return;if(Q.length===z.list.length){z.list=Q;return}let Z=(H)=>{let W=H.getOriginalParent();if(!W)return!1;if(W.getChildren().length>1)return!0;return Z(W)};if(!Q.some((H)=>Z(H))){let H=new Set(Q);for(let W of z.list)if(!H.has(W))Q.push(W);z.list=Q;return}let $=new Map;for(let H=0;H!$.has(H));if(X.length===0){z.list=Q;return}let Y=(H,W)=>{let B=W?W.getOriginalParent():H.getOriginalParent();if(!B)return null;let E=null,K=null;for(let F of B.getChildren()){if(F===W||F===H)continue;if(F instanceof B4){let L=$.get(F);if(L==null)continue;if(E==null||E{let D=$.get(L);if(D==null)return;if(E==null||E=0;H--)U[_--]=q[H];for(let H=Q.length-1;H>=0;H--){let W=Q[H],B=G.get(W);if(B)if(Array.isArray(B))for(let E=B.length-1;E>=0;E--){let K=B[E];U[_--]=K}else U[_--]=B;U[_--]=W}z.list=U}positionLockedCols(z){z.list=A$(z.list,this.gos)}saveColOrder(){if(this.showingPivotResult)this.lastPivotOrder=this.cols?.list??null;else this.lastOrder=this.cols?.list??null}getColumnDefs(z){return this.colDefCols&&this.beans.colDefFactory?.getColumnDefs(this.colDefCols.list,this.showingPivotResult,this.lastOrder,this.cols?.list??[],z)}setColSpanActive(){this.colSpanActive=!!this.cols?.list.some((z)=>z.getColDef().colSpan!=null)}isPivotMode(){return this.pivotMode}setPivotMode(z,J){if(z===this.pivotMode)return;if(this.pivotMode=z,!this.ready)return;this.refreshCols(!1,J);let{visibleCols:Q,eventSvc:Z}=this.beans;Q.refresh(J),Z.dispatchEvent({type:"columnPivotModeChanged"})}isPivotActive(){let z=this.beans.pivotColsSvc?.columns;return this.pivotMode&&!!z?.length}recreateColumnDefs(z){if(!this.cols)return;this.beans.autoColSvc?.updateColumns(z);let J=Dz(z.source);this.createColsFromColDefs(J)}setColumnDefs(z,J){this.colDefs=z,this.createColsFromColDefs(J)}destroy(){U4(this.beans,this.colDefCols?.tree),super.destroy()}getColTree(){return this.cols?.tree??[]}getColDefColTree(){return this.colDefCols?.tree??[]}getColDefCols(){return this.colDefCols?.list??null}getCols(){return this.cols?.list??[]}forAllCols(z){let{pivotResultCols:J,autoColSvc:Q,selectionColSvc:Z,groupHierarchyColSvc:$}=this.beans;if($2(this.colDefCols?.list,z))return;if($2(Q?.columns?.list,z))return;if($2(Z?.columns?.list,z))return;if($2($?.columns?.list,z))return;if($2(J?.getPivotResultCols()?.list,z))return}getColsForKeys(z){if(!z)return[];return z.map((J)=>this.getCol(J)).filter((J)=>J!=null)}getColDefCol(z){return this.getColFromCollection(z,this.colDefCols)??this.getColFromServiceCols(z)}getColDefColOrCol(z){if(z==null)return null;return this.getColFromCollection(z,this.colDefCols)??this.getColFromCollection(z,this.cols)??this.getColFromServiceCols(z)}getColOrColDefCol(z){if(z==null)return null;return this.getColFromCollection(z,this.cols)??this.getColFromCollection(z,this.colDefCols)??this.getColFromServiceCols(z)}getCol(z){if(z==null)return null;return this.getColFromCollection(z,this.cols)??this.getColFromServiceCols(z)}getColById(z){return this.cols?.map[z]??null}getColFromCollection(z,J){if(J==null)return null;let Q=J.map;if(typeof z=="string"&&Q[z])return Q[z];let Z=J.list;for(let $=0,X=Z.length;$z(this.getValue())}),this}getWidth(){return this.getGui().clientWidth}setWidth(z){return N4(this.getGui(),z),this}getPreviousValue(){return this.previousValue}getValue(){return this.value}setValue(z,J){if(this.value===z)return this;if(this.previousValue=this.value,this.value=z,!J)this.dispatchLocalEvent({type:"fieldValueChanged"});return this}};function HB(z){return{tag:"div",role:"presentation",children:[{tag:"div",ref:"eLabel",cls:"ag-input-field-label"},{tag:"div",ref:"eWrapper",cls:"ag-wrapper ag-input-wrapper",role:"presentation",children:[{tag:z,ref:"eInput",cls:"ag-input-field-input"}]}]}}var V1=class extends x${constructor(z,J,Q="text",Z="input"){super(z,z?.template??HB(Z),[],J);this.inputType=Q,this.displayFieldTag=Z,this.eLabel=j,this.eWrapper=j,this.eInput=j}postConstruct(){super.postConstruct(),this.setInputType(this.inputType);let{eLabel:z,eWrapper:J,eInput:Q,className:Z}=this;z.classList.add(`${Z}-label`),J.classList.add(`${Z}-input-wrapper`),Q.classList.add(`${Z}-input`),this.addCss("ag-input-field"),Q.id=Q.id||`ag-${this.getCompId()}-input`;let{inputName:$,inputWidth:X,inputPlaceholder:Y,autoComplete:q,tabIndex:G}=this.config;if($!=null)this.setInputName($);if(X!=null)this.setInputWidth(X);if(Y!=null)this.setInputPlaceholder(Y);if(q!=null)this.setAutoComplete(q);this.addInputListeners(),this.activateTabIndex([Q],G)}addInputListeners(){this.addManagedElementListeners(this.eInput,{input:(z)=>this.setValue(z.target.value)})}setInputType(z){if(this.displayFieldTag==="input")this.inputType=z,f4(this.eInput,"type",z)}getInputElement(){return this.eInput}getWrapperElement(){return this.eWrapper}setInputWidth(z){return I6(this.eWrapper,z),this}setInputName(z){return this.getInputElement().setAttribute("name",z),this}getFocusableElement(){return this.eInput}setMaxLength(z){let J=this.eInput;return J.maxLength=z,this}setInputPlaceholder(z){return f4(this.eInput,"placeholder",z),this}setInputAriaLabel(z){return _0(this.eInput,z),this.refreshAriaLabelledBy(),this}setDisabled(z){return L2(this.eInput,z),super.setDisabled(z)}setAutoComplete(z){if(z===!0)f4(this.eInput,"autocomplete",null);else{let J=typeof z==="string"?z:"off";f4(this.eInput,"autocomplete",J)}return this}},FJ=class extends V1{constructor(z,J="ag-checkbox",Q="checkbox"){super(z,J,Q);this.labelAlignment="right",this.selected=!1,this.readOnly=!1,this.passive=!1}postConstruct(){super.postConstruct();let{readOnly:z,passive:J,name:Q}=this.config;if(typeof z==="boolean")this.setReadOnly(z);if(typeof J==="boolean")this.setPassive(J);if(Q!=null)this.setName(Q)}addInputListeners(){this.addManagedElementListeners(this.eInput,{click:this.onCheckboxClick.bind(this)}),this.addManagedElementListeners(this.eLabel,{click:this.toggle.bind(this)})}getNextValue(){return this.selected===void 0?!0:!this.selected}setPassive(z){this.passive=z}isReadOnly(){return this.readOnly}setReadOnly(z){this.eWrapper.classList.toggle("ag-disabled",z),this.eInput.disabled=z,this.readOnly=z}setDisabled(z){return this.eWrapper.classList.toggle("ag-disabled",z),super.setDisabled(z)}toggle(){if(this.eInput.disabled)return;let z=this.isSelected(),J=this.getNextValue();if(this.passive)this.dispatchChange(J,z);else this.setValue(J)}getValue(){return this.isSelected()}setValue(z,J){return this.refreshSelectedClass(z),this.setSelected(z,J),this}setName(z){let J=this.getInputElement();return J.name=z,this}isSelected(){return this.selected}setSelected(z,J){if(this.isSelected()===z)return;this.previousValue=this.isSelected(),z=this.selected=typeof z==="boolean"?z:void 0;let Q=this.eInput;if(Q.checked=z,Q.indeterminate=z===void 0,!J)this.dispatchChange(this.selected,this.previousValue)}dispatchChange(z,J,Q){this.dispatchLocalEvent({type:"fieldValueChanged",selected:z,previousValue:J,event:Q});let Z=this.getInputElement();this.eventSvc.dispatchEvent({type:"checkboxChanged",id:Z.id,name:Z.name,selected:z,previousValue:J})}onCheckboxClick(z){if(this.passive||this.eInput.disabled)return;let J=this.isSelected(),Q=this.selected=z.target.checked;this.refreshSelectedClass(Q),this.dispatchChange(Q,J,z)}refreshSelectedClass(z){let J=this.eWrapper.classList;J.toggle("ag-checked",z===!0),J.toggle("ag-indeterminate",z==null)}},K4={selector:"AG-CHECKBOX",component:FJ},WB=".ag-checkbox-cell{height:100%}",BB={tag:"div",cls:"ag-cell-wrapper ag-checkbox-cell",role:"presentation",children:[{tag:"ag-checkbox",ref:"eCheckbox",role:"presentation"}]},EB=class extends x{constructor(){super(BB,[K4]);this.eCheckbox=j,this.registerCSS(WB)}init(z){this.refresh(z);let{eCheckbox:J,beans:Q}=this,Z=J.getInputElement();Z.setAttribute("tabindex","-1"),h8(Z,"polite"),this.addManagedListeners(Z,{click:($)=>{if(l0($),J.isDisabled())return;let X=J.getValue();this.onCheckboxChanged(X)},dblclick:($)=>{l0($)}}),this.addManagedElementListeners(z.eGridCell,{keydown:($)=>{if($.key===k.SPACE&&!J.isDisabled()){if(z.eGridCell===n(Q))J.toggle();let X=J.getValue();this.onCheckboxChanged(X),$.preventDefault()}}})}refresh(z){return this.params=z,this.updateCheckbox(z),!0}updateCheckbox(z){let J,Q=!0,{value:Z,column:$,node:X}=z;if(X.group&&$)if(typeof Z==="boolean")J=Z;else{let H=$.getColId();if(H.startsWith(Q1))J=Z==null||Z===""?void 0:Z==="true";else if(X.aggData?.[H]!==void 0)J=Z??void 0;else if(X.sourceRowIndex>=0)J=Z??void 0;else Q=!1}else J=Z??void 0;let{eCheckbox:Y}=this;if(!Q){Y.setDisplayed(!1);return}Y.setValue(J);let q=z.disabled??!$?.isCellEditable(X);Y.setDisabled(q);let G=this.getLocaleTextFunc(),U=BZ(G,J),_=q?U:`${G("ariaToggleCellValue","Press SPACE to toggle cell value")} (${U})`;Y.setInputAriaLabel(_)}onCheckboxChanged(z){let{params:J}=this,{column:Q,node:Z,value:$}=J,{editSvc:X}=this.beans;if(!Q)return;let Y={rowNode:Z,column:Q};X?.dispatchCellEvent(Y,null,"cellEditingStarted",{value:$});let q=Z.setDataValue(Q,z,"ui");if(X?.dispatchCellEvent(Y,null,"cellEditingStopped",{oldValue:$,newValue:z,valueChanged:q}),!q)this.updateCheckbox(J)}},KB={tag:"div",cls:"ag-skeleton-container"},FB=class extends x{constructor(){super(KB)}init(z){let J=`ag-cell-skeleton-renderer-${this.getCompId()}`;if(this.getGui().setAttribute("id",J),this.addDestroyFunc(()=>sz(z.eParentOfValue)),sz(z.eParentOfValue,J),z.deferRender)this.setupLoading(z);else if(z.node.failedLoad)this.setupFailed();else this.setupLoading(z)}setupFailed(){let z=this.getLocaleTextFunc();this.getGui().textContent=z("loadingError","ERR");let J=z("ariaSkeletonCellLoadingFailed","Row failed to load");_0(this.getGui(),J)}setupLoading(z){let J=z0({tag:"div",cls:"ag-skeleton-effect"}),Q=z.node.rowIndex;if(Q!=null){let X=75+25*(Q%2===0?Math.sin(Q):Math.cos(Q));J.style.width=`${X}%`}this.getGui().appendChild(J);let Z=this.getLocaleTextFunc(),$=z.deferRender?Z("ariaDeferSkeletonCellLoading","Cell is loading"):Z("ariaSkeletonCellLoading","Row data is loading");_0(this.getGui(),$)}refresh(z){return!1}},LB={moduleName:"CheckboxCellRenderer",version:i,userComponents:{agCheckboxCellRenderer:EB}},DB={moduleName:"SkeletonCellRenderer",version:i,userComponents:{agSkeletonCellRenderer:FB}};var MB=class extends S{constructor(){super(...arguments);this.beanName="colFlex",this.columnsHidden=!1}refreshFlexedColumns(z={}){let J=z.source??"flex";if(z.viewportWidth!=null)this.flexViewportWidth=z.viewportWidth;let Q=this.flexViewportWidth,{visibleCols:Z,colDelayRenderSvc:$}=this.beans,X=Z.centerCols,Y=-1;if(z.resizingCols){let K=new Set(z.resizingCols);for(let F=X.length-1;F>=0;F--)if(K.has(X[F])){Y=F;break}}let q=!1,G=X.map((K,F)=>{let L=K.getFlex(),D=L!=null&&L>0&&F>Y;return q||(q=D),{col:K,isFlex:D,flex:Math.max(0,L??0),initialSize:K.getActualWidth(),min:K.getMinWidth(),max:K.getMaxWidth(),targetSize:0}});if(q)$?.hideColumns("colFlex"),this.columnsHidden=!0;else if(this.columnsHidden)this.revealColumns($);if(!Q||!q)return[];let U=G.length,_=G.reduce((K,F)=>K+F.flex,0),H=Q,W=(K,F)=>{K.frozenSize=F,K.col.setActualWidth(F,J),H-=F,_-=K.flex,U-=1},B=(K)=>K.frozenSize!=null;for(let K of G)if(!K.isFlex)W(K,K.initialSize);while(U>0){let K=Math.round(_<1?H*_:H),F,L=0,D=0;for(let A of G){if(B(A))continue;F=A,D+=K*(A.flex/_);let R=D-L,O=Math.round(R);A.targetSize=O,L+=O}if(F)F.targetSize+=K-L;let M=0;for(let A of G){if(B(A))continue;let R=A.targetSize,O=Math.min(Math.max(R,A.min),A.max);M+=O-R,A.violationType=O===R?void 0:O0?"min":"max";for(let A of G){if(B(A))continue;if(f==="all"||A.violationType===f)W(A,A.targetSize)}}if(!z.skipSetLeft)Z.setLeftValues(J);if(z.updateBodyWidths)Z.updateBodyWidths();let E=G.filter((K)=>K.isFlex&&!K.violationType).map((K)=>K.col);if(z.fireResizedEvent){let K=G.filter((L)=>L.initialSize!==L.frozenSize).map((L)=>L.col),F=G.filter((L)=>L.flex).map((L)=>L.col);N1(this.eventSvc,K,!0,J,F)}return this.revealColumns($),E}revealColumns(z){if(this.columnsHidden)z?.revealColumns("colFlex"),this.columnsHidden=!1}initCol(z){let{flex:J,initialFlex:Q}=z.colDef;if(J!==void 0)z.flex=J;else if(Q!==void 0)z.flex=Q}setColFlex(z,J){z.flex=J??null,z.dispatchStateUpdatedEvent("flex")}},Sz=(z)=>{if(typeof z==="bigint")return z;let J;if(typeof z==="number")J=z;else if(typeof z==="string"){if(J=z.trim(),J==="")return null;if(J.endsWith("n"))J=J.slice(0,-1);if(!/^[+-]?\d+$/.test(J))return null}if(J==null)return null;try{return BigInt(J)}catch{return null}},$5="T",kB=new RegExp(`[${$5} ]`),fB=new RegExp(`^\\d{4}-\\d{2}-\\d{2}(${$5}\\d{2}:\\d{2}:\\d{2}\\D?)?`);function x4(z,J){return z.toString().padStart(J,"0")}function o4(z,J=!0,Q=$5){if(!z)return null;let Z=[z.getFullYear(),z.getMonth()+1,z.getDate()].map(($)=>x4($,2)).join("-");if(J)Z+=Q+[z.getHours(),z.getMinutes(),z.getSeconds()].map(($)=>x4($,2)).join(":");return Z}function Ez(z,J=!0){if(!z)return null;if(J)return[String(z.getFullYear()),String(z.getMonth()+1),x4(z.getDate(),2),x4(z.getHours(),2),`:${x4(z.getMinutes(),2)}`,`:${x4(z.getSeconds(),2)}`];return[z.getFullYear(),z.getMonth()+1,x4(z.getDate(),2)].map(String)}var kQ=(z)=>{if(z>3&&z<21)return"th";switch(z%10){case 1:return"st";case 2:return"nd";case 3:return"rd"}return"th"},A2=["January","February","March","April","May","June","July","August","September","October","November","December"],fQ=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function SB(z,J){if(J==null)return o4(z,!1);let Q=x4(z.getFullYear(),4),Z={YYYY:()=>Q.slice(Q.length-4,Q.length),YY:()=>Q.slice(Q.length-2,Q.length),Y:()=>`${z.getFullYear()}`,MMMM:()=>A2[z.getMonth()],MMM:()=>A2[z.getMonth()].slice(0,3),MM:()=>x4(z.getMonth()+1,2),Mo:()=>`${z.getMonth()+1}${kQ(z.getMonth()+1)}`,M:()=>`${z.getMonth()+1}`,Do:()=>`${z.getDate()}${kQ(z.getDate())}`,DD:()=>x4(z.getDate(),2),D:()=>`${z.getDate()}`,dddd:()=>fQ[z.getDay()],ddd:()=>fQ[z.getDay()].slice(0,3),dd:()=>fQ[z.getDay()].slice(0,2),do:()=>`${z.getDay()}${kQ(z.getDay())}`,d:()=>`${z.getDay()}`},$=new RegExp(Object.keys(Z).join("|"),"g");return J.replace($,(X)=>{if(X in Z)return Z[X]();return X})}function V6(z,J=!1){return!!g0(z,J)}function VB(z){return V6(z,!0)}function g0(z,J=!1,Q){if(!z)return null;if(!Q&&!fB.test(z))return null;let[Z,$]=z.split(kB);if(!Z)return null;let X=Z.split("-").map((B)=>Number.parseInt(B,10));if(X.filter((B)=>!isNaN(B)).length!==3)return null;let[Y,q,G]=X,U=new Date(Y,q-1,G);if(U.getFullYear()!==Y||U.getMonth()!==q-1||U.getDate()!==G)return null;if(!$&&J)return null;if(!$||$==="00:00:00")return U;let[_,H,W]=$.split(":").map((B)=>Number.parseInt(B,10));if(_>=0&&_<24)U.setHours(_);else if(J)return null;if(H>=0&&H<60)U.setMinutes(H);else if(J)return null;if(W>=0&&W<60)U.setSeconds(W);else if(J)return null;return U}function B2(z,J){let Q=J.split("."),Z=z;for(let $=0;$null,suppressKeyboardEvent:({node:z,event:J,column:Q})=>J.key===k.SPACE&&Q.isCellEditable(z)}},date({formatValue:z}){return{cellEditor:"agDateCellEditor",keyCreator:z}},dateString({formatValue:z}){return{cellEditor:"agDateStringCellEditor",keyCreator:z}},dateTime(z){return this.date(z)},dateTimeString(z){return this.dateString(z)},object({formatValue:z,colModel:J,colId:Q}){return{cellEditorParams:{useFormatter:!0},comparator:(Z,$)=>{let X=J.getColDefCol(Q),Y=X?.colDef;if(!X||!Y)return 0;let q=Z==null?"":z({column:X,node:null,value:Z}),G=$==null?"":z({column:X,node:null,value:$});if(q===G)return 0;return q>G?1:-1},keyCreator:z}},text(){return{}}}}wireBeans(z){this.colModel=z.colModel}postConstruct(){this.processDataTypeDefinitions(),this.addManagedPropertyListener("dataTypeDefinitions",(z)=>{this.processDataTypeDefinitions(),this.colModel.recreateColumnDefs(z)})}processDataTypeDefinitions(){let z=this.getDefaultDataTypes(),J={},Q={},Z=(_)=>{return(H)=>{let{column:W,node:B,value:E}=H,K=W.getColDef().valueFormatter;if(K===_.groupSafeValueFormatter)K=_.valueFormatter;return this.beans.valueSvc.formatValue(W,B,E,K)}};for(let _ of Object.keys(z)){let H=z[_],W={...H,groupSafeValueFormatter:m7(H,this.gos)};J[_]=W,Q[_]=Z(W)}let $=this.gos.get("dataTypeDefinitions")??{},X={};for(let _ of Object.keys($)){let H=$[_],W=this.processDataTypeDefinition(H,$,[_],z);if(W){if(J[_]=W,H.dataTypeMatcher)X[_]=H.dataTypeMatcher;Q[_]=Z(W)}}let{valueParser:Y,valueFormatter:q}=z.object,{valueParser:G,valueFormatter:U}=J.object;this.hasObjectValueParser=G!==Y,this.hasObjectValueFormatter=U!==q,this.formatValueFuncs=Q,this.dataTypeDefinitions=J,this.dataTypeMatchers=this.sortKeysInMatchers(X,z)}sortKeysInMatchers(z,J){let Q={...z};for(let Z of RB)delete Q[Z],Q[Z]=z[Z]??J[Z].dataTypeMatcher;return Q}processDataTypeDefinition(z,J,Q,Z){let $,X=z.extendsDataType;if(z.columnTypes)this.isColumnTypeOverrideInDataTypeDefinitions=!0;if(z.extendsDataType===z.baseDataType){let Y=Z[X],q=J[X];if(Y&&q)Y=q;if(!u7(z,Y,X))return;$=h7(Y,z)}else{if(Q.includes(X)){V(44);return}let Y=J[X];if(!u7(z,Y,X))return;let q=this.processDataTypeDefinition(Y,J,[...Q,X],Z);if(!q)return;$=h7(q,z)}return{...$,groupSafeValueFormatter:m7($,this.gos)}}updateColDefAndGetColumnType(z,J,Q){let{cellDataType:Z}=J;if(Z===void 0)Z=z.cellDataType;let{field:$}=J;if(Z==null||Z===!0)Z=this.canInferCellDataType(z,J)?this.inferCellDataType($,Q):!1;if(this.addFormulaCellEditorToColDef(z,J),!Z){z.cellDataType=!1;return}let X=this.dataTypeDefinitions[Z];if(!X){V(47,{cellDataType:Z});return}if(z.cellDataType=Z,X.groupSafeValueFormatter)z.valueFormatter=X.groupSafeValueFormatter;if(X.valueParser)z.valueParser=X.valueParser;if(!X.suppressDefaultProperties)this.setColDefPropertiesForBaseDataType(z,Z,X,Q);return X.columnTypes}addFormulaCellEditorToColDef(z,J){if(!(J.allowFormula??z.allowFormula)||J.cellEditor)return;z.cellEditor="agFormulaCellEditor"}addColumnListeners(z){if(!this.isPendingInference)return;let J=this.columnStateUpdatesPendingInference[z.colId];if(!J)return;let Q=(Z)=>{J.add(Z.key)};z.__addEventListener("columnStateUpdated",Q),this.columnStateUpdateListenerDestroyFuncs.push(()=>z.__removeEventListener("columnStateUpdated",Q))}canInferCellDataType(z,J){let{gos:Q}=this;if(!o(Q))return!1;let Z={cellRenderer:!0,valueGetter:!0,valueParser:!0,refData:!0};if(SQ(J,Z))return!1;let $=J.type===null?z.type:J.type;if($){let X=Q.get("columnTypes")??{};if(x6($).some((q)=>{let G=X[q.trim()];return G&&SQ(G,Z)}))return!1}return!SQ(z,Z)}inferCellDataType(z,J){if(!z)return;let Q,Z=this.getInitialData();if(Z)Q=z.includes(".")&&!this.gos.get("suppressFieldDotNotation")?B2(Z,z):Z[z];else this.initWaitForRowData(J);if(Q==null)return;return Object.keys(this.dataTypeMatchers).find((X)=>this.dataTypeMatchers[X](Q))??"object"}getInitialData(){let z=this.gos.get("rowData");if(z?.length)return z[0];else if(this.initialData)return this.initialData;else{let J=this.beans.rowModel.rootNode?._leafs;if(J?.length)return J[0].data}return null}initWaitForRowData(z){if(this.columnStateUpdatesPendingInference[z]=new Set,this.isPendingInference)return;this.isPendingInference=!0;let J=this.isColumnTypeOverrideInDataTypeDefinitions,{colAutosize:Q,eventSvc:Z}=this.beans;if(J&&Q)Q.shouldQueueResizeOperations=!0;let[$]=this.addManagedEventListeners({rowDataUpdateStarted:(X)=>{let{firstRowData:Y}=X;if(!Y)return;if($?.(),this.isPendingInference=!1,this.processColumnsPendingInference(Y,J),this.columnStateUpdatesPendingInference={},J)Q?.processResizeOperations();Z.dispatchEvent({type:"dataTypesInferred"})}})}processColumnsPendingInference(z,J){this.initialData=z;let Q=[];this.destroyColumnStateUpdateListeners();let Z={},$={};for(let X of Object.keys(this.columnStateUpdatesPendingInference)){let Y=this.columnStateUpdatesPendingInference[X],q=this.colModel.getCol(X);if(!q)continue;let G=q.colDef;if(!this.resetColDefIntoCol(q,"cellDataTypeInferred"))continue;let U=q.colDef;if(J&&U.type&&U.type!==G.type){let _=IB(q,Y);if(_.rowGroup&&_.rowGroupIndex==null)Z[X]=_;if(_.pivot&&_.pivotIndex==null)$[X]=_;Q.push(_)}}if(J)Q.push(...this.generateColumnStateForRowGroupAndPivotIndexes(Z,$));if(Q.length)a0(this.beans,{state:Q},"cellDataTypeInferred");this.initialData=null}generateColumnStateForRowGroupAndPivotIndexes(z,J){let Q={},{rowGroupColsSvc:Z,pivotColsSvc:$}=this.beans;return Z?.restoreColumnOrder(Q,z),$?.restoreColumnOrder(Q,J),Object.values(Q)}resetColDefIntoCol(z,J){let Q=z.getUserProvidedColDef();if(!Q)return!1;let Z=e4(this.beans,Q,z.colId);return z.setColDef(Z,Q,J),!0}getDateStringTypeDefinition(z){let{dateString:J}=this.dataTypeDefinitions;if(!z)return J;return this.getDataTypeDefinition(z)??J}getDateParserFunction(z){return this.getDateStringTypeDefinition(z).dateParser}getDateFormatterFunction(z){return this.getDateStringTypeDefinition(z).dateFormatter}getDateIncludesTimeFlag(z){return z==="dateTime"||z==="dateTimeString"}getDataTypeDefinition(z){let J=z.colDef;if(!J.cellDataType)return;return this.dataTypeDefinitions[J.cellDataType]}getBaseDataType(z){return this.getDataTypeDefinition(z)?.baseDataType}checkType(z,J){if(J==null)return!0;let Q=this.getDataTypeDefinition(z)?.dataTypeMatcher;if(!Q)return!0;if(z.colDef.allowFormula&&this.beans.formula?.isFormula(J))return!0;return Q(J)}validateColDef(z,J,Q,Z){if(z.cellDataType==="object"){let $=(G)=>{return G?.cellDataType==null||G?.cellDataType===!0},X=$(J)&&$(Q),Y=(G)=>V(48,{property:G,inferred:X,colId:Z}),{object:q}=this.dataTypeDefinitions;if(z.valueFormatter===q.groupSafeValueFormatter&&!this.hasObjectValueFormatter)Y("Formatter");if(z.editable&&z.valueParser===q.valueParser&&!this.hasObjectValueParser)Y("Parser")}}postProcess(z){let J=z.cellDataType;if(!J||typeof J!=="string")return;let{dataTypeDefinitions:Q,beans:Z,formatValueFuncs:$}=this,X=Q[J];if(!X)return;Z.colFilter?.setColDefPropsForDataType(z,X,$[J])}getFormatValue(z){return this.formatValueFuncs[z]}isColPendingInference(z){return this.isPendingInference&&!!this.columnStateUpdatesPendingInference[z]}setColDefPropertiesForBaseDataType(z,J,Q,Z){let $=this.formatValueFuncs[J],X=this.columnDefinitionPropsPerDataType[Q.baseDataType]({colDef:z,cellDataType:J,colModel:this.colModel,dataTypeDefinition:Q,colId:Z,formatValue:$,filterModuleBean:this.beans.filterManager});if(z.cellEditor==="agFormulaCellEditor"&&X.cellEditor!==z.cellEditor)X.cellEditor=z.cellEditor;Object.assign(z,X)}getDateObjectTypeDef(z){let J=this.getLocaleTextFunc(),Q=this.getDateIncludesTimeFlag(z);return{baseDataType:z,valueParser:(Z)=>g0(Z.newValue&&String(Z.newValue)),valueFormatter:(Z)=>{if(Z.value==null)return"";if(!(Z.value instanceof Date)||isNaN(Z.value.getTime()))return J("invalidDate","Invalid Date");return o4(Z.value,Q)??""},dataTypeMatcher:(Z)=>Z instanceof Date}}getDateStringTypeDef(z){let J=this.getDateIncludesTimeFlag(z);return{baseDataType:z,dateParser:(Q)=>g0(Q)??void 0,dateFormatter:(Q)=>o4(Q??null,J)??void 0,valueParser:(Q)=>V6(String(Q.newValue))?Q.newValue:null,valueFormatter:(Q)=>V6(String(Q.value))?String(Q.value):"",dataTypeMatcher:(Q)=>typeof Q==="string"&&V6(Q)}}getDefaultDataTypes(){let z=this.getLocaleTextFunc();return{number:{baseDataType:"number",valueParser:(J)=>J.newValue?.trim?.()===""?null:Number(J.newValue),valueFormatter:(J)=>{if(J.value==null)return"";if(typeof J.value!=="number"||isNaN(J.value))return z("invalidNumber","Invalid Number");return String(J.value)},dataTypeMatcher:(J)=>typeof J==="number"},bigint:{baseDataType:"bigint",valueParser:(J)=>{let{newValue:Q}=J;if(Q==null)return null;if(typeof Q==="string"&&Q.trim()==="")return null;return Sz(Q)},valueFormatter:(J)=>{if(J.value==null)return"";if(typeof J.value!=="bigint")return z("invalidBigInt","Invalid BigInt");return String(J.value)},dataTypeMatcher:(J)=>typeof J==="bigint"},text:{baseDataType:"text",valueParser:(J)=>J.newValue===""?null:p0(J.newValue),dataTypeMatcher:(J)=>typeof J==="string"},boolean:{baseDataType:"boolean",valueParser:(J)=>{if(J.newValue==null)return J.newValue;return J.newValue?.trim?.()===""?null:String(J.newValue).toLowerCase()==="true"},valueFormatter:(J)=>J.value==null?"":String(J.value),dataTypeMatcher:(J)=>typeof J==="boolean"},date:this.getDateObjectTypeDef("date"),dateString:this.getDateStringTypeDef("dateString"),dateTime:this.getDateObjectTypeDef("dateTime"),dateTimeString:{...this.getDateStringTypeDef("dateTimeString"),dataTypeMatcher:(J)=>typeof J==="string"&&VB(J)},object:{baseDataType:"object",valueParser:()=>null,valueFormatter:(J)=>p0(J.value)??""}}}destroyColumnStateUpdateListeners(){for(let z of this.columnStateUpdateListenerDestroyFuncs)z();this.columnStateUpdateListenerDestroyFuncs=[]}destroy(){this.dataTypeDefinitions={},this.dataTypeMatchers={},this.formatValueFuncs={},this.columnStateUpdatesPendingInference={},this.destroyColumnStateUpdateListeners(),super.destroy()}};function h7(z,J){let Q={...z,...J};if(z.columnTypes&&J.columnTypes&&J.appendColumnTypes)Q.columnTypes=[...x6(z.columnTypes),...x6(J.columnTypes)];return Q}function u7(z,J,Q){if(!J)return V(45,{parentCellDataType:Q}),!1;if(J.baseDataType!==z.baseDataType)return V(46),!1;return!0}var jB=(z)=>typeof z==="bigint"||typeof z==="number",OB=(z)=>z==="number"||z==="bigint";function m7(z,J){if(!z.valueFormatter)return;return(Q)=>{let{node:Z,colDef:$,column:X,value:Y}=Q;if(Z?.group){let q=($.pivotValueColumn??X).getAggFunc();if(q){if(q==="first"||q==="last")return z.valueFormatter(Q);let{baseDataType:G}=z;if(OB(G)&&q!=="count"){if(jB(Y))return z.valueFormatter(Q);if(Y==null)return;if(typeof Y==="object"){if(typeof Y.toNumber==="function")return z.valueFormatter({...Q,value:Y.toNumber()});if("value"in Y)return z.valueFormatter({...Q,value:Y.value})}}return}}else if(J.get("groupHideOpenParents")&&Q.column.isRowGroupActive()){if(typeof Q.value==="string"&&!z.dataTypeMatcher?.(Q.value))return}return z.valueFormatter(Q)}}function PB(z,J,Q,Z){if(!J[Q])return!1;let $=z[Q];if($===null)return J[Q]=!1,!1;else return Z===void 0?!!$:$===Z}function TB(z,J){if(z==null)return J==null?0:-1;if(J==null)return 1;let Q=Sz(z),Z=Sz(J);if(Q!=null&&Z!=null){if(Q===Z)return 0;return Q>Z?1:-1}return 0}function vB(z,J){if(z==null)return J==null?0:-1;if(J==null)return 1;let Q=c7(z),Z=c7(J);if(Q!=null&&Z!=null){if(Q===Z)return 0;return Q>Z?1:-1}return 0}function c7(z){let J=Sz(z);if(J==null)return null;return J<0n?-J:J}function SQ(z,J){return[["cellRenderer","agSparklineCellRenderer"],["valueGetter",void 0],["valueParser",void 0],["refData",void 0]].some(([Q,Z])=>PB(z,J,Q,Z))}function IB(z,J){let Q=b$(z);for(let Z of J)if(delete Q[Z],Z==="rowGroup")delete Q.rowGroupIndex;else if(Z==="pivot")delete Q.pivotIndex;return Q}var CB={moduleName:"DataType",version:i,beans:[AB],dependsOn:[LB]},yB={moduleName:"ColumnFlex",version:i,beans:[MB]};var bB=class extends S{constructor(){super(...arguments);this.beanName="colNames"}getDisplayNameForColumn(z,J,Q=!1){if(!z)return null;let Z=this.getHeaderName(z.getColDef(),z,null,null,J),{aggColNameSvc:$}=this.beans;if(Q&&$)return $.getHeaderName(z,Z);return Z}getDisplayNameForProvidedColumnGroup(z,J,Q){let Z=J?.getColGroupDef();if(Z)return this.getHeaderName(Z,null,z,J,Q);return null}getDisplayNameForColumnGroup(z,J){return this.getDisplayNameForProvidedColumnGroup(z,z.getProvidedColumnGroup(),J)}getHeaderName(z,J,Q,Z,$){let X=z.headerValueGetter;if(X){let Y=C(this.gos,{colDef:z,column:J,columnGroup:Q,providedColumnGroup:Z,location:$});if(typeof X==="function")return X(Y);else if(typeof X==="string")return this.beans.expressionSvc?.evaluate(X,Y)??null;return""}else if(z.headerName!=null)return z.headerName;else if(z.field)return HG(z.field);return""}},xB=class extends S{constructor(){super(...arguments);this.beanName="colViewport",this.colsWithinViewport=[],this.headerColsWithinViewport=[],this.colsWithinViewportHash="",this.rowsOfHeadersToRenderLeft={},this.rowsOfHeadersToRenderRight={},this.rowsOfHeadersToRenderCenter={},this.columnsToRenderLeft=[],this.columnsToRenderRight=[],this.columnsToRenderCenter=[]}wireBeans(z){this.visibleCols=z.visibleCols,this.colModel=z.colModel}postConstruct(){this.suppressColumnVirtualisation=this.gos.get("suppressColumnVirtualisation")}getScrollPosition(){return this.scrollPosition}setScrollPosition(z,J,Q=!1){let{visibleCols:Z}=this,$=Z.isBodyWidthDirty;if(z===this.scrollWidth&&J===this.scrollPosition&&!$)return;if(this.scrollWidth=z,this.scrollPosition=J,Z.isBodyWidthDirty=!0,this.gos.get("enableRtl")){let Y=Z.bodyWidth;this.viewportLeft=Y-J-z,this.viewportRight=Y-J}else this.viewportLeft=J,this.viewportRight=z+J;if(this.colModel.ready)this.checkViewportColumns(Q)}getColumnHeadersToRender(z){switch(z){case"left":return this.columnsToRenderLeft;case"right":return this.columnsToRenderRight;default:return this.columnsToRenderCenter}}getHeadersToRender(z,J){let Q;switch(z){case"left":Q=this.rowsOfHeadersToRenderLeft[J];break;case"right":Q=this.rowsOfHeadersToRenderRight[J];break;default:Q=this.rowsOfHeadersToRenderCenter[J];break}return Q??[]}extractViewportColumns(){let z=this.visibleCols.centerCols;if(this.isColumnVirtualisationSuppressed())this.colsWithinViewport=z,this.headerColsWithinViewport=z;else this.colsWithinViewport=z.filter(this.isColumnInRowViewport.bind(this)),this.headerColsWithinViewport=z.filter(this.isColumnInHeaderViewport.bind(this))}isColumnVirtualisationSuppressed(){return this.suppressColumnVirtualisation||this.viewportRight===0}clear(){this.rowsOfHeadersToRenderLeft={},this.rowsOfHeadersToRenderRight={},this.rowsOfHeadersToRenderCenter={},this.colsWithinViewportHash=""}isColumnInHeaderViewport(z){if(z.isAutoHeaderHeight()||wB(z))return!0;return this.isColumnInRowViewport(z)}isColumnInRowViewport(z){if(z.isAutoHeight())return!0;let J=z.getLeft()||0,Q=J+z.getActualWidth(),Z=this.viewportLeft-200,$=this.viewportRight+200,X=J$&&Q>$;return!X&&!Y}getViewportColumns(){let{leftCols:z,rightCols:J}=this.visibleCols;return this.colsWithinViewport.concat(z).concat(J)}getColsWithinViewport(z){if(!this.colModel.colSpanActive)return this.colsWithinViewport;let J=(X)=>{let Y=X.getLeft();return P(Y)&&Y>this.viewportLeft},Q=this.isColumnVirtualisationSuppressed()?void 0:this.isColumnInRowViewport.bind(this),{visibleCols:Z}=this,$=Z.centerCols;return Z.getColsForRow(z,$,Q,J)}checkViewportColumns(z=!1){if(this.extractViewport())this.eventSvc.dispatchEvent({type:"virtualColumnsChanged",afterScroll:z})}calculateHeaderRows(){let{leftCols:z,rightCols:J}=this.visibleCols;this.columnsToRenderLeft=z,this.columnsToRenderRight=J,this.columnsToRenderCenter=this.colsWithinViewport;let Q=(Z)=>{let $=new Set,X={};for(let Y of Z){let q=Y.parent,G=Y.isSpanHeaderHeight();while(q){if($.has(q))break;if(G&&q.isPadding()){q=q.parent;continue}let _=q.getProvidedColumnGroup().getLevel();X[_]??(X[_]=[]),X[_].push(q),$.add(q),q=q.parent}}return X};this.rowsOfHeadersToRenderLeft=Q(z),this.rowsOfHeadersToRenderRight=Q(J),this.rowsOfHeadersToRenderCenter=Q(this.headerColsWithinViewport)}extractViewport(){let z=(Z)=>`${Z.getId()}-${Z.getPinned()||"normal"}`;this.extractViewportColumns();let J=this.getViewportColumns().map(z).join("#"),Q=this.colsWithinViewportHash!==J;if(Q)this.colsWithinViewportHash=J,this.calculateHeaderRows();return Q}};function wB(z){while(z){if(z.isAutoHeaderHeight())return!0;z=z.parent}return!1}var NB=class extends S{constructor(){super(...arguments);this.beanName="agCompUtils"}adaptFunction(z,J){if(!z.cellRenderer)return null;class Q{refresh(){return!1}getGui(){return this.eGui}init(Z){let $=J(Z),X=typeof $;if(X==="string"||X==="number"||X==="boolean"){this.eGui=KZ(""+$+"");return}if($==null){this.eGui=z0({tag:"span"});return}this.eGui=$}}return Q}},gB={moduleName:"CellRendererFunction",version:i,beans:[NB]},hB=class extends k0{constructor(){super(...arguments);this.beanName="registry"}registerDynamicBeans(z){if(z){this.dynamicBeans??(this.dynamicBeans={});for(let J of Object.keys(z))this.dynamicBeans[J]=z[J]}}createDynamicBean(z,J,...Q){if(!this.dynamicBeans)throw Error(this.getDynamicError(z,!0));let Z=this.dynamicBeans[z];if(Z==null){if(J)throw Error(this.getDynamicError(z,!1));return}return new Z(...Q)}};function uB(z){return typeof z==="object"&&!!z.getComp}var mB=class extends hB{constructor(){super(...arguments);this.agGridDefaults={},this.agGridDefaultOverrides={},this.jsComps={},this.selectors={},this.icons={}}postConstruct(){let z=this.gos.get("components");if(z!=null)for(let J of Object.keys(z))this.jsComps[J]=z[J]}registerModule(z){let{icons:J,userComponents:Q,dynamicBeans:Z,selectors:$}=z;if(Q){let X=(Y,q,G,U)=>{if(this.agGridDefaults[Y]=q,G||U)this.agGridDefaultOverrides[Y]={params:G,processParams:U}};for(let Y of Object.keys(Q)){let q=Q[Y];if(uB(q))q=q.getComp(this.beans);if(typeof q==="object"){let{classImp:G,params:U,processParams:_}=q;X(Y,G,U,_)}else X(Y,q)}}this.registerDynamicBeans(Z);for(let X of $??[])this.selectors[X.selector]=X;if(J)for(let X of Object.keys(J))this.icons[X]=J[X]}getUserComponent(z,J){let Q=(q,G,U,_)=>({componentFromFramework:G,component:q,params:U,processParams:_}),{frameworkOverrides:Z}=this.beans,$=Z.frameworkComponent(J,this.gos.get("components"));if($!=null)return Q($,!0);let X=this.jsComps[J];if(X){let q=Z.isFrameworkComponent(X);return Q(X,q)}let Y=this.agGridDefaults[J];if(Y){let q=this.agGridDefaultOverrides[J];return Q(Y,!1,q?.params,q?.processParams)}return this.beans.validation?.missingUserComponent(z,J,this.agGridDefaults,this.jsComps),null}getSelector(z){return this.selectors[z]}getIcon(z){return this.icons[z]}getDynamicError(z,J){if(J)return Y4(279,{name:z});return this.beans.validation?.missingDynamicBean(z)??Y4(256)}},cB=23,iB=class extends S{constructor(){super(...arguments);this.beanName="ctrlsSvc",this.params={},this.ready=!1,this.readyCallbacks=[]}postConstruct(){this.addEventListener("ready",()=>{if(this.updateReady(),this.ready){for(let z of this.readyCallbacks)z(this.params);this.readyCallbacks.length=0}},this.beans.frameworkOverrides.runWhenReadyAsync?.()??!1)}updateReady(){let z=Object.values(this.params);this.ready=z.length===cB&&z.every((J)=>{return J?.isAlive()??!1})}whenReady(z,J){if(this.ready)J(this.params);else this.readyCallbacks.push(J);z.addDestroyFunc(()=>{let Q=this.readyCallbacks.indexOf(J);if(Q>=0)this.readyCallbacks.splice(Q,1)})}register(z,J){if(this.params[z]=J,this.updateReady(),this.ready)this.dispatchLocalEvent({type:"ready"});J.addDestroyFunc(()=>{this.updateReady()})}get(z){return this.params[z]}getGridBodyCtrl(){return this.params.gridBodyCtrl}getHeaderRowContainerCtrls(){let{leftHeader:z,centerHeader:J,rightHeader:Q}=this.params;return[z,Q,J]}getHeaderRowContainerCtrl(z){let J=this.params;switch(z){case"left":return J.leftHeader;case"right":return J.rightHeader;default:return J.centerHeader}}getScrollFeature(){return this.getGridBodyCtrl().scrollFeature}},pB=':where([class^=ag-]),:where([class^=ag-]):after,:where([class^=ag-]):before{box-sizing:border-box}:where([class^=ag-]):where(button){color:inherit}:where([class^=ag-]):where(div,span,label):focus-visible{box-shadow:inset var(--ag-focus-shadow);outline:none;&:where(.invalid){box-shadow:inset var(--ag-focus-error-shadow)}}:where([class^=ag-]) ::-ms-clear{display:none}.ag-hidden{display:none!important}.ag-invisible{visibility:hidden!important}.ag-tab-guard{display:block;height:0;position:absolute;width:0}.ag-tab-guard-top{top:1px}.ag-tab-guard-bottom{bottom:1px}.ag-measurement-container{height:0;overflow:hidden;visibility:hidden;width:0}.ag-measurement-element-border{display:inline-block}.ag-measurement-element-border:before{border-left:var(--ag-internal-measurement-border);content:"";display:block}.ag-popup-child{top:0;z-index:5}.ag-popup-child:where(:not(.ag-tooltip-custom)){box-shadow:var(--ag-popup-shadow)}.ag-input-wrapper,.ag-picker-field-wrapper{align-items:center;display:flex;flex:1 1 auto;line-height:normal;position:relative}.ag-input-field{align-items:center;display:flex;flex-direction:row}.ag-input-field-input:where(:not([type=checkbox],[type=radio])){flex:1 1 auto;min-width:0;width:100%}.ag-chart,.ag-dnd-ghost,.ag-external,.ag-popup,.ag-root-wrapper{cursor:default;line-height:normal;white-space:normal;-webkit-font-smoothing:antialiased;background-color:var(--ag-wrapper-background-color);color:var(--ag-text-color);color-scheme:var(--ag-browser-color-scheme);font-family:var(--ag-font-family);font-size:var(--ag-font-size);font-weight:var(--ag-font-weight);--ag-indentation-level:0}:where(.ag-icon):before{align-items:center;background-color:currentcolor;color:inherit;content:"";display:flex;font-family:inherit;font-size:var(--ag-icon-size);font-style:normal;font-variant:normal;height:var(--ag-icon-size);justify-content:center;line-height:var(--ag-icon-size);-webkit-mask-size:contain;mask-size:contain;text-transform:none;width:var(--ag-icon-size)}.ag-icon{background-position:50%;background-repeat:no-repeat;background-size:contain;color:var(--ag-icon-color);display:block;height:var(--ag-icon-size);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--ag-icon-size)}.ag-disabled .ag-icon,[disabled] .ag-icon{opacity:.5}.ag-icon-grip.ag-disabled,.ag-icon-grip[disabled]{opacity:.35}.ag-icon-loading{animation-duration:1s;animation-iteration-count:infinite;animation-name:spin;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ag-resizer{pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:1}:where(.ag-resizer){&.ag-resizer-topLeft{cursor:nwse-resize;height:5px;left:0;top:0;width:5px}&.ag-resizer-top{cursor:ns-resize;height:5px;left:5px;right:5px;top:0}&.ag-resizer-topRight{cursor:nesw-resize;height:5px;right:0;top:0;width:5px}&.ag-resizer-right{bottom:5px;cursor:ew-resize;right:0;top:5px;width:5px}&.ag-resizer-bottomRight{bottom:0;cursor:nwse-resize;height:5px;right:0;width:5px}&.ag-resizer-bottom{bottom:0;cursor:ns-resize;height:5px;left:5px;right:5px}&.ag-resizer-bottomLeft{bottom:0;cursor:nesw-resize;height:5px;left:0;width:5px}&.ag-resizer-left{bottom:5px;cursor:ew-resize;left:0;top:5px;width:5px}}.ag-menu{background-color:var(--ag-menu-background-color);border:var(--ag-menu-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-menu-shadow);color:var(--ag-menu-text-color);max-height:100%;overflow-y:auto;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}',X5=typeof window!=="object"||!window?.document?.fonts?.forEach,m6=!1,ez=(z,J,Q,Z,$,X,Y=!1)=>{if(X5||m6)return;let q=z;if(Z)q=`@layer ${CSS.escape(Z).replaceAll("\\.",".")} { ${z} }`;let G=w4.map.get(J);if(!G)G=[],w4.map.set(J,G);if(G.some((W)=>W.injectedCss===q))return;let U=document.createElement("style");if(X)U.setAttribute("nonce",X);U.dataset.agCss=Q,U.dataset.agCssVersion=i,U.textContent=q;let _={rawCss:z,injectedCss:q,el:U,priority:$,isParams:Y},H;for(let W of G){if(W.priority>$)break;H=W}if(H){H.el.after(U);let W=G.indexOf(H);G.splice(W+1,0,_)}else{if(J.nodeName==="STYLE")J.after(U);else J.insertBefore(U,J.querySelector(":not(title, meta)"));G.push(_)}},w$=(z,J,Q,Z)=>{ez(pB,z,"shared",J,0,Q),Z?.forEach(($,X)=>$.forEach((Y)=>ez(Y,z,X,J,0,Q)))},nB=(z,J,Q,Z,$,X)=>{if(X5||m6)return;let Y=w4.grids.get(z);if(!Y)w4.grids.set(z,{styleContainer:Z,paramsCss:J});else Y.paramsCss=J;if(rQ(Z),J&&Q)ez(J,Z,Q,$,2,X,!0)},dB=(z)=>{let J=w4.grids.get(z)?.styleContainer;if(!J)return;if(w4.grids.delete(z),Array.from(w4.grids.values()).some((Z)=>Z.styleContainer===J))rQ(J);else rQ(J,!0),w4.map.delete(J)},rQ=(z,J=!1)=>{let Q=new Set;for(let $ of w4.grids.values())if($.styleContainer===z)Q.add($.paramsCss);let Z=w4.map.get(z)??[];for(let $=Z.length-1;$>=0;$--)if(J||Z[$].isParams&&!Q.has(Z[$].rawCss))Z[$].el.remove(),Z.splice($,1)},N$=()=>{let z=globalThis.agStyleInjectionVersions??(globalThis.agStyleInjectionVersions=new Map),J=z.get(i);if(!J)J={map:new WeakMap,grids:new Map,paramsId:0},z.set(i,J);return J},w4=N$(),H4=(z)=>{return new g$(z)},Wz="$default",rB=0,g$=class{constructor({feature:z,params:J,modeParams:Q={},css:Z,cssImports:$}){this.feature=z,this.css=Z,this.cssImports=$,this.modeParams={[Wz]:{...Q[Wz]??{},...J??{}},...Q}}use(z,J,Q){let Z=this._inject;if(Z==null){let{css:$}=this;if($){let X=`ag-theme-${this.feature??"part"}-${++rB}`;if(typeof $==="function")$=$();$=`:where(.${X}) { +${$} +} +`;for(let Y of this.cssImports??[])$=`@import url(${JSON.stringify(Y)}); +${$}`;Z={css:$,class:X}}else Z=!1;this._inject=Z}if(Z&&z)ez(Z.css,z,Z.class,J,1,Q);return Z?Z.class:!1}},tB=(z)=>z.replace(/[A-Z]|\d+/g,(J)=>`-${J}`).toLowerCase(),Y5=(z)=>`--ag-${tB(z)}`,m4=(z)=>`var(${Y5(z)})`,sB=(z,J,Q)=>Math.max(J,Math.min(Q,z)),lB=(z)=>{let J=new Map;return(Q)=>{let Z=Q;if(!J.has(Z))J.set(Z,z(Q));return J.get(Z)}},I4=(z)=>({ref:"accentColor",mix:z}),J4=(z)=>({ref:"foregroundColor",mix:z}),$4=(z)=>({ref:"foregroundColor",mix:z,onto:"backgroundColor"}),aB=(z)=>({ref:"foregroundColor",mix:z,onto:"headerBackgroundColor"}),x0={ref:"backgroundColor"},pz={ref:"foregroundColor"},C4={ref:"accentColor"},c6={backgroundColor:"#fff",foregroundColor:"#181d1f",borderColor:J4(0.15),chromeBackgroundColor:$4(0.02),browserColorScheme:"light"},h$=()=>["-apple-system","BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif"],oB={...c6,textColor:pz,accentColor:"#2196f3",invalidColor:"#e02525",fontFamily:h$(),subtleTextColor:{ref:"textColor",mix:0.5},borderWidth:1,borderRadius:4,spacing:8,fontSize:14,fontWeight:"inherit",focusShadow:{spread:3,color:I4(0.5)},focusErrorShadow:{spread:3,color:{ref:"invalidColor",onto:"backgroundColor",mix:0.5}},popupShadow:"0 0 16px #00000026",cardShadow:"0 1px 4px 1px #00000018",dropdownShadow:{ref:"cardShadow"},listItemHeight:{calc:"max(iconSize, dataFontSize) + widgetVerticalSpacing"},dragAndDropImageBackgroundColor:x0,dragAndDropImageBorder:!0,dragAndDropImageNotAllowedBorder:{color:{ref:"invalidColor",onto:"dragAndDropImageBackgroundColor",mix:0.5}},dragAndDropImageShadow:{ref:"popupShadow"},iconSize:16,iconColor:"inherit",toggleButtonWidth:28,toggleButtonHeight:18,toggleButtonOnBackgroundColor:C4,toggleButtonOffBackgroundColor:$4(0.3),toggleButtonSwitchBackgroundColor:x0,toggleButtonSwitchInset:2,tooltipBackgroundColor:{ref:"chromeBackgroundColor"},tooltipErrorBackgroundColor:{ref:"invalidColor",onto:"backgroundColor",mix:0.1},tooltipTextColor:{ref:"textColor"},tooltipErrorTextColor:{ref:"invalidColor"},tooltipBorder:!0,tooltipErrorBorder:{color:{ref:"invalidColor",onto:"backgroundColor",mix:0.25}},panelBackgroundColor:x0,panelTitleBarHeight:{ref:"headerHeight"},panelTitleBarBackgroundColor:{ref:"headerBackgroundColor"},panelTitleBarIconColor:{ref:"headerTextColor"},panelTitleBarTextColor:{ref:"headerTextColor"},panelTitleBarFontFamily:{ref:"headerFontFamily"},panelTitleBarFontSize:{ref:"headerFontSize"},panelTitleBarFontWeight:{ref:"headerFontWeight"},panelTitleBarBorder:!0,dialogShadow:{ref:"popupShadow"},dialogBorder:{color:J4(0.2)},widgetContainerHorizontalPadding:{calc:"spacing * 1.5"},widgetContainerVerticalPadding:{calc:"spacing * 1.5"},widgetHorizontalSpacing:{calc:"spacing * 1.5"},widgetVerticalSpacing:{ref:"spacing"},dataFontSize:{ref:"fontSize"},headerBackgroundColor:{ref:"chromeBackgroundColor"},headerFontFamily:{ref:"fontFamily"},headerFontSize:{ref:"fontSize"},headerFontWeight:500,headerTextColor:{ref:"textColor"},headerHeight:{calc:"max(iconSize, dataFontSize) + spacing * 4 * headerVerticalPaddingScale"},headerVerticalPaddingScale:1,menuBorder:{color:J4(0.2)},menuBackgroundColor:$4(0.03),menuTextColor:$4(0.95),menuShadow:{ref:"popupShadow"},menuSeparatorColor:{ref:"borderColor"}},eB=["colorScheme","color","length","scale","borderStyle","border","shadow","image","fontFamily","fontWeight","duration"],zE=lB((z)=>{return z=z.toLowerCase(),eB.find((J)=>z.endsWith(J.toLowerCase()))??"length"}),LJ=(z)=>{if(typeof z==="object"&&z?.ref)return m4(z.ref);if(typeof z==="string")return z;if(typeof z==="number")return String(z);return!1},q5=(z)=>{if(typeof z==="string")return z;if(typeof z==="object"&&z&&"ref"in z){let J=m4(z.ref);if(z.mix==null)return J;return`color-mix(in srgb, ${z.onto?m4(z.onto):"transparent"}, ${J} ${sB(z.mix*100,0,100)}%)`}return!1},JE=LJ,R1=(z)=>{if(typeof z==="string")return z;if(typeof z==="number")return`${z}px`;if(typeof z==="object"&&z&&"calc"in z)return`calc(${z.calc.replace(/ ?[*/+] ?/g," $& ").replace(/-?\b[a-z][a-z0-9]*\b(?![-(])/gi,(Q)=>Q[0]==="-"?Q:" "+m4(Q)+" ")})`;if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);return!1},QE=LJ,tQ=(z,J)=>{if(typeof z==="string")return z;if(z===!0)return tQ({},J);if(z===!1)return J==="columnBorder"?tQ({color:"transparent"},J):"none";if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);return u$(z.style??"solid")+" "+R1(z.width??{ref:"borderWidth"})+" "+q5(z.color??{ref:"borderColor"})},i7=(z)=>{return[R1(z.offsetX??0),R1(z.offsetY??0),R1(z.radius??0),R1(z.spread??0),q5(z.color??{ref:"foregroundColor"}),...z.inset?["inset"]:[]].join(" ")},ZE=(z)=>{if(typeof z==="string")return z;if(z===!1)return"none";if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);if(Array.isArray(z))return z.map(i7).join(", ");return i7(z)},u$=LJ,m$=(z)=>{if(typeof z==="string")return z.includes(",")?z:p7(z);if(typeof z==="object"&&z&&"googleFont"in z)return m$(z.googleFont);if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);if(Array.isArray(z))return z.map((J)=>{if(typeof J==="object"&&"googleFont"in J)J=J.googleFont;return p7(J)}).join(", ");return!1},p7=(z)=>/^[\w-]+$|\w\(/.test(z)?z:JSON.stringify(z),$E=LJ,c$=(z)=>{if(typeof z==="string")return z;if(typeof z==="object"&&z&&"url"in z)return`url(${JSON.stringify(z.url)})`;if(typeof z==="object"&&z&&"svg"in z)return c$({url:`data:image/svg+xml,${encodeURIComponent(z.svg)}`});if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);return!1},XE=(z,J,Q)=>{if(typeof z==="string")return z;if(typeof z==="number"){if(z>=10)Q?.warn(104,{value:z,param:J});return`${z}s`}if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);return!1},YE={color:q5,colorScheme:JE,length:R1,scale:QE,border:tQ,borderStyle:u$,shadow:ZE,image:c$,fontFamily:m$,fontWeight:$E,duration:XE},qE=(z,J,Q)=>{let Z=zE(z);return YE[Z](J,z,Q)};var GE=(z,J)=>new i$({themeLogger:z,overridePrefix:J}),i$=class z{constructor(J,Q=[]){this.params=J,this.parts=Q}withPart(J){if(typeof J==="function")J=J();if(!(J instanceof g$))return this.params.themeLogger.preInitErr(259,"Invalid part",{part:J}),this;return new z(this.params,[...this.parts,J])}withoutPart(J){return this.withPart(H4({feature:J}))}withParams(J,Q=Wz){return this.withPart(H4({modeParams:{[Q]:J}}))}_startUse({styleContainer:J,cssLayer:Q,nonce:Z,loadThemeGoogleFonts:$,moduleCss:X}){if(X5)return;if(m6)return;_E(),w$(J,Q,Z,X);let Y=UE(this);if(Y.length>0){for(let q of Y)if($)HE(q,Z)}for(let q of this.parts)q.use(J,Q,Z)}_getCssClass(){if(m6)return"ag-theme-quartz";return this._cssClassCache??(this._cssClassCache=n7(this.parts).map((J)=>J.use(void 0,void 0,void 0)).filter(Boolean).concat(this._getParamsClassName()).join(" "))}_getParamsClassName(){return this._paramsClassName??(this._paramsClassName=`ag-theme-params-${++N$().paramsId}`)}_getModeParams(){let J=this._paramsCache;if(!J){let Q={[Wz]:{...oB}};for(let Z of n7(this.parts))for(let $ of Object.keys(Z.modeParams)){let X=Z.modeParams[$];if(X){let Y=Q[$]??(Q[$]={}),q=new Set;for(let G of Object.keys(X)){let U=X[G];if(U!==void 0)Y[G]=U,q.add(G)}if($===Wz)for(let G of Object.keys(Q)){let U=Q[G];if(G!==Wz)for(let _ of q)delete U[_]}}}this._paramsCache=J=Q}return J}_getParamsCss(){if(!this._paramsCssCache){let J="",Q="",Z=this._getModeParams(),{overridePrefix:$,themeLogger:X}=this.params,Y=$?`--ag-${$}-`:void 0;for(let U of Object.keys(Z)){let _=Z[U];if(U!==Wz){let W=`:where([data-ag-theme-mode="${typeof CSS==="object"?CSS.escape(U):U}"]) & { +`;J+=W,Q+=W}for(let H of Object.keys(_).sort()){let W=_[H],B=qE(H,W,X);if(B===!1)X.error(107,{key:H,value:W});else{let E=Y5(H),K=Y?E.replace("--ag-",Y):E,F=E.replace("--ag-","--ag-inherited-");J+=` ${E}: var(${F}, ${B}); +`,Q+=` ${F}: var(${K}); +`}}if(U!==Wz)J+=`} +`,Q+=`} +`}let q=`:where(.${this._getParamsClassName()})`,G=`${q} { +${J}} +`;G+=`:has(> ${q}):not(${q}) { +${Q}} +`,this._paramsCssCache=G}return this._paramsCssCache}},n7=(z)=>{let J=new Map;for(let Z of z)J.set(Z.feature,Z);let Q=[];for(let Z of z)if(!Z.feature||J.get(Z.feature)===Z)Q.push(Z);return Q},UE=(z)=>{let J=new Set,Q=(X)=>{if(Array.isArray(X))X.forEach(Q);else{let Y=X?.googleFont;if(typeof Y==="string")J.add(Y)}};return Object.values(z._getModeParams()).flatMap((X)=>Object.values(X)).forEach(Q),Array.from(J).sort()},d7=!1,_E=()=>{if(d7)return;d7=!0;for(let z of Array.from(document.head.querySelectorAll('style[data-ag-scope="legacy"]')))z.remove()},HE=async(z,J)=>{let Q=`@import url('https://${WE}/css2?family=${encodeURIComponent(z)}:wght@100;200;300;400;500;600;700;800;900&display=swap'); +`;ez(Q,document.head,`googleFont:${z}`,void 0,0,J)},WE="fonts.googleapis.com",r7={changeKey:"listItemHeight",type:"length",defaultValue:24},BE=class extends k0{constructor(){super(...arguments);this.beanName="environment",this.sizeEls=new Map,this.lastKnownValues=new Map,this.sizesMeasured=!1,this.globalCSS=[]}wireBeans(z){this.eRootDiv=z.eRootDiv}postConstruct(){let{gos:z,eRootDiv:J}=this;z.setInstanceDomData(J);let Q=z.get("themeStyleContainer"),Z=typeof ShadowRoot<"u",$=Z&&J.getRootNode()instanceof ShadowRoot;if(this.eStyleContainer=(typeof Q==="function"?Q():Q)??($?J:document.head),!Q&&!$&&Z)EE(J,this.shadowRootError.bind(this),this.addDestroyFunc.bind(this));this.cssLayer=z.get("themeCssLayer"),this.styleNonce=z.get("styleNonce"),this.addManagedPropertyListener("theme",()=>this.handleThemeChange()),this.handleThemeChange(),this.getSizeEl(r7),this.initVariables(),this.addDestroyFunc(()=>dB(this)),this.mutationObserver=new MutationObserver(()=>{this.fireStylesChangedEvent("theme")}),this.addDestroyFunc(()=>this.mutationObserver.disconnect())}applyThemeClasses(z,J=[]){let{theme:Q}=this,Z=Q?Q._getCssClass():this.applyLegacyThemeClasses();for(let $ of Array.from(z.classList))if($.startsWith("ag-theme-"))z.classList.remove($);if(Z){let $=z.className;z.className=`${$}${$?" ":""}${Z}${J?.length?" "+J.join(" "):""}`}}applyLegacyThemeClasses(){let z="";this.mutationObserver.disconnect();let J=this.eRootDiv;while(J){let Q=!1;for(let Z of Array.from(J.classList))if(Z.startsWith("ag-theme-"))Q=!0,z=z?`${z} ${Z}`:Z;if(Q)this.mutationObserver.observe(J,{attributes:!0,attributeFilter:["class"]});J=J.parentElement}return z}addGlobalCSS(z,J){if(this.theme)ez(z,this.eStyleContainer,J,this.cssLayer,0,this.styleNonce);else this.globalCSS.push([z,J])}getDefaultListItemHeight(){return this.getCSSVariablePixelValue(r7)}getCSSVariablePixelValue(z){let J=this.lastKnownValues.get(z);if(J!=null)return J;let Q=this.measureSizeEl(z);if(Q==="detached"||Q==="no-styles"){if(z.cacheDefault)this.lastKnownValues.set(z,z.defaultValue);return z.defaultValue}return this.lastKnownValues.set(z,Q),Q}measureSizeEl(z){let J=this.getSizeEl(z);if(J.offsetParent==null)return"detached";let Q=J.offsetWidth;if(Q===VQ)return"no-styles";return this.sizesMeasured=!0,Q}getMeasurementContainer(){let z=this.eMeasurementContainer;if(!z)z=this.eMeasurementContainer=H0({tag:"div",cls:"ag-measurement-container"}),this.eRootDiv.appendChild(z);return z}getSizeEl(z){let J=this.sizeEls.get(z);if(J)return J;let Q=this.getMeasurementContainer();J=H0({tag:"div"});let Z=this.setSizeElStyles(J,z);Q.appendChild(J),this.sizeEls.set(z,J);let{type:$,noWarn:X}=z;if($!=="length"&&$!=="border")return J;let Y=this.measureSizeEl(z);if(Y==="no-styles"&&!X)this.varError(Z,z.defaultValue);let q=j4(this.beans,J,()=>{let G=this.measureSizeEl(z);if(G==="detached"||G==="no-styles")return;if(this.lastKnownValues.set(z,G),G!==Y)Y=G,this.fireStylesChangedEvent(z.changeKey)});return this.addDestroyFunc(()=>q()),J}setSizeElStyles(z,J){let{changeKey:Q,type:Z}=J,$=Y5(Q);if(Z==="border"){if($.endsWith("-width"))$=$.slice(0,-6);z.className="ag-measurement-element-border",z.style.setProperty("--ag-internal-measurement-border",`var(${$}, solid ${VQ}px)`)}else z.style.width=`var(${$}, ${VQ}px)`;return $}handleThemeChange(){let{gos:z,theme:J}=this,Q=z.get("theme"),Z;if(Q==="legacy")Z=void 0;else{let $=Q??this.getDefaultTheme();if($ instanceof i$)Z=$;else this.themeError($)}if(Z!==J)this.handleNewTheme(Z);this.postProcessThemeChange(Z,Q)}handleNewTheme(z){let{gos:J,eRootDiv:Q,globalCSS:Z}=this,$=this.getAdditionalCss();if(z){w$(this.eStyleContainer,this.cssLayer,this.styleNonce,$);for(let[X,Y]of Z)ez(X,this.eStyleContainer,Y,this.cssLayer,0,this.styleNonce);Z.length=0}this.theme=z,z?._startUse({loadThemeGoogleFonts:J.get("loadThemeGoogleFonts"),styleContainer:this.eStyleContainer,cssLayer:this.cssLayer,nonce:this.styleNonce,moduleCss:$}),nB(this,z?._getParamsCss()??null,z?._getParamsClassName()??null,this.eStyleContainer,this.cssLayer,this.styleNonce),this.applyThemeClasses(Q),this.fireStylesChangedEvent("theme")}fireStylesChangedEvent(z){this.eventSvc.dispatchEvent({type:"stylesChanged",[`${z}Changed`]:!0})}},VQ=15538,EE=(z,J,Q)=>{let Z=60,$=setInterval(()=>{if(typeof ShadowRoot<"u"&&z.getRootNode()instanceof ShadowRoot)J(),clearInterval($);if(z.isConnected||--Z<0)clearInterval($)},1000);Q(()=>clearInterval($))},KE=".ag-aria-description-container{border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;z-index:9999}.ag-unselectable{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-selectable{-webkit-user-select:text;-moz-user-select:text;user-select:text}.ag-shake-left-to-right{animation-direction:alternate;animation-duration:.2s;animation-iteration-count:infinite;animation-name:ag-shake-left-to-right}@keyframes ag-shake-left-to-right{0%{padding-left:6px;padding-right:2px}to{padding-left:2px;padding-right:6px}}.ag-body-horizontal-scroll-viewport,.ag-body-vertical-scroll-viewport,.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport{flex:1 1 auto;height:100%;min-width:0;overflow:hidden;position:relative}.ag-viewport{position:relative}.ag-spanning-container{position:absolute;top:0;z-index:1}.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport{overflow-x:auto;-ms-overflow-style:none!important;scrollbar-width:none!important}.ag-body-viewport::-webkit-scrollbar,.ag-center-cols-viewport::-webkit-scrollbar,.ag-floating-bottom-viewport::-webkit-scrollbar,.ag-floating-top-viewport::-webkit-scrollbar,.ag-header-viewport::-webkit-scrollbar,.ag-sticky-bottom-viewport::-webkit-scrollbar,.ag-sticky-top-viewport::-webkit-scrollbar{display:none!important}.ag-body-viewport{display:flex;overflow-x:hidden;&:where(.ag-layout-normal){overflow-y:auto;-webkit-overflow-scrolling:touch}}.ag-floating-bottom-container,.ag-floating-top-container,.ag-sticky-bottom-container,.ag-sticky-top-container{min-height:1px}.ag-center-cols-viewport{min-height:100%;width:100%}.ag-body-horizontal-scroll-viewport{overflow-x:scroll}.ag-body-vertical-scroll-viewport{overflow-y:scroll}.ag-body-container,.ag-body-horizontal-scroll-container,.ag-body-vertical-scroll-container,.ag-center-cols-container,.ag-floating-bottom-container,.ag-floating-bottom-full-width-container,.ag-floating-top-container,.ag-full-width-container,.ag-header-container,.ag-pinned-left-cols-container,.ag-pinned-left-sticky-bottom,.ag-pinned-right-cols-container,.ag-pinned-right-sticky-bottom,.ag-sticky-bottom-container,.ag-sticky-top-container{position:relative}.ag-floating-bottom-container,.ag-floating-top-container,.ag-header-container,.ag-pinned-left-floating-bottom,.ag-pinned-left-floating-top,.ag-pinned-right-floating-bottom,.ag-pinned-right-floating-top,.ag-sticky-bottom-container,.ag-sticky-top-container{height:100%;white-space:nowrap}.ag-center-cols-container,.ag-pinned-right-cols-container{display:block}.ag-body-horizontal-scroll-container{height:100%}.ag-body-vertical-scroll-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container,.ag-full-width-container,.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{pointer-events:none;position:absolute;top:0}:where(.ag-ltr) .ag-floating-bottom-full-width-container,:where(.ag-ltr) .ag-floating-top-full-width-container,:where(.ag-ltr) .ag-full-width-container,:where(.ag-ltr) .ag-sticky-bottom-full-width-container,:where(.ag-ltr) .ag-sticky-top-full-width-container{left:0}:where(.ag-rtl) .ag-floating-bottom-full-width-container,:where(.ag-rtl) .ag-floating-top-full-width-container,:where(.ag-rtl) .ag-full-width-container,:where(.ag-rtl) .ag-sticky-bottom-full-width-container,:where(.ag-rtl) .ag-sticky-top-full-width-container{right:0}.ag-full-width-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container{display:inline-block;height:100%;overflow:hidden;width:100%}.ag-body{display:flex;flex:1 1 auto;flex-direction:row!important;min-height:0;position:relative}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:flex;min-height:0;min-width:0;position:relative;&:where(.ag-scrollbar-invisible){bottom:0;position:absolute;&:where(.ag-apple-scrollbar){opacity:0;transition:opacity .4s;visibility:hidden;&:where(.ag-scrollbar-active),&:where(.ag-scrollbar-scrolling){opacity:1;visibility:visible}}}}.ag-body-horizontal-scroll{width:100%;&:where(.ag-scrollbar-invisible){left:0;right:0}}.ag-body-vertical-scroll{height:100%;&:where(.ag-scrollbar-invisible){top:0;z-index:10}}:where(.ag-ltr) .ag-body-vertical-scroll{&:where(.ag-scrollbar-invisible){right:0}}:where(.ag-rtl) .ag-body-vertical-scroll{&:where(.ag-scrollbar-invisible){left:0}}.ag-force-vertical-scroll{overflow-y:scroll!important}.ag-horizontal-left-spacer,.ag-horizontal-right-spacer{height:100%;min-width:0;overflow-x:scroll;&:where(.ag-scroller-corner){overflow-x:hidden}}:where(.ag-row-animation) .ag-row{transition:transform .4s,top .4s,opacity .2s;&:where(.ag-after-created){transition:transform .4s,top .4s,height .4s,opacity .2s}}:where(.ag-row-animation.ag-prevent-animation) .ag-row{transition:none!important;&:where(.ag-row.ag-after-created){transition:none!important}}:where(.ag-row-no-animation) .ag-row{transition:none}.ag-row-loading{align-items:center;display:flex}.ag-row-position-absolute{position:absolute}.ag-row-position-relative{position:relative}.ag-full-width-row{overflow:hidden;pointer-events:all}.ag-row-inline-editing{z-index:1}.ag-row-dragging{z-index:2}.ag-stub-cell{align-items:center;display:flex}.ag-cell{display:inline-block;height:100%;position:absolute;white-space:nowrap;&:focus-visible{box-shadow:none}}.ag-cell-value{flex:1 1 auto}.ag-cell-value:not(.ag-allow-overflow),.ag-group-value{overflow:hidden;text-overflow:ellipsis}.ag-cell-wrap-text{overflow-wrap:break-word;white-space:normal}:where(.ag-cell) .ag-icon{display:inline-block;vertical-align:middle}.ag-floating-top{display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}:where(.ag-floating-top:not(.ag-invisible)){border-bottom:var(--ag-pinned-row-border)}.ag-floating-bottom{display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}:where(.ag-floating-bottom:not(.ag-invisible)){border-top:var(--ag-pinned-row-border)}.ag-sticky-bottom,.ag-sticky-top{background-color:var(--ag-data-background-color);display:flex;height:0;overflow:hidden;position:absolute;width:100%;z-index:1}.ag-sticky-bottom{box-sizing:content-box!important;:where(.ag-pinned-left-sticky-bottom),:where(.ag-pinned-right-sticky-bottom),:where(.ag-sticky-bottom-container){border-top:var(--ag-row-border);box-sizing:border-box}}.ag-opacity-zero{opacity:0!important}.ag-cell-label-container{align-items:center;display:flex;flex-direction:row-reverse;height:100%;justify-content:space-between;width:100%}:where(.ag-right-aligned-header){.ag-cell-label-container{flex-direction:row}.ag-header-cell-text{text-align:end}}.ag-column-group-icons{display:block;:where(.ag-column-group-closed-icon),:where(.ag-column-group-opened-icon){cursor:pointer}}:where(.ag-ltr){direction:ltr;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row}}:where(.ag-rtl){direction:rtl;text-align:right;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row-reverse}.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{display:block}}:where(.ag-rtl){.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(180deg)}}:where(.ag-rtl){.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(-180deg)}}:where(.ag-ltr) .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-left:var(--ag-row-group-indent-size)}:where(.ag-rtl) .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-right:var(--ag-row-group-indent-size)}:where(.ag-ltr) .ag-row-group-leaf-indent{margin-left:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}:where(.ag-rtl) .ag-row-group-leaf-indent{margin-right:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}.ag-value-change-delta{padding:0 2px}.ag-value-change-delta-up{color:var(--ag-value-change-delta-up-color)}.ag-value-change-delta-down{color:var(--ag-value-change-delta-down-color)}.ag-value-change-value{background-color:transparent;border-radius:1px;padding-left:1px;padding-right:1px;transition:background-color 1s}.ag-value-change-value-highlight{background-color:var(--ag-value-change-value-highlight-background-color);transition:background-color .1s}.ag-cell-data-changed{background-color:var(--ag-value-change-value-highlight-background-color)!important}.ag-cell-data-changed-animation{background-color:transparent}.ag-cell-highlight{background-color:var(--ag-range-selection-highlight-color)!important}.ag-row,.ag-spanned-row{color:var(--ag-cell-text-color);font-family:var(--ag-cell-font-family);font-size:var(--ag-cell-font-size);font-weight:var(--ag-cell-font-weight);white-space:nowrap;--ag-internal-content-line-height:calc(min(var(--ag-row-height), var(--ag-line-height, 1000px)) - var(--ag-internal-row-border-width, 1px) - 2px)}.ag-row{background-color:var(--ag-data-background-color);border-bottom:var(--ag-row-border);height:var(--ag-row-height);width:100%;&.ag-row-editing-invalid{background-color:var(--ag-full-row-edit-invalid-background-color)}}:where(.ag-body-vertical-content-no-gap>div>div>div,.ag-body-vertical-content-no-gap>div>div>div>div)>.ag-row-last{border-bottom-color:transparent}.ag-group-contracted,.ag-group-expanded{cursor:pointer}.ag-cell,.ag-full-width-row .ag-cell-wrapper.ag-row-group{border:1px solid transparent;line-height:var(--ag-internal-content-line-height);-webkit-font-smoothing:subpixel-antialiased}:where(.ag-ltr) .ag-cell{border-right:var(--ag-column-border)}:where(.ag-rtl) .ag-cell{border-left:var(--ag-column-border)}.ag-spanned-cell-wrapper{background-color:var(--ag-data-background-color);position:absolute}.ag-spanned-cell-wrapper>.ag-spanned-cell{display:block;position:relative}:where(.ag-ltr) :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-right-color:transparent}:where(.ag-rtl) :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-left-color:transparent}.ag-cell-wrapper{align-items:center;display:flex;>:where(:not(.ag-cell-value,.ag-group-value)){align-items:center;display:flex;height:var(--ag-internal-content-line-height)}&:where(.ag-row-group){align-items:flex-start}:where(.ag-full-width-row) &:where(.ag-row-group){align-items:center;height:100%}}:where(.ag-ltr) .ag-cell-wrapper{padding-left:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}:where(.ag-rtl) .ag-cell-wrapper{padding-right:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}:where(.ag-cell-wrap-text:not(.ag-cell-auto-height)) .ag-cell-wrapper{align-items:normal;height:100%;:where(.ag-cell-value){height:100%}}:where(.ag-ltr) .ag-row>.ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}:where(.ag-rtl) .ag-row>.ag-cell-wrapper.ag-row-group{padding-right:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-cell-focus:not(.ag-cell-range-selected):focus-within,.ag-cell-range-single-cell,.ag-cell-range-single-cell.ag-cell-range-handle,.ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),.ag-context-menu-open .ag-full-width-row.ag-row-focus .ag-cell-wrapper.ag-row-group,.ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group{border:1px solid;border-color:var(--ag-range-selection-border-color);border-style:var(--ag-range-selection-border-style);outline:initial}.ag-full-width-row.ag-row-focus:focus{box-shadow:none}:where(.ag-ltr) .ag-group-contracted,:where(.ag-ltr) .ag-group-expanded,:where(.ag-ltr) .ag-row-drag,:where(.ag-ltr) .ag-selection-checkbox{margin-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-group-contracted,:where(.ag-rtl) .ag-group-expanded,:where(.ag-rtl) .ag-row-drag,:where(.ag-rtl) .ag-selection-checkbox{margin-left:var(--ag-cell-widget-spacing)}.ag-drag-handle-disabled{opacity:.35;pointer-events:none}:where(.ag-ltr) .ag-group-child-count{margin-left:3px}:where(.ag-rtl) .ag-group-child-count{margin-right:3px}.ag-row-highlight-above:after,.ag-row-highlight-below:after,.ag-row-highlight-inside:after{background-color:var(--ag-row-drag-indicator-color);border-radius:calc(var(--ag-row-drag-indicator-width)/2);content:\"\";height:var(--ag-row-drag-indicator-width);pointer-events:none;position:absolute;width:calc(100% - 1px)}:where(.ag-ltr) .ag-row-highlight-above:after,:where(.ag-ltr) .ag-row-highlight-below:after,:where(.ag-ltr) .ag-row-highlight-inside:after{left:1px}:where(.ag-rtl) .ag-row-highlight-above:after,:where(.ag-rtl) .ag-row-highlight-below:after,:where(.ag-rtl) .ag-row-highlight-inside:after{right:1px}.ag-row-highlight-above:after{top:0}.ag-row-highlight-below:after{bottom:0}.ag-row-highlight-indent:after{display:block;width:auto}:where(.ag-ltr) .ag-row-highlight-indent:after{left:calc((var(--ag-cell-widget-spacing) + var(--ag-icon-size))*2 + var(--ag-cell-horizontal-padding) + var(--ag-row-highlight-level)*var(--ag-row-group-indent-size));right:1px}:where(.ag-rtl) .ag-row-highlight-indent:after{left:1px;right:calc((var(--ag-cell-widget-spacing) + var(--ag-icon-size))*2 + var(--ag-cell-horizontal-padding) + var(--ag-row-highlight-level)*var(--ag-row-group-indent-size))}.ag-row-highlight-inside:after{background-color:var(--ag-selected-row-background-color);border:1px solid var(--ag-range-selection-border-color);display:block;height:auto;inset:0;width:auto}.ag-body,.ag-floating-bottom,.ag-floating-top{background-color:var(--ag-data-background-color)}.ag-row-odd{background-color:var(--ag-odd-row-background-color)}.ag-row-selected:before{background-color:var(--ag-selected-row-background-color);content:\"\";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-full-width-row.ag-row-group:before,.ag-row-hover:not(.ag-full-width-row):before{background-color:var(--ag-row-hover-color);content:\"\";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-row-selected:before{background-color:var(--ag-row-hover-color);background-image:linear-gradient(var(--ag-selected-row-background-color),var(--ag-selected-row-background-color))}.ag-row.ag-full-width-row.ag-row-group>*{position:relative}.ag-column-hover{background-color:var(--ag-column-hover-color)}.ag-header-range-highlight{background-color:var(--ag-range-header-highlight-color)}.ag-right-aligned-cell{font-variant-numeric:tabular-nums}:where(.ag-ltr) .ag-right-aligned-cell{text-align:right}:where(.ag-rtl) .ag-right-aligned-cell{text-align:left}.ag-right-aligned-cell .ag-cell-value,.ag-right-aligned-cell .ag-group-value{margin-left:auto}:where(.ag-ltr) .ag-cell:not(.ag-cell-inline-editing),:where(.ag-ltr) .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level));padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}:where(.ag-rtl) .ag-cell:not(.ag-cell-inline-editing),:where(.ag-rtl) .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-row>.ag-cell-wrapper{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}.ag-row-dragging{cursor:move;opacity:.5}.ag-details-row{background-color:var(--ag-data-background-color);padding:calc(var(--ag-spacing)*3.75)}.ag-layout-auto-height,.ag-layout-print{.ag-center-cols-viewport{min-height:150px}}.ag-overlay-exporting-wrapper,.ag-overlay-loading-wrapper,.ag-overlay-modal-wrapper{background-color:var(--ag-modal-overlay-background-color)}.ag-skeleton-container{align-content:center;height:100%;width:100%}.ag-skeleton-effect{animation:ag-skeleton-loading 1.5s ease-in-out .5s infinite;background-color:var(--ag-row-loading-skeleton-effect-color);border-radius:.25rem;height:1em;width:100%}:where(.ag-ltr) .ag-right-aligned-cell .ag-skeleton-effect{margin-left:auto}:where(.ag-rtl) .ag-right-aligned-cell .ag-skeleton-effect{margin-right:auto}@keyframes ag-skeleton-loading{0%{background-color:var(--ag-row-loading-skeleton-effect-color)}50%{background-color:color-mix(in srgb,transparent,var(--ag-row-loading-skeleton-effect-color) 40%)}to{background-color:var(--ag-row-loading-skeleton-effect-color)}}.ag-loading{align-items:center;display:flex;height:100%}:where(.ag-ltr) .ag-loading{padding-left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-loading{padding-right:var(--ag-cell-horizontal-padding)}:where(.ag-ltr) .ag-loading-icon{padding-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-loading-icon{padding-left:var(--ag-cell-widget-spacing)}.ag-header{background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border);color:var(--ag-header-text-color);display:flex;font-family:var(--ag-header-font-family);font-size:var(--ag-header-font-size);font-weight:var(--ag-header-font-weight);overflow:hidden;white-space:nowrap;width:100%}.ag-header-row{height:var(--ag-header-height);position:absolute}.ag-floating-filter-button-button,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-expand-icon,.ag-panel-title-bar-button,:where(.ag-header-cell-sortable) .ag-header-cell-label,:where(.ag-header-group-cell-selectable) .ag-header-cell-comp-wrapper{cursor:pointer}:where(.ag-ltr) .ag-header-expand-icon{margin-left:4px}:where(.ag-rtl) .ag-header-expand-icon{margin-right:4px}.ag-header-row:where(:not(:first-child)){:where(.ag-header-cell:not(.ag-header-span-height.ag-header-span-total,.ag-header-parent-hidden)),:where(.ag-header-group-cell.ag-header-group-cell-with-group){border-top:var(--ag-header-row-border)}}.ag-header-row:where(:not(.ag-header-row-column-group)){overflow:hidden}:where(.ag-header.ag-header-allow-overflow) .ag-header-row{overflow:visible}.ag-header-cell{display:inline-flex;overflow:hidden}.ag-header-group-cell{contain:paint;display:flex}.ag-header-cell,.ag-header-group-cell{align-items:center;gap:var(--ag-cell-widget-spacing);height:100%;padding:0 var(--ag-cell-horizontal-padding);position:absolute}@property --ag-internal-moving-color{syntax:\"\";inherits:false;initial-value:transparent}@property --ag-internal-hover-color{syntax:\"\";inherits:false;initial-value:transparent}.ag-header-cell:where(:not(.ag-floating-filter)):before,.ag-header-group-cell:before{background-image:linear-gradient(var(--ag-internal-hover-color),var(--ag-internal-hover-color)),linear-gradient(var(--ag-internal-moving-color),var(--ag-internal-moving-color));content:\"\";inset:0;position:absolute;--ag-internal-moving-color:transparent;--ag-internal-hover-color:transparent;transition:--ag-internal-moving-color var(--ag-header-cell-background-transition-duration),--ag-internal-hover-color var(--ag-header-cell-background-transition-duration)}.ag-header-cell:where(:not(.ag-floating-filter)):where(:hover):before,.ag-header-group-cell:where(:hover):before{--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}.ag-header-cell:where(:not(.ag-floating-filter)):where(.ag-header-cell-moving):before,.ag-header-group-cell:where(.ag-header-cell-moving):before{--ag-internal-moving-color:var(--ag-header-cell-moving-background-color);--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}:where(.ag-header-cell:not(.ag-floating-filter)>*,.ag-header-group-cell>*){position:relative;z-index:1}.ag-header-cell-menu-button:where(:not(.ag-header-menu-always-show)){opacity:0;transition:opacity .2s}.ag-header-cell-filter-button,:where(.ag-header-cell.ag-header-active) .ag-header-cell-menu-button{opacity:1}.ag-header-cell-label,.ag-header-group-cell-label{align-items:center;align-self:stretch;display:flex;flex:1 1 auto;overflow:hidden;padding:5px 0}:where(.ag-ltr) .ag-sort-indicator-icon{padding-left:var(--ag-spacing)}:where(.ag-rtl) .ag-sort-indicator-icon{padding-right:var(--ag-spacing)}.ag-header-cell-label{text-overflow:ellipsis}.ag-header-group-cell-label.ag-sticky-label{flex:none;max-width:100%;overflow:visible;position:sticky}:where(.ag-ltr) .ag-header-group-cell-label.ag-sticky-label{left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-header-group-cell-label.ag-sticky-label{right:var(--ag-cell-horizontal-padding)}.ag-header-cell-text,.ag-header-group-text{overflow:hidden;text-overflow:ellipsis}.ag-header-cell-text{overflow-wrap:break-word}.ag-header-cell-comp-wrapper{width:100%}:where(.ag-header-group-cell) .ag-header-cell-comp-wrapper{display:flex}:where(.ag-header-cell:not(.ag-header-cell-auto-height)) .ag-header-cell-comp-wrapper{align-items:center;display:flex;height:100%}.ag-header-cell-wrap-text .ag-header-cell-comp-wrapper{white-space:normal}.ag-header-cell-comp-wrapper-limited-height>*{overflow:hidden}:where(.ag-right-aligned-header) .ag-header-cell-label{flex-direction:row-reverse}:where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-col-ref{color:var(--ag-subtle-text-color)}}:where(.ag-ltr) :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-col-ref{margin-right:var(--ag-spacing)}.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-col-ref{margin-left:var(--ag-spacing)}.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}:where(.ag-header-cell.ag-right-aligned-header){.ag-header-col-ref{color:var(--ag-subtle-text-color)}}:where(.ag-ltr) :where(.ag-header-cell.ag-right-aligned-header){.ag-header-col-ref{margin-left:var(--ag-spacing)}.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-header-cell.ag-right-aligned-header){.ag-header-col-ref{margin-right:var(--ag-spacing)}.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}.ag-header-cell:after,.ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{content:\"\";height:var(--ag-header-column-border-height);position:absolute;top:calc(50% - var(--ag-header-column-border-height)*.5);z-index:1}:where(.ag-ltr) .ag-header-cell:after,:where(.ag-ltr) .ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{border-right:var(--ag-header-column-border);right:0}:where(.ag-rtl) .ag-header-cell:after,:where(.ag-rtl) .ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{border-left:var(--ag-header-column-border);left:0}.ag-header-highlight-after:after,.ag-header-highlight-before:after{background-color:var(--ag-column-drag-indicator-color);border-radius:calc(var(--ag-column-drag-indicator-width)/2);content:\"\";height:100%;position:absolute;top:0;width:var(--ag-column-drag-indicator-width)}:where(.ag-ltr) .ag-header-highlight-before:after{left:0}:where(.ag-rtl) .ag-header-highlight-before:after{right:0}:where(.ag-ltr) .ag-header-highlight-after:after{right:0;:where(.ag-pinned-left-header) &{right:1px}}:where(.ag-rtl) .ag-header-highlight-after:after{left:0;:where(.ag-pinned-left-header) &{left:1px}}.ag-header-cell-resize{align-items:center;cursor:ew-resize;display:flex;height:100%;position:absolute;top:0;width:8px;z-index:2}:where(.ag-ltr) .ag-header-cell-resize{right:-3px}:where(.ag-rtl) .ag-header-cell-resize{left:-3px}.ag-header-cell-resize:after{background-color:var(--ag-header-column-resize-handle-color);content:\"\";height:var(--ag-header-column-resize-handle-height);position:absolute;top:calc(50% - var(--ag-header-column-resize-handle-height)*.5);width:var(--ag-header-column-resize-handle-width);z-index:1}:where(.ag-ltr) .ag-header-cell-resize:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}:where(.ag-rtl) .ag-header-cell-resize:after{right:calc(50% - var(--ag-header-column-resize-handle-width))}:where(.ag-header-cell.ag-header-span-height) .ag-header-cell-resize:after{height:calc(100% - var(--ag-spacing)*4);top:calc(var(--ag-spacing)*2)}.ag-header-group-cell-no-group:where(.ag-header-span-height){display:none}.ag-sort-indicator-container{display:flex;gap:var(--ag-spacing)}.ag-layout-print{&.ag-body{display:block;height:unset}&.ag-root-wrapper{container-type:normal;display:inline-block}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:none}&.ag-force-vertical-scroll{overflow-y:visible!important}}@media print{.ag-root-wrapper.ag-layout-print{container-type:normal;display:table;.ag-body-horizontal-scroll-viewport,.ag-body-viewport,.ag-center-cols-container,.ag-center-cols-viewport,.ag-root,.ag-root-wrapper-body,.ag-virtual-list-viewport{display:block!important;height:auto!important;overflow:hidden!important}.ag-cell,.ag-row{-moz-column-break-inside:avoid;break-inside:avoid}}}ag-grid,ag-grid-angular{display:block}.ag-root-wrapper{border:var(--ag-wrapper-border);border-radius:var(--ag-wrapper-border-radius);container-type:inline-size;display:flex;flex-direction:column;overflow:hidden;position:relative;&.ag-layout-normal{content-visibility:auto;height:100%}}.ag-root-wrapper-body{display:flex;flex-direction:row;&.ag-layout-normal{flex:1 1 auto;height:0;min-height:0}}.ag-root{display:flex;flex-direction:column;position:relative;&.ag-layout-auto-height,&.ag-layout-normal{flex:1 1 auto;overflow:hidden;width:0}&.ag-layout-normal{height:100%}}.ag-drag-handle{color:var(--ag-drag-handle-color);cursor:grab;:where(.ag-icon){color:var(--ag-drag-handle-color)}}.ag-chart-menu-icon,.ag-chart-settings-next,.ag-chart-settings-prev,.ag-column-group-icons,.ag-column-select-header-icon,.ag-filter-toolpanel-expand,.ag-floating-filter-button-button,.ag-group-title-bar-icon,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-expand-icon,.ag-panel-title-bar-button,.ag-panel-title-bar-button-icon,.ag-set-filter-group-icons,:where(.ag-group-contracted) .ag-icon,:where(.ag-group-expanded) .ag-icon{background-color:var(--ag-icon-button-background-color);border-radius:var(--ag-icon-button-border-radius);box-shadow:0 0 0 var(--ag-icon-button-background-spread) var(--ag-icon-button-background-color);color:var(--ag-icon-button-color)}.ag-chart-menu-icon:hover,.ag-chart-settings-next:hover,.ag-chart-settings-prev:hover,.ag-column-group-icons:hover,.ag-column-select-header-icon:hover,.ag-filter-toolpanel-expand:hover,.ag-floating-filter-button-button:hover,.ag-group-title-bar-icon:hover,.ag-header-cell-filter-button:hover,.ag-header-cell-menu-button:hover,.ag-header-expand-icon:hover,.ag-panel-title-bar-button-icon:hover,.ag-panel-title-bar-button:hover,.ag-set-filter-group-icons:hover,:where(.ag-group-contracted) .ag-icon:hover,:where(.ag-group-expanded) .ag-icon:hover{background-color:var(--ag-icon-button-hover-background-color);box-shadow:0 0 0 var(--ag-icon-button-background-spread) var(--ag-icon-button-hover-background-color);color:var(--ag-icon-button-hover-color)}:where(.ag-filter-active),:where(.ag-filter-toolpanel-group-instance-header-icon),:where(.ag-filter-toolpanel-instance-header-icon){position:relative}:where(.ag-filter-active):after,:where(.ag-filter-toolpanel-group-instance-header-icon):after,:where(.ag-filter-toolpanel-instance-header-icon):after{background-color:var(--ag-icon-button-active-indicator-color);border-radius:50%;content:\"\";height:6px;position:absolute;top:-1px;width:6px}:where(.ag-ltr) :where(.ag-filter-active):after,:where(.ag-ltr) :where(.ag-filter-toolpanel-group-instance-header-icon):after,:where(.ag-ltr) :where(.ag-filter-toolpanel-instance-header-icon):after{right:-1px}:where(.ag-rtl) :where(.ag-filter-active):after,:where(.ag-rtl) :where(.ag-filter-toolpanel-group-instance-header-icon):after,:where(.ag-rtl) :where(.ag-filter-toolpanel-instance-header-icon):after{left:-1px}.ag-filter-active{background-image:linear-gradient(var(--ag-icon-button-active-background-color),var(--ag-icon-button-active-background-color));border-radius:1px;outline:solid var(--ag-icon-button-background-spread) var(--ag-icon-button-active-background-color);:where(.ag-icon-filter){clip-path:path(\"M8,0C8,4.415 11.585,8 16,8L16,16L0,16L0,0L8,0Z\");color:var(--ag-icon-button-active-color)}}",FE={wrapperBorder:!0,rowBorder:!0,headerRowBorder:!0,footerRowBorder:{ref:"rowBorder"},columnBorder:{style:"solid",width:1,color:"transparent"},headerColumnBorder:!1,headerColumnBorderHeight:"100%",pinnedColumnBorder:!0,pinnedRowBorder:!0,sidePanelBorder:!0,sideBarPanelWidth:250,sideBarPanelAnimationDuration:0,sideBarBackgroundColor:{ref:"chromeBackgroundColor"},sideButtonBarBackgroundColor:{ref:"sideBarBackgroundColor"},sideButtonBarTopPadding:0,sideButtonSelectedUnderlineWidth:2,sideButtonSelectedUnderlineColor:"transparent",sideButtonSelectedUnderlineTransitionDuration:0,sideButtonBackgroundColor:"transparent",sideButtonTextColor:{ref:"textColor"},sideButtonHoverBackgroundColor:{ref:"sideButtonBackgroundColor"},sideButtonHoverTextColor:{ref:"sideButtonTextColor"},sideButtonSelectedBackgroundColor:x0,sideButtonSelectedTextColor:{ref:"sideButtonTextColor"},sideButtonBorder:"solid 1px transparent",sideButtonSelectedBorder:!0,sideButtonLeftPadding:{ref:"spacing"},sideButtonRightPadding:{ref:"spacing"},sideButtonVerticalPadding:{calc:"spacing * 3"},cellFontFamily:{ref:"fontFamily"},cellFontSize:{ref:"dataFontSize"},cellFontWeight:{ref:"fontWeight"},headerCellHoverBackgroundColor:"transparent",headerCellMovingBackgroundColor:{ref:"headerCellHoverBackgroundColor"},headerCellBackgroundTransitionDuration:"0.2s",cellTextColor:{ref:"textColor"},rangeSelectionBorderStyle:"solid",rangeSelectionBorderColor:C4,rangeSelectionBackgroundColor:I4(0.2),rangeSelectionChartBackgroundColor:"#0058FF1A",rangeSelectionChartCategoryBackgroundColor:"#00FF841A",rangeSelectionHighlightColor:I4(0.5),rangeHeaderHighlightColor:aB(0.08),rowNumbersSelectedColor:I4(0.5),rowHoverColor:I4(0.08),columnHoverColor:I4(0.05),selectedRowBackgroundColor:I4(0.12),modalOverlayBackgroundColor:{ref:"backgroundColor",mix:0.66},dataBackgroundColor:x0,oddRowBackgroundColor:{ref:"dataBackgroundColor"},wrapperBackgroundColor:x0,wrapperBorderRadius:8,cellHorizontalPadding:{calc:"spacing * 2 * cellHorizontalPaddingScale"},cellWidgetSpacing:{calc:"spacing * 1.5"},cellHorizontalPaddingScale:1,rowGroupIndentSize:{calc:"cellWidgetSpacing + iconSize"},valueChangeDeltaUpColor:"#43a047",valueChangeDeltaDownColor:"#e53935",valueChangeValueHighlightBackgroundColor:"#16a08580",rowHeight:{calc:"max(iconSize, cellFontSize) + spacing * 3.25 * rowVerticalPaddingScale"},rowVerticalPaddingScale:1,paginationPanelHeight:{ref:"rowHeight",calc:"max(rowHeight, 22px)"},dragHandleColor:J4(0.7),headerColumnResizeHandleHeight:"30%",headerColumnResizeHandleWidth:2,headerColumnResizeHandleColor:{ref:"borderColor"},iconButtonColor:{ref:"iconColor"},iconButtonBackgroundColor:"transparent",iconButtonBackgroundSpread:4,iconButtonBorderRadius:1,iconButtonHoverColor:{ref:"iconButtonColor"},iconButtonHoverBackgroundColor:J4(0.1),iconButtonActiveColor:C4,iconButtonActiveBackgroundColor:I4(0.28),iconButtonActiveIndicatorColor:C4,setFilterIndentSize:{ref:"iconSize"},chartMenuPanelWidth:260,chartMenuLabelColor:J4(0.8),cellEditingBorder:{color:C4},cellEditingShadow:{ref:"cardShadow"},fullRowEditInvalidBackgroundColor:{ref:"invalidColor",onto:"backgroundColor",mix:0.25},columnSelectIndentSize:{ref:"iconSize"},toolbarBackgroundColor:{ref:"headerBackgroundColor"},toolbarTextColor:{ref:"headerTextColor"},toolbarSeparatorBorder:!0,toolPanelSeparatorBorder:!0,columnDropCellBackgroundColor:J4(0.07),columnDropCellTextColor:{ref:"textColor"},columnDropCellDragHandleColor:{ref:"textColor"},columnDropCellBorder:{color:J4(0.13)},selectCellBackgroundColor:J4(0.07),selectCellBorder:{color:J4(0.13)},advancedFilterBuilderButtonBarBorder:!0,advancedFilterBuilderIndentSize:{calc:"spacing * 2 + iconSize"},advancedFilterBuilderJoinPillColor:"#f08e8d",advancedFilterBuilderColumnPillColor:"#a6e194",advancedFilterBuilderOptionPillColor:"#f3c08b",advancedFilterBuilderValuePillColor:"#85c0e4",filterPanelApplyButtonColor:x0,filterPanelApplyButtonBackgroundColor:C4,columnPanelApplyButtonColor:x0,columnPanelApplyButtonBackgroundColor:C4,filterPanelCardSubtleColor:{ref:"textColor",mix:0.7},filterPanelCardSubtleHoverColor:{ref:"textColor"},findMatchColor:pz,findMatchBackgroundColor:"#ffff00",findActiveMatchColor:pz,findActiveMatchBackgroundColor:"#ffa500",filterToolPanelGroupIndent:{ref:"spacing"},rowLoadingSkeletonEffectColor:J4(0.15),statusBarLabelColor:pz,statusBarLabelFontWeight:500,statusBarValueColor:pz,statusBarValueFontWeight:500,pinnedSourceRowTextColor:{ref:"textColor"},pinnedSourceRowBackgroundColor:{ref:"dataBackgroundColor"},pinnedSourceRowFontWeight:600,pinnedRowFontWeight:600,pinnedRowBackgroundColor:{ref:"dataBackgroundColor"},pinnedRowTextColor:{ref:"textColor"},rowDragIndicatorColor:{ref:"rangeSelectionBorderColor"},rowDragIndicatorWidth:2,columnDragIndicatorColor:{ref:"accentColor"},columnDragIndicatorWidth:2},LE=".ag-cell-batch-edit{background-color:var(--ag-cell-batch-edit-background-color);color:var(--ag-cell-batch-edit-text-color);display:inherit}.ag-row-batch-edit{background-color:var(--ag-row-batch-edit-background-color);color:var(--ag-row-batch-edit-text-color)}",p$={cellBatchEditBackgroundColor:"rgba(220 181 139 / 16%)",cellBatchEditTextColor:"#422f00",rowBatchEditBackgroundColor:{ref:"cellBatchEditBackgroundColor"},rowBatchEditTextColor:{ref:"cellBatchEditTextColor"}},DE={...p$,cellBatchEditTextColor:"#f3d0b3"},ME=()=>H4({feature:"batchEditStyle",params:p$,css:LE}),kE=ME(),fE=":where(.ag-button){background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0;text-indent:inherit;text-shadow:inherit;text-transform:inherit;word-spacing:inherit;&:disabled{cursor:default}&:focus-visible{box-shadow:var(--ag-focus-shadow);outline:none}}.ag-standard-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--ag-button-background-color);border:var(--ag-button-border);border-radius:var(--ag-button-border-radius);color:var(--ag-button-text-color);cursor:pointer;font-weight:var(--ag-button-font-weight);padding:var(--ag-button-vertical-padding) var(--ag-button-horizontal-padding);&:active{background-color:var(--ag-button-active-background-color);border:var(--ag-button-active-border);color:var(--ag-button-active-text-color)}&:disabled{background-color:var(--ag-button-disabled-background-color);border:var(--ag-button-disabled-border);color:var(--ag-button-disabled-text-color)}}.ag-standard-button:hover{background-color:var(--ag-button-hover-background-color);border:var(--ag-button-hover-border);color:var(--ag-button-hover-text-color)}",SE={buttonTextColor:"inherit",buttonFontWeight:"normal",buttonBackgroundColor:"transparent",buttonBorder:!1,buttonBorderRadius:{ref:"borderRadius"},buttonHorizontalPadding:{calc:"spacing * 2"},buttonVerticalPadding:{ref:"spacing"},buttonHoverTextColor:{ref:"buttonTextColor"},buttonHoverBackgroundColor:{ref:"buttonBackgroundColor"},buttonHoverBorder:{ref:"buttonBorder"},buttonActiveTextColor:{ref:"buttonHoverTextColor"},buttonActiveBackgroundColor:{ref:"buttonHoverBackgroundColor"},buttonActiveBorder:{ref:"buttonHoverBorder"},buttonDisabledTextColor:{ref:"inputDisabledTextColor"},buttonDisabledBackgroundColor:{ref:"inputDisabledBackgroundColor"},buttonDisabledBorder:{ref:"inputDisabledBorder"}};var VE=()=>H4({feature:"buttonStyle",params:{...SE,buttonBackgroundColor:x0,buttonBorder:!0,buttonHoverBackgroundColor:{ref:"rowHoverColor"},buttonActiveBorder:{color:C4}},css:fE}),RE=VE();var AE=".ag-column-drop-vertical-empty-message{align-items:center;border:dashed var(--ag-border-width);border-color:var(--ag-border-color);display:flex;inset:0;justify-content:center;margin:calc(var(--ag-spacing)*1.5) calc(var(--ag-spacing)*2);overflow:hidden;padding:calc(var(--ag-spacing)*2);position:absolute}";var jE=()=>{return H4({feature:"columnDropStyle",css:AE})},n$=jE();var OE={formulaToken1Color:"#3269c6",formulaToken1BackgroundColor:{ref:"formulaToken1Color",mix:0.08},formulaToken1Border:{color:{ref:"formulaToken1Color"}},formulaToken2Color:"#c0343f",formulaToken2BackgroundColor:{ref:"formulaToken2Color",mix:0.06},formulaToken2Border:{color:{ref:"formulaToken2Color"}},formulaToken3Color:"#8156b8",formulaToken3BackgroundColor:{ref:"formulaToken3Color",mix:0.08},formulaToken3Border:{color:{ref:"formulaToken3Color"}},formulaToken4Color:"#007c1f",formulaToken4BackgroundColor:{ref:"formulaToken4Color",mix:0.06},formulaToken4Border:{color:{ref:"formulaToken4Color"}},formulaToken5Color:"#b03e85",formulaToken5BackgroundColor:{ref:"formulaToken5Color",mix:0.08},formulaToken5Border:{color:{ref:"formulaToken5Color"}},formulaToken6Color:"#b74900",formulaToken6BackgroundColor:{ref:"formulaToken6Color",mix:0.06},formulaToken6Border:{color:{ref:"formulaToken6Color"}},formulaToken7Color:"#247492",formulaToken7BackgroundColor:{ref:"formulaToken7Color",mix:0.08},formulaToken7Border:{color:{ref:"formulaToken7Color"}}},PE=()=>H4({feature:"formulaStyle",params:OE}),TE=PE(),vE={noteIndicatorColor:{ref:"accentColor"},noteIndicatorSize:"8px",notePopupBackgroundColor:{ref:"menuBackgroundColor"},notePopupTextColor:{ref:"menuTextColor",mix:0.75},notePopupInputTextColor:{ref:"inputTextColor"},notePopupInputBackgroundColor:{ref:"inputBackgroundColor"},notePopupBorder:{ref:"dialogBorder"},notePopupPadding:{calc:"spacing * 0.5"}},IE=()=>H4({feature:"noteStyle",params:vE}),CE=IE(),yE={warn:(...z)=>{V(z[0],z[1])},error:(...z)=>{r(z[0],z[1])},preInitErr:(...z)=>{G2(z[0],z[2],z[1])}},bE=()=>GE(yE).withParams(FE).withPart(RE).withPart(n$).withPart(kE).withPart(TE).withPart(CE),xE='.ag-checkbox-input-wrapper,.ag-radio-button-input-wrapper{background-color:var(--ag-checkbox-unchecked-background-color);border:solid var(--ag-checkbox-border-width) var(--ag-checkbox-unchecked-border-color);flex:none;height:var(--ag-icon-size);position:relative;width:var(--ag-icon-size);&:where(.ag-checked){background-color:var(--ag-checkbox-checked-background-color);border-color:var(--ag-checkbox-checked-border-color)}&:where(.ag-checked):after{background-color:var(--ag-checkbox-checked-shape-color)}&:where(.ag-disabled){filter:grayscale();opacity:.5}}.ag-checkbox-input,.ag-radio-button-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:block;height:var(--ag-icon-size);margin:0;opacity:0;width:var(--ag-icon-size)}.ag-checkbox-input-wrapper:after,.ag-radio-button-input-wrapper:after{content:"";display:block;inset:0;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;pointer-events:none;position:absolute}.ag-checkbox-input-wrapper:where(:focus-within,:active),.ag-radio-button-input-wrapper:where(:focus-within,:active){box-shadow:var(--ag-focus-shadow)}.ag-checkbox-input-wrapper{border-radius:var(--ag-checkbox-border-radius);&:where(.ag-checked):after{-webkit-mask-image:var(--ag-checkbox-checked-shape-image);mask-image:var(--ag-checkbox-checked-shape-image)}&:where(.ag-indeterminate){background-color:var(--ag-checkbox-indeterminate-background-color);border-color:var(--ag-checkbox-indeterminate-border-color)}&:where(.ag-indeterminate):after{background-color:var(--ag-checkbox-indeterminate-shape-color);-webkit-mask-image:var(--ag-checkbox-indeterminate-shape-image);mask-image:var(--ag-checkbox-indeterminate-shape-image)}}.ag-cell-editing-error .ag-checkbox-input-wrapper:focus-within{box-shadow:var(--ag-focus-error-shadow)}.ag-radio-button-input-wrapper{border-radius:100%;&:where(.ag-checked):after{-webkit-mask-image:var(--ag-radio-checked-shape-image);mask-image:var(--ag-radio-checked-shape-image)}}',wE=()=>H4({feature:"checkboxStyle",params:{checkboxBorderWidth:1,checkboxBorderRadius:{ref:"borderRadius"},checkboxUncheckedBackgroundColor:x0,checkboxUncheckedBorderColor:$4(0.3),checkboxCheckedBackgroundColor:C4,checkboxCheckedBorderColor:{ref:"checkboxCheckedBackgroundColor"},checkboxCheckedShapeImage:{svg:''},checkboxCheckedShapeColor:x0,checkboxIndeterminateBackgroundColor:$4(0.3),checkboxIndeterminateBorderColor:{ref:"checkboxIndeterminateBackgroundColor"},checkboxIndeterminateShapeImage:{svg:''},checkboxIndeterminateShapeColor:x0,radioCheckedShapeImage:{svg:''}},css:xE}),NE=wE();var d$=()=>({...c6,...DE,backgroundColor:"hsl(217, 0%, 17%)",foregroundColor:"#FFF",chromeBackgroundColor:$4(0.05),rowHoverColor:I4(0.15),selectedRowBackgroundColor:I4(0.2),menuBackgroundColor:$4(0.1),browserColorScheme:"dark",popupShadow:"0 0px 20px #000A",cardShadow:"0 1px 4px 1px #000A",advancedFilterBuilderJoinPillColor:"#7a3a37",advancedFilterBuilderColumnPillColor:"#355f2d",advancedFilterBuilderOptionPillColor:"#5a3168",advancedFilterBuilderValuePillColor:"#374c86",filterPanelApplyButtonColor:pz,columnPanelApplyButtonColor:pz,findMatchColor:x0,findActiveMatchColor:x0,checkboxUncheckedBorderColor:$4(0.4),toggleButtonOffBackgroundColor:$4(0.4),rowBatchEditBackgroundColor:$4(0.1),formulaToken1Color:"#4da3e5",formulaToken2Color:"#f55864",formulaToken3Color:"#b688f2",formulaToken4Color:"#24bb4a",formulaToken5Color:"#e772ba",formulaToken6Color:"#f69b5f",formulaToken7Color:"#a3e6ff"});var gE=()=>({...d$(),backgroundColor:"#1f2836"});var hE=()=>H4({feature:"colorScheme",params:c6,modeParams:{light:c6,dark:d$(),"dark-blue":gE()}}),uE=hE();var r$={aggregation:'',arrows:'',asc:'',cancel:'',chart:'',"color-picker":'',columns:'',contracted:'',copy:'',cross:'',csv:'',cut:'',desc:'',down:'',excel:'',expanded:'',eye:'',"eye-slash":'',filter:'',first:'',grip:'',group:'',last:'',left:'',linked:'',loading:'',maximize:'',menu:'',"menu-alt":'',minimize:'',minus:'',next:'',none:'',"not-allowed":'',paste:'',pin:'',pivot:'',plus:'',previous:'',right:'',save:'',search:'',settings:'',"small-left":'',"small-right":'',tick:'',"tree-closed":'',"tree-indeterminate":'',"tree-open":'',unlinked:'',up:''},t$={aasc:'',adesc:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',"column-arrow":'',edit:'',"filter-add":'',"pinned-bottom":'',"pinned-top":'',"small-down":'',"small-up":'',"un-pin":''},mE=(z={})=>{let J="";for(let Q of[...Object.keys(r$),...Object.keys(t$)]){let Z=cE(Q,z.strokeWidth);J+=`.ag-icon-${Q}::before { mask-image: url('data:image/svg+xml,${encodeURIComponent(Z)}'); } +`}return J},cE=(z,J=1.5)=>{let Q=t$[z];if(Q)return Q;let Z=r$[z];if(!Z)throw Error(`Missing icon data for ${z}`);return``+Z+""},iE=(z={})=>{return H4({feature:"iconSet",css:()=>mE(z)})};var pE=iE();var nE=":where(.ag-input-field-input[type=number]:not(.ag-number-field-input-stepper)){-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;&::-webkit-inner-spin-button,&::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}}.ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){background-color:var(--ag-input-background-color);border:var(--ag-input-border);border-radius:var(--ag-input-border-radius);color:var(--ag-input-text-color);font-family:inherit;font-size:inherit;line-height:inherit;margin:0;min-height:var(--ag-input-height);padding:0;&:where(:disabled){background-color:var(--ag-input-disabled-background-color);border:var(--ag-input-disabled-border);color:var(--ag-input-disabled-text-color)}&:where(:focus){background-color:var(--ag-input-focus-background-color);border:var(--ag-input-focus-border);box-shadow:var(--ag-input-focus-shadow);color:var(--ag-input-focus-text-color);outline:none}&:where(:invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}&:where(.invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}&::-moz-placeholder{color:var(--ag-input-placeholder-text-color)}&::placeholder{color:var(--ag-input-placeholder-text-color)}}:where(.ag-ltr) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding-left:var(--ag-input-padding-start)}:where(.ag-rtl) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding-right:var(--ag-input-padding-start)}&:where(.ag-ltr,.ag-rtl) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding:0 var(--ag-input-padding-start)}:where(.ag-column-select-header-filter-wrapper),:where(.ag-filter-add-select),:where(.ag-filter-filter),:where(.ag-filter-toolpanel-search),:where(.ag-floating-filter-search-icon),:where(.ag-mini-filter){.ag-input-wrapper:before{background-color:currentcolor;color:var(--ag-input-icon-color);content:\"\";display:block;height:12px;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==\");mask-image:url(\"data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;opacity:.5;position:absolute;width:12px}}:where(.ag-ltr) :where(.ag-column-select-header-filter-wrapper),:where(.ag-ltr) :where(.ag-filter-add-select),:where(.ag-ltr) :where(.ag-filter-filter),:where(.ag-ltr) :where(.ag-filter-toolpanel-search),:where(.ag-ltr) :where(.ag-floating-filter-search-icon),:where(.ag-ltr) :where(.ag-mini-filter){.ag-input-wrapper:before{margin-left:var(--ag-spacing)}.ag-number-field-input,.ag-text-field-input{padding-left:calc(var(--ag-spacing)*1.5 + 12px)}}:where(.ag-rtl) :where(.ag-column-select-header-filter-wrapper),:where(.ag-rtl) :where(.ag-filter-add-select),:where(.ag-rtl) :where(.ag-filter-filter),:where(.ag-rtl) :where(.ag-filter-toolpanel-search),:where(.ag-rtl) :where(.ag-floating-filter-search-icon),:where(.ag-rtl) :where(.ag-mini-filter){.ag-input-wrapper:before{margin-right:var(--ag-spacing)}.ag-number-field-input,.ag-text-field-input{padding-right:calc(var(--ag-spacing)*1.5 + 12px)}}",dE=".ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){&:focus{box-shadow:var(--ag-focus-shadow);&:where(.invalid),&:where(:invalid){box-shadow:var(--ag-focus-error-shadow)}}}";var rE={inputBackgroundColor:"transparent",inputBorder:!1,inputBorderRadius:0,inputTextColor:{ref:"textColor"},inputPlaceholderTextColor:{ref:"inputTextColor",mix:0.5},inputPaddingStart:0,inputHeight:{calc:"max(iconSize, fontSize) + spacing * 2"},inputFocusBackgroundColor:{ref:"inputBackgroundColor"},inputFocusBorder:{ref:"inputBorder"},inputFocusShadow:"none",inputFocusTextColor:{ref:"inputTextColor"},inputDisabledBackgroundColor:{ref:"inputBackgroundColor"},inputDisabledBorder:{ref:"inputBorder"},inputDisabledTextColor:{ref:"inputTextColor"},inputInvalidBackgroundColor:{ref:"inputBackgroundColor"},inputInvalidBorder:{ref:"inputBorder"},inputInvalidTextColor:{ref:"inputTextColor"},inputIconColor:{ref:"inputTextColor"},pickerButtonBorder:!1,pickerButtonFocusBorder:{ref:"inputFocusBorder"},pickerButtonBackgroundColor:{ref:"backgroundColor"},pickerButtonFocusBackgroundColor:{ref:"backgroundColor"},pickerListBorder:!1,pickerListBackgroundColor:{ref:"backgroundColor"},colorPickerThumbSize:18,colorPickerTrackSize:12,colorPickerThumbBorderWidth:3,colorPickerTrackBorderRadius:12,colorPickerColorBorderRadius:4};var tE=()=>H4({feature:"inputStyle",params:{...rE,inputBackgroundColor:x0,inputBorder:!0,inputBorderRadius:{ref:"borderRadius"},inputPaddingStart:{ref:"spacing"},inputFocusBorder:{color:C4},inputFocusShadow:{ref:"focusShadow"},inputDisabledBackgroundColor:$4(0.06),inputDisabledTextColor:{ref:"textColor",mix:0.5},inputInvalidBorder:{color:{ref:"invalidColor"}},pickerButtonBorder:!0,pickerListBorder:!0},css:()=>nE+dE}),sE=tE();var lE=".ag-tabs-header{background-color:var(--ag-tab-bar-background-color);border-bottom:var(--ag-tab-bar-border);display:flex;flex:1;gap:var(--ag-tab-spacing);padding:var(--ag-tab-bar-top-padding) var(--ag-tab-bar-horizontal-padding) 0}.ag-tabs-header-wrapper{display:flex}.ag-tabs-close-button-wrapper{align-items:center;border:0;display:flex;padding:var(--ag-spacing)}:where(.ag-ltr) .ag-tabs-close-button-wrapper{border-right:solid var(--ag-border-width) var(--ag-border-color)}:where(.ag-rtl) .ag-tabs-close-button-wrapper{border-left:solid var(--ag-border-width) var(--ag-border-color)}.ag-tabs-close-button{background-color:unset;border:0;cursor:pointer;padding:0}.ag-tab{align-items:center;background-color:var(--ag-tab-background-color);border-left:var(--ag-tab-selected-border-width) solid transparent;border-right:var(--ag-tab-selected-border-width) solid transparent;color:var(--ag-tab-text-color);cursor:pointer;display:flex;flex:1;justify-content:center;padding:var(--ag-tab-top-padding) var(--ag-tab-horizontal-padding) var(--ag-tab-bottom-padding);position:relative}.ag-tab:hover{background-color:var(--ag-tab-hover-background-color);color:var(--ag-tab-hover-text-color)}.ag-tab.ag-tab-selected{background-color:var(--ag-tab-selected-background-color);color:var(--ag-tab-selected-text-color)}:where(.ag-ltr) .ag-tab.ag-tab-selected:where(:not(:first-of-type)){border-left-color:var(--ag-tab-selected-border-color)}:where(.ag-rtl) .ag-tab.ag-tab-selected:where(:not(:first-of-type)){border-right-color:var(--ag-tab-selected-border-color)}:where(.ag-ltr) .ag-tab.ag-tab-selected:where(:not(:last-of-type)){border-right-color:var(--ag-tab-selected-border-color)}:where(.ag-rtl) .ag-tab.ag-tab-selected:where(:not(:last-of-type)){border-left-color:var(--ag-tab-selected-border-color)}.ag-tab:after{background-color:var(--ag-tab-selected-underline-color);bottom:0;content:\"\";display:block;height:var(--ag-tab-selected-underline-width);left:0;opacity:0;position:absolute;right:0;transition:opacity var(--ag-tab-selected-underline-transition-duration)}.ag-tab.ag-tab-selected:after{opacity:1}";var aE={tabBarBackgroundColor:"transparent",tabBarHorizontalPadding:0,tabBarTopPadding:0,tabBackgroundColor:"transparent",tabTextColor:{ref:"textColor"},tabHorizontalPadding:{ref:"spacing"},tabTopPadding:{ref:"spacing"},tabBottomPadding:{ref:"spacing"},tabSpacing:"0",tabHoverBackgroundColor:{ref:"tabBackgroundColor"},tabHoverTextColor:{ref:"tabTextColor"},tabSelectedBackgroundColor:{ref:"tabBackgroundColor"},tabSelectedTextColor:{ref:"tabTextColor"},tabSelectedBorderWidth:{ref:"borderWidth"},tabSelectedBorderColor:"transparent",tabSelectedUnderlineColor:"transparent",tabSelectedUnderlineWidth:0,tabSelectedUnderlineTransitionDuration:0,tabBarBorder:!1};var oE=()=>H4({feature:"tabStyle",params:{...aE,tabBarBorder:!0,tabBarBackgroundColor:J4(0.05),tabTextColor:{ref:"textColor",mix:0.7},tabSelectedTextColor:{ref:"textColor"},tabHoverTextColor:{ref:"textColor"},tabSelectedBorderColor:{ref:"borderColor"},tabSelectedBackgroundColor:x0},css:lE}),eE=oE();var z3=()=>({fontFamily:[{googleFont:"IBM Plex Sans"},...h$()]}),J3=()=>bE().withPart(NE).withPart(uE).withPart(pE).withPart(eE).withPart(sE).withPart(n$).withParams(z3()),DJ=J3();var Iz=(z,J,Q,Z,$)=>({changeKey:z,type:J,defaultValue:Q,noWarn:Z,cacheDefault:$}),Q3=Iz("cellHorizontalPadding","length",16),Z3=Iz("indentationLevel","length",0,!0,!0),$3=Iz("rowGroupIndentSize","length",0),t7=Iz("rowHeight","length",42),s7=Iz("headerHeight","length",48),RQ=Iz("rowBorderWidth","border",1),l7=Iz("pinnedRowBorderWidth","border",1),X3=Iz("headerRowBorderWidth","border",1);function Y3(z,J){for(let Q of J.sort((Z,$)=>Z.moduleName.localeCompare($.moduleName))){let Z=Q.css;if(Z)z.set(`module-${Q.moduleName}`,Z)}}var q3=class extends BE{initVariables(){this.addManagedPropertyListener("rowHeight",()=>this.refreshRowHeightVariable()),this.getSizeEl(t7),this.getSizeEl(s7),this.getSizeEl(RQ),this.getSizeEl(l7),this.refreshRowBorderWidthVariable()}getPinnedRowBorderWidth(){return this.getCSSVariablePixelValue(l7)}getRowBorderWidth(){return this.getCSSVariablePixelValue(RQ)}getHeaderRowBorderWidth(){return this.getCSSVariablePixelValue(X3)}getDefaultRowHeight(){return this.getCSSVariablePixelValue(t7)}getDefaultHeaderHeight(){return this.getCSSVariablePixelValue(s7)}getDefaultCellHorizontalPadding(){return this.getCSSVariablePixelValue(Q3)}getCellPaddingLeft(){let z=this.getDefaultCellHorizontalPadding(),J=this.getCSSVariablePixelValue(Z3),Q=this.getCSSVariablePixelValue($3);return z-1+Q*J}getCellPadding(){let z=this.getDefaultCellHorizontalPadding()-1;return this.getCellPaddingLeft()+z}getDefaultColumnMinWidth(){return Math.min(36,this.getDefaultRowHeight())}refreshRowHeightVariable(){let{eRootDiv:z}=this,J=z.style.getPropertyValue("--ag-line-height").trim(),Q=this.gos.get("rowHeight");if(Q==null||isNaN(Q)||!isFinite(Q)){if(J!==null)z.style.setProperty("--ag-line-height",null);return-1}let Z=`${Q}px`;if(J!=Z)return z.style.setProperty("--ag-line-height",Z),Q;return J!=""?Number.parseFloat(J):-1}fireStylesChangedEvent(z){if(z==="rowBorderWidth")this.refreshRowBorderWidthVariable();super.fireStylesChangedEvent(z)}refreshRowBorderWidthVariable(){let z=this.getCSSVariablePixelValue(RQ);this.eRootDiv.style.setProperty("--ag-internal-row-border-width",`${z}px`)}postProcessThemeChange(z,J){if(z&&getComputedStyle(this.getMeasurementContainer()).getPropertyValue("--ag-legacy-styles-loaded"))if(J)r(106);else r(239)}getAdditionalCss(){let z=new Map;return z.set("core",[KE]),Y3(z,Array.from(aG())),z}getDefaultTheme(){return DJ}varError(z,J){V(9,{variable:{cssName:z,defaultValue:J}})}themeError(z){r(240,{theme:z})}shadowRootError(){r(293)}},G3=class extends k0{constructor(){super(...arguments);this.beanName="eventSvc",this.eventServiceType="global",this.globalSvc=new R4}addListener(z,J,Q){this.globalSvc.addEventListener(z,J,Q)}removeListener(z,J,Q){this.globalSvc.removeEventListener(z,J,Q)}addGlobalListener(z,J=!1){this.globalSvc.addGlobalListener(z,J)}removeGlobalListener(z,J=!1){this.globalSvc.removeGlobalListener(z,J)}dispatchEvent(z){this.globalSvc.dispatchEvent(this.gos.addCommon(z))}dispatchEventOnce(z){this.globalSvc.dispatchEventOnce(this.gos.addCommon(z))}},U3=class extends G3{postConstruct(){let{globalListener:z,globalSyncListener:J}=this.beans;if(z)this.addGlobalListener(z,!0);if(J)this.addGlobalListener(J,!1)}};function sQ(z,J,Q){let Z=z.visibleCols.headerGroupRowCount;if(Q>=Z)return{column:J,headerRowIndex:Q};let $=J.parent;while($&&$.getProvidedColumnGroup().getLevel()>Q)$=$.parent;let X=J.isSpanHeaderHeight();if(!$||X&&$.isPadding())return{column:J,headerRowIndex:Z};return{column:$,headerRowIndex:$.getProvidedColumnGroup().getLevel()}}var _3=class extends S{constructor(){super(...arguments);this.beanName="headerNavigation",this.currentHeaderRowWithoutSpan=-1}postConstruct(){let z=this.beans;z.ctrlsSvc.whenReady(this,(Q)=>{this.gridBodyCon=Q.gridBodyCtrl});let J=Y0(z);this.addManagedElementListeners(J,{mousedown:()=>{this.currentHeaderRowWithoutSpan=-1}})}getHeaderPositionForColumn(z,J){let Q,{colModel:Z,colGroupSvc:$,ctrlsSvc:X}=this.beans;if(typeof z==="string"){if(Q=Z.getCol(z),!Q)Q=$?.getColumnGroup(z)??null}else Q=z;if(!Q)return null;let q=X.getHeaderRowContainerCtrl()?.getAllCtrls(),G=y(q||[]).type==="filter",U=Q4(this.beans)-1,_=-1,H=Q;while(H)_++,H=H.parent;let W=_;if(J&&G&&W===U-1)W++;return W===-1?null:{headerRowIndex:W,column:Q}}navigateVertically(z,J){let{focusSvc:Q,visibleCols:Z}=this.beans,{focusedHeader:$}=Q;if(!$)return!1;let{headerRowIndex:X}=$,Y=$.column,q=Q4(this.beans),G=this.getHeaderRowType(X),U=Z.headerGroupRowCount,{headerRowIndex:_,column:H,headerRowIndexWithoutSpan:W}=z==="UP"?H3(G,Y,X):W3(Y,X,U),B=!1;if(_<0)_=0,H=Y,B=!0;if(_>=q)_=-1,this.currentHeaderRowWithoutSpan=-1;else if(W!==void 0)this.currentHeaderRowWithoutSpan=W;if(!B&&!H)return!1;return Q.focusHeaderPosition({headerPosition:{headerRowIndex:_,column:H},allowUserOverride:!0,event:J})}navigateHorizontally(z,J=!1,Q){let{focusSvc:Z,gos:$}=this.beans,X={...Z.focusedHeader},Y,q;if(this.currentHeaderRowWithoutSpan!==-1)X.headerRowIndex=this.currentHeaderRowWithoutSpan;else this.currentHeaderRowWithoutSpan=X.headerRowIndex;if(z==="LEFT"!==$.get("enableRtl"))q="Before",Y=this.findHeader(X,q);else q="After",Y=this.findHeader(X,q);let G=$.getCallback("tabToNextHeader");if(J&&G){let U=Z.focusHeaderPositionFromUserFunc({userFunc:G,headerPosition:Y,direction:q});if(U){let{headerRowIndex:_}=Z.focusedHeader||{};if(_!=null&&_!=X.headerRowIndex)this.currentHeaderRowWithoutSpan=_}return U}if(Y||!J)return Z.focusHeaderPosition({headerPosition:Y,direction:q,fromTab:J,allowUserOverride:!0,event:Q});return this.focusNextHeaderRow(X,q,Q)}focusNextHeaderRow(z,J,Q){let Z=this.beans,$=z.headerRowIndex,X,Y,q=Q4(Z),G=this.beans.visibleCols.allCols;if(J==="Before"){if($<=0)return!1;X=y(G),Y=$-1,this.currentHeaderRowWithoutSpan-=1}else if(X=G[0],Y=$+1,this.currentHeaderRowWithoutSpan=q)_=-1;return Z.focusSvc.focusHeaderPosition({headerPosition:{column:U,headerRowIndex:_},direction:J,fromTab:!0,allowUserOverride:!0,event:Q})}scrollToColumn(z,J="After"){if(z.getPinned())return;let Q;if(K0(z)){let Z=z.getDisplayedLeafColumns();Q=J==="Before"?y(Z):Z[0]}else Q=z;this.gridBodyCon.scrollFeature.ensureColumnVisible(Q)}findHeader(z,J){let{colGroupSvc:Q,visibleCols:Z}=this.beans,$=z.column;if($ instanceof R2){let G=$.getDisplayedLeafColumns();$=J==="Before"?G[0]:G[G.length-1]}let X=J==="Before"?Z.getColBefore($):Z.getColAfter($);if(!X)return;let Y=Z.headerGroupRowCount;if(z.headerRowIndex>=Y)return{headerRowIndex:z.headerRowIndex,column:X};let q=Q?.getColGroupAtLevel(X,z.headerRowIndex);if(!q)return{headerRowIndex:X instanceof B4&&X.isSpanHeaderHeight()?Z.headerGroupRowCount:z.headerRowIndex,column:X};if(q.isPadding()&&X.isSpanHeaderHeight())return{headerRowIndex:Z.headerGroupRowCount,column:X};return{headerRowIndex:z.headerRowIndex,column:q??X}}getHeaderRowType(z){let J=this.beans.ctrlsSvc.getHeaderRowContainerCtrl();if(J)return J.getRowType(z)}};function H3(z,J,Q){let Z=Q-1;if(z!=="filter"){let $=J instanceof B4&&J.isSpanHeaderHeight(),X=J.parent;while(X&&(X.getProvidedColumnGroup().getLevel()>Z||$&&X.isPadding()))X=X.parent;if(X)if($)return{column:X,headerRowIndex:X.getProvidedColumnGroup().getLevel(),headerRowIndexWithoutSpan:Z};else return{column:X,headerRowIndex:Z,headerRowIndexWithoutSpan:Z}}return{column:J,headerRowIndex:Z,headerRowIndexWithoutSpan:Z}}function W3(z,J,Q){let Z=J+1,$={column:z,headerRowIndex:Z,headerRowIndexWithoutSpan:Z};if(z instanceof R2){if(Z>=Q)return{column:z.getDisplayedLeafColumns()[0],headerRowIndex:Q,headerRowIndexWithoutSpan:Z};let Y=z.getDisplayedChildren()[0];if(Y instanceof R2&&Y.isPadding()){let G=Y.getDisplayedLeafColumns()[0];if(G.isSpanHeaderHeight())Y=G}if($.column=Y,Y instanceof B4&&Y.isSpanHeaderHeight())$.headerRowIndex=Q,$.headerRowIndexWithoutSpan=Z}return $}var B3=class extends S{constructor(){super(...arguments);this.beanName="focusSvc",this.focusFallbackTimeout=null,this.needsFocusRestored=!1}wireBeans(z){this.colModel=z.colModel,this.visibleCols=z.visibleCols,this.rowRenderer=z.rowRenderer,this.navigation=z.navigation,this.filterManager=z.filterManager,this.overlays=z.overlays}postConstruct(){let z=this.clearFocusedCell.bind(this);this.addManagedEventListeners({columnPivotModeChanged:z,newColumnsLoaded:this.onColumnEverythingChanged.bind(this),columnGroupOpened:z,columnRowGroupChanged:z}),this.addDestroyFunc(D_(this.beans))}attemptToRecoverFocus(){if(this.needsFocusRestored=!0,this.focusFallbackTimeout!=null)clearTimeout(this.focusFallbackTimeout);this.focusFallbackTimeout=window.setTimeout(this.setFocusRecovered.bind(this),100)}setFocusRecovered(){if(this.needsFocusRestored=!1,this.focusFallbackTimeout!=null)clearTimeout(this.focusFallbackTimeout),this.focusFallbackTimeout=null}shouldTakeFocus(){if(this.gos.get("suppressFocusAfterRefresh"))return this.setFocusRecovered(),!1;if(this.needsFocusRestored)return this.setFocusRecovered(),!0;return this.doesRowOrCellHaveBrowserFocus()}onColumnEverythingChanged(){if(!this.focusedCell)return;let z=this.focusedCell.column,J=this.colModel.getCol(z.getId());if(z!==J)this.clearFocusedCell()}getFocusCellToUseAfterRefresh(){let{gos:z,focusedCell:J}=this;if(z.get("suppressFocusAfterRefresh")||z.get("suppressCellFocus")||!J)return null;if(!this.doesRowOrCellHaveBrowserFocus())return null;return J}getFocusHeaderToUseAfterRefresh(){if(this.gos.get("suppressFocusAfterRefresh")||!this.focusedHeader)return null;if(!this.isDomDataPresentInHierarchy(n(this.beans),Y$))return null;return this.focusedHeader}doesRowOrCellHaveBrowserFocus(){let z=n(this.beans);if(this.isDomDataPresentInHierarchy(z,h6,!0))return!0;return this.isDomDataPresentInHierarchy(z,u6,!0)}isDomDataPresentInHierarchy(z,J,Q){let Z=z;while(Z){let $=K9(this.gos,Z,J);if($){if($.destroyed&&Q)return this.attemptToRecoverFocus(),!1;return!0}Z=Z.parentNode}return!1}getFocusedCell(){return this.focusedCell}getFocusEventParams(z){let{rowIndex:J,rowPinned:Q,column:Z}=z,$={rowIndex:J,rowPinned:Q,column:Z,isFullWidthCell:!1},X=this.rowRenderer.getRowByPosition({rowIndex:J,rowPinned:Q});if(X)$.isFullWidthCell=X.isFullWidth();return $}clearFocusedCell(){if(this.focusedCell==null)return;let z=this.getFocusEventParams(this.focusedCell);this.focusedCell=null,this.eventSvc.dispatchEvent({type:"cellFocusCleared",...z})}setFocusedCell(z){this.setFocusRecovered();let{column:J,rowIndex:Q,rowPinned:Z,forceBrowserFocus:$=!1,preventScrollOnBrowserFocus:X=!1,sourceEvent:Y}=z,q=this.colModel.getCol(J);if(!q){this.focusedCell=null;return}this.focusedCell={rowIndex:Q,rowPinned:q0(Z),column:q};let G=this.getFocusEventParams(this.focusedCell);this.eventSvc.dispatchEvent({type:"cellFocused",...G,...this.previousCellFocusParams&&{previousParams:this.previousCellFocusParams},forceBrowserFocus:$,preventScrollOnBrowserFocus:X,sourceEvent:Y}),this.previousCellFocusParams=G}isCellFocused(z){if(this.focusedCell==null)return!1;return r1(z,this.focusedCell)}isHeaderWrapperFocused(z){if(this.focusedHeader==null)return!1;let{column:J,rowCtrl:{rowIndex:Q,pinned:Z}}=z,{column:$,headerRowIndex:X}=this.focusedHeader;return J===$&&Q===X&&Z==$.getPinned()}focusHeaderPosition(z){if(this.setFocusRecovered(),D4(this.beans))return!1;let{direction:J,fromTab:Q,allowUserOverride:Z,event:$,fromCell:X,rowWithoutSpanValue:Y,scroll:q=!0}=z,{headerPosition:G}=z;if(X&&this.filterManager?.isAdvFilterHeaderActive())return this.focusAdvancedFilter(G);if(Z){let U=this.focusedHeader,_=Q4(this.beans);if(Q){let H=this.gos.getCallback("tabToNextHeader");if(H)G=this.getHeaderPositionFromUserFunc({userFunc:H,direction:J,currentPosition:U,headerPosition:G,headerRowCount:_})}else{let H=this.gos.getCallback("navigateToNextHeader");if(H&&$){let W={key:$.key,previousHeaderPosition:U,nextHeaderPosition:G,headerRowCount:_,event:$},B=H(W);G=B===null?U:B}}}if(!G)return!1;return this.focusProvidedHeaderPosition({headerPosition:G,direction:J,event:$,fromCell:X,rowWithoutSpanValue:Y,scroll:q})}focusHeaderPositionFromUserFunc(z){if(D4(this.beans))return!1;let{userFunc:J,headerPosition:Q,direction:Z,event:$}=z,X=this.focusedHeader,Y=Q4(this.beans),q=this.getHeaderPositionFromUserFunc({userFunc:J,direction:Z,currentPosition:X,headerPosition:Q,headerRowCount:Y});return!!q&&this.focusProvidedHeaderPosition({headerPosition:q,direction:Z,event:$})}getHeaderPositionFromUserFunc(z){let{userFunc:J,direction:Q,currentPosition:Z,headerPosition:$,headerRowCount:X}=z,q=J({backwards:Q==="Before",previousHeaderPosition:Z,nextHeaderPosition:$,headerRowCount:X});if(q===!0)return Z;if(q===!1)return null;return q}focusProvidedHeaderPosition(z){let{headerPosition:J,direction:Q,fromCell:Z,rowWithoutSpanValue:$,event:X,scroll:Y=!0}=z,{column:q,headerRowIndex:G}=J,{filterManager:U,ctrlsSvc:_,headerNavigation:H}=this.beans;if(this.focusedHeader&&m_(z.headerPosition,this.focusedHeader))return!1;if(G===-1){if(U?.isAdvFilterHeaderActive())return this.focusAdvancedFilter(J);return this.focusGridView({column:q,event:X})}if(Y)H?.scrollToColumn(q,Q);let B=_.getHeaderRowContainerCtrl(q.getPinned())?.focusHeader(J.headerRowIndex,q,X)||!1;if(H&&B&&($!=null||Z))H.currentHeaderRowWithoutSpan=$??-1;return B}focusFirstHeader(){if(this.overlays?.exclusive&&this.focusOverlay())return!0;let z=this.visibleCols.allCols[0];if(!z)return!1;let J=sQ(this.beans,z,0);return this.focusHeaderPosition({headerPosition:J,rowWithoutSpanValue:0})}focusLastHeader(z){if(this.overlays?.exclusive&&this.focusOverlay(!0))return!0;let J=Q4(this.beans)-1,Q=y(this.visibleCols.allCols);return this.focusHeaderPosition({headerPosition:{headerRowIndex:J,column:Q},rowWithoutSpanValue:-1,event:z})}focusPreviousFromFirstCell(z){if(this.filterManager?.isAdvFilterHeaderActive())return this.focusAdvancedFilter(null);return this.focusLastHeader(z)}isAnyCellFocused(){return!!this.focusedCell}isRowFocused(z,J){if(this.focusedCell==null)return!1;return this.focusedCell.rowIndex===z&&this.focusedCell.rowPinned===q0(J)}focusOverlay(z){let J=this.overlays?.isVisible()&&this.overlays.eWrapper?.getGui();return!!J&&E0(J,z)}getDefaultTabToNextGridContainerTarget(z){let{backwards:J,focusableContainers:Q}=z,Z=J?-1:1,$,X=()=>{if($===void 0)$=this.getGridBodyTabTarget(J);return $};for(let Y=z.nextIndex;Y>=0&&Y{z.executeLaterVMTurn(()=>this.updateScrollVisibleImpl())});else this.updateScrollVisibleImpl()}updateScrollVisibleImpl(){let z=this.ctrlsSvc.get("center");if(!z||this.colAnimation?.isActive())return;let J={horizontalScrollShowing:z.isHorizontalScrollShowing(),verticalScrollShowing:this.verticalScrollShowing};this.setScrollsVisible(J),this.updateScrollGap()}updateScrollGap(){let z=this.ctrlsSvc.get("center"),J=z.hasHorizontalScrollGap(),Q=z.hasVerticalScrollGap();if(this.horizontalScrollGap!==J||this.verticalScrollGap!==Q)this.horizontalScrollGap=J,this.verticalScrollGap=Q,this.eventSvc.dispatchEvent({type:"scrollGapChanged"})}setScrollsVisible(z){if(this.horizontalScrollShowing!==z.horizontalScrollShowing||this.verticalScrollShowing!==z.verticalScrollShowing)this.horizontalScrollShowing=z.horizontalScrollShowing,this.verticalScrollShowing=z.verticalScrollShowing,this.eventSvc.dispatchEvent({type:"scrollVisibilityChanged"})}getScrollbarWidth(){if(this.scrollbarWidth==null){let z=this.gos.get("scrollbarWidth"),Q=typeof z==="number"&&z>=0?z:wZ();if(Q!=null)this.scrollbarWidth=Q,this.eventSvc.dispatchEvent({type:"scrollbarWidthChanged"})}return this.scrollbarWidth}},K3=class extends S{constructor(){super(...arguments);this.beanName="gridDestroySvc",this.destroyCalled=!1}destroy(){if(this.destroyCalled)return;let{stateSvc:z,ctrlsSvc:J,context:Q}=this.beans;this.eventSvc.dispatchEvent({type:"gridPreDestroyed",state:z?.getState()??{}}),this.destroyCalled=!0,J.get("gridCtrl")?.destroyGridUi(),Q.destroy(),super.destroy()}},F3=["columnEverythingChanged","newColumnsLoaded","columnPivotModeChanged","pivotMaxColumnsExceeded","columnRowGroupChanged","expandOrCollapseAll","columnPivotChanged","gridColumnsChanged","columnValueChanged","columnMoved","columnVisible","columnPinned","columnGroupOpened","columnResized","displayedColumnsChanged","virtualColumnsChanged","columnHeaderMouseOver","columnHeaderMouseLeave","columnHeaderClicked","columnHeaderContextMenu","asyncTransactionsFlushed","rowGroupOpened","rowDataUpdated","pinnedRowDataChanged","pinnedRowsChanged","rangeSelectionChanged","cellSelectionChanged","chartCreated","chartRangeSelectionChanged","chartOptionsChanged","chartDestroyed","toolPanelVisibleChanged","toolPanelSizeChanged","modelUpdated","cutStart","cutEnd","pasteStart","pasteEnd","fillStart","fillEnd","cellSelectionDeleteStart","cellSelectionDeleteEnd","rangeDeleteStart","rangeDeleteEnd","undoStarted","undoEnded","redoStarted","redoEnded","cellClicked","cellDoubleClicked","cellMouseDown","cellContextMenu","cellValueChanged","cellEditRequest","rowValueChanged","headerFocused","cellFocused","rowSelected","selectionChanged","tooltipShow","tooltipHide","cellKeyDown","cellMouseOver","cellMouseOut","filterChanged","filterModified","filterUiChanged","filterOpened","floatingFilterUiChanged","advancedFilterBuilderVisibleChanged","sortChanged","virtualRowRemoved","rowClicked","rowDoubleClicked","gridReady","gridPreDestroyed","gridSizeChanged","viewportChanged","firstDataRendered","dragStarted","dragStopped","dragCancelled","rowEditingStarted","rowEditingStopped","cellEditingStarted","cellEditingStopped","bodyScroll","bodyScrollEnd","paginationChanged","componentStateChanged","storeRefreshed","stateUpdated","columnMenuVisibleChanged","contextMenuVisibleChanged","rowDragEnter","rowDragMove","rowDragLeave","rowDragEnd","rowDragCancel","findChanged","rowResizeStarted","rowResizeEnded","columnsReset","bulkEditingStarted","bulkEditingStopped","batchEditingStarted","batchEditingStopped"];var R6=new Set(["gridPreDestroyed","fillStart","pasteStart"]),G5=F3.reduce((z,J)=>{return z[J]=FU(J),z},{}),L3=["__ob__","__v_skip","__metadata__"];function s$(z,J,Q){return new Set([...L3,...Q??[],...Object.keys(J),...z])}var C1={agSetColumnFilter:"SetFilter",agSetColumnFloatingFilter:"SetFilter",agMultiColumnFilter:"MultiFilter",agMultiColumnFloatingFilter:"MultiFilter",agGroupColumnFilter:"GroupFilter",agGroupColumnFloatingFilter:"GroupFilter",agGroupCellRenderer:"GroupCellRenderer",agGroupRowRenderer:"GroupCellRenderer",agRichSelect:"RichSelect",agRichSelectCellEditor:"RichSelect",agDetailCellRenderer:"SharedMasterDetail",agSparklineCellRenderer:"Sparklines",agDragAndDropImage:"SharedDragAndDrop",agColumnHeader:"ColumnHeaderComp",agColumnGroupHeader:"ColumnGroupHeaderComp",agSortIndicator:"Sort",agAnimateShowChangeCellRenderer:"HighlightChanges",agAnimateSlideCellRenderer:"HighlightChanges",agLoadingCellRenderer:"LoadingCellRenderer",agSkeletonCellRenderer:"SkeletonCellRenderer",agCheckboxCellRenderer:"CheckboxCellRenderer",agLoadingOverlay:"Overlay",agExportingOverlay:"Overlay",agNoRowsOverlay:"Overlay",agNoMatchingRowsOverlay:"Overlay",agTooltipComponent:"Tooltip",agReadOnlyFloatingFilter:"CustomFilter",agTextColumnFilter:"TextFilter",agNumberColumnFilter:"NumberFilter",agBigIntColumnFilter:"BigIntFilter",agDateColumnFilter:"DateFilter",agDateInput:"DateFilter",agTextColumnFloatingFilter:"TextFilter",agNumberColumnFloatingFilter:"NumberFilter",agBigIntColumnFloatingFilter:"BigIntFilter",agDateColumnFloatingFilter:"DateFilter",agFormulaCellEditor:"Formula",agCellEditor:"TextEditor",agSelectCellEditor:"SelectEditor",agTextCellEditor:"TextEditor",agNumberCellEditor:"NumberEditor",agDateCellEditor:"DateEditor",agDateStringCellEditor:"DateEditor",agCheckboxCellEditor:"CheckboxEditor",agLargeTextCellEditor:"LargeTextEditor",agMenuItem:"MenuItem",agColumnsToolPanel:"ColumnsToolPanel",agFiltersToolPanel:"FiltersToolPanel",agNewFiltersToolPanel:"NewFiltersToolPanel",agAggregationComponent:"StatusBar",agSelectedRowCountComponent:"StatusBar",agTotalRowCountComponent:"StatusBar",agFilteredRowCountComponent:"StatusBar",agTotalAndFilteredRowCountComponent:"StatusBar",agFindCellRenderer:"Find",agButtonToolbarItem:"Toolbar",agFindToolbarItem:"Toolbar",agMenuToolbarItem:"Toolbar",agPivotPanelToolbarItem:"Toolbar",agQuickFilterToolbarItem:"Toolbar",agRowGroupPanelToolbarItem:"Toolbar"};function a7(z){return`"${z}"`}var D3=()=>({checkboxSelection:{version:"32.2",message:"Use `rowSelection.checkboxes` in `GridOptions` instead."},headerCheckboxSelection:{version:"32.2",message:"Use `rowSelection.headerCheckbox = true` in `GridOptions` instead."},headerCheckboxSelectionFilteredOnly:{version:"32.2",message:'Use `rowSelection.selectAll = "filtered"` in `GridOptions` instead.'},headerCheckboxSelectionCurrentPageOnly:{version:"32.2",message:'Use `rowSelection.selectAll = "currentPage"` in `GridOptions` instead.'},showDisabledCheckboxes:{version:"32.2",message:"Use `rowSelection.hideDisabledCheckboxes = true` in `GridOptions` instead."},rowGroupingHierarchy:{version:"34.3",message:"Use `colDef.groupHierarchy` instead."}}),M3={allowFormula:"Formula",aggFunc:"SharedAggregation",autoHeight:"RowAutoHeight",cellClass:"CellStyle",cellClassRules:"CellStyle",cellEditor:({cellEditor:z,editable:J,groupRowEditable:Q})=>{if(!(!!J||!!Q))return null;if(typeof z==="string")return C1[z]??"CustomEditor";return"CustomEditor"},cellRenderer:({cellRenderer:z})=>{if(typeof z!=="string")return null;return C1[z]},cellStyle:"CellStyle",columnChooserParams:"ColumnMenu",contextMenuItems:"ContextMenu",dndSource:"DragAndDrop",dndSourceOnRowDrag:"DragAndDrop",editable:({editable:z,cellEditor:J})=>{if(z&&!J)return"TextEditor";return null},groupRowEditable:({groupRowEditable:z,cellEditor:J})=>{if(!z)return null;return J?"RowGroupingEdit":["RowGroupingEdit","TextEditor"]},groupRowValueSetter:({groupRowValueSetter:z})=>z?"RowGroupingEdit":null,enableCellChangeFlash:"HighlightChanges",enablePivot:"SharedPivot",enableRowGroup:"SharedRowGrouping",enableValue:"SharedAggregation",filter:({filter:z})=>{if(z&&typeof z!=="string"&&typeof z!=="boolean")return"CustomFilter";if(typeof z==="string")return C1[z]??"ColumnFilter";return"ColumnFilter"},floatingFilter:"ColumnFilter",getQuickFilterText:"QuickFilter",headerTooltip:"Tooltip",headerTooltipValueGetter:"Tooltip",mainMenuItems:"ColumnMenu",menuTabs:(z)=>{let J=["columnsMenuTab","generalMenuTab"];if(z.menuTabs?.some((Q)=>J.includes(Q)))return"ColumnMenu";return null},pivot:"SharedPivot",pivotIndex:"SharedPivot",rowDrag:"RowDrag",rowGroup:"SharedRowGrouping",rowGroupIndex:"SharedRowGrouping",tooltipField:"Tooltip",tooltipValueGetter:"Tooltip",tooltipComponentSelector:"Tooltip",spanRows:"CellSpan",groupHierarchy:"SharedRowGrouping"},k3=()=>{return{autoHeight:{supportedRowModels:["clientSide","serverSide"],validate:(J,{paginationAutoPageSize:Q})=>{if(Q)return"colDef.autoHeight is not supported with paginationAutoPageSize.";return null}},allowFormula:{supportedRowModels:["clientSide"]},cellRendererParams:{validate:(J)=>{if((J.rowGroup!=null||J.rowGroupIndex!=null||J.cellRenderer==="agGroupCellRenderer")&&"checkbox"in J.cellRendererParams)return'Since v33.0, `cellRendererParams.checkbox` has been deprecated. Use `rowSelection.checkboxLocation = "autoGroupColumn"` instead.';return null}},flex:{validate:(J,Q)=>{if(Q.autoSizeStrategy)return"colDef.flex is not supported with gridOptions.autoSizeStrategy";return null}},headerCheckboxSelection:{supportedRowModels:["clientSide","serverSide"],validate:(J,{rowSelection:Q})=>Q==="multiple"?null:"headerCheckboxSelection is only supported with rowSelection=multiple"},headerCheckboxSelectionCurrentPageOnly:{supportedRowModels:["clientSide"],validate:(J,{rowSelection:Q})=>Q==="multiple"?null:"headerCheckboxSelectionCurrentPageOnly is only supported with rowSelection=multiple"},headerCheckboxSelectionFilteredOnly:{supportedRowModels:["clientSide"],validate:(J,{rowSelection:Q})=>Q==="multiple"?null:"headerCheckboxSelectionFilteredOnly is only supported with rowSelection=multiple"},headerValueGetter:{validate:(J)=>{let Q=J.headerValueGetter;if(typeof Q==="function"||typeof Q==="string")return null;return"headerValueGetter must be a function or a valid string expression"}},icons:{validate:({icons:J})=>{if(J){if(J.smallDown)return Y4(262);if(J.smallLeft)return Y4(263);if(J.smallRight)return Y4(264)}return null}},sort:{validate:(J)=>{if(v1(J.sort)||Lz(J.sort))return null;return`sort must be of type (SortDirection | SortDef), currently it is ${typeof J.sort==="object"?JSON.stringify(J.sort):M6(J.sort)}`}},initialSort:{validate:(J)=>{if(v1(J.initialSort)||Lz(J.initialSort))return null;return`initialSort must be of non-null type (SortDirection | SortDef), currently it is ${typeof J.initialSort==="object"?JSON.stringify(J.initialSort):M6(J.initialSort)}`}},sortingOrder:{validate:(J)=>{let Q=J.sortingOrder;if(Array.isArray(Q)&&Q.length>0){let Z=Q.filter(($)=>{return!(v1($)||Lz($))});if(Z.length>0)return`sortingOrder must be an array of type non-null (SortDirection | SortDef)[], incorrect items are: [${Z.map(($)=>typeof $==="string"||$==null?M6($):JSON.stringify($)).join(", ")}]`}else if(!Array.isArray(Q)||!Q.length)return`sortingOrder must be an array with at least one element, currently it is [${Q}]`;return null}},type:{validate:(J)=>{let Q=J.type;if(Q instanceof Array){if(Q.some(($)=>typeof $!=="string"))return"if colDef.type is supplied an array it should be of type 'string[]'";return null}if(typeof Q==="string")return null;return"colDef.type should be of type 'string' | 'string[]'"}},rowSpan:{validate:(J,{suppressRowTransform:Q})=>{if(!Q)return"colDef.rowSpan requires suppressRowTransform to be enabled.";return null}},spanRows:{dependencies:{editable:{required:[!1,void 0]},groupRowEditable:{required:[!1,void 0]},rowDrag:{required:[!1,void 0]},colSpan:{required:[void 0]},rowSpan:{required:[void 0]}},validate:(J,{rowSelection:Q,cellSelection:Z,suppressRowTransform:$,enableCellSpan:X,rowDragEntireRow:Y,enableCellTextSelection:q})=>{if(typeof Q==="object"){if(Q?.mode==="singleRow"&&Q?.enableClickSelection)return"colDef.spanRows is not supported with rowSelection.clickSelection"}if(Z)return"colDef.spanRows is not supported with cellSelection.";if($)return"colDef.spanRows is not supported with suppressRowTransform.";if(!X)return"colDef.spanRows requires enableCellSpan to be enabled.";if(Y)return"colDef.spanRows is not supported with rowDragEntireRow.";if(q)return"colDef.spanRows is not supported with enableCellTextSelection.";return null}},groupHierarchy:{validate(J,{groupHierarchyConfig:Q={}},Z){let $=new Set(["year","quarter","month","formattedMonth","day","hour","minute","second"]),X=[];for(let Y of J.groupHierarchy??[]){if(typeof Y==="object"){Z.validation?.validateColDef(Y);continue}if(!$.has(Y)&&!(Y in Q))X.push(a7(Y))}if(X.length>0){let Y=`The following parts of colDef.groupHierarchy are not recognised: ${X.join(", ")}.`,q=`Choose one of ${[...$].map(a7).join(", ")}, or define your own parts in gridOptions.groupHierarchyConfig.`;return`${Y} +${q}`}return null}}}},f3={headerName:void 0,columnGroupShow:void 0,headerStyle:void 0,headerClass:void 0,toolPanelClass:void 0,headerValueGetter:void 0,pivotKeys:void 0,groupId:void 0,colId:void 0,sort:void 0,initialSort:void 0,field:void 0,type:void 0,cellDataType:void 0,tooltipComponent:void 0,tooltipField:void 0,headerTooltip:void 0,headerTooltipValueGetter:void 0,cellClass:void 0,showRowGroup:void 0,filter:void 0,initialAggFunc:void 0,defaultAggFunc:void 0,aggFunc:void 0,groupRowEditable:void 0,groupRowValueSetter:void 0,pinned:void 0,initialPinned:void 0,chartDataType:void 0,cellAriaRole:void 0,cellEditorPopupPosition:void 0,headerGroupComponent:void 0,headerGroupComponentParams:void 0,cellStyle:void 0,cellRenderer:void 0,cellRendererParams:void 0,cellEditor:void 0,cellEditorParams:void 0,filterParams:void 0,pivotValueColumn:void 0,headerComponent:void 0,headerComponentParams:void 0,floatingFilterComponent:void 0,floatingFilterComponentParams:void 0,tooltipComponentParams:void 0,refData:void 0,columnChooserParams:void 0,children:void 0,sortingOrder:void 0,allowedAggFuncs:void 0,menuTabs:void 0,pivotTotalColumnIds:void 0,cellClassRules:void 0,icons:void 0,sortIndex:void 0,initialSortIndex:void 0,flex:void 0,initialFlex:void 0,width:void 0,initialWidth:void 0,minWidth:void 0,maxWidth:void 0,rowGroupIndex:void 0,initialRowGroupIndex:void 0,pivotIndex:void 0,initialPivotIndex:void 0,suppressColumnsToolPanel:void 0,suppressFiltersToolPanel:void 0,openByDefault:void 0,marryChildren:void 0,suppressStickyLabel:void 0,hide:void 0,initialHide:void 0,rowGroup:void 0,initialRowGroup:void 0,pivot:void 0,initialPivot:void 0,checkboxSelection:void 0,showDisabledCheckboxes:void 0,headerCheckboxSelection:void 0,headerCheckboxSelectionFilteredOnly:void 0,headerCheckboxSelectionCurrentPageOnly:void 0,suppressHeaderMenuButton:void 0,suppressMovable:void 0,lockPosition:void 0,lockVisible:void 0,lockPinned:void 0,unSortIcon:void 0,suppressSizeToFit:void 0,suppressAutoSize:void 0,enableRowGroup:void 0,enablePivot:void 0,enableValue:void 0,editable:void 0,suppressPaste:void 0,suppressNavigable:void 0,enableCellChangeFlash:void 0,rowDrag:void 0,dndSource:void 0,autoHeight:void 0,wrapText:void 0,sortable:void 0,resizable:void 0,singleClickEdit:void 0,floatingFilter:void 0,cellEditorPopup:void 0,suppressFillHandle:void 0,wrapHeaderText:void 0,autoHeaderHeight:void 0,dndSourceOnRowDrag:void 0,valueGetter:void 0,valueSetter:void 0,filterValueGetter:void 0,keyCreator:void 0,valueFormatter:void 0,valueParser:void 0,comparator:void 0,equals:void 0,pivotComparator:void 0,suppressKeyboardEvent:void 0,suppressHeaderKeyboardEvent:void 0,colSpan:void 0,rowSpan:void 0,spanRows:void 0,getQuickFilterText:void 0,onCellValueChanged:void 0,onCellClicked:void 0,onCellDoubleClicked:void 0,onCellContextMenu:void 0,rowDragText:void 0,tooltipValueGetter:void 0,tooltipComponentSelector:void 0,cellRendererSelector:void 0,cellEditorSelector:void 0,suppressSpanHeaderHeight:void 0,useValueFormatterForExport:void 0,useValueParserForImport:void 0,mainMenuItems:void 0,contextMenuItems:void 0,suppressFloatingFilterButton:void 0,suppressHeaderFilterButton:void 0,suppressHeaderContextMenu:void 0,loadingCellRenderer:void 0,loadingCellRendererParams:void 0,loadingCellRendererSelector:void 0,context:void 0,dateComponent:void 0,dateComponentParams:void 0,getFindText:void 0,rowGroupingHierarchy:void 0,groupHierarchy:void 0,allowFormula:void 0,suppressNoteActions:void 0},S3=()=>Object.keys(f3),o7,V3=()=>o7??(o7=(()=>{let z=S3(),J=D3();return{objectName:"colDef",allProperties:z,allValidNames:s$(z,J),docsUrl:"column-properties/",deprecations:J,validations:k3()}})()),R3=["overlayLoadingTemplate","overlayNoRowsTemplate","gridId","quickFilterText","rowModelType","editType","domLayout","clipboardDelimiter","rowGroupPanelShow","multiSortKey","pivotColumnGroupTotals","pivotRowTotals","pivotPanelShow","fillHandleDirection","groupDisplayType","treeDataDisplayType","treeDataChildrenField","treeDataParentIdField","colResizeDefault","tooltipTrigger","noteTrigger","serverSidePivotResultFieldSeparator","columnMenu","tooltipShowMode","invalidEditValueMode","grandTotalRow","themeCssLayer","findSearchValue","styleNonce","renderingMode"],A3=["components","rowStyle","context","autoGroupColumnDef","localeText","icons","datasource","dragAndDropImageComponentParams","serverSideDatasource","viewportDatasource","groupRowRendererParams","aggFuncs","fullWidthCellRendererParams","defaultColGroupDef","defaultColDef","defaultCsvExportParams","defaultExcelExportParams","columnTypes","rowClassRules","detailCellRendererParams","loadingCellRendererParams","overlayComponentParams","loadingOverlayComponentParams","noRowsOverlayComponentParams","activeOverlayParams","popupParent","themeStyleContainer","toolbar","statusBar","chartThemeOverrides","customChartThemes","chartToolPanelsDef","dataTypeDefinitions","advancedFilterParent","advancedFilterBuilderParams","advancedFilterParams","formulaDataSource","formulaFuncs","notesDataSource","initialState","autoSizeStrategy","selectionColumnDef","findOptions","filterHandlers","groupHierarchyConfig"],j3=["sortingOrder","alignedGrids","rowData","columnDefs","excelStyles","pinnedTopRowData","pinnedBottomRowData","chartThemes","rowClass","paginationPageSizeSelector","paginationPanels","suppressOverlays"],l$=["rowHeight","detailRowHeight","rowBuffer","headerHeight","groupHeaderHeight","groupLockGroupColumns","floatingFiltersHeight","pivotHeaderHeight","pivotGroupHeaderHeight","groupDefaultExpanded","pivotDefaultExpanded","viewportRowModelPageSize","viewportRowModelBufferSize","autoSizePadding","maxBlocksInCache","maxConcurrentDatasourceRequests","tooltipShowDelay","tooltipSwitchShowDelay","tooltipHideDelay","noteShowDelay","noteHideDelay","cacheOverflowSize","paginationPageSize","cacheBlockSize","infiniteInitialRowCount","serverSideInitialRowCount","scrollbarWidth","asyncTransactionWaitMillis","blockLoadDebounceMillis","keepDetailRowsCount","undoRedoCellEditingLimit","cellFlashDuration","cellFadeDuration","tabIndex","pivotMaxGeneratedColumns","rowDragInsertDelay"],O3=["theme","rowSelection"],P3=["cellSelection","sideBar","rowNumbers","suppressGroupChangesColumnVisibility","groupAggFiltering","suppressStickyTotalRow","groupHideParentOfSingleChild","enableRowPinning"],a$=["loadThemeGoogleFonts","suppressMakeColumnVisibleAfterUnGroup","suppressRowClickSelection","suppressCellFocus","suppressHeaderFocus","suppressHorizontalScroll","groupSelectsChildren","alwaysShowHorizontalScroll","alwaysShowVerticalScroll","debug","enableBrowserTooltips","enableCellExpressions","groupSuppressBlankHeader","suppressMenuHide","suppressRowDeselection","unSortIcon","suppressMultiSort","alwaysMultiSort","singleClickEdit","suppressLoadingOverlay","suppressNoRowsOverlay","suppressAutoSize","skipHeaderOnAutoSize","suppressColumnMoveAnimation","suppressMoveWhenColumnDragging","suppressMovableColumns","suppressFieldDotNotation","enableRangeSelection","enableRangeHandle","enableFillHandle","suppressClearOnFillReduction","deltaSort","suppressTouch","allowContextMenuWithControlKey","suppressContextMenu","suppressDragLeaveHidesColumns","suppressRowGroupHidesColumns","suppressMiddleClickScrolls","suppressPreventDefaultOnMouseWheel","suppressCopyRowsToClipboard","copyHeadersToClipboard","copyGroupHeadersToClipboard","pivotMode","suppressAggFuncInHeader","suppressColumnVirtualisation","alwaysAggregateAtRootLevel","suppressFocusAfterRefresh","functionsReadOnly","animateRows","groupSelectsFiltered","groupRemoveSingleChildren","groupRemoveLowestSingleChildren","enableRtl","enableCellSpan","suppressClickEdit","rowDragEntireRow","rowDragManaged","refreshAfterGroupEdit","suppressRowDrag","suppressMoveWhenRowDragging","rowDragMultiRow","enableGroupEdit","embedFullWidthRows","suppressPaginationPanel","groupHideOpenParents","groupHideColumnsUntilExpanded","groupAllowUnbalanced","pagination","paginationAutoPageSize","suppressScrollOnNewData","suppressScrollWhenPopupsAreOpen","purgeClosedRowNodes","cacheQuickFilter","includeHiddenColumnsInQuickFilter","ensureDomOrder","accentedSort","suppressChangeDetection","valueCache","valueCacheNeverExpires","aggregateOnlyChangedColumns","suppressAnimationFrame","suppressExcelExport","suppressCsvExport","includeHiddenColumnsInAdvancedFilter","suppressMultiRangeSelection","enterNavigatesVerticallyAfterEdit","enterNavigatesVertically","suppressPropertyNamesCheck","rowMultiSelectWithClick","suppressRowHoverHighlight","suppressRowTransform","suppressContentVisibilityAuto","suppressClipboardPaste","suppressLastEmptyLineOnPaste","enableCharts","suppressMaintainUnsortedOrder","enableCellTextSelection","suppressBrowserResizeObserver","suppressMaxRenderedRowRestriction","excludeChildrenWhenTreeDataFiltering","tooltipMouseTrack","tooltipInteraction","keepDetailRows","paginateChildRows","preventDefaultOnContextMenu","undoRedoCellEditing","allowDragFromColumnsToolPanel","pivotSuppressAutoColumn","suppressExpandablePivotGroups","debounceVerticalScrollbar","detailRowAutoHeight","serverSideSortAllLevels","serverSideEnableClientSideSort","serverSideOnlyRefreshFilteredGroups","suppressAggFilteredOnly","showOpenedGroup","suppressClipboardApi","suppressModelUpdateAfterUpdateTransaction","stopEditingWhenCellsLoseFocus","groupMaintainOrder","columnHoverHighlight","readOnlyEdit","suppressRowVirtualisation","enableCellEditingOnBackspace","resetRowDataOnUpdate","removePivotHeaderRowWhenSingleValueColumn","suppressCopySingleCellRanges","suppressGroupRowsSticky","suppressCutToClipboard","rowGroupPanelSuppressSort","allowShowChangeAfterFilter","enableAdvancedFilter","masterDetail","treeData","reactiveCustomComponents","applyQuickFilterBeforePivotOrAgg","suppressServerSideFullWidthLoadingRow","suppressAdvancedFilterEval","loading","maintainColumnOrder","enableStrictPivotColumnOrder","suppressSetFilterByDefault","enableFilterHandlers","suppressStartEditOnTab","hidePaddedHeaderRows","ssrmExpandAllAffectsAllRows","animateColumnResizing"],T3=["doesExternalFilterPass","processPivotResultColDef","processPivotResultColGroupDef","getBusinessKeyForNode","isRowSelectable","rowDragText","groupRowRenderer","dragAndDropImageComponent","fullWidthCellRenderer","loadingCellRenderer","overlayComponent","loadingOverlayComponent","noRowsOverlayComponent","overlayComponentSelector","activeOverlay","detailCellRenderer","quickFilterParser","quickFilterMatcher","getLocaleText","isExternalFilterPresent","getRowHeight","getRowClass","getRowStyle","getFullRowEditValidationErrors","getContextMenuItems","getMainMenuItems","processRowPostCreate","processCellForClipboard","getGroupRowAgg","isFullWidthRow","sendToClipboard","focusGridInnerElement","navigateToNextHeader","tabToNextHeader","navigateToNextCell","tabToNextCell","tabToNextGridContainer","processCellFromClipboard","getDocument","postProcessPopup","getChildCount","getDataPath","isRowMaster","postSortRows","processHeaderForClipboard","processUnpinnedColumns","processGroupHeaderForClipboard","paginationNumberFormatter","processDataFromClipboard","getServerSideGroupKey","isServerSideGroup","createChartContainer","getChartToolbarItems","fillOperation","isApplyServerSideTransaction","getServerSideGroupLevelParams","isServerSideGroupOpenByDefault","isGroupOpenByDefault","initialGroupOrderComparator","loadingCellRendererSelector","getRowId","chartMenuItems","groupTotalRow","alwaysPassFilter","isRowPinnable","isRowPinned","isRowValidDropPosition"],v3=()=>[...j3,...A3,...R3,...l$,...T3,...a$,...P3,...O3];var I3=()=>({suppressLoadingOverlay:{version:"32",message:"Use `loading`=false instead."},enableFillHandle:{version:"32.2",message:"Use `cellSelection.handle` instead."},enableRangeHandle:{version:"32.2",message:"Use `cellSelection.handle` instead."},enableRangeSelection:{version:"32.2",message:"Use `cellSelection = true` instead."},suppressMultiRangeSelection:{version:"32.2",message:"Use `cellSelection.suppressMultiRanges` instead."},suppressClearOnFillReduction:{version:"32.2",message:"Use `cellSelection.handle.suppressClearOnFillReduction` instead."},fillHandleDirection:{version:"32.2",message:"Use `cellSelection.handle.direction` instead."},fillOperation:{version:"32.2",message:"Use `cellSelection.handle.setFillValue` instead."},suppressRowClickSelection:{version:"32.2",message:"Use `rowSelection.enableClickSelection` instead."},suppressRowDeselection:{version:"32.2",message:"Use `rowSelection.enableClickSelection` instead."},rowMultiSelectWithClick:{version:"32.2",message:"Use `rowSelection.enableSelectionWithoutKeys` instead."},groupSelectsChildren:{version:"32.2",message:'Use `rowSelection.groupSelects = "descendants"` instead.'},groupSelectsFiltered:{version:"32.2",message:'Use `rowSelection.groupSelects = "filteredDescendants"` instead.'},isRowSelectable:{version:"32.2",message:"Use `selectionOptions.isRowSelectable` instead."},suppressCopySingleCellRanges:{version:"32.2",message:"Use `rowSelection.copySelectedRows` instead."},suppressCopyRowsToClipboard:{version:"32.2",message:"Use `rowSelection.copySelectedRows` instead."},onRangeSelectionChanged:{version:"32.2",message:"Use `onCellSelectionChanged` instead."},onRangeDeleteStart:{version:"32.2",message:"Use `onCellSelectionDeleteStart` instead."},onRangeDeleteEnd:{version:"32.2",message:"Use `onCellSelectionDeleteEnd` instead."},suppressBrowserResizeObserver:{version:"32.2",message:"The grid always uses the browser's ResizeObserver, this grid option has no effect."},onColumnEverythingChanged:{version:"32.2",message:"Either use `onDisplayedColumnsChanged` which is fired at the same time, or use one of the more specific column events."},groupRemoveSingleChildren:{version:"33",message:"Use `groupHideParentOfSingleChild` instead."},groupRemoveLowestSingleChildren:{version:"33",message:'Use `groupHideParentOfSingleChild: "leafGroupsOnly"` instead.'},suppressRowGroupHidesColumns:{version:"33",message:'Use `suppressGroupChangesColumnVisibility: "suppressHideOnGroup"` instead.'},suppressMakeColumnVisibleAfterUnGroup:{version:"33",message:'Use `suppressGroupChangesColumnVisibility: "suppressShowOnUngroup"` instead.'},unSortIcon:{version:"33",message:"Use `defaultColDef.unSortIcon` instead."},sortingOrder:{version:"33",message:"Use `defaultColDef.sortingOrder` instead."},suppressPropertyNamesCheck:{version:"33",message:"`gridOptions` and `columnDefs` both have a `context` property that should be used for arbitrary user data. This means that column definitions and gridOptions should only contain valid properties making this property redundant."},suppressAdvancedFilterEval:{version:"34",message:"Advanced filter no longer uses function evaluation, so this option has no effect."}});function v4(z,J,Q){if(typeof J==="number"||J==null){if(J==null)return null;return J>=Q?null:`${z}: value should be greater than or equal to ${Q}`}return`${z}: value should be a number`}var C3={alignedGrids:"AlignedGrids",allowContextMenuWithControlKey:"ContextMenu",autoSizeStrategy:"ColumnAutoSize",cellSelection:"CellSelection",columnHoverHighlight:"ColumnHover",datasource:"InfiniteRowModel",doesExternalFilterPass:"ExternalFilter",editType:"EditCore",invalidEditValueMode:"EditCore",enableAdvancedFilter:"AdvancedFilter",enableCellSpan:"CellSpan",enableCharts:"IntegratedCharts",enableRangeSelection:"CellSelection",enableRowPinning:"PinnedRow",findSearchValue:"Find",getFullRowEditValidationErrors:"EditCore",getContextMenuItems:"ContextMenu",getLocaleText:"Locale",getMainMenuItems:"ColumnMenu",getRowClass:"RowStyle",getRowStyle:"RowStyle",groupTotalRow:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"RowGrouping",grandTotalRow:["CsrmHierarchy","ServerSideRowModel"],initialState:"GridState",isExternalFilterPresent:"ExternalFilter",isRowPinnable:"PinnedRow",isRowPinned:"PinnedRow",localeText:"Locale",masterDetail:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"MasterDetail",notesDataSource:"Notes",pagination:"Pagination",pinnedBottomRowData:"PinnedRow",pinnedTopRowData:"PinnedRow",pivotMode:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"Pivot",pivotPanelShow:"RowGroupingPanel",quickFilterText:"QuickFilter",rowClass:"RowStyle",rowClassRules:"RowStyle",rowData:"ClientSideRowModel",rowDragManaged:"RowDrag",refreshAfterGroupEdit:["RowGrouping","TreeData"],rowGroupPanelShow:"RowGroupingPanel",rowNumbers:"RowNumbers",rowSelection:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"RowSelection",rowStyle:"RowStyle",serverSideDatasource:"ServerSideRowModel",sideBar:"SideBar",statusBar:"StatusBar",treeData:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"TreeData",toolbar:"Toolbar",undoRedoCellEditing:"UndoRedoEdit",valueCache:"ValueCache",viewportDatasource:"ViewportRowModel"},y3=()=>{let z={autoSizePadding:{validate({autoSizePadding:Q}){return v4("autoSizePadding",Q,0)}},cacheBlockSize:{supportedRowModels:["serverSide","infinite"],validate({cacheBlockSize:Q}){return v4("cacheBlockSize",Q,1)}},cacheOverflowSize:{validate({cacheOverflowSize:Q}){return v4("cacheOverflowSize",Q,1)}},datasource:{supportedRowModels:["infinite"]},domLayout:{validate:(Q)=>{let Z=Q.domLayout,$=["autoHeight","normal","print"];if(Z&&!$.includes(Z))return`domLayout must be one of [${$.join()}], currently it's ${Z}`;return null}},enableFillHandle:{dependencies:{enableRangeSelection:{required:[!0]}}},enableRangeHandle:{dependencies:{enableRangeSelection:{required:[!0]}}},enableCellSpan:{supportedRowModels:["clientSide","serverSide"]},enableRangeSelection:{dependencies:{rowDragEntireRow:{required:[!1,void 0]}}},enableRowPinning:{supportedRowModels:["clientSide"],validate({enableRowPinning:Q,pinnedTopRowData:Z,pinnedBottomRowData:$}){if(Q&&(Z||$))return"Manual row pinning cannot be used together with pinned row data. Either set `enableRowPinning` to `false`, or remove `pinnedTopRowData` and `pinnedBottomRowData`.";return null}},isRowPinnable:{supportedRowModels:["clientSide"],validate({enableRowPinning:Q,isRowPinnable:Z,pinnedTopRowData:$,pinnedBottomRowData:X}){if(Z&&($||X))return"Manual row pinning cannot be used together with pinned row data. Either remove `isRowPinnable`, or remove `pinnedTopRowData` and `pinnedBottomRowData`.";if(!Q&&Z)return"`isRowPinnable` requires `enableRowPinning` to be set.";return null}},isRowPinned:{supportedRowModels:["clientSide"],validate({enableRowPinning:Q,isRowPinned:Z,pinnedTopRowData:$,pinnedBottomRowData:X}){if(Z&&($||X))return"Manual row pinning cannot be used together with pinned row data. Either remove `isRowPinned`, or remove `pinnedTopRowData` and `pinnedBottomRowData`.";if(!Q&&Z)return"`isRowPinned` requires `enableRowPinning` to be set.";return null}},groupDefaultExpanded:{supportedRowModels:["clientSide"]},groupHideColumnsUntilExpanded:{supportedRowModels:["clientSide"],validate({groupHideColumnsUntilExpanded:Q,groupHideOpenParents:Z,groupDisplayType:$}){if(Q&&!Z&&$!=="multipleColumns")return"`groupHideColumnsUntilExpanded = true` requires either `groupDisplayType = 'multipleColumns'` or `groupHideOpenParents = true`";return null}},groupHideOpenParents:{supportedRowModels:["clientSide","serverSide"],dependencies:{groupTotalRow:{required:[void 0,"bottom"]},groupDisplayType:{required:[void 0,"multipleColumns"]},treeData:{required:[void 0,!1],reason:"Tree Data has values at the group level so it doesn't make sense to hide them."}}},groupHideParentOfSingleChild:{dependencies:{groupHideOpenParents:{required:[void 0,!1]}}},groupRemoveLowestSingleChildren:{dependencies:{groupHideOpenParents:{required:[void 0,!1]},groupRemoveSingleChildren:{required:[void 0,!1]}}},groupRemoveSingleChildren:{dependencies:{groupHideOpenParents:{required:[void 0,!1]},groupRemoveLowestSingleChildren:{required:[void 0,!1]}}},groupSelectsChildren:{dependencies:{rowSelection:{required:["multiple"]}}},groupHierarchyConfig:{validate({groupHierarchyConfig:Q={}},Z,$){for(let X of Object.keys(Q))$.validation?.validateColDef(Q[X]);return null}},icons:{validate:({icons:Q})=>{if(Q){if(Q.smallDown)return Y4(262);if(Q.smallLeft)return Y4(263);if(Q.smallRight)return Y4(264)}return null}},infiniteInitialRowCount:{validate({infiniteInitialRowCount:Q}){return v4("infiniteInitialRowCount",Q,1)}},initialGroupOrderComparator:{supportedRowModels:["clientSide"]},ssrmExpandAllAffectsAllRows:{validate:(Q)=>{if(typeof Q.ssrmExpandAllAffectsAllRows==="boolean"){if(Q.rowModelType!=="serverSide")return"'ssrmExpandAllAffectsAllRows' is only supported with the Server Side Row Model.";if(Q.ssrmExpandAllAffectsAllRows&&typeof Q.getRowId!=="function")return"'getRowId' callback must be provided for Server Side Row Model grouping to work correctly."}return null}},keepDetailRowsCount:{validate({keepDetailRowsCount:Q}){return v4("keepDetailRowsCount",Q,1)}},paginationPageSize:{validate({paginationPageSize:Q}){return v4("paginationPageSize",Q,1)}},paginationPageSizeSelector:{validate:(Q)=>{let Z=Q.paginationPageSizeSelector;if(typeof Z==="boolean"||Z==null)return null;if(!Z.length)return`'paginationPageSizeSelector' cannot be an empty array. + If you want to hide the page size selector, set paginationPageSizeSelector to false.`;return null}},paginationPanels:{validate:({paginationPanels:Q})=>{let Z=new Set(["pageSize","rowSummary","pageSummary"]);if(Q!=null&&(!Array.isArray(Q)||Q.some(($)=>!Z.has($))))return"'paginationPanels' expects an array of panel names: ['pageSize', 'rowSummary', 'pageSummary']";return null}},pivotMode:{dependencies:{treeData:{required:[!1,void 0],reason:"Pivot Mode is not supported with Tree Data."}}},quickFilterText:{supportedRowModels:["clientSide"]},rowBuffer:{validate({rowBuffer:Q}){return v4("rowBuffer",Q,0)}},rowClass:{validate:(Q)=>{if(typeof Q.rowClass==="function")return"rowClass should not be a function, please use getRowClass instead";return null}},rowData:{supportedRowModels:["clientSide"]},rowDragManaged:{supportedRowModels:["clientSide"],dependencies:{pagination:{required:[!1,void 0]}}},rowSelection:{validate({rowSelection:Q}){if(Q&&typeof Q==="string")return'As of version 32.2.1, using `rowSelection` with the values "single" or "multiple" has been deprecated. Use the object value instead.';if(Q&&typeof Q!=="object")return"Expected `RowSelectionOptions` object for the `rowSelection` property.";if(Q&&Q.mode!=="multiRow"&&Q.mode!=="singleRow")return`Selection mode "${Q.mode}" is invalid. Use one of 'singleRow' or 'multiRow'.`;return null}},rowStyle:{validate:(Q)=>{let Z=Q.rowStyle;if(Z&&typeof Z==="function")return"rowStyle should be an object of key/value styles, not be a function, use getRowStyle() instead";return null}},notesDataSource:{validate:({getRowId:Q})=>{if(!Q)return"'getRowId' callback must be provided for Notes to work correctly.";return null}},noteHideDelay:{validate:(Q)=>{if(Q.noteHideDelay!=null&&Q.noteHideDelay<0)return"noteHideDelay should not be lower than 0";return null}},noteShowDelay:{validate:(Q)=>{if(Q.noteShowDelay!=null&&Q.noteShowDelay<0)return"noteShowDelay should not be lower than 0";return null}},serverSideDatasource:{supportedRowModels:["serverSide"]},serverSideInitialRowCount:{supportedRowModels:["serverSide"],validate({serverSideInitialRowCount:Q}){return v4("serverSideInitialRowCount",Q,1)}},serverSideOnlyRefreshFilteredGroups:{supportedRowModels:["serverSide"]},serverSideSortAllLevels:{supportedRowModels:["serverSide"]},sortingOrder:{validate:(Q)=>{let Z=Q.sortingOrder;if(Array.isArray(Z)&&Z.length>0){let $=Z.filter((X)=>!Z4(X));if($.length>0)return`sortingOrder must be an array of type (SortDirection | SortDef)[], incorrect items are: ${$.map((X)=>typeof X==="string"||X==null?M6(X):JSON.stringify(X))}]`}else if(!Array.isArray(Z)||!Z.length)return`sortingOrder must be an array with at least one element, currently it's ${Z}`;return null}},tooltipHideDelay:{validate:(Q)=>{if(Q.tooltipHideDelay&&Q.tooltipHideDelay<0)return"tooltipHideDelay should not be lower than 0";return null}},tooltipShowDelay:{validate:(Q)=>{if(Q.tooltipShowDelay&&Q.tooltipShowDelay<0)return"tooltipShowDelay should not be lower than 0";return null}},tooltipSwitchShowDelay:{validate:(Q)=>{if(Q.tooltipSwitchShowDelay&&Q.tooltipSwitchShowDelay<0)return"tooltipSwitchShowDelay should not be lower than 0";return null}},treeData:{supportedRowModels:["clientSide","serverSide"],validate:(Q)=>{let Z=Q.rowModelType??"clientSide";switch(Z){case"clientSide":{let{treeDataChildrenField:$,treeDataParentIdField:X,getDataPath:Y,getRowId:q}=Q;if(!$&&!X&&!Y)return"treeData requires either 'treeDataChildrenField' or 'treeDataParentIdField' or 'getDataPath' in the clientSide row model.";if($){if(Y)return"Cannot use both 'treeDataChildrenField' and 'getDataPath' at the same time.";if(X)return"Cannot use both 'treeDataChildrenField' and 'treeDataParentIdField' at the same time."}if(X){if(!q)return"getRowId callback not provided, tree data with parent id cannot be built.";if(Y)return"Cannot use both 'treeDataParentIdField' and 'getDataPath' at the same time."}return null}case"serverSide":{let $=`treeData requires 'isServerSideGroup' and 'getServerSideGroupKey' in the ${Z} row model.`;return Q.isServerSideGroup&&Q.getServerSideGroupKey?null:$}}return null}},viewportDatasource:{supportedRowModels:["viewport"]},viewportRowModelBufferSize:{validate({viewportRowModelBufferSize:Q}){return v4("viewportRowModelBufferSize",Q,0)}},viewportRowModelPageSize:{validate({viewportRowModelPageSize:Q}){return v4("viewportRowModelPageSize",Q,1)}},rowDragEntireRow:{dependencies:{cellSelection:{required:[void 0]}}},autoGroupColumnDef:{validate({autoGroupColumnDef:Q,showOpenedGroup:Z}){if(Q?.field&&Z)return"autoGroupColumnDef.field and showOpenedGroup are not supported when used together.";if(Q?.valueGetter&&Z)return"autoGroupColumnDef.valueGetter and showOpenedGroup are not supported when used together.";return null}},renderingMode:{validate:(Q)=>{let Z=Q.renderingMode,$=["default","legacy"];if(Z&&!$.includes(Z))return`renderingMode must be one of [${$.join()}], currently it's ${Z}`;return null}},autoSizeStrategy:{validate:({autoSizeStrategy:Q})=>{if(!Q)return null;let Z=["fitCellContents","fitGridWidth","fitProvidedWidth"],$=Q.type;if($!=="fitCellContents"&&$!=="fitGridWidth"&&$!=="fitProvidedWidth")return`Invalid Auto-size strategy. \`autoSizeStrategy\` must be one of ${Z.map((X)=>'"'+X+'"').join(", ")}, currently it's ${$}`;if($==="fitProvidedWidth"&&typeof Q.width!="number")return`When using the 'fitProvidedWidth' auto-size strategy, must provide a numeric \`width\`. You provided ${Q.width}`;return null}}},J={};for(let Q of a$)J[Q]={expectedType:"boolean"};for(let Q of l$)J[Q]={expectedType:"number"};return D0(J,z),J},e7,b3=()=>e7??(e7=(()=>{let z=[...v3(),...Object.values(G5)],J=I3(),Q=["api"];return{objectName:"gridOptions",allProperties:z,allValidNames:s$(z,J,Q),propertyExceptions:Q,docsUrl:"grid-options/",deprecations:J,validations:y3()}})()),x3=0,w3=0,z8="__ag_grid_instance",N3=class extends S{constructor(){super(...arguments);this.beanName="gos",this.domDataKey="__AG_"+Math.random().toString(),this.instanceId=w3++,this.gridReadyFired=!1,this.queueEvents=[],this.propEventSvc=new R4,this.globalEventHandlerFactory=(z)=>{return(J,Q)=>{if(!this.isAlive())return;let Z=R6.has(J);if(Z&&!z||!Z&&z)return;if(!g3(J))return;let $=(X,Y)=>{let q=G5[X],G=this.gridOptions[q];if(typeof G==="function")this.beans.frameworkOverrides.wrapOutgoing(()=>G(Y))};if(this.gridReadyFired)$(J,Q);else if(J==="gridReady"){$(J,Q),this.gridReadyFired=!0;for(let X of this.queueEvents)$(X.eventName,X.event);this.queueEvents=[]}else this.queueEvents.push({eventName:J,event:Q})}}}wireBeans(z){this.gridOptions=z.gridOptions,this.validation=z.validation,this.api=z.gridApi,this.gridId=z.context.getId()}get gridOptionsContext(){return this.gridOptions.context}postConstruct(){this.validateGridOptions(this.gridOptions),this.eventSvc.addGlobalListener(this.globalEventHandlerFactory().bind(this),!0),this.eventSvc.addGlobalListener(this.globalEventHandlerFactory(!0).bind(this),!1),this.propEventSvc.setFrameworkOverrides(this.beans.frameworkOverrides),this.addManagedEventListeners({gridOptionsChanged:({options:z})=>{this.updateGridOptions({options:z,force:!0,source:"optionsUpdated"})}})}destroy(){super.destroy(),this.queueEvents=[]}get(z){return this.gridOptions[z]??pG[z]}getCallback(z){return this.mergeGridCommonParams(this.gridOptions[z])}exists(z){return P(this.gridOptions[z])}mergeGridCommonParams(z){if(z)return(Q)=>{return z(this.addCommon(Q))};return z}updateGridOptions({options:z,force:J,source:Q="api"}){let Z={id:x3++,properties:[]},$=[],{gridOptions:X,validation:Y}=this;for(let q of Object.keys(z)){let G=fZ.applyGlobalGridOption(q,z[q]);Y?.warnOnInitialPropertyUpdate(Q,q);let U=J||typeof G==="object"&&Q==="api",_=X[q];if(U||_!==G){X[q]=G;let H={type:q,currentValue:G,previousValue:_,changeSet:Z,source:Q};$.push(H)}}this.validateGridOptions(this.gridOptions),Z.properties=$.map((q)=>q.type);for(let q of $)M2(this,`Updated property ${q.type} from`,q.previousValue," to ",q.currentValue),this.propEventSvc.dispatchEvent(q)}addPropertyEventListener(z,J){this.propEventSvc.addEventListener(z,J)}removePropertyEventListener(z,J){this.propEventSvc.removeEventListener(z,J)}getDomDataKey(){return this.domDataKey}addCommon(z){return z.api=this.api,z.context=this.gridOptionsContext,z}validateOptions(z,J){for(let Q of Object.keys(z)){let Z=z[Q];if(Z==null||Z===!1)continue;let $=J[Q];if(typeof $==="function")$=$(z,this.gridOptions,this.beans);if($)this.assertModuleRegistered($,Q)}}validateGridOptions(z){this.validateOptions(z,C3),this.validation?.processGridOptions(z)}validateColDef(z,J,Q){if(Q||!this.beans.dataTypeSvc?.isColPendingInference(J))this.validateOptions(z,M3),this.validation?.validateColDef(z)}assertModuleRegistered(z,J){let Q=Array.isArray(z)?z.some((Z)=>this.isModuleRegistered(Z)):this.isModuleRegistered(z);if(!Q)r(200,{...this.getModuleErrorParams(),moduleName:z,reasonOrId:J});return Q}getModuleErrorParams(){return{gridId:this.gridId,gridScoped:SZ(),rowModelType:this.get("rowModelType"),isUmd:VZ(),usesAgGridProvider:this.beans.frameworkOverrides.usesAgGridProvider??!1}}isModuleRegistered(z){return yQ(z,this.gridId,this.get("rowModelType"))}setInstanceDomData(z){z[z8]=this.instanceId}isElementInThisInstance(z){let J=z;while(J){let Q=J[z8];if(P(Q))return Q===this.instanceId;J=J.parentElement}return!1}};function g3(z){return!!G5[z]}var h3=class extends S{constructor(z,J){super();this.column=z,this.eGui=J,this.lastMovingChanged=0}postConstruct(){this.addManagedElementListeners(this.eGui,{click:(z)=>z&&this.onClick(z)}),this.addManagedListeners(this.column,{movingChanged:()=>{this.lastMovingChanged=Date.now()}})}onClick(z){let{sortSvc:J,rangeSvc:Q,gos:Z}=this.beans;if(!(l4(Z)?z.altKey:!0))Q?.handleColumnSelection(this.column,z);else if(this.column.isSortable()){let X=this.column.isMoving(),q=Date.now()-this.lastMovingChanged<50;if(!(X||q))J?.progressSortFromEvent(this.column,z)}}};function u3(z,J){let Q={"aria-hidden":"true"};return{tag:"div",cls:"ag-cell-label-container",role:"presentation",children:[{tag:"span",ref:"eMenu",cls:"ag-header-icon ag-header-cell-menu-button",attrs:Q},{tag:"span",ref:"eFilterButton",cls:"ag-header-icon ag-header-cell-filter-button",attrs:Q},{tag:"div",ref:"eLabel",cls:"ag-header-cell-label",role:"presentation",children:[z?{tag:"span",ref:"eColRef",cls:"ag-header-col-ref"}:null,{tag:"span",ref:"eText",cls:"ag-header-cell-text"},{tag:"span",ref:"eFilter",cls:"ag-header-icon ag-header-label-icon ag-filter-icon",attrs:Q},J?{tag:"ag-sort-indicator",ref:"eSortIndicator"}:null]}]}}var m3=class extends x{constructor(){super(...arguments);this.eFilter=j,this.eFilterButton=j,this.eSortIndicator=j,this.eMenu=j,this.eLabel=j,this.eText=j,this.eColRef=j,this.eSortOrder=j,this.eSortAsc=j,this.eSortDesc=j,this.eSortMixed=j,this.eSortNone=j,this.eSortAbsoluteAsc=j,this.eSortAbsoluteDesc=j,this.isLoadingInnerComponent=!1}refresh(z){let J=this.params;if(this.params=z,this.workOutTemplate(z,!!this.beans?.sortSvc)!=this.currentTemplate||this.workOutShowMenu()!=this.currentShowMenu||z.enableSorting!=this.currentSort||z.column.formulaRef!=this.currentRef||this.currentSuppressMenuHide!=null&&this.shouldSuppressMenuHide()!=this.currentSuppressMenuHide||J.enableFilterButton!=z.enableFilterButton||J.enableFilterIcon!=z.enableFilterIcon)return!1;if(this.innerHeaderComponent){let Q={...z};D0(Q,z.innerHeaderComponentParams),this.innerHeaderComponent.refresh?.(Q)}else this.setDisplayName(z);return!0}workOutTemplate(z,J){let{formula:Q}=this.beans,Z=z.template;if(Z)return Z?.trim?Z.trim():Z;return u3(!!Q?.active,J)}init(z){this.params=z;let{sortSvc:J,touchSvc:Q,rowNumbersSvc:Z,userCompFactory:$}=this.beans,X=J?.getSortIndicatorSelector();if(this.currentTemplate=this.workOutTemplate(z,!!X),this.setTemplate(this.currentTemplate,X?[X]:void 0),this.eLabel)this.mouseListener??(this.mouseListener=this.createManagedBean(new h3(z.column,this.eLabel)));Q?.setupForHeader(this),this.setMenu(),this.setupSort(),this.setupColumnRefIndicator(),Z?.setupForHeader(this),this.setupFilterIcon(),this.setupFilterButton(),this.workOutInnerHeaderComponent($,z),this.setDisplayName(z)}workOutInnerHeaderComponent(z,J){let Q=Z_(z,J,J);if(!Q)return;this.isLoadingInnerComponent=!0,Q.newAgStackInstance().then((Z)=>{if(this.isLoadingInnerComponent=!1,!Z)return;if(this.isAlive()){if(this.innerHeaderComponent=Z,this.eText)this.eText.appendChild(Z.getGui())}else this.destroyBean(Z)})}setDisplayName(z){let{displayName:J}=z,Q=this.currentDisplayName;if(this.currentDisplayName=J,!this.eText||Q===J||this.innerHeaderComponent||this.isLoadingInnerComponent)return;this.eText.textContent=T2(J)}addInIcon(z,J,Q){let Z=h(z,this.beans,Q);if(Z)J.appendChild(Z)}workOutShowMenu(){return this.params.enableMenu&&!!this.beans.menuSvc?.isHeaderMenuButtonEnabled()}shouldSuppressMenuHide(){return!!this.beans.menuSvc?.isHeaderMenuButtonAlwaysShowEnabled()}setMenu(){if(!this.eMenu)return;if(this.currentShowMenu=this.workOutShowMenu(),!this.currentShowMenu){R0(this.eMenu),this.eMenu=void 0;return}let{gos:z,eMenu:J,params:Q}=this,Z=F0(z);this.addInIcon(Z?"menu":"menuAlt",J,Q.column),J.classList.toggle("ag-header-menu-icon",!Z);let $=this.shouldSuppressMenuHide();this.currentSuppressMenuHide=$,this.addManagedElementListeners(J,{click:()=>this.showColumnMenu(this.eMenu)}),this.toggleMenuAlwaysShow($)}toggleMenuAlwaysShow(z){this.eMenu?.classList.toggle("ag-header-menu-always-show",z)}showColumnMenu(z){let{currentSuppressMenuHide:J,params:Q}=this;if(!J)this.toggleMenuAlwaysShow(!0);Q.showColumnMenu(z,()=>{if(!J)this.toggleMenuAlwaysShow(!1)})}onMenuKeyboardShortcut(z){let{params:J,gos:Q,beans:Z,eMenu:$,eFilterButton:X}=this,Y=J.column,q=F0(Q);if(z&&!q){if(Z.menuSvc?.isFilterMenuInHeaderEnabled(Y))return J.showFilter(X??$??this.getGui()),!0}else if(J.enableMenu)return this.showColumnMenu($??X??this.getGui()),!0;return!1}setupSort(){let{sortSvc:z}=this.beans;if(!z)return;let{enableSorting:J,column:Q}=this.params;if(this.currentSort=J,!this.eSortIndicator){this.eSortIndicator=this.createBean(z.createSortIndicator(!0));let{eSortIndicator:Z,eSortOrder:$,eSortAsc:X,eSortDesc:Y,eSortMixed:q,eSortNone:G,eSortAbsoluteAsc:U,eSortAbsoluteDesc:_}=this;Z.attachCustomElements($,X,Y,q,G,U,_)}if(this.eSortIndicator.setupSort(Q),!this.currentSort)return;z.setupHeader(this,Q)}setupColumnRefIndicator(){let{eColRef:z,beans:{editModelSvc:J},params:Q}=this;if(!z)return;this.currentRef=Q.column.formulaRef,z.textContent=this.currentRef,w(z,!1),this.addManagedEventListeners({cellEditingStarted:()=>{let Z=J?.getEditPositions(),$=!!this.currentRef&&!!Z?.some((X)=>X.column.isAllowFormula());w(z,$)},cellEditingStopped:()=>{w(z,!1)}})}setupFilterIcon(){let{eFilter:z,params:J}=this;if(!z)return;let Q=()=>{let Z=J.column.isFilterActive();w(z,Z,{skipAriaHidden:!0})};this.configureFilter(J.enableFilterIcon,z,Q,"filterActive")}setupFilterButton(){let{eFilterButton:z,params:J}=this;if(!z)return;if(this.configureFilter(J.enableFilterButton,z,this.onFilterChangedButton.bind(this),"filter"))this.addManagedElementListeners(z,{click:()=>J.showFilter(z)});else this.eFilterButton=void 0}configureFilter(z,J,Q,Z){if(!z)return R0(J),!1;let $=this.params.column;return this.addInIcon(Z,J,$),this.addManagedListeners($,{filterChanged:Q}),Q(),!0}onFilterChangedButton(){let z=this.params.column.isFilterActive();this.eFilterButton.classList.toggle("ag-filter-active",z)}getAnchorElementForMenu(z){let{eFilterButton:J,eMenu:Q}=this;if(z)return J??Q??this.getGui();return Q??J??this.getGui()}destroy(){super.destroy(),this.innerHeaderComponent=this.destroyBean(this.innerHeaderComponent),this.mouseListener=this.destroyBean(this.mouseListener)}},c3=class extends S{constructor(z,J){super();this.eLabel=z,this.columnGroup=J,this.isSticky=!1,this.left=null,this.right=null}postConstruct(){let{columnGroup:z,beans:J}=this,{ctrlsSvc:Q}=J;Q.whenReady(this,()=>{let Z=this.refreshPosition.bind(this);if(z.getPinned()==null)this.addManagedEventListeners({bodyScroll:($)=>{if($.direction==="horizontal")this.updateSticky($.left)}});this.addManagedListeners(z,{leftChanged:Z,displayedChildrenChanged:Z}),this.addManagedEventListeners({columnResized:Z}),this.refreshPosition()})}refreshPosition(){let{columnGroup:z,beans:J}=this,Q=z.getLeft(),Z=z.getActualWidth();if(Q==null||Z===0){this.left=null,this.right=null,this.setSticky(!1);return}this.left=Q,this.right=Q+Z;let $=J.colViewport.getScrollPosition();if($!=null)this.updateSticky($)}updateSticky(z){let{beans:J,left:Q,right:Z}=this;if(Q==null||Z==null){this.setSticky(!1);return}let{gos:$,visibleCols:X}=J,q=$.get("enableRtl")?X.bodyWidth-z:z;this.setSticky(Qq)}setSticky(z){let{isSticky:J,eLabel:Q}=this;if(J===z)return;this.isSticky=z,Q.classList.toggle("ag-sticky-label",z)}},i3={tag:"div",cls:"ag-header-group-cell-label",role:"presentation",children:[{tag:"span",ref:"agLabel",cls:"ag-header-group-text",role:"presentation"},{tag:"span",ref:"agOpened",cls:"ag-header-icon ag-header-expand-icon ag-header-expand-icon-expanded"},{tag:"span",ref:"agClosed",cls:"ag-header-icon ag-header-expand-icon ag-header-expand-icon-collapsed"}]},p3=class extends x{constructor(){super(i3);this.agOpened=j,this.agClosed=j,this.agLabel=j,this.isLoadingInnerComponent=!1}init(z){let{userCompFactory:J,touchSvc:Q}=this.beans;this.params=z,this.checkWarnings(),this.workOutInnerHeaderGroupComponent(J,z),this.setupLabel(z),this.addGroupExpandIcon(z),this.setupExpandIcons(),Q?.setupForHeaderGroup(this)}checkWarnings(){if(this.params.template)V(89)}workOutInnerHeaderGroupComponent(z,J){let Q=X_(z,J,J);if(!Q)return;this.isLoadingInnerComponent=!0,Q.newAgStackInstance().then((Z)=>{if(this.isLoadingInnerComponent=!1,!Z)return;if(this.isAlive())this.innerHeaderGroupComponent=Z,this.agLabel.appendChild(Z.getGui());else this.destroyBean(Z)})}setupExpandIcons(){let{agOpened:z,agClosed:J,params:{columnGroup:Q},beans:{colGroupSvc:Z}}=this;this.addInIcon("columnGroupOpened",z),this.addInIcon("columnGroupClosed",J);let $=(G)=>{if(q4(G))return;let U=!Q.isExpanded();Z.setColumnGroupOpened(Q.getProvidedColumnGroup(),U,"uiColumnExpanded")};this.addTouchAndClickListeners(J,$),this.addTouchAndClickListeners(z,$);let X=(G)=>{l0(G)};this.addManagedElementListeners(J,{dblclick:X}),this.addManagedElementListeners(z,{dblclick:X}),this.addManagedElementListeners(this.getGui(),{dblclick:$}),this.updateIconVisibility();let Y=Q.getProvidedColumnGroup(),q=this.updateIconVisibility.bind(this);this.addManagedListeners(Y,{expandedChanged:q,expandableChanged:q})}addTouchAndClickListeners(z,J){this.beans.touchSvc?.setupForHeaderGroupElement(this,z,J),this.addManagedElementListeners(z,{click:J})}updateIconVisibility(){let{agOpened:z,agClosed:J,params:{columnGroup:Q}}=this;if(Q.isExpandable()){let Z=Q.isExpanded();w(z,Z),w(J,!Z)}else w(z,!1),w(J,!1)}addInIcon(z,J){let Q=h(z,this.beans,null);if(Q)J.appendChild(Q)}addGroupExpandIcon(z){if(!z.columnGroup.isExpandable()){let{agOpened:J,agClosed:Q}=this;w(J,!1),w(Q,!1)}}setupLabel(z){let{displayName:J,columnGroup:Q}=z,{innerHeaderGroupComponent:Z,isLoadingInnerComponent:$}=this,X=Z||$;if(P(J)&&!X)this.agLabel.textContent=T2(J);if(!Q.getColGroupDef()?.suppressStickyLabel)this.createManagedBean(new c3(this.getGui(),Q))}destroy(){if(super.destroy(),this.innerHeaderGroupComponent)this.destroyBean(this.innerHeaderGroupComponent),this.innerHeaderGroupComponent=void 0}},n3={moduleName:"ColumnHeaderComp",version:i,userComponents:{agColumnHeader:m3},icons:{menu:"menu",menuAlt:"menu-alt"}},d3={moduleName:"ColumnGroupHeaderComp",version:i,userComponents:{agColumnGroupHeader:p3},icons:{columnGroupOpened:"expanded",columnGroupClosed:"contracted"}},r3=class extends S{constructor(){super(...arguments);this.beanName="animationFrameSvc",this.p1={list:[],sorted:!1},this.p2={list:[],sorted:!1},this.f1={list:[],sorted:!1},this.destroyTasks=[],this.ticking=!1,this.scrollGoingDown=!0,this.lastScrollTop=0,this.taskCount=0}setScrollTop(z){if(this.scrollGoingDown=z>=this.lastScrollTop,z===0)this.scrollGoingDown=!0;this.lastScrollTop=z}postConstruct(){this.active=!this.gos.get("suppressAnimationFrame"),this.batchFrameworkComps=this.beans.frameworkOverrides.batchFrameworkComps}verify(){if(this.active===!1)V(92)}createTask(z,J,Q,Z,$=!1){this.verify();let X=Q;if(Z&&this.batchFrameworkComps)X="f1";let Y={task:z,index:J,createOrder:++this.taskCount,deferred:$};this.addTaskToList(this[X],Y),this.schedule()}addTaskToList(z,J){z.list.push(J),z.sorted=!1}sortTaskList(z){if(z.sorted)return;let J=this.scrollGoingDown?1:-1;z.list.sort((Q,Z)=>{if(Q.deferred!==Z.deferred)return Q.deferred?-1:1;if(Q.index!==Z.index)return J*(Z.index-Q.index);return Z.createOrder-Q.createOrder}),z.sorted=!0}addDestroyTask(z){this.verify(),this.destroyTasks.push(z),this.schedule()}executeFrame(z){let{p1:J,p2:Q,f1:Z,destroyTasks:$,beans:X}=this,{ctrlsSvc:Y,frameworkOverrides:q}=X,G=J.list,U=Q.list,_=Z.list,H=Date.now(),W=0,B=z<=0,E=Y.getScrollFeature();while(B||W{while(B||W{};else if($.length)F=$.pop();else break;F()}W=Date.now()-H}if(G.length||U.length||_.length||$.length)this.requestFrame();else this.ticking=!1}flushAllFrames(){if(!this.active)return;this.executeFrame(-1)}schedule(){if(!this.active)return;if(!this.ticking)this.ticking=!0,this.requestFrame()}requestFrame(){let z=this.executeFrame.bind(this,60);O4(this.beans,z)}isQueueEmpty(){return!this.ticking}},t3={moduleName:"AnimationFrame",version:i,beans:[r3]},s3=class extends S{constructor(){super(...arguments);this.beanName="iconSvc"}createIconNoSpan(z,J){return h(z,this.beans,J?.column)}},l3=(z,J,Q)=>J||z&&Q,a3=class extends S{constructor(){super(...arguments);this.beanName="touchSvc"}mockBodyContextMenu(z,J){this.mockContextMenu(z,z.eBodyViewport,J)}mockHeaderContextMenu(z,J){this.mockContextMenu(z,z.eGui,J)}mockRowContextMenu(z){if(!a4())return;let J=(Q,Z,$)=>{let{rowCtrl:X,cellCtrl:Y}=z.getControlsForEventTarget($?.target??null);if(Y?.column)Y.dispatchCellContextMenuEvent($??null);this.beans.contextMenuSvc?.handleContextMenuMouseEvent(void 0,$,X,Y)};this.mockContextMenu(z,z.element,J)}handleCellDoubleClick(z,J){if((()=>{if(!a4()||vQ("dblclick"))return!1;let Z=Date.now(),$=Z-z.lastIPadMouseClickEvent<200;return z.lastIPadMouseClickEvent=Z,$})())return z.onCellDoubleClicked(J),J.preventDefault(),!0;return!1}setupForHeader(z){let{gos:J,sortSvc:Q,menuSvc:Z}=this.beans;if(J.get("suppressTouch"))return;let{params:$,eMenu:X,eFilterButton:Y}=z,q=new c0(z.getGui(),!0);z.addDestroyFunc(()=>q.destroy());let G=z.shouldSuppressMenuHide(),U=G&&P(X)&&$.enableMenu,_=!!Z?.isHeaderContextMenuEnabled($.column),H=l3($.enableMenu,_,F0(J)),W=q;if(U)W=new c0(X,!0),z.addDestroyFunc(()=>W.destroy());let B=(E)=>$.showColumnMenuAfterMouseClick(E.touchStart);if(U&&$.enableMenu)z.addManagedListeners(W,{tap:B});if(H)z.addManagedListeners(q,{longTap:B});if($.enableSorting){let E=(K)=>{let F=K.touchStart.target;if(G&&(X?.contains(F)||Y?.contains(F)))return;Q?.progressSort($.column,!1,"uiColumnSorted")};z.addManagedListeners(q,{tap:E})}if($.enableFilterButton&&Y){let E=new c0(Y,!0);z.addManagedListeners(E,{tap:()=>$.showFilter(Y)}),z.addDestroyFunc(()=>E.destroy())}}setupForHeaderGroup(z){let J=z.params;if(this.beans.menuSvc?.isHeaderContextMenuEnabled(J.columnGroup.getProvidedColumnGroup())){let Q=new c0(J.eGridHeader,!0),Z=($)=>J.showColumnMenuAfterMouseClick($.touchStart);z.addManagedListeners(Q,{longTap:Z}),z.addDestroyFunc(()=>Q.destroy())}}setupForHeaderGroupElement(z,J,Q){let Z=new c0(J,!0);z.addManagedListeners(Z,{tap:Q}),z.addDestroyFunc(()=>Z.destroy())}mockContextMenu(z,J,Q){if(!a4())return;let Z=new c0(J),$=(X)=>{if(!D2(this.beans,X.touchEvent))return;Q(void 0,X.touchStart,X.touchEvent)};z.addManagedListeners(Z,{longTap:$}),z.addDestroyFunc(()=>Z.destroy())}},o3={moduleName:"Touch",version:i,beans:[a3]},e3=class extends S{constructor(){super(...arguments);this.beanName="cellNavigation"}getNextCellToFocus(z,J,Q=!1){if(Q)return this.getNextCellToFocusWithCtrlPressed(z,J);return this.getNextCellToFocusWithoutCtrlPressed(z,J)}getNextCellToFocusWithCtrlPressed(z,J){let Q=z===k.UP,Z=z===k.DOWN,$=z===k.LEFT,X,Y,{pageBounds:q,gos:G,visibleCols:U,pinnedRowModel:_}=this.beans,{rowPinned:H}=J;if(Q||Z){if(H&&_)if(Q)Y=0;else Y=H==="top"?_.getPinnedTopRowCount()-1:_.getPinnedBottomRowCount()-1;else Y=Q?q.getFirstRow():q.getLastRow();X=J.column}else{let W=G.get("enableRtl");Y=J.rowIndex,X=($!==W?U.allCols:[...U.allCols].reverse()).find((E)=>!y0(E)&&this.isCellGoodToFocusOn({rowIndex:Y,rowPinned:null,column:E}))}return X?{rowIndex:Y,rowPinned:H,column:X}:null}getNextCellToFocusWithoutCtrlPressed(z,J){let Q=J,Z=!1;while(!Z){switch(z){case k.UP:Q=this.getCellAbove(Q);break;case k.DOWN:Q=this.getCellBelow(Q);break;case k.RIGHT:Q=this.gos.get("enableRtl")?this.getCellToLeft(Q):this.getCellToRight(Q);break;case k.LEFT:Q=this.gos.get("enableRtl")?this.getCellToRight(Q):this.getCellToLeft(Q);break;default:Q=null,V(8,{key:z});break}if(Q)Z=this.isCellGoodToFocusOn(Q);else Z=!0}return Q}isCellGoodToFocusOn(z){let J=z.column,Q,{pinnedRowModel:Z,rowModel:$}=this.beans;switch(z.rowPinned){case"top":Q=Z?.getPinnedTopRow(z.rowIndex);break;case"bottom":Q=Z?.getPinnedBottomRow(z.rowIndex);break;default:Q=$.getRow(z.rowIndex);break}if(!Q)return!1;return!this.isSuppressNavigable(J,Q)}getCellToLeft(z){if(!z)return null;let J=this.beans.visibleCols.getColBefore(z.column);if(!J)return null;return{rowIndex:z.rowIndex,column:J,rowPinned:z.rowPinned}}getCellToRight(z){if(!z)return null;let J=this.beans.visibleCols.getColAfter(z.column);if(!J)return null;return{rowIndex:z.rowIndex,column:J,rowPinned:z.rowPinned}}getCellBelow(z){if(!z)return null;let{beans:J}=this,Q=J.rowSpanSvc?.getCellEnd(z)??z,Z=M0(J,Q,!0);if(Z)return{rowIndex:Z.rowIndex,column:z.column,rowPinned:Z.rowPinned};return null}getCellAbove(z){if(!z)return null;let{beans:J}=this,Q=J.rowSpanSvc?.getCellStart(z)??z,Z=d0(J,{rowIndex:Q.rowIndex,rowPinned:Q.rowPinned},!0);if(Z)return{rowIndex:Z.rowIndex,column:z.column,rowPinned:Z.rowPinned};return null}getNextTabbedCell(z,J){if(J)return this.getNextTabbedCellBackwards(z);return this.getNextTabbedCellForwards(z)}getNextTabbedCellForwards(z){let{visibleCols:J,pagination:Q}=this.beans,Z=J.allCols,$=z.rowIndex,X=z.rowPinned,Y=J.getColAfter(z.column);if(!Y){Y=Z[0];let q=M0(this.beans,z,!0);if(d(q))return null;if(!q.rowPinned&&!(Q?.isRowInPage(q.rowIndex)??!0))return null;$=q?q.rowIndex:null,X=q?q.rowPinned:null}return{rowIndex:$,column:Y,rowPinned:X}}getNextTabbedCellBackwards(z){let{beans:J}=this,{visibleCols:Q,pagination:Z}=J,$=Q.allCols,X=z.rowIndex,Y=z.rowPinned,q=Q.getColBefore(z.column);if(!q){q=y($);let G=d0(J,{rowIndex:z.rowIndex,rowPinned:z.rowPinned},!0);if(d(G))return null;if(!G.rowPinned&&!(Z?.isRowInPage(G.rowIndex)??!0))return null;X=G?G.rowIndex:null,Y=G?G.rowPinned:null}return{rowIndex:X,column:q,rowPinned:Y}}isSuppressNavigable(z,J){let{suppressNavigable:Q}=z.colDef;if(typeof Q==="boolean")return Q;if(typeof Q==="function"){let Z=z.createColumnFunctionCallbackParams(J);return Q(Z)}return!1}};function zK(z){return z.focusSvc.getFocusedCell()}function JK(z){return z.focusSvc.clearFocusedCell()}function QK(z,J,Q,Z){z.focusSvc.setFocusedCell({rowIndex:J,column:Q,rowPinned:Z,forceBrowserFocus:!0})}function ZK(z,J){return z.navigation?.tabToNextCell(!1,J)??!1}function $K(z,J){return z.navigation?.tabToNextCell(!0,J)??!1}function XK(z,J,Q=!1){let Z=z.headerNavigation?.getHeaderPositionForColumn(J,Q);if(!Z)return;z.focusSvc.focusHeaderPosition({headerPosition:Z})}function zz(z){let J=z;return J?.getFrameworkComponentInstance!=null?J.getFrameworkComponentInstance():z}var YK=class extends S{constructor(){super(...arguments);this.beanName="editModelSvc",this.edits=new Map,this.cellValidations=new o$,this.rowValidations=new e$,this.suspendEdits=!1}suspend(z){this.suspendEdits=z}removeEdits({rowNode:z,column:J}){if(!this.hasEdits({rowNode:z})||!z)return;let Q=this.getEditRow(z);if(J)Q.delete(J);else Q.clear();if(Q.size===0)this.edits.delete(z)}getEditRow(z,J={}){if(this.suspendEdits)return;if(this.edits.size===0)return;let Q=z&&this.edits.get(z);if(Q)return Q;if(J.checkSiblings){let Z=z.pinnedSibling;if(Z)return this.getEditRow(Z)}return}getEditRowDataValue(z,{checkSiblings:J}={}){if(!z||this.edits.size===0)return;let Q=this.getEditRow(z),Z=z.pinnedSibling,$=J&&Z&&this.getEditRow(Z);if(!Q&&!$)return;let X={...z.data},Y=(q,G)=>q.forEach(({editorValue:U,pendingValue:_},H)=>{let W=U===void 0?_:U;if(W!==v0)G[H.getColId()]=W});if(Q)Y(Q,X);if($)Y($,X);return X}getEdit(z={},J){let{rowNode:Q,column:Z}=z,$=this.edits;if(this.suspendEdits||$.size===0||!Q||!Z)return;let X=$.get(Q)?.get(Z);if(X)return X;if(J?.checkSiblings){let Y=Q.pinnedSibling;if(Y)return $.get(Y)?.get(Z)}return}getEditMap(z=!0){if(this.suspendEdits||this.edits.size===0)return new Map;if(!z)return this.edits;let J=new Map;return this.edits.forEach((Q,Z)=>{let $=new Map;Q.forEach(({editorState:X,...Y},q)=>$.set(q,{...Y})),J.set(Z,$)}),J}setEditMap(z){this.edits.clear(),z.forEach((J,Q)=>{let Z=new Map;J.forEach(($,X)=>Z.set(X,{...$})),this.edits.set(Q,Z)})}setEdit(z,J){let Q=this.edits;if(Q.size===0||!Q.has(z.rowNode))Q.set(z.rowNode,new Map);let Z=this.getEdit(z),$={editorState:{isCancelAfterEnd:void 0,isCancelBeforeStart:void 0},...Z,...J};return this.getEditRow(z.rowNode).set(z.column,$),$}clearEditValue(z){let{rowNode:J,column:Q}=z;if(!J)return;let Z=(X)=>{X.editorValue=void 0,X.pendingValue=X.sourceValue,X.state="changed"};if(!Q){this.getEditRow(J)?.forEach(Z);return}let $=this.getEdit(z);if($)Z($)}getState(z){if(this.suspendEdits)return;return this.getEdit(z)?.state}getEditPositions(z){if(this.suspendEdits||(z??this.edits).size===0)return[];let J=[];return(z??this.edits).forEach((Q,Z)=>{for(let $ of Q.keys()){let{editorState:X,...Y}=Q.get($);J.push({rowNode:Z,column:$,...Y})}}),J}hasRowEdits(z,J){if(this.suspendEdits)return!1;if(this.edits.size===0)return!1;return!!this.getEditRow(z,J)}hasEdits(z={},J={}){if(this.suspendEdits)return!1;if(this.edits.size===0)return!1;let{rowNode:Q,column:Z}=z,{withOpenEditor:$}=J;if(Q){let X=this.getEditRow(Q,J);if(!X)return!1;if(Z){if($)return this.getEdit(z)?.state==="editing";return X.has(Z)}if(X.size!==0){if($)return Array.from(X.values()).some(({state:Y})=>Y==="editing");return!0}return!1}if($)return this.getEditPositions().some(({state:X})=>X==="editing");return this.edits.size>0}start(z){let J=this.getEditRow(z.rowNode)??new Map,{rowNode:Q,column:Z}=z;if(Z&&!J.has(Z))J.set(Z,{editorValue:void 0,pendingValue:v0,sourceValue:this.beans.valueSvc.getValue(Z,Q,"data"),state:"editing",editorState:{isCancelAfterEnd:void 0,isCancelBeforeStart:void 0}});this.edits.set(Q,J)}stop(z,J,Q){if(!this.hasEdits(z))return;if(J){let Z=this.getEditRow(z.rowNode)?.get(z.column);if(Z&&(Z.pendingValue===v0||Z.pendingValue===Z.sourceValue))this.removeEdits(z);else if(Z&&Q)Z.editorValue=void 0}else this.removeEdits(z)}clear(){for(let z of this.edits.values())z.clear();this.edits.clear()}getCellValidationModel(){return this.cellValidations}getRowValidationModel(){return this.rowValidations}setCellValidationModel(z){this.cellValidations=z}setRowValidationModel(z){this.rowValidations=z}destroy(){super.destroy(),this.clear()}},o$=class{constructor(){this.cellValidations=new Map}getCellValidation(z){let{rowNode:J,column:Q}=z||{};return this.cellValidations?.get(J)?.get(Q)}hasCellValidation(z){if(!z?.rowNode||!z.column)return this.cellValidations.size>0;return!!this.getCellValidation(z)}setCellValidation(z,J){let{rowNode:Q,column:Z}=z;if(!this.cellValidations.has(Q))this.cellValidations.set(Q,new Map);this.cellValidations.get(Q).set(Z,J)}clearCellValidation(z){let{rowNode:J,column:Q}=z;this.cellValidations.get(J)?.delete(Q)}setCellValidationMap(z){this.cellValidations=z}getCellValidationMap(){return this.cellValidations}clearCellValidationMap(){this.cellValidations.clear()}},e$=class{constructor(){this.rowValidations=new Map}getRowValidation(z){let{rowNode:J}=z||{};return this.rowValidations.get(J)}hasRowValidation(z){if(!z?.rowNode)return this.rowValidations.size>0;return!!this.getRowValidation(z)}setRowValidation({rowNode:z},J){this.rowValidations.set(z,J)}clearRowValidation({rowNode:z}){this.rowValidations.delete(z)}setRowValidationMap(z){this.rowValidations=z}getRowValidationMap(){return this.rowValidations}clearRowValidationMap(){this.rowValidations.clear()}};function i6(z,J={}){let{rowIndex:Q,rowId:Z,rowCtrl:$,rowPinned:X}=J;if($)return $;let{rowModel:Y,rowRenderer:q}=z,{rowNode:G}=J;if(!G){if(Z)G=b_(z,Z,X);else if(Q!=null)G=Y.getRow(Q)}return G?q.getRowCtrlByNode(G):void 0}function l(z,J={}){let{cellCtrl:Q,colId:Z,columnId:$,column:X}=J;if(Q)return Q;let Y=z.colModel.getCol(Z??$??lQ(X)),q=J.rowCtrl??i6(z,J),G=q?.getCellCtrl(Y)??void 0;if(G)return G;let U=J.rowNode??q?.rowNode;if(U)return z.rowRenderer.getCellCtrls([U],[Y])?.[0];return}function J8(z){let{editSvc:J}=z;if(J?.isBatchEditing())Kz(z,{persist:!0}),Bz(z);else J?.stopEditing(void 0,{source:"api"})}function qK(z,J,Q){let{gos:Z,popupSvc:$}=J;if(!Z.get("stopEditingWhenCellsLoseFocus"))return;let X=(Y)=>{let q=Y.relatedTarget;if(cQ(q)===null){J8(J);return}let G=Q.some((U)=>U.contains(q))&&Z.isElementInThisInstance(q);if(!G)G=!!$&&($.getActivePopups().some((U)=>U.contains(q))||$.isElementWithinCustomPopup(q));if(!G)J8(J)};for(let Y of Q)z.addManagedElementListeners(Y,{focusout:X})}function lQ(z){if(!z)return;if(typeof z==="string")return z;return z.getColId()}var v0=Symbol("unedited"),GK=(z,J={})=>{let Q=z.rowRenderer.getCellCtrls(J.rowNodes,J.columns),Z=Array(Q.length),$=0;for(let X=0,Y=Q.length;X0)J.set(Q,$)}return J}function z1(z,J,Q){let{key:Z,event:$,cellStartedEdit:X,silent:Y}=Q??{},{editModelSvc:q,gos:G,userCompFactory:U}=z,_=l(z,J),H=_?.comp?.getCellEditor(),W=JX(z,J,Z,X&&!Y),B=q?.getEdit(J),E=W.value??B?.sourceValue;if(H){q?.setEdit(J,{editorValue:g1(z,E,!0,J.column),state:"editing"}),H.refresh?.(W);return}let K=J.column.getColDef(),F=g9(U,K,W);if(!F)return;let{popupFromSelector:L,popupPositionFromSelector:D}=F,M=L??!!K.cellEditorPopup,f=D??K.cellEditorPopupPosition;if(QX(F.params,$),!_)return;let{rangeFeature:A,rowCtrl:R,comp:O,onEditorAttachedFuncs:v}=_;q?.setEdit(J,{editorValue:g1(z,E,!0,J.column),state:"editing",editorState:{cellStartedEditing:void 0,cellStoppedEditing:void 0}}),_.editCompDetails=F,v.push(()=>A?.unsetComp()),O?.setEditDetails(F,M,f,G.get("reactiveCustomComponents")),R?.refreshRow({suppressFlash:!0}),_.refreshNoteState(),HK(z,J,$,E,Y)}function HK(z,J,Q,Z,$){let{editSvc:X,editModelSvc:Y}=z,q=Y?.getEdit(J);if(!$&&q?.state==="editing"&&!q?.editorState?.cellStartedEditing)X?.dispatchCellEvent(J,Q,"cellEditingStarted",{value:Z}),Y?.setEdit(J,{editorState:{cellStartedEditing:!0}})}function zX(z,J,Q){let Z={editorValueExists:!1};if(U5(z)){if((J.getValidationErrors?.()?.length??0)>0)return Z}if(Q?.isCancelling)return Z;if(Q?.isStopping){let X=J?.isCancelAfterEnd?.();if(X)return{...Z,isCancelAfterEnd:X}}return{editorValue:J.getValue(),editorValueExists:!0}}function JX(z,J,Q,Z){let{valueSvc:$,gos:X,editSvc:Y}=z,q=z.gos.get("enableGroupEdit"),G=l(z,J),U=J.rowNode?.rowIndex??void 0,_=Y?.isBatchEditing(),H=z.colModel.getCol(J.column.getId()),{rowNode:W,column:B}=J,E=G.comp?.getCellEditor(),K=Y?.getCellDataValue(J),F=K===void 0?E?zX(z,E)?.editorValue:void 0:K,L=F===v0?$.getValueForDisplay({column:H,node:W,from:"edit"})?.value:F,D=q?F:L;if(B.isAllowFormula()&&z.formula?.isFormula(D))D=z.formula?.normaliseFormula(D,!0)??D;return C(X,{value:D,eventKey:Q??null,column:B,colDef:B.getColDef(),rowIndex:U,node:W,data:W.data,cellStartedEdit:!!Z,onKeyDown:G?.onKeyDown.bind(G),stopEditing:(M)=>{Y.stopEditing(J,{source:_?"ui":"api",suppressNavigateAfterEdit:M}),j2(z,J,{})},eGridCell:G?.eGui,parseValue:(M)=>$.parseValue(H,W,M,G?.value),formatValue:G?.formatValue.bind(G),validate:()=>{Y?.validateEdit()}})}function U2(z,J){let{editModelSvc:Q}=z;Q?.getEditMap().forEach((Z,$)=>{Z.forEach((X,Y)=>{if(!J&&(X.state==="editing"||X.pendingValue===v0))return;if(!S4(X)&&(X.state!=="editing"||J))Q?.removeEdits({rowNode:$,column:Y})})})}function WK(z,J){let Q=J.comp?.getCellEditor();if(!Q?.refresh)return;let{eventKey:Z,cellStartedEdit:$}=J.editCompDetails.params,{column:X}=J,Y=JX(z,J,Z,$),q=X.getColDef(),G=g9(z.userCompFactory,q,Y);Q.refresh(QX(G.params,Z))}function QX(z,J){if(J instanceof KeyboardEvent&&z.column.getColDef().cellEditor==="agNumberCellEditor")z.suppressPreventDefault=["-","+",".","e"].includes(J?.key??"")||z.suppressPreventDefault;else J?.preventDefault?.();return z}function Kz(z,J){for(let Q of z.editModelSvc?.getEditPositions()??[]){let Z=l(z,Q);if(!Z)continue;let $=Z.comp?.getCellEditor();if(!$)continue;let{editorValue:X,editorValueExists:Y,isCancelAfterEnd:q}=zX(z,$,J);if(q){let{cellStartedEditing:G,cellStoppedEditing:U}=z.editModelSvc?.getEdit(Q)?.editorState||{};z.editModelSvc?.setEdit(Q,{editorState:{isCancelAfterEnd:q,cellStartedEditing:G,cellStoppedEditing:U}})}k1(z,Q,X,void 0,!Y,J)}}function k1(z,J,Q,Z,$,X){let{editModelSvc:Y,valueSvc:q}=z;if(!Y)return;let{rowNode:G,column:U}=J;if(!(G&&U))return;let _=Y.getEdit(J);if(_?.sourceValue===void 0){let H=_?g1(z,_.editorValue,!1,U):v0,W={sourceValue:q.getValue(U,G,"data"),pendingValue:H};if(X?.persist)W.state="changed";_=Y.setEdit(J,W)}if(Y.setEdit(J,{editorValue:$?g1(z,_.sourceValue,!0,U):Q}),X?.persist)BK(z,J)}function g1(z,J,Q,Z){let{formula:$}=z;if(Z.isAllowFormula()&&$?.isFormula(J))return $?.normaliseFormula(J,Q)??J;return J}function BK(z,J){let{editModelSvc:Q}=z,Z=Q?.getEdit(J),X={pendingValue:g1(z,Z?.editorValue,!1,J.column)};if(!Z?.editorState?.cellStoppedEditing&&Z?.state!=="editing")X.state="changed";Q?.setEdit(J,X)}function Bz(z,J,Q={}){if(!J)J=z.editModelSvc?.getEditPositions();if(J)for(let Z of J)j2(z,Z,Q)}function j2(z,J,Q,Z=l(z,J)){let $=z.editModelSvc,X=$?.getEdit(J),Y;if(X&&X.state!=="editing"&&X.editorState?.cellStoppedEditing)Y=X.state;else Y="changed";if(!Z){if(X)$?.setEdit(J,{state:Y});return}let q=Z.comp,G=q?.getCellEditor();if(q&&!G){if(Z?.refreshCell(),X){$?.setEdit(J,{state:Y});let _=z.gos.get("enableGroupEdit")?Q8(X,Q?.cancel):{valueChanged:!1,newValue:void 0,oldValue:X.sourceValue};Z8(z,J,_,Q)}return}if(U5(z)){let _=X&&G?.getValidationErrors?.(),H=$?.getCellValidationModel();if(_?.length)H?.setCellValidation(J,{errorMessages:_});else H?.clearCellValidation(J)}if(X)$?.setEdit(J,{state:Y});q?.setEditDetails(),q?.refreshEditStyles(!1,!1),Z?.refreshCell({force:!0,suppressFlash:!0});let U=$?.getEdit(J);if(U&&U.state!=="editing"){let _=Q?.cancel,H=z.gos.get("enableGroupEdit")?Q8(U,_):EK(U,X,_);Z8(z,J,H,Q)}}function Q8(z,J){let{sourceValue:Q,pendingValue:Z}=z,$;if(!J&&Z!==v0)$=Z;return{valueChanged:!J&&S4(z),newValue:$,oldValue:Q,value:Q}}function EK(z,J,Q){if(Q||z.editorState.isCancelAfterEnd)return{valueChanged:!1,newValue:void 0,oldValue:z.sourceValue};let Z=z.editorValue;if(Z==null||Z===v0)Z=J?.pendingValue;if(Z===v0)Z=void 0;return{valueChanged:S4(z),newValue:Z,oldValue:z.sourceValue}}function Z8(z,J,Q,{silent:Z,event:$}={}){let{editSvc:X,editModelSvc:Y}=z,q=Y?.getEdit(J),{editorState:G}=q||{},{isCancelBeforeStart:U,cellStartedEditing:_,cellStoppedEditing:H}=G||{};if(!Z&&!U&&_&&!H)X?.dispatchCellEvent(J,$,"cellEditingStopped",Q),Y?.setEdit(J,{editorState:{cellStoppedEditing:!0}})}function KK(z){if(!z)return!1;for(let J=0,Q=z.length;J0,M=D?F.join(". "):"";if(HZ(L,D),D)Z.announceValue(`${U} ${F}`,"editorValidation");if(L instanceof HTMLInputElement)L.setCustomValidity(M);else L.classList.toggle("invalid",D)}if(F?.length>0)Q.setCellValidation({rowNode:E,column:K},{errorMessages:F});_.add(H.rowCtrl)}if(Kz(z,{persist:!1}),X?.setCellValidationModel(Q),q){let H=LK(z);X?.setRowValidationModel(H)}for(let H of _.values()){H.rowEditStyleFeature?.applyRowStyles();for(let W of H.getAllCellCtrls())W.tooltipFeature?.refreshTooltip(!0),W.editorTooltipFeature?.refreshTooltip(!0),W.editStyleFeature?.applyCellStyles?.()}}var LK=(z)=>{let J=new e$,Q=z.gos.get("getFullRowEditValidationErrors"),Z=z.editModelSvc?.getEditMap();if(!Z)return J;for(let $ of Z.keys()){let X=Z.get($);if(!X)continue;let Y=[],{rowIndex:q,rowPinned:G}=$;for(let _ of X.keys()){let H=X.get(_);if(!H)continue;let{editorValue:W,pendingValue:B,sourceValue:E}=H,K=W??(B===v0?void 0:B)??E;Y.push({column:_,colId:_.getColId(),rowIndex:q,rowPinned:G,oldValue:E,newValue:K})}let U=Q?.({editorsState:Y})??[];if(U.length>0)J.setRowValidation({rowNode:$},{errorMessages:U})}return J};function DK(z){Mz(z,!0);let J=z.editModelSvc?.getCellValidationModel().getCellValidationMap();if(!J)return null;let Q=[];return J.forEach((Z,$)=>{Z.forEach(({errorMessages:X},Y)=>{Q.push({column:Y,rowIndex:$.rowIndex,rowPinned:$.rowPinned,messages:X??null})})}),Q}function MJ(z){return!!(z.rowPinned&&z.pinnedSibling)}function z4(z,J,Q,Z){let $=J==="top";if(!Q)return z4(z,J,$?z.getPinnedTopRow(0):z.getPinnedBottomRow(0),Z);if(!Z){let G=$?z.getPinnedTopRowCount():z.getPinnedBottomRowCount();return z4(z,J,Q,$?z.getPinnedTopRow(G-1):z.getPinnedBottomRow(G-1))}let X=!1,Y=!1,q=[];return z.forEachPinnedRow(J,(G)=>{if(G===Q&&!X){X=!0,q.push(G);return}if(X&&G===Z){Y=!0,q.push(G);return}if(X&&!Y)q.push(G)}),q}function MK(z,J,Q,{rowNode:Z,column:$},X){return C(z.gos,{type:Q,node:Z,data:Z.data,value:X,column:$,colDef:$.getColDef(),rowPinned:Z.rowPinned,event:J,rowIndex:Z.rowIndex})}function kK(z,J=!1){if(z===k.DELETE)return!0;if(!J&&z===k.BACKSPACE)return i9();return!1}var fK=class extends S{constructor(z,J,Q,Z){super();this.cellCtrl=z,this.rowNode=Q,this.rowCtrl=Z,this.beans=J}init(){this.eGui=this.cellCtrl.eGui}onKeyDown(z){let J=z.key;if(J===k.ENTER&&y0(this.cellCtrl.column)&&this.beans.rowNumbersSvc?.handleKeyDownOnCell(this.cellCtrl.cellPosition,z))return;switch(J){case k.ENTER:this.onEnterKeyDown(z);break;case k.F2:this.onF2KeyDown(z);break;case k.ESCAPE:this.onEscapeKeyDown(z);break;case k.TAB:this.onTabKeyDown(z);break;case k.BACKSPACE:case k.DELETE:this.onBackspaceOrDeleteKeyDown(J,z);break;case k.DOWN:case k.UP:case k.RIGHT:case k.LEFT:this.onNavigationKeyDown(z,J);break}}onNavigationKeyDown(z,J){let{cellCtrl:Q,beans:Z}=this;if(Z.editSvc?.isEditing(Q,{withOpenEditor:!0}))return;if(z.shiftKey&&Q.isRangeSelectionEnabled())this.onShiftRangeSelect(z);else{let $=Q.getFocusedCellPosition();Z.navigation?.navigateToNextCell(z,J,$,!0)}z.preventDefault()}onShiftRangeSelect(z){let{rangeSvc:J,navigation:Q}=this.beans;if(!J)return;let Z=J.extendLatestRangeInDirection(z);if(!Z)return;if(z.key===k.LEFT||z.key===k.RIGHT)Q?.ensureColumnVisible(Z.column);else Q?.ensureRowVisible(Z.rowIndex)}onTabKeyDown(z){this.beans.navigation?.onTabKeyDown(this.cellCtrl,z)}onBackspaceOrDeleteKeyDown(z,J){let{cellCtrl:Q,beans:Z,rowNode:$}=this,{gos:X,rangeSvc:Y,eventSvc:q,editSvc:G}=Z;if(q.dispatchEvent({type:"keyShortcutChangedCellStart"}),kK(z,X.get("enableCellEditingOnBackspace"))&&!G?.isEditing(Q,{withOpenEditor:!0})){if(Y&&n0(X))Y.clearCellRangeCellValues({dispatchWrapperEvents:!0,wrapperEventSource:"deleteKey"});else if(Q.isCellEditable()){let U=Z.valueSvc.getDeleteValue(Q.column,$);$.setDataValue(Q.column,U,"cellClear")}}else if(!G?.isEditing(Q,{withOpenEditor:!0}))Z.editSvc?.startEditing(Q,{startedEdit:!0,event:J});q.dispatchEvent({type:"keyShortcutChangedCellEnd"})}onEnterKeyDown(z){let{cellCtrl:J,beans:Q}=this,{editSvc:Z,navigation:$}=Q,X=Z?.isEditing(J,{withOpenEditor:!0}),Y=J.rowNode,q=Z?.isRowEditing(Y,{withOpenEditor:!0}),G=(U)=>{if(Z?.startEditing(U,{startedEdit:!0,event:z,source:"edit"}))z.preventDefault()};if(X||q){if(this.isCtrlEnter(z)){Z?.applyBulkEdit(J,Q?.rangeSvc?.getCellRanges()||[]);return}if(Mz(Q),Z?.checkNavWithValidation(void 0,z)==="block-stop")return;if(Z?.isEditing(J,{withOpenEditor:!0}))Z?.stopEditing(J,{event:z,source:"edit"});else if(q&&!J.isCellEditable())Z?.stopEditing({rowNode:Y},{event:z,source:"edit"});else G(J)}else if(Q.gos.get("enterNavigatesVertically")){let U=z.shiftKey?k.UP:k.DOWN;$?.navigateToNextCell(null,U,J.cellPosition,!1)}else{if(Z?.hasValidationErrors())return;if(Z?.hasValidationErrors(J))Z.revertSingleCellEdit(J,!0);G(J)}}isCtrlEnter(z){return(z.ctrlKey||z.metaKey)&&z.key===k.ENTER}onF2KeyDown(z){let{cellCtrl:J,beans:{editSvc:Q,notesSvc:Z}}=this,$=Q?.isEditing();if(z.shiftKey&&Z?.hasDataSource()&&!$){let X=Z.getNoteAccess({rowNode:this.rowNode,column:J.column});if(X){if(!X.isSuppressed||X.canView){Z.showNote(X.params,!0),z.preventDefault();return}}}if($){if(Mz(this.beans),Q?.checkNavWithValidation(void 0,z)==="block-stop")return}Q?.startEditing(J,{startedEdit:!0,event:z})}onEscapeKeyDown(z){let{cellCtrl:J,beans:{editSvc:Q}}=this;if(Q?.checkNavWithValidation(J,z)==="block-stop")Q.revertSingleCellEdit(J);setTimeout(()=>{Q?.stopEditing(J,{event:z,cancel:!0})})}processCharacter(z){let Q=z.target!==this.eGui,{beans:{editSvc:Z},cellCtrl:$}=this;if(Q)return;if(Z?.isEditing($,{withOpenEditor:!0}))return;if(z.key===k.SPACE)this.onSpaceKeyDown(z);else if(Z?.isCellEditable($,"ui")){if(Z?.hasValidationErrors()&&!Z?.hasValidationErrors($))return;if(Z?.startEditing($,{startedEdit:!0,event:z,source:"api",editable:!0}),!$.editCompDetails?.params?.suppressPreventDefault)z.preventDefault()}}onSpaceKeyDown(z){let{gos:J,editSvc:Q}=this.beans,{rowNode:Z}=this.cellCtrl;if(!Q?.isEditing(this.cellCtrl,{withOpenEditor:!0})&&s4(J))this.beans.selectionSvc?.handleSelectionEvent(z,Z,"spaceKey");z.preventDefault()}},SK=class extends S{constructor(z,J,Q){super();this.cellCtrl=z,this.column=Q,this.beans=J}onMouseEvent(z,J){if(q4(J))return;switch(z){case"click":this.onCellClicked(J);break;case"pointerdown":case"mousedown":case"touchstart":this.onMouseDown(J);break;case"dblclick":this.onCellDoubleClicked(J);break;case"mouseout":this.onMouseOut(J);break;case"mouseover":this.onMouseOver(J);break}}onCellClicked(z){if(this.beans.touchSvc?.handleCellDoubleClick(this,z))return;let{eventSvc:J,rangeSvc:Q,editSvc:Z,editModelSvc:$,frameworkOverrides:X,gos:Y}=this.beans,q=z.ctrlKey||z.metaKey,{cellCtrl:G}=this,{column:U,cellPosition:_,rowNode:H}=G,W=S6(Y,U,H,z);if(Q&&q&&!W){if(Q.getCellRangeCount(_)>1)Q.intersectLastRange(!0)}let B=G.createEvent(z,"cellClicked");B.isEventHandlingSuppressed=W,J.dispatchEvent(B);let E=U.colDef;if(E.onCellClicked)window.setTimeout(()=>{X.wrapOutgoing(()=>{E.onCellClicked(B)})},0);if(W)return;if($?.getState(G)!=="editing"){let K=Z?.isEditing(),F=Z?.isRangeSelectionEnabledWhileEditing(),L=$?.getCellValidationModel().getCellValidationMap().size??0,D=$?.getRowValidationModel().getRowValidationMap().size??0;if(K&&(F||L>0||D>0))return;if(Z?.shouldStartEditing(G,z))Z?.startEditing(G,{event:z});else if(Z?.shouldStopEditing(G,z))if(this.beans.gos.get("editType")==="fullRow")Z?.stopEditing(G,{event:z,source:"edit"});else Z?.stopEditing(void 0,{event:z,source:"edit"})}}onCellDoubleClicked(z){let{column:J,beans:Q,cellCtrl:Z}=this,{eventSvc:$,frameworkOverrides:X,editSvc:Y,editModelSvc:q,gos:G}=Q,U=S6(G,Z.column,Z.rowNode,z),_=J.colDef,H=Z.createEvent(z,"cellDoubleClicked");if(H.isEventHandlingSuppressed=U,$.dispatchEvent(H),typeof _.onCellDoubleClicked==="function")window.setTimeout(()=>{X.wrapOutgoing(()=>{_.onCellDoubleClicked(H)})},0);if(U)return;if(Y?.shouldStartEditing(Z,z)&&q?.getState(Z)!=="editing"){let W=Y?.isEditing(),B=Y?.isRangeSelectionEnabledWhileEditing(),E=q?.getCellValidationModel().getCellValidationMap().size??0,K=q?.getRowValidationModel().getRowValidationMap().size??0;if(W&&(B||E>0||K>0))return;Y?.startEditing(Z,{event:z})}}onMouseDown(z){let{shiftKey:J}=z,Q=z.target,{cellCtrl:Z,beans:$}=this,{eventSvc:X,rangeSvc:Y,rowNumbersSvc:q,focusSvc:G,gos:U,editSvc:_}=$,{column:H,rowNode:W,cellPosition:B}=Z,E=S6(U,H,W,z),K=()=>{let M=Z.createEvent(z,"cellMouseDown");M.isEventHandlingSuppressed=E,X.dispatchEvent(M)};if(E){K();return}if(this.isRightClickInExistingRange(z))return;let F=Y&&!Y.isEmpty(),L=this.containsWidget(Q),D=y0(H);if(q&&D&&!q.handleMouseDownOnCell(B,z))return;if(!J||!F){let M=_?.isEditing(Z),A=U.get("enableCellTextSelection")&&z.defaultPrevented,R=(jz()||A)&&!M&&!_2(Q)&&!L;Z.focusCell(R,z)}if(J&&F&&!G.isCellFocused(B)){z.preventDefault();let M=G.getFocusedCell();if(M){let{column:f,rowIndex:A,rowPinned:R}=M,O=!!_?.isRangeSelectionEnabledWhileEditing?.();if(_?.isEditing(M)&&!O)_?.stopEditing(M);if(!O)G.setFocusedCell({column:f,rowIndex:A,rowPinned:R,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0,sourceEvent:z})}}if(L)return;Y?.handleCellMouseDown(z,B),K()}isRightClickInExistingRange(z){let{rangeSvc:J}=this.beans;if(J){let Q=J.isCellInAnyRange(this.cellCtrl.cellPosition),Z=jZ(this.beans,z);if(Q&&Z)return!0}return!1}containsWidget(z){return nz(z,"ag-selection-checkbox",3)||nz(z,"ag-drag-handle",3)}onMouseOut(z){if(this.mouseStayingInsideCell(z))return;let{eventSvc:J,colHover:Q}=this.beans;J.dispatchEvent(this.cellCtrl.createEvent(z,"cellMouseOut")),Q?.clearMouseOver()}onMouseOver(z){if(this.mouseStayingInsideCell(z))return;let{eventSvc:J,colHover:Q}=this.beans;J.dispatchEvent(this.cellCtrl.createEvent(z,"cellMouseOver")),Q?.setMouseOver([this.column])}mouseStayingInsideCell(z){if(!z.target||!z.relatedTarget)return!1;let J=this.cellCtrl.eGui,Q=J.contains(z.target),Z=J.contains(z.relatedTarget);return Q&&Z}},VK=class extends S{constructor(z,J){super();this.cellCtrl=z,this.beans=J,this.column=z.column,this.rowNode=z.rowNode;let Q=z.getCellSpan();if(Q){let Z=this.refreshSpanHeight.bind(this,Q);this.addManagedListeners(this.beans.eventSvc,{paginationChanged:Z,recalculateRowBounds:Z,pinnedHeightChanged:Z})}else this.setupColSpan(),this.setupRowSpan()}setupRowSpan(){this.rowSpan=this.column.getRowSpan(this.rowNode),this.addManagedListeners(this.beans.eventSvc,{newColumnsLoaded:()=>this.onNewColumnsLoaded()})}init(){this.onLeftChanged(),this.onWidthChanged();let z=this.cellCtrl.getCellSpan();if(z)this.refreshSpanHeight(z);else this._legacyApplyRowSpan()}refreshSpanHeight(z){let J=z.getCellHeight(),Q=this.cellCtrl.eGui;if(J!=null&&Q)Q.style.height=`${J}px`}onNewColumnsLoaded(){let z=this.column.getRowSpan(this.rowNode);if(this.rowSpan===z)return;this.rowSpan=z,this._legacyApplyRowSpan(!0)}onDisplayColumnsChanged(){let z=this.getColSpanningList();if(!Z0(this.colsSpanning,z))this.colsSpanning=z,this.onWidthChanged(),this.onLeftChanged()}setupColSpan(){if(this.column.colDef.colSpan==null)return;this.colsSpanning=this.getColSpanningList(),this.addManagedListeners(this.beans.eventSvc,{displayedColumnsChanged:this.onDisplayColumnsChanged.bind(this),displayedColumnsWidthChanged:this.onWidthChanged.bind(this)})}onWidthChanged(){let z=this.cellCtrl.eGui;if(!z)return;z.style.width=`${this.getCellWidth()}px`}getCellWidth(){if(!this.colsSpanning)return this.column.getActualWidth();return this.colsSpanning.reduce((z,J)=>z+J.getActualWidth(),0)}getColSpanningList(){let{column:z,rowNode:J}=this,Q=z.getColSpan(J),Z=[];if(Q===1)Z.push(z);else{let $=z,X=z.getPinned();for(let Y=0;$&&Ythis.removeFeatures()),this.onSuppressCellFocusChanged(this.beans.gos.get("suppressCellFocus")),this.setupFocus(),this.applyStaticCssClasses(),this.setWrapText(),this.onFirstRightPinnedChanged(),this.onLastLeftPinnedChanged(),this.onColumnHover(),this.setupControlComps(),this.setupAutoHeight(Z,Y),this.refreshFirstAndLastStyles(),this.checkFormulaError(),this.refreshAriaRowIndex(),this.refreshAriaColIndex(),this.positionFeature?.init(),this.customStyleFeature?.setComp(z),this.editStyleFeature?.setComp(z),this.tooltipFeature?.refreshTooltip(),this.keyboardListener?.init(),this.rangeFeature?.setComp(z),this.rowResizeFeature?.refreshRowResizer();let q=X?this.isCellEditable():void 0,G=!q&&this.hasEdit&&this.editSvc?.isEditing(this,{withOpenEditor:!0});if(q||G)this.editSvc?.startEditing(this,{startedEdit:!1,source:"api",silent:!0,continueEditing:!0,editable:q});else this.showValue(!1,!0);if(this.onCompAttachedFuncs.length){for(let U of this.onCompAttachedFuncs)U();this.onCompAttachedFuncs=[]}}checkFormulaError(){if(!this.beans.formula)return;this.eGui.classList.toggle("formula-error",this.hasFormulaError())}hasFormulaError(){let{formula:z}=this.beans;if(!z)return!1;return!!z.getFormulaError(this.column,this.rowNode)}hasCellValidationError(){let{editModelSvc:z}=this.beans;if(!z)return!1;return z.getCellValidationModel().hasCellValidation(this)}setupAutoHeight(z,J){this.isAutoHeight=this.beans.rowAutoHeight?.setupCellAutoHeight(this,z,J)??!1}getCellAriaRole(){return this.column.colDef.cellAriaRole??"gridcell"}isCellRenderer(){let z=this.column.colDef;return z.cellRenderer!=null||z.cellRendererSelector!=null}getValueToDisplay(){return this.valueFormatted??this.value}getDeferLoadingCellRenderer(){let{beans:z,column:J}=this,{userCompFactory:Q,ctrlsSvc:Z,eventSvc:$}=z,X=J.colDef,Y=this.createCellRendererParams();Y.deferRender=!0;let q=V7(Q,X,Y);if(Z.getGridBodyCtrl()?.scrollFeature?.isScrolling()){let G,U=new N((H)=>{G=H}),[_]=this.addManagedListeners($,{bodyScrollEnd:()=>{G(),_()}});return{loadingComp:q,onReady:U}}return{loadingComp:q,onReady:N.resolve()}}showValue(z,J){let{beans:Q,column:Z,rowNode:$,rangeFeature:X}=this,{userCompFactory:Y}=Q,q=this.getValueToDisplay(),G,U=$.stub&&$.groupData?.[Z.getId()]==null,_=Z.colDef;if(U||this.isCellRenderer()){let H=this.createCellRendererParams();if(!U||y0(Z))G=kz(Y,_,H);else G=V7(Y,_,H)}if(!G&&!U&&Q.findSvc?.isMatch($,Z)){let H=this.createCellRendererParams();G=kz(Y,{...Z.colDef,cellRenderer:"agFindCellRenderer"},H)}if(this.hasEdit&&this.editSvc.isBatchEditing()&&this.editSvc.isRowEditing($,{checkSiblings:!0})){let H=this.editSvc.prepDetailsDuringBatch(this,{compDetails:G,valueToDisplay:q});if(H){if(H.compDetails)G=H.compDetails;else if(H.valueToDisplay)q=H.valueToDisplay}}if(this.comp.setRenderDetails(G,q,z),this.customRowDragComp?.refreshVisibility(),!J&&X)X.scheduleRefreshRangeStyleAndHandle();this.rowResizeFeature?.refreshRowResizer()}setupControlComps(){let z=this.column.colDef;this.includeSelection=this.isIncludeControl(this.isCheckboxSelection(z),!0),this.includeRowDrag=this.isIncludeControl(z.rowDrag),this.includeDndSource=this.isIncludeControl(z.dndSource),this.comp.setIncludeSelection(this.includeSelection),this.comp.setIncludeDndSource(this.includeDndSource),this.comp.setIncludeRowDrag(this.includeRowDrag)}isForceWrapper(){return this.beans.gos.get("enableCellTextSelection")||this.column.isAutoHeight()}getCellValueClass(){let J=this.column.colDef.cellRenderer==="agCheckboxCellRenderer",Q="";if(J)Q=" ag-allow-overflow";return`ag-cell-value${Q}`}isIncludeControl(z,J=!1){return(this.rowNode.rowPinned==null||J&&MJ(this.rowNode))&&!!z}isCheckboxSelection(z){let{rowSelection:J,groupDisplayType:Q}=this.beans.gridOptions,Z=b1(J),$=i4(this.column);if(Q==="custom"&&Z!=="selectionColumn"&&$)return!1;return z.checkboxSelection||$&&typeof J==="object"&&Fz(J)}refreshShouldDestroy(){let z=this.column.colDef,J=this.includeSelection!=this.isIncludeControl(this.isCheckboxSelection(z),!0),Q=this.includeRowDrag!=this.isIncludeControl(z.rowDrag),Z=this.includeDndSource!=this.isIncludeControl(z.dndSource),$=this.isAutoHeight!=this.column.isAutoHeight();return J||Q||Z||$}onPopupEditorClosed(z){let{editSvc:J}=this.beans;if(!J?.isEditing(this,{withOpenEditor:!0}))return;let Q=z instanceof KeyboardEvent,Z=z instanceof MouseEvent,$=Q&&z.key===k.ESCAPE;if(J.stopEditing(this,{source:J.isBatchEditing()?"ui":"api",cancel:$,event:Q||Z?z:void 0}),$)this.focusCell(!0,z)}stopEditing(z=!1){let{editSvc:J}=this.beans;return J?.stopEditing(this,{cancel:z,source:J?.isBatchEditing()?"ui":"api"})??!1}createCellRendererParams(){let{value:z,valueFormatted:J,column:Q,rowNode:Z,comp:$,eGui:X,beans:{valueSvc:Y,gos:q,editSvc:G}}=this;return C(q,{value:z,valueFormatted:J,getValue:()=>Y.getValueForDisplay({column:Q,node:Z,from:"edit"}).value,setValue:(_)=>G?.setDataValue({rowNode:Z,column:Q},_)||Z.setDataValue(Q,_),formatValue:this.formatValue.bind(this),data:Z.data,node:Z,pinned:Q.getPinned(),colDef:Q.colDef,column:Q,refreshCell:this.refreshCell.bind(this),eGridCell:X,eParentOfValue:$.getParentOfValue(),registerRowDragger:(_,H,W,B)=>this.registerRowDragger(_,H,B),setTooltip:(_,H)=>{if(q.assertModuleRegistered("Tooltip",3),this.tooltipFeature)this.disableTooltipFeature();this.enableTooltipFeature(_,H),this.tooltipFeature?.refreshTooltip()}})}onCellChanged(z){if(z.column===this.column)this.refreshCell()}refreshOrDestroyCell(z){if(this.refreshShouldDestroy())this.rowCtrl?.recreateCell(this);else this.refreshCell(z);if(this.hasEdit&&this.editCompDetails){let{editSvc:J,comp:Q}=this;if(!Q?.getCellEditor()&&J.isEditing(this,{withOpenEditor:!0}))J.startEditing(this,{startedEdit:!1,source:"api",silent:!0})}}refreshCell(z){let{editStyleFeature:J,customStyleFeature:Q,rowCtrl:{rowEditStyleFeature:Z},beans:{cellFlashSvc:$,filterManager:X},column:Y,comp:q,suppressRefreshCell:G,tooltipFeature:U}=this;if(G)return;let{field:_,valueGetter:H,showRowGroup:W,enableCellChangeFlash:B}=Y.colDef,E=_==null&&H==null&&W==null,K=z?.newData??!1,F=E||z&&(z.force||K),L=!!q,D=this.updateAndFormatValue(L),M=F||D;if(!L)return;if(M){this.showValue(!!K,!1);let f=X?.isSuppressFlashingCellsBecauseFiltering();if(!z?.suppressFlash&&!f&&B)$?.flashCell(this);J?.applyCellStyles?.(),Q?.applyUserStyles(),Q?.applyClassesFromColDef(),Z?.applyRowStyles(),this.checkFormulaError()}U?.refreshTooltip(),this.refreshNoteState(),Q?.applyCellClassRules()}showNote(z=!1){this.notesFeature?.show({focusEditor:z})}refreshNoteState(){this.notesFeature?.refresh()}isNoteHoverSuppressed(){return!!this.editSvc?.isEditing(this)||this.hasFormulaError()||this.hasCellValidationError()}isCellEditable(){return this.column.isCellEditable(this.rowNode)}formatValue(z){return this.callValueFormatter(z)??z}callValueFormatter(z){return this.beans.valueSvc.formatValue(this.column,this.rowNode,z)}updateAndFormatValue(z){let J=this.value,Q=this.valueFormatted,{value:Z,valueFormatted:$}=this.beans.valueSvc.getValueForDisplay({column:this.column,node:this.rowNode,includeValueFormatted:!0,from:"edit"});if(this.value=Z,this.valueFormatted=$,z)return!this.valuesAreEqual(J,this.value)||this.valueFormatted!=Q;return!0}valuesAreEqual(z,J){let Q=this.column.colDef;return Q.equals?Q.equals(z,J):z===J}addDomData(z){let J=this.eGui;az(this.beans.gos,J,h6,this),z.addDestroyFunc(()=>az(this.beans.gos,J,h6,null))}createEvent(z,J){let{rowNode:Q,column:Z,value:$,beans:X}=this;return MK(X,z,J,{rowNode:Q,column:Z},$)}processCharacter(z){this.keyboardListener?.processCharacter(z)}onKeyDown(z){this.keyboardListener?.onKeyDown(z)}onMouseEvent(z,J){this.mouseListener?.onMouseEvent(z,J)}getColSpanningList(){return this.positionFeature?.getColSpanningList()??[]}onLeftChanged(){if(!this.comp)return;this.positionFeature?.onLeftChanged()}onDisplayedColumnsChanged(){if(!this.eGui)return;this.refreshAriaColIndex(),this.refreshFirstAndLastStyles()}refreshFirstAndLastStyles(){let{comp:z,column:J,beans:Q}=this;$$(z,J,Q.visibleCols)}refreshAriaColIndex(){let z=this.beans.visibleCols.getAriaColIndex(this.column);c8(this.eGui,z)}onWidthChanged(){return this.positionFeature?.onWidthChanged()}getRowPosition(){let{rowIndex:z,rowPinned:J}=this.cellPosition;return{rowIndex:z,rowPinned:J}}updateRangeBordersIfRangeCount(){if(!this.comp)return;this.rangeFeature?.updateRangeBordersIfRangeCount()}onCellSelectionChanged(){if(!this.comp)return;this.rangeFeature?.onCellSelectionChanged()}isRangeSelectionEnabled(){return this.rangeFeature!=null}focusCell(z=!1,J){let Q=this.editSvc?.allowedFocusTargetOnValidation(this);if(Q&&Q!==this)return;this.beans.focusSvc.setFocusedCell({...this.getFocusedCellPosition(),forceBrowserFocus:z,sourceEvent:J})}restoreFocus(z=!1){let{beans:{editSvc:J,focusSvc:Q},comp:Z}=this;if(!Z||J?.isEditing(this)||!this.isCellFocused()||!Q.shouldTakeFocus())return;let $=()=>{if(!this.isAlive())return;let X=Z.getFocusableElement();if(this.isCellFocused())X.focus({preventScroll:!0})};if(z){setTimeout($,0);return}$()}onRowIndexChanged(){this.createCellPosition(),this.refreshAriaRowIndex(),this.onCellFocused(),this.restoreFocus(),this.rangeFeature?.onCellSelectionChanged(),this.rowResizeFeature?.refreshRowResizer()}onSuppressCellFocusChanged(z){let J=this.eGui;if(!J)return;f4(J,"tabindex",z?void 0:-1)}onFirstRightPinnedChanged(){if(!this.comp)return;let z=this.column.isFirstRightPinned();this.comp.toggleCss(PK,z)}onLastLeftPinnedChanged(){if(!this.comp)return;let z=this.column.isLastLeftPinned();this.comp.toggleCss(TK,z)}checkCellFocused(){return this.beans.focusSvc.isCellFocused(this.cellPosition)}isCellFocused(){let z=this.checkCellFocused();return this.hasBeenFocused||(this.hasBeenFocused=z),z}setupFocus(){this.restoreFocus(!0),this.onCellFocused(this.focusEventWhileNotReady??void 0)}onCellFocused(z){let{beans:J}=this;if(g6(J))return;if(!this.comp){if(z)this.focusEventWhileNotReady=z;return}let Q=this.isCellFocused(),Z=J.editSvc?.isEditing(this)??!1;if(this.comp.toggleCss(OK,Q),Q&&(z?.forceBrowserFocus||!this.hasBrowserFocus()&&this.beans.focusSvc.shouldTakeFocus())){let $=this.comp.getFocusableElement();if(Z){let Y=V4($,null,!0);if(Y.length)$=Y[0]}let X=z?z.preventScrollOnBrowserFocus:!0;$.focus({preventScroll:X}),TG(J,$)}if(Q&&this.focusEventWhileNotReady)this.focusEventWhileNotReady=null;if(Q&&z)this.rowCtrl.announceDescription(this)}createCellPosition(){let{rowIndex:z,rowPinned:J}=this.rowNode;this.cellPosition={rowIndex:z,rowPinned:q0(J),column:this.column}}applyStaticCssClasses(){let{comp:z}=this;z.toggleCss(RK,!0),z.toggleCss(vK,!0);let J=this.column.isAutoHeight()==!0;z.toggleCss(AK,J),z.toggleCss(jK,!J)}onColumnHover(){this.beans.colHover?.onCellColumnHover(this.column,this.comp)}onColDefChanged(){if(!this.comp)return;if(this.column.isTooltipEnabled())this.disableTooltipFeature(),this.enableTooltipFeature();else this.disableTooltipFeature();if(this.setWrapText(),this.editSvc?.isEditing(this))this.editSvc?.handleColDefChanged(this);else this.refreshOrDestroyCell({force:!0,suppressFlash:!0})}setWrapText(){let z=this.column.colDef.wrapText==!0;this.comp.toggleCss(IK,z)}dispatchCellContextMenuEvent(z){let J=this.column.colDef,Q=this.createEvent(z,"cellContextMenu"),{beans:Z}=this;if(Z.eventSvc.dispatchEvent(Q),J.onCellContextMenu)window.setTimeout(()=>{Z.frameworkOverrides.wrapOutgoing(()=>{J.onCellContextMenu(Q)})},0)}getCellRenderer(){return this.comp?.getCellRenderer()??null}destroy(){this.onCompAttachedFuncs=[],this.onEditorAttachedFuncs=[];let{focusSvc:z,context:J}=this.beans;if(this.isCellFocused()&&this.hasBrowserFocus())z.attemptToRecoverFocus();super.destroy(),this.positionFeature=J.destroyBean(this.positionFeature)}hasBrowserFocus(){return this.eGui?.contains(n(this.beans))??!1}createSelectionCheckbox(){let z=this.beans.selectionSvc?.createCheckboxSelectionComponent();if(!z)return;return this.beans.context.createBean(z),z.init({rowNode:this.rowNode,column:this.column}),z}createDndSource(){let z=this.beans.registry.createDynamicBean("dndSourceComp",!1,this.rowNode,this.column,this.eGui);if(z)this.beans.context.createBean(z);return z}registerRowDragger(z,J,Q){if(this.customRowDragComp){this.customRowDragComp.setDragElement(z,J);return}let Z=this.createRowDragComp(z,J,Q);if(Z)this.customRowDragComp=Z,this.addDestroyFunc(()=>{this.beans.context.destroyBean(Z),this.customRowDragComp=null}),Z.refreshVisibility()}createRowDragComp(z,J,Q){let Z=this.beans.rowDragSvc?.createRowDragCompForCell(this.rowNode,this.column,()=>this.value,z,J,Q);if(!Z)return;return this.beans.context.createBean(Z),Z}cellEditorAttached(){for(let z of this.onEditorAttachedFuncs)z();this.onEditorAttachedFuncs=[]}setFocusedCellPosition(z){}getFocusedCellPosition(){return this.cellPosition}refreshAriaRowIndex(){if(!y0(this.column)||!this.eGui)return;let{ariaRowIndex:z}=this.rowCtrl;if(z!=null)O6(this.eGui,z)}getRootElement(){return this.eGui}};function ZX(z,J,Q,Z,$,X){if(Q==null&&J==null)return;let Y={},q={},G=(U,_)=>{for(let H of U.split(" ")){if(H.trim()=="")continue;_(H)}};if(Q){let U=Object.keys(Q);for(let _=0;_{if(B)Y[E]=!0;else q[E]=!0})}}if(J&&X)for(let U of Object.keys(J))G(U,(_)=>{if(!Y[_])q[_]=!0});if(X)Object.keys(q).forEach(X);Object.keys(Y).forEach($)}function $8(z){if(z.group)return z.level;let J=z.parent;return J?J.level+1:0}var yK=0,aQ=class extends S{constructor(z,J,Q,Z,$){super();if(this.rowNode=z,this.useAnimationFrameForCreate=Z,this.printLayout=$,this.guiListenerOwners=new WeakMap,this.focusEventWhileNotReady=null,this.allRowGuis=[],this.active=!0,this.centerCellCtrls={list:[],map:{}},this.leftCellCtrls={list:[],map:{}},this.rightCellCtrls={list:[],map:{}},this.slideInAnimation={left:!1,center:!1,right:!1,fullWidth:!1},this.fadeInAnimation={left:!1,center:!1,right:!1,fullWidth:!1},this.rowDragComps=[],this.lastMouseDownOnDragger=!1,this.emptyStyle={},this.updateColumnListsPending=!1,this.rowId=null,this.ariaRowIndex=null,this.businessKey=null,this.beans=J,this.gos=J.gos,this.paginationPage=J.pagination?.getCurrentPage()??0,this.suppressRowTransform=this.gos.get("suppressRowTransform"),this.instanceId=z.id+"-"+yK++,this.rowId=L0(z.id),this.initRowBusinessKey(),this.rowFocused=J.focusSvc.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned),this.rowLevel=$8(this.rowNode),this.setRowType(),this.setAnimateFlags(Q),this.rowStyles=this.processStylesFromGridOptions(),this.rowEditStyleFeature=J.editSvc?.createRowStyleFeature(this),this.fullWidthNotesFeature=this.isFullWidth()?J.notesSvc?.createFullWidthNotesFeature(this):void 0,this.addListeners(),!Z&&!this.isFullWidth())this.createAllCellCtrls()}initRowBusinessKey(){this.businessKeyForNodeFunc=this.gos.get("getBusinessKeyForNode"),this.updateRowBusinessKey()}updateRowBusinessKey(){if(typeof this.businessKeyForNodeFunc!=="function")return;let z=this.businessKeyForNodeFunc(this.rowNode);this.businessKey=L0(z)}updateGui(z,J){if(z==="left")this.leftGui=J;else if(z==="right")this.rightGui=J;else if(z==="fullWidth")this.fullWidthGui=J;else this.centerGui=J}setComp(z,J,Q,Z){let{context:$,rowRenderer:X}=this.beans;Z=m2(this,$,Z);let Y={rowComp:z,element:J,containerType:Q,compBean:Z};this.allRowGuis.push(Y),this.updateGui(Q,Y),this.initialiseRowComp(Y),this.fullWidthNotesFeature?.refresh();let q=this.rowNode,G=this.rowType==="FullWidthLoading"||q.stub,U=!q.data&&this.beans.rowModel.getType()==="infinite";if(!G&&!U&&!q.rowPinned)X.dispatchFirstDataRenderedEvent();this.setupFocus()}unsetComp(z){this.allRowGuis=this.allRowGuis.filter((J)=>J.containerType!==z),this.updateGui(z,void 0)}isCacheable(){return this.rowType==="FullWidthDetail"&&this.gos.get("keepDetailRows")}setCached(z){let J=z?"none":"";for(let Q of this.allRowGuis)Q.element.style.display=J}initialiseRowComp(z){let J=this.gos;if(this.onSuppressCellFocusChanged(this.beans.gos.get("suppressCellFocus")),this.listenOnDomOrder(z),this.onRowHeightChanged(z),this.updateRowIndexes(z),this.setFocusedClasses(z),this.setStylesFromGridOptions(!1,z),s4(J)&&this.rowNode.selectable)this.onRowSelected(z);this.updateColumnLists(!this.useAnimationFrameForCreate);let Q=z.rowComp,Z=this.getInitialRowClasses(z.containerType);for(let $ of Z)Q.toggleCss($,!0);if(this.executeSlideAndFadeAnimations(z),this.rowNode.group)j0(z.element,!!this.rowNode.expanded);if(this.setRowCompRowId(Q),this.setRowCompRowBusinessKey(Q),az(J,z.element,u6,this),z.compBean.addDestroyFunc(()=>az(J,z.element,u6,null)),this.useAnimationFrameForCreate)this.beans.animationFrameSvc.createTask(this.addHoverFunctionality.bind(this,z),this.rowNode.rowIndex,"p2",!1);else this.addHoverFunctionality(z);if(this.isFullWidth())this.setupFullWidth(z);if(J.get("rowDragEntireRow"))this.addRowDraggerToRow(z);if(this.useAnimationFrameForCreate)this.beans.animationFrameSvc.addDestroyTask(()=>{if(!this.isAlive())return;z.rowComp.toggleCss("ag-after-created",!0)});this.executeProcessRowPostCreateFunc()}setRowCompRowBusinessKey(z){if(this.businessKey==null)return;z.setRowBusinessKey(this.businessKey)}setRowCompRowId(z){let J=L0(this.rowNode.id);if(this.rowId=J,J==null)return;z.setRowId(J)}executeSlideAndFadeAnimations(z){let{containerType:J}=z;if(this.slideInAnimation[J])CQ(()=>{this.onTopChanged()}),this.slideInAnimation[J]=!1;if(this.fadeInAnimation[J])CQ(()=>{z.rowComp.toggleCss("ag-opacity-zero",!1)}),this.fadeInAnimation[J]=!1}addRowDraggerToRow(z){let J=this.beans.rowDragSvc?.createRowDragCompForRow(this.rowNode,z.element);if(!J)return;let Q=this.createBean(J,this.beans.context);this.rowDragComps.push(Q),z.compBean.addDestroyFunc(()=>{this.rowDragComps=this.rowDragComps.filter((Z)=>Z!==Q),this.rowEditStyleFeature=this.destroyBean(this.rowEditStyleFeature,this.beans.context),this.destroyBean(Q,this.beans.context)})}setupFullWidth(z){let J=this.getPinnedForContainer(z.containerType),Q=this.createFullWidthCompDetails(z.element,J);z.rowComp.showFullWidth(Q)}getFullWidthCellRenderers(){if(this.gos.get("embedFullWidthRows"))return this.allRowGuis.map((z)=>z?.rowComp?.getFullWidthCellRenderer());return[this.fullWidthGui?.rowComp?.getFullWidthCellRenderer()]}executeProcessRowPostCreateFunc(){let z=this.gos.getCallback("processRowPostCreate");if(!z||!this.areAllContainersReady())return;let J={eRow:this.centerGui.element,ePinnedLeftRow:this.leftGui?this.leftGui.element:void 0,ePinnedRightRow:this.rightGui?this.rightGui.element:void 0,node:this.rowNode,rowIndex:this.rowNode.rowIndex,addRenderedRowListener:this.addEventListener.bind(this)};z(J)}areAllContainersReady(){let{leftGui:z,centerGui:J,rightGui:Q,beans:{visibleCols:Z}}=this,$=!!z||!Z.isPinningLeft(),X=!!J,Y=!!Q||!Z.isPinningRight();return $&&X&&Y}isNodeFullWidthCell(){if(this.rowNode.detail)return!0;let z=this.beans.gos.getCallback("isFullWidthRow");return z?z({rowNode:this.rowNode}):!1}setRowType(){let{rowNode:z,gos:J,beans:{colModel:Q}}=this,Z=J.get("suppressServerSideFullWidthLoadingRow"),$=J.get("groupHideOpenParents"),X=z.stub&&!Z&&!$,Y=this.isNodeFullWidthCell(),q=J.get("masterDetail")&&z.detail,G=Q.pivotMode,U=F9(J,z,G),_=Z&&z.stub&&U&&!$;if(X)this.rowType="FullWidthLoading";else if(q)this.rowType="FullWidthDetail";else if(Y)this.rowType="FullWidth";else if(U&&!_)this.rowType="FullWidthGroup";else this.rowType="Normal"}updateColumnLists(z=!1,J=!1){if(this.isFullWidth())return;let{animationFrameSvc:Q}=this.beans;if(!Q?.active||z||this.printLayout){this.updateColumnListsImpl(J);return}if(this.updateColumnListsPending)return;Q.createTask(()=>{if(!this.active)return;this.updateColumnListsImpl(!0)},this.rowNode.rowIndex,"p1",!1),this.updateColumnListsPending=!0}getNewCellCtrl(z){if(this.beans.rowSpanSvc?.isCellSpanning(z,this.rowNode))return;return new E2(z,this.rowNode,this.beans,this)}isCorrectCtrlForSpan(z){return!this.beans.rowSpanSvc?.isCellSpanning(z.column,this.rowNode)}createCellCtrls(z,J,Q=null){let Z={list:[],map:{}},$=(U,_,H)=>{if(H!=null)Z.list.splice(H,0,_);else Z.list.push(_);Z.map[U]=_},X=[];for(let U of J){let _=U.getInstanceId(),H=z.map[_];if(H&&!this.isCorrectCtrlForSpan(H))H.destroy(),H=void 0;if(!H)H=this.getNewCellCtrl(U);if(!H)continue;$(_,H)}for(let U of z.list){let _=U.column.getInstanceId();if(Z.map[_]!=null)continue;if(!this.isCellEligibleToBeRemoved(U,Q))X.push([_,U]);else U.destroy()}if(X.length)for(let[U,_]of X){let H=Z.list.findIndex((B)=>B.column.getLeft()>_.column.getLeft()),W=H===-1?void 0:Math.max(H-1,0);$(U,_,W)}let{focusSvc:Y,visibleCols:q}=this.beans,G=Y.getFocusedCell();if(G&&G.column.getPinned()==Q){let U=G.column.getInstanceId();if(!Z.map[U]&&q.allCols.includes(G.column)){let H=this.createFocusedCellCtrl();if(H){let W=Z.list.findIndex((E)=>E.column.getLeft()>H.column.getLeft()),B=W===-1?void 0:Math.max(W-1,0);$(U,H,B)}}}return Z}createFocusedCellCtrl(){let{focusSvc:z,rowSpanSvc:J}=this.beans,Q=z.getFocusedCell();if(!Q)return;let Z=J?.getCellSpan(Q.column,this.rowNode);if(Z){if(Z.firstNode!==this.rowNode||!Z.doesSpanContain(Q))return}else if(!z.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned))return;return this.getNewCellCtrl(Q.column)}updateColumnListsImpl(z){this.updateColumnListsPending=!1,this.createAllCellCtrls(),this.setCellCtrls(z)}setCellCtrls(z){for(let J of this.allRowGuis){let Q=this.getCellCtrlsForContainer(J.containerType);J.rowComp.setCellCtrls(Q,z)}}getCellCtrlsForContainer(z){switch(z){case"left":return this.leftCellCtrls.list;case"right":return this.rightCellCtrls.list;case"fullWidth":return[];case"center":return this.centerCellCtrls.list}}createAllCellCtrls(){let z=this.beans.colViewport,J=this.beans.visibleCols;if(this.printLayout)this.centerCellCtrls=this.createCellCtrls(this.centerCellCtrls,J.allCols),this.leftCellCtrls={list:[],map:{}},this.rightCellCtrls={list:[],map:{}};else{let Q=z.getColsWithinViewport(this.rowNode);this.centerCellCtrls=this.createCellCtrls(this.centerCellCtrls,Q);let Z=J.getLeftColsForRow(this.rowNode);this.leftCellCtrls=this.createCellCtrls(this.leftCellCtrls,Z,"left");let $=J.getRightColsForRow(this.rowNode);this.rightCellCtrls=this.createCellCtrls(this.rightCellCtrls,$,"right")}}getInitialCellCtrls(z){if(this.useAnimationFrameForCreate||this.isFullWidth())return null;return this.getCellCtrlsForContainer(z)}isCellEligibleToBeRemoved(z,J){let{column:$}=z;if($.getPinned()!=J)return!0;if(!this.isCorrectCtrlForSpan(z))return!0;let{visibleCols:X,editSvc:Y}=this.beans,q=Y?.isEditing(z),G=z.isCellFocused();if(q||G)return X.allCols.indexOf($)>=0?!1:!0;return!0}getDomOrder(){return this.gos.get("ensureDomOrder")||A0(this.gos,"print")}listenOnDomOrder(z){let J=()=>{z.rowComp.setDomOrder(this.getDomOrder())};z.compBean.addManagedPropertyListeners(["domLayout","ensureDomOrder"],J)}setAnimateFlags(z){if(this.rowNode.sticky||!z)return;let J=P(this.rowNode.oldRowTop),{visibleCols:Q}=this.beans,Z=Q.isPinningLeft(),$=Q.isPinningRight();if(J){let{slideInAnimation:X}=this;if(this.isFullWidth()&&!this.gos.get("embedFullWidthRows")){X.fullWidth=!0;return}X.center=!0,X.left=Z,X.right=$}else{let{fadeInAnimation:X}=this;if(this.isFullWidth()&&!this.gos.get("embedFullWidthRows")){X.fullWidth=!0;return}X.center=!0,X.left=Z,X.right=$}}isFullWidth(){return this.rowType!=="Normal"}refreshFullWidth(){let z=(Y,q)=>{if(!Y)return!0;return Y.rowComp.refreshFullWidth(()=>{return this.createFullWidthCompDetails(Y.element,q).params})},J=z(this.fullWidthGui,null),Q=z(this.centerGui,null),Z=z(this.leftGui,"left"),$=z(this.rightGui,"right"),X=J&&Q&&Z&&$;return this.fullWidthNotesFeature?.refresh(),X}getNotesFeature(){return this.fullWidthNotesFeature}addListeners(){let{beans:z,gos:J,rowNode:Q}=this,{expansionSvc:Z,eventSvc:$,context:X,rowSpanSvc:Y}=z;if(this.addManagedListeners(this.rowNode,{heightChanged:()=>this.onRowHeightChanged(),rowSelected:()=>this.onRowSelected(),rowIndexChanged:this.onRowIndexChanged.bind(this),topChanged:this.onTopChanged.bind(this),...Z?.getRowExpandedListeners(this)??{}}),Q.detail)this.addManagedListeners(Q.parent,{dataChanged:this.onRowNodeDataChanged.bind(this)});if(this.addManagedListeners(Q,{dataChanged:this.onRowNodeDataChanged.bind(this),cellChanged:this.postProcessCss.bind(this),rowHighlightChanged:this.onRowNodeHighlightChanged.bind(this),draggingChanged:this.postProcessRowDragging.bind(this),uiLevelChanged:this.onUiLevelChanged.bind(this),rowPinned:this.onRowPinned.bind(this)}),this.addManagedListeners($,{paginationPixelOffsetChanged:this.onPaginationPixelOffsetChanged.bind(this),heightScaleChanged:this.onTopChanged.bind(this),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),virtualColumnsChanged:this.onVirtualColumnsChanged.bind(this),cellFocused:this.onCellFocusChanged.bind(this),cellFocusCleared:this.onCellFocusChanged.bind(this),paginationChanged:this.onPaginationChanged.bind(this),modelUpdated:this.refreshFirstAndLastRowStyles.bind(this),columnMoved:()=>this.updateColumnLists()}),Y?.active)this.addManagedListeners(Y,{spannedCellsUpdated:({pinned:q})=>{if(q&&!Q.rowPinned)return;this.updateColumnLists()}});this.addDestroyFunc(()=>{this.rowDragComps=this.destroyBeans(this.rowDragComps,X),this.tooltipFeature=this.destroyBean(this.tooltipFeature,X),this.rowEditStyleFeature=this.destroyBean(this.rowEditStyleFeature,X),this.fullWidthNotesFeature?.destroy()}),this.addManagedPropertyListeners(["rowStyle","getRowStyle","rowClass","getRowClass","rowClassRules"],this.postProcessCss.bind(this)),this.addManagedPropertyListener("rowDragEntireRow",()=>{if(J.get("rowDragEntireRow")){for(let G of this.allRowGuis)this.addRowDraggerToRow(G);return}this.rowDragComps=this.destroyBeans(this.rowDragComps,X)}),this.addListenersForCellComps()}addListenersForCellComps(){this.addManagedListeners(this.rowNode,{rowIndexChanged:()=>{for(let z of this.getAllCellCtrls())z.onRowIndexChanged()},cellChanged:(z)=>{for(let J of this.getAllCellCtrls())J.onCellChanged(z)}})}onRowPinned(){for(let z of this.allRowGuis)z.rowComp.toggleCss("ag-row-pinned-source",!!this.rowNode.pinnedSibling)}onRowNodeDataChanged(z){this.refreshRow({suppressFlash:!z.update,newData:!z.update})}refreshRow(z){if(this.isFullWidth()!==!!this.isNodeFullWidthCell()){this.beans.rowRenderer.redrawRow(this.rowNode);return}if(this.isFullWidth()){if(!this.refreshFullWidth())this.beans.rowRenderer.redrawRow(this.rowNode);return}for(let Q of this.getAllCellCtrls())Q.refreshCell(z);for(let Q of this.allRowGuis)this.setRowCompRowId(Q.rowComp),this.updateRowBusinessKey(),this.setRowCompRowBusinessKey(Q.rowComp);this.onRowSelected(),this.postProcessCss()}postProcessCss(){this.setStylesFromGridOptions(!0),this.postProcessClassesFromGridOptions(),this.postProcessRowClassRules(),this.rowEditStyleFeature?.applyRowStyles(),this.postProcessRowDragging()}onRowNodeHighlightChanged(){let z=this.beans.rowDropHighlightSvc,J=z?.row===this.rowNode?z.position:"none",Q=J==="above",Z=J==="inside",$=J==="below",X=J!=="none",Y=Q||$,q=this.rowNode.uiLevel,G=Y&&q>0,U=G?q.toString():"0";for(let _ of this.allRowGuis){let H=_.rowComp;if(H.toggleCss("ag-row-highlight-above",Q),H.toggleCss("ag-row-highlight-inside",Z),H.toggleCss("ag-row-highlight-below",$),H.toggleCss("ag-row-highlight-indent",G),X)_.element.style.setProperty("--ag-row-highlight-level",U);else _.element.style.removeProperty("--ag-row-highlight-level")}}postProcessRowDragging(){let z=this.rowNode.dragging;for(let J of this.allRowGuis)J.rowComp.toggleCss("ag-row-dragging",z)}onDisplayedColumnsChanged(){this.updateColumnLists(!0),this.beans.rowAutoHeight?.requestCheckAutoHeight()}onVirtualColumnsChanged(){this.updateColumnLists(!1,!0)}getRowPosition(){return{rowPinned:q0(this.rowNode.rowPinned),rowIndex:this.rowNode.rowIndex}}onKeyboardNavigate(z){let J=this.findFullWidthInfoForEvent(z);if(!J)return;let{rowGui:Q,column:Z}=J;if(Q.element!==z.target)return;let Y=this.rowNode,{focusSvc:q,navigation:G}=this.beans,U=q.getFocusedCell(),_={rowIndex:Y.rowIndex,rowPinned:Y.rowPinned,column:U?.column??Z};G?.navigateToNextCell(z,z.key,_,!0),z.preventDefault()}onTabKeyDown(z){if(z.defaultPrevented||q4(z))return;let J=this.allRowGuis.find((q)=>q.element.contains(z.target)),Q=J?J.element:null,Z=Q===z.target,$=n(this.beans),X=!1;if(Q&&$)X=Q.contains($)&&$.classList.contains("ag-cell");let Y=null;if(!Z&&!X)Y=O0(this.beans,Q,!1,z.shiftKey);if(this.isFullWidth()&&Z||!Y)this.beans.navigation?.onTabKeyDown(this,z)}getFullWidthElement(){if(this.fullWidthGui)return this.fullWidthGui.element;return null}getRowYPosition(){let z=this.allRowGuis.find((J)=>B0(J.element))?.element;if(z)return z.getBoundingClientRect().top;return 0}onSuppressCellFocusChanged(z){let J=this.isFullWidth()&&z?void 0:this.gos.get("tabIndex");for(let Q of this.allRowGuis)f4(Q.element,"tabindex",J)}setupFocus(){if(!this.isFullWidth())return;this.restoreFullWidthFocus(!0),this.onFullWidthRowFocused(this.focusEventWhileNotReady??void 0)}restoreFullWidthFocus(z=!1){let{focusSvc:J,editSvc:Q}=this.beans;if(Q?.isEditing(this))return;if(!J.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned)||!J.shouldTakeFocus())return;let Z=this.getFullWidthRowGuiForFocus();if(!Z)return;let $=()=>{if(!this.isAlive())return;if(J.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned))Z.element.focus({preventScroll:!0})};if(z){setTimeout($,0);return}$()}getFullWidthRowGuiForFocus(z){if(this.fullWidthGui)return this.fullWidthGui;let J=this.beans.focusSvc.getFocusedCell(),Q=this.beans.colModel.getCol(z?.column??J?.column);if(!Q)return;let Z=Q?.pinned;if(Z==="right")return this.rightGui;if(Z==="left")return this.leftGui;return this.centerGui}setFullWidthRowFocusedClass(z,J){this.forEachGui(void 0,(Q)=>{Q.element.classList.toggle("ag-full-width-focus",J&&Q===z)})}onFullWidthRowFocused(z){let{focusSvc:J}=this.beans;if(!(this.isFullWidth()&&J.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned))){this.setFullWidthRowFocusedClass(void 0,!1);return}let Z=this.getFullWidthRowGuiForFocus(z);if(!Z){if(z)this.focusEventWhileNotReady=z;this.setFullWidthRowFocusedClass(void 0,!1);return}if(this.setFullWidthRowFocusedClass(Z,!0),this.focusEventWhileNotReady=null,z?.forceBrowserFocus)Z.element.focus({preventScroll:!0})}recreateCell(z){this.centerCellCtrls=this.removeCellCtrl(this.centerCellCtrls,z),this.leftCellCtrls=this.removeCellCtrl(this.leftCellCtrls,z),this.rightCellCtrls=this.removeCellCtrl(this.rightCellCtrls,z),z.destroy(),this.updateColumnLists()}removeCellCtrl(z,J){let Q={list:[],map:{}};for(let Z of z.list){if(Z===J)continue;Q.list.push(Z),Q.map[Z.column.getInstanceId()]=Z}return Q}onMouseEvent(z,J){switch(z){case"dblclick":this.onRowDblClick(J);break;case"click":this.onRowClick(J);break;case"pointerdown":case"touchstart":case"mousedown":this.onRowMouseDown(J);break}}createRowEvent(z,J){let{rowNode:Q}=this;return C(this.gos,{type:z,node:Q,data:Q.data,rowIndex:Q.rowIndex,rowPinned:Q.rowPinned,event:J})}createRowEventWithSource(z,J){let Q=this.createRowEvent(z,J);return Q.source=this,Q}onRowDblClick(z){if(q4(z))return;let J=this.createRowEventWithSource("rowDoubleClicked",z);J.isEventHandlingSuppressed=this.isSuppressMouseEvent(z),this.beans.eventSvc.dispatchEvent(J)}findFullWidthInfoForEvent(z){if(!z)return;let J=this.findFullWidthRowGui(z.target),Q=this.getColumnForFullWidth(J),Z=this.getPinnedForFullWidth(J);if(!J||!Q)return;return{rowGui:J,column:Q,pinned:Z}}findFullWidthRowGui(z){return this.allRowGuis.find((J)=>J.element.contains(z))}getColumnForFullWidth(z){let{visibleCols:J}=this.beans;switch(z?.containerType){case"center":return J.centerCols[0];case"left":return J.leftCols[0];case"right":return J.rightCols[0];default:return J.allCols[0]}}getPinnedForFullWidth(z){let J=z?.containerType;return J==="left"||J==="right"?J:void 0}addManagedGuiElementListeners(z,J){let{compBean:Q,element:Z}=z;if(this.guiListenerOwners.get(Z)===Q)return;this.guiListenerOwners.set(Z,Q),Q.addManagedElementListeners(Z,J)}onRowMouseDown(z){if(this.lastMouseDownOnDragger=nz(z.target,"ag-row-drag",3),!this.isFullWidth()||this.isSuppressMouseEvent(z))return;let{rangeSvc:J,focusSvc:Q}=this.beans;J?.removeAllCellRanges();let Z=this.findFullWidthInfoForEvent(z);if(!Z)return;let{rowGui:$,column:X}=Z,Y=$.element,q=z.target,G=this.rowNode,U=z.defaultPrevented||jz();if(Y&&Y.contains(q)&&_2(q))U=!1;Q.setFocusedCell({rowIndex:G.rowIndex,column:X,rowPinned:G.rowPinned,forceBrowserFocus:U})}isSuppressMouseEvent(z){let{gos:J,rowNode:Q}=this;if(this.isFullWidth()){let $=this.findFullWidthRowGui(z.target);return fH(J,$?.rowComp.getFullWidthCellRendererParams(),Q,z)}let Z=c2(J,z.target);return Z!=null&&S6(J,Z.column,Q,z)}onRowClick(z){if(q4(z)||this.lastMouseDownOnDragger)return;let Q=this.isSuppressMouseEvent(z),{eventSvc:Z,selectionSvc:$}=this.beans,X=this.createRowEventWithSource("rowClicked",z);if(X.isEventHandlingSuppressed=Q,Z.dispatchEvent(X),Q)return;$?.handleSelectionEvent(z,this.rowNode,"rowClicked")}setupDetailRowAutoHeight(z){if(this.rowType!=="FullWidthDetail")return;this.beans.masterDetailSvc?.setupDetailRowAutoHeight(this,z)}createFullWidthCompDetails(z,J){let{gos:Q,rowNode:Z}=this,$=C(Q,{fullWidth:!0,data:Z.data,node:Z,value:Z.key,valueFormatted:Z.key,eGridCell:z,eParentOfValue:z,pinned:J,addRenderedRowListener:this.addEventListener.bind(this),registerRowDragger:(Y,q,G,U)=>this.addFullWidthRowDragging(Y,q,G,U),setTooltip:(Y,q)=>{Q.assertModuleRegistered("Tooltip",3),this.setupFullWidthRowTooltip(Y,q)}}),X=this.beans.userCompFactory;switch(this.rowType){case"FullWidthDetail":return U_(X,$);case"FullWidthGroup":{let{value:Y,valueFormatted:q}=this.beans.valueSvc.getValueForDisplay({node:this.rowNode,includeValueFormatted:!0,from:"edit"});return $.value=Y,$.valueFormatted=q,G_(X,$)}case"FullWidthLoading":return q_(X,$);default:return Y_(X,$)}}setupFullWidthRowTooltip(z,J){if(!this.fullWidthGui)return;this.tooltipFeature=this.beans.tooltipSvc?.setupFullWidthRowTooltip(this.tooltipFeature,this,z,J)}addFullWidthRowDragging(z,J,Q="",Z){let{rowDragSvc:$,context:X}=this.beans;if(!$||!this.isFullWidth())return;let Y=$.createRowDragComp(()=>Q,this.rowNode,void 0,z,J,Z);this.createBean(Y,X),this.addDestroyFunc(()=>{this.destroyBean(Y,X)})}onUiLevelChanged(){let z=$8(this.rowNode);if(this.rowLevel!=z){let J="ag-row-level-"+z,Q="ag-row-level-"+this.rowLevel;for(let Z of this.allRowGuis)Z.rowComp.toggleCss(J,!0),Z.rowComp.toggleCss(Q,!1)}this.rowLevel=z}isFirstRowOnPage(){return this.rowNode.rowIndex===this.beans.pageBounds.getFirstRow()}isLastRowOnPage(){return this.rowNode.rowIndex===this.beans.pageBounds.getLastRow()}refreshFirstAndLastRowStyles(){let z=this.isFirstRowOnPage(),J=this.isLastRowOnPage();if(this.firstRowOnPage!==z){this.firstRowOnPage=z;for(let Q of this.allRowGuis)Q.rowComp.toggleCss("ag-row-first",z)}if(this.lastRowOnPage!==J){this.lastRowOnPage=J;for(let Q of this.allRowGuis)Q.rowComp.toggleCss("ag-row-last",J)}}getAllCellCtrls(){if(this.leftCellCtrls.list.length===0&&this.rightCellCtrls.list.length===0)return this.centerCellCtrls.list;return[...this.centerCellCtrls.list,...this.leftCellCtrls.list,...this.rightCellCtrls.list]}postProcessClassesFromGridOptions(){let z=[];if(this.beans.rowStyleSvc?.processClassesFromGridOptions(z,this.rowNode),!z.length)return;for(let J of z)for(let Q of this.allRowGuis)Q.rowComp.toggleCss(J,!0)}postProcessRowClassRules(){this.beans.rowStyleSvc?.processRowClassRules(this.rowNode,(z)=>{for(let J of this.allRowGuis)J.rowComp.toggleCss(z,!0)},(z)=>{for(let J of this.allRowGuis)J.rowComp.toggleCss(z,!1)})}setStylesFromGridOptions(z,J){if(z)this.rowStyles=this.processStylesFromGridOptions();this.forEachGui(J,(Q)=>Q.rowComp.setUserStyles(this.rowStyles))}getPinnedForContainer(z){if(z==="left"||z==="right")return z;return null}getInitialRowClasses(z){let J=this.getPinnedForContainer(z),Q=this.isFullWidth(),{rowNode:Z,beans:$}=this,X=[];if(X.push("ag-row"),X.push(this.rowFocused?"ag-row-focus":"ag-row-no-focus"),this.fadeInAnimation[z])X.push("ag-opacity-zero");if(X.push(Z.rowIndex%2===0?"ag-row-even":"ag-row-odd"),Z.isRowPinned()){if(X.push("ag-row-pinned"),$.pinnedRowModel?.isManual())X.push("ag-row-pinned-manual")}if(!Z.isRowPinned()&&Z.pinnedSibling)X.push("ag-row-pinned-source");if(Z.isSelected())X.push("ag-row-selected");if(Z.footer)X.push("ag-row-footer");if(X.push("ag-row-level-"+this.rowLevel),Z.stub)X.push("ag-row-loading");if(Q)X.push("ag-full-width-row");if($.expansionSvc?.addExpandedCss(X,Z),Z.dragging)X.push("ag-row-dragging");let{rowStyleSvc:Y}=$;if(Y)Y.processClassesFromGridOptions(X,Z),Y.preProcessRowClassRules(X,Z);if(X.push(this.printLayout?"ag-row-position-relative":"ag-row-position-absolute"),this.isFirstRowOnPage())X.push("ag-row-first");if(this.isLastRowOnPage())X.push("ag-row-last");if(Q){if(J==="left")X.push("ag-cell-last-left-pinned");if(J==="right")X.push("ag-cell-first-right-pinned")}return X}processStylesFromGridOptions(){return this.beans.rowStyleSvc?.processStylesFromGridOptions(this.rowNode)??this.emptyStyle}onRowSelected(z){this.beans.selectionSvc?.onRowCtrlSelected(this,(J)=>{if(J===this.centerGui||J===this.fullWidthGui)this.announceDescription()},z)}announceDescription(z){this.beans.selectionSvc?.announceAriaRowSelection(this.rowNode),this.announceNoteDescription(z)}announceNoteDescription(z){let{notesSvc:J,ariaAnnounce:Q}=this.beans;if(!J||!Q||!z&&!this.isFullWidth())return;let Z={rowNode:this.rowNode},$=z?{column:z.column}:{location:"fullWidthRow"},X={...Z,...$};if(J.getNoteAccess(X)?.canView){let q=this.getLocaleTextFunc();Q.announceValue(q("ariaHasNote","This cell has a note."),"note")}}addHoverFunctionality(z){if(!this.active)return;let{element:J,compBean:Q}=z,{rowNode:Z,beans:$,gos:X}=this;Q.addManagedListeners(J,{pointerenter:(Y)=>{if(Y.pointerType==="mouse")Z.dispatchRowEvent("mouseEnter")},pointerleave:(Y)=>{if(Y.pointerType==="mouse")Z.dispatchRowEvent("mouseLeave")}}),Q.addManagedListeners(Z,{mouseEnter:()=>{if(!$.dragSvc?.dragging&&!X.get("suppressRowHoverHighlight"))J.classList.add("ag-row-hover"),Z.setHovered(!0)},mouseLeave:()=>{this.resetHoveredStatus(J)}})}resetHoveredStatus(z){let J=z?[z]:this.allRowGuis.map((Q)=>Q.element);for(let Q of J)Q.classList.remove("ag-row-hover");this.rowNode.setHovered(!1)}roundRowTopToBounds(z){let J=this.beans.ctrlsSvc.getScrollFeature().getApproximateVScollPosition(),Q=this.applyPaginationOffset(J.top,!0)-100,Z=this.applyPaginationOffset(J.bottom,!0)+100;return Math.min(Math.max(Q,z),Z)}forEachGui(z,J){if(z)J(z);else for(let Q of this.allRowGuis)J(Q)}isRowRendered(){return this.allRowGuis.length>0}onRowHeightChanged(z){if(this.rowNode.rowHeight==null)return;let J=this.rowNode.rowHeight,Q=this.beans.environment.getDefaultRowHeight(),$=B9(this.gos)?f2(this.beans,this.rowNode).height:void 0,X=$?`${Math.min(Q,$)-2}px`:void 0;this.forEachGui(z,(Y)=>{if(Y.element.style.height=`${J}px`,X)Y.element.style.setProperty("--ag-line-height",X)})}destroyFirstPass(z=!1){this.active=!1;let{rowNode:J}=this;if(!z&&T1(this.gos)&&!J.sticky)if(J.rowTop!=null){let $=this.roundRowTopToBounds(J.rowTop);this.setRowTop($)}else for(let $ of this.allRowGuis)$.rowComp.toggleCss("ag-opacity-zero",!0);if(this.fullWidthGui?.element.contains(n(this.beans)))this.beans.focusSvc.attemptToRecoverFocus();J.setHovered(!1);let Q=this.createRowEvent("virtualRowRemoved");this.dispatchLocalEvent(Q),this.beans.eventSvc.dispatchEvent(Q),super.destroy()}destroySecondPass(){this.allRowGuis.length=0;let z=(J)=>{for(let Q of J.list)Q.destroy();return{list:[],map:{}}};this.centerCellCtrls=z(this.centerCellCtrls),this.leftCellCtrls=z(this.leftCellCtrls),this.rightCellCtrls=z(this.rightCellCtrls)}setFocusedClasses(z){this.forEachGui(z,(J)=>{J.rowComp.toggleCss("ag-row-focus",this.rowFocused),J.rowComp.toggleCss("ag-row-no-focus",!this.rowFocused)})}onCellFocusChanged(){let{focusSvc:z}=this.beans,J=z.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned);if(J!==this.rowFocused)this.rowFocused=J,this.setFocusedClasses()}onPaginationChanged(){let z=this.beans.pagination?.getCurrentPage()??0;if(this.paginationPage!==z)this.paginationPage=z,this.onTopChanged();this.refreshFirstAndLastRowStyles()}onTopChanged(){this.setRowTop(this.rowNode.rowTop)}onPaginationPixelOffsetChanged(){this.onTopChanged()}applyPaginationOffset(z,J=!1){if(this.rowNode.isRowPinned()||this.rowNode.sticky)return z;let Q=this.beans.pageBounds.getPixelOffset();return z+Q*(J?1:-1)}setRowTop(z){if(this.printLayout)return;if(P(z)){let J=this.applyPaginationOffset(z),$=`${this.rowNode.isRowPinned()||this.rowNode.sticky?J:this.beans.rowContainerHeight.getRealPixelPosition(J)}px`;this.setRowTopStyle($)}}getInitialRowTop(z){return this.suppressRowTransform?this.getInitialRowTopShared(z):void 0}getInitialTransform(z){return this.suppressRowTransform?void 0:`translateY(${this.getInitialRowTopShared(z)})`}getInitialRowTopShared(z){if(this.printLayout)return"";let J=this.rowNode,Q;if(J.sticky)Q=J.stickyRowTop;else{let Z=this.slideInAnimation[z]?this.roundRowTopToBounds(J.oldRowTop):J.rowTop,$=this.applyPaginationOffset(Z);Q=J.isRowPinned()?$:this.beans.rowContainerHeight.getRealPixelPosition($)}return Q+"px"}setRowTopStyle(z){for(let J of this.allRowGuis)if(this.suppressRowTransform)J.rowComp.setTop(z);else J.rowComp.setTransform(`translateY(${z})`)}getCellCtrl(z,J=!1){let Q=null;for(let Z of this.getAllCellCtrls())if(Z.column==z)Q=Z;if(Q!=null||J)return Q;for(let Z of this.getAllCellCtrls())if(Z?.getColSpanningList().indexOf(z)>=0)Q=Z;return Q}onRowIndexChanged(){if(this.rowNode.rowIndex!=null)this.onCellFocusChanged(),this.updateRowIndexes(),this.postProcessCss()}updateRowIndexes(z){let J=this.rowNode.getRowIndexString();if(J===null)return;let Q=(this.beans.ctrlsSvc.getHeaderRowContainerCtrl()?.getRowCount()??0)+(this.beans.filterManager?.getHeaderRowCount()??0),Z=this.rowNode.rowIndex%2===0,$=this.ariaRowIndex=Q+this.rowNode.rowIndex+1;this.forEachGui(z,(X)=>{X.rowComp.setRowIndex(J),X.rowComp.toggleCss("ag-row-even",Z),X.rowComp.toggleCss("ag-row-odd",!Z),O6(X.element,$)})}},bK=class extends S{constructor(){super();this.beanName="navigation",this.onPageDown=L7(this.onPageDown,100),this.onPageUp=L7(this.onPageUp,100)}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>{this.gridBodyCon=z.gridBodyCtrl})}handlePageScrollingKey(z,J=!1){let{key:Q,altKey:Z}=z,$=z.ctrlKey||z.metaKey,X=!!this.beans.rangeSvc&&z.shiftKey,Y=z5(this.gos,z),q=!1;switch(Q){case k.PAGE_HOME:case k.PAGE_END:if(!$&&!Z)this.onHomeOrEndKey(Q),q=!0;break;case k.LEFT:case k.RIGHT:case k.UP:case k.DOWN:if(!Y)return!1;if($&&!Z&&!X)this.onCtrlUpDownLeftRight(Q,Y),q=!0;break;case k.PAGE_DOWN:case k.PAGE_UP:if(!$&&!Z)q=this.handlePageUpDown(Q,Y,J);break}if(q)z.preventDefault();return q}handlePageUpDown(z,J,Q){if(Q)J=this.beans.focusSvc.getFocusedCell();if(!J)return!1;if(z===k.PAGE_UP)this.onPageUp(J);else this.onPageDown(J);return!0}navigateTo({scrollIndex:z,scrollType:J,scrollColumn:Q,focusIndex:Z,focusColumn:$,isAsync:X,rowPinned:Y}){let{scrollFeature:q}=this.gridBodyCon;if(P(Q)&&!Q.isPinned())q.ensureColumnVisible(Q);if(P(z))q.ensureIndexVisible(z,J);if(!X)q.ensureIndexVisible(Z);let{focusSvc:G}=this.beans;G.setFocusedCell({rowIndex:Z,column:$,rowPinned:Y,forceBrowserFocus:!0}),this.setRangeToCellIfSupported({rowIndex:Z,rowPinned:Y,column:$})}onPageDown(z){let J=this.beans,Q=AQ(J),Z=this.getViewportHeight(),{pageBounds:$,rowModel:X,rowAutoHeight:Y}=J,q=$.getPixelOffset(),G=Q.top+Z,U=X.getRowIndexAtPixel(G+q);if(Y?.active)this.navigateToNextPageWithAutoHeight(z,U);else this.navigateToNextPage(z,U)}onPageUp(z){let J=this.beans,Q=AQ(J),{pageBounds:Z,rowModel:$,rowAutoHeight:X}=J,Y=Z.getPixelOffset(),q=Q.top,G=$.getRowIndexAtPixel(q+Y);if(X?.active)this.navigateToNextPageWithAutoHeight(z,G,!0);else this.navigateToNextPage(z,G,!0)}navigateToNextPage(z,J,Q=!1){let{pageBounds:Z,rowModel:$}=this.beans,X=this.getViewportHeight(),Y=Z.getFirstRow(),q=Z.getLastRow(),G=Z.getPixelOffset(),U=$.getRow(z.rowIndex),_=Q?U?.rowHeight-X-G:X-G,H=U?.rowTop+_,W=$.getRowIndexAtPixel(H+G);if(W===z.rowIndex){let D=Q?-1:1;J=W=z.rowIndex+D}let B;if(Q){if(B="bottom",Wq)W=q;if(J>q)J=q}if(this.isRowTallerThanView($.getRow(W)))J=W,B="top";let E={rowIndex:W,column:z.column,rowPinned:null},K=this.getNormalisedPosition(E),{rowIndex:F,column:L}=K??E;this.navigateTo({scrollIndex:J,scrollType:B,scrollColumn:null,focusIndex:F,focusColumn:L})}navigateToNextPageWithAutoHeight(z,J,Q=!1){this.navigateTo({scrollIndex:J,scrollType:Q?"bottom":"top",scrollColumn:null,focusIndex:J,focusColumn:z.column}),setTimeout(()=>{let Z=this.getNextFocusIndexForAutoHeight(z,Q);this.navigateTo({scrollIndex:J,scrollType:Q?"bottom":"top",scrollColumn:null,focusIndex:Z,focusColumn:z.column,isAsync:!0})},50)}getNextFocusIndexForAutoHeight(z,J=!1){let Q=J?-1:1,Z=this.getViewportHeight(),{pageBounds:$,rowModel:X}=this.beans,Y=$.getLastRow(),q=0,G=z.rowIndex;while(G>=0&&G<=Y){let U=X.getRow(G);if(U){let _=U.rowHeight??0;if(q+_>Z)break;q+=_}G+=Q}return Math.max(0,Math.min(G,Y))}getViewportHeight(){let z=this.beans,J=AQ(z),Q=this.beans.scrollVisibleSvc.getScrollbarWidth(),Z=J.bottom-J.top;if(z.ctrlsSvc.get("center").isHorizontalScrollShowing())Z-=Q;return Z}isRowTallerThanView(z){if(!z)return!1;let J=z.rowHeight;if(typeof J!=="number")return!1;return J>this.getViewportHeight()}onCtrlUpDownLeftRight(z,J){let Q=this.beans.cellNavigation.getNextCellToFocus(z,J,!0);if(!Q)return;let Z=this.getNormalisedPosition(Q),{rowIndex:$,rowPinned:X,column:Y}=Z??Q,q=Y;this.navigateTo({scrollIndex:$,scrollType:null,scrollColumn:q,focusIndex:$,focusColumn:q,rowPinned:X})}onHomeOrEndKey(z){let J=z===k.PAGE_HOME,{visibleCols:Q,pageBounds:Z,rowModel:$}=this.beans,X=Q.allCols,Y=J?Z.getFirstRow():Z.getLastRow(),q=$.getRow(Y);if(!q)return;let G=(J?X:[...X].reverse()).find((U)=>!U.isSuppressNavigable(q)&&!y0(U));if(!G)return;this.navigateTo({scrollIndex:Y,scrollType:null,scrollColumn:G,focusIndex:Y,focusColumn:G})}onTabKeyDown(z,J){let Q=J.shiftKey,Z=this.tabToNextCellCommon(z,Q,J),$=this.beans,{ctrlsSvc:X,pageBounds:Y,focusSvc:q,gos:G}=$;if(Z!==!1){if(Z)J.preventDefault();else if(Z===null)X.get("gridCtrl").allowFocusForNextCoreContainer(Q);return}if(Q){let{rowIndex:U,rowPinned:_}=z.getRowPosition();if(_?U===0:U===Y.getFirstRow())if(G.get("headerHeight")===0||D4($))_4($,!0,!0);else J.preventDefault(),q.focusPreviousFromFirstCell(J)}else{if(z instanceof E2)z.focusCell(!0);if(q.focusOverlay(!1)||_4($,Q))J.preventDefault()}}tabToNextCell(z,J){let Q=this.beans,{focusSvc:Z,rowRenderer:$}=Q,X=Z.getFocusedCell();if(!X)return!1;let Y=X4(Q,X);if(!Y){if(Y=$.getRowByPosition(X),!Y?.isFullWidth())return!1}return!!this.tabToNextCellCommon(Y,z,J,"api")}tabToNextCellCommon(z,J,Q,Z="ui"){let{editSvc:$,focusSvc:X}=this.beans,Y,q=z instanceof E2?z:z.getAllCellCtrls()?.[0];if($?.isEditing())Y=$?.moveToNextCell(q,J,Q,Z);else Y=this.moveToNextCellNotEditing(z,J,Q);if(Y===null)return Y;return Y||!!X.focusedHeader}moveToNextCellNotEditing(z,J,Q){let Z=this.beans.visibleCols.allCols,$;if(z instanceof aQ){if($={...z.getRowPosition(),column:J?Z[0]:y(Z)},this.gos.get("embedFullWidthRows")&&Q){let Y=z.findFullWidthInfoForEvent(Q);if(Y)$.column=Y.column}}else $=z.getFocusedCellPosition();let X=this.findNextCellToFocusOn($,{backwards:J,startEditing:!1});if(X===!1)return null;if(X instanceof E2)X.focusCell(!0);else if(X)return this.tryToFocusFullWidthRow(X,J);return P(X)}findNextCellToFocusOn(z,{backwards:J,startEditing:Q,skipToNextEditableCell:Z}){let $=z,X=this.beans,{cellNavigation:Y,gos:q,focusSvc:G,rowRenderer:U}=X;while(!0){if(z!==$)z=$;if(!J)$=this.getLastCellOfColSpan($);$=Y.getNextTabbedCell($,J);let _=q.getCallback("tabToNextCell");if(P(_)){let E=_({backwards:J,editing:Q,previousCellPosition:z,nextCellPosition:$?$:null});if(E===!0)$=z;else if(E===!1)return!1;else $={rowIndex:E.rowIndex,column:E.column,rowPinned:E.rowPinned}}if(!$)return null;if($.rowIndex<0){let B=Q4(X);return G.focusHeaderPosition({headerPosition:{headerRowIndex:B+$.rowIndex,column:$.column},fromCell:!0}),null}let H=q.get("editType")==="fullRow";if(Q&&(!H||Z)){if(!this.isCellEditable($))continue}this.ensureCellVisible($);let W=X4(X,$);if(!W){let B=U.getRowByPosition($);if(!B||!B.isFullWidth()||Q)continue;return{...B.getRowPosition(),column:$?.column}}if(Y.isSuppressNavigable(W.column,W.rowNode))continue;return W.setFocusedCellPosition($),this.setRangeToCellIfSupported($),W}}isCellEditable(z){let J=this.lookupRowNodeForCell(z);if(J)return z.column.isCellEditable(J);return!1}lookupRowNodeForCell({rowIndex:z,rowPinned:J}){let{pinnedRowModel:Q,rowModel:Z}=this.beans;if(J==="top")return Q?.getPinnedTopRow(z);if(J==="bottom")return Q?.getPinnedBottomRow(z);return Z.getRow(z)}navigateToNextCell(z,J,Q,Z){let $=Q,X=!1,Y=this.beans,{cellNavigation:q,focusSvc:G,gos:U}=Y;while($&&($===Q||!this.isValidNavigateCell($))){if(U.get("enableRtl")){if(J===k.LEFT)$=this.getLastCellOfColSpan($)}else if(J===k.RIGHT)$=this.getLastCellOfColSpan($);$=q.getNextCellToFocus(J,$),X=d($)}if(X&&z?.key===k.UP)$={rowIndex:-1,rowPinned:null,column:Q.column};if(Z){let H=U.getCallback("navigateToNextCell");if(P(H)){let B=H({key:J,previousCellPosition:Q,nextCellPosition:$?$:null,event:z});if(P(B))$={rowPinned:B.rowPinned,rowIndex:B.rowIndex,column:B.column};else $=null}}if(!$)return;if($.rowIndex<0){let H=Q4(Y);G.focusHeaderPosition({headerPosition:{headerRowIndex:H+$.rowIndex,column:$.column??Q.column},event:z||void 0,fromCell:!0});return}let _=this.getNormalisedPosition($);if(_)this.focusPosition(_);else this.tryToFocusFullWidthRow($)}getNormalisedPosition(z){if(!!this.beans.spannedRowRenderer?.getCellByPosition(z))return z;this.ensureCellVisible(z);let Q=X4(this.beans,z);if(!Q)return null;return z=Q.getFocusedCellPosition(),this.ensureCellVisible(z),z}tryToFocusFullWidthRow(z,J){let{visibleCols:Q,rowRenderer:Z,focusSvc:$,eventSvc:X}=this.beans,Y=Q.allCols;if(!Z.getRowByPosition(z)?.isFullWidth())return!1;let G=$.getFocusedCell(),U={rowIndex:z.rowIndex,rowPinned:z.rowPinned,column:z.column||(J?y(Y):Y[0])};this.focusPosition(U);let _=J==null?G!=null&&W0(U,G):J;return X.dispatchEvent({type:"fullWidthRowFocused",rowIndex:U.rowIndex,rowPinned:U.rowPinned,column:U.column,isFullWidthCell:!0,fromBelow:_}),!0}focusPosition(z){let{focusSvc:J}=this.beans;J.setFocusedCell({rowIndex:z.rowIndex,column:z.column,rowPinned:z.rowPinned,forceBrowserFocus:!0}),this.setRangeToCellIfSupported(z)}setRangeToCellIfSupported(z){if(y0(z.column))return;this.beans.rangeSvc?.setRangeToCell(z)}isValidNavigateCell(z){return!!S0(this.beans,z)}getLastCellOfColSpan(z){let J=X4(this.beans,z);if(!J)return z;let Q=J.getColSpanningList();if(Q.length===1)return z;return{rowIndex:z.rowIndex,column:y(Q),rowPinned:z.rowPinned}}ensureCellVisible(z){let J=p1(this.gos),Q=this.beans.rowModel.getRow(z.rowIndex),Z=J&&Q?.sticky,{scrollFeature:$}=this.gridBodyCon;if(!Z&&d(z.rowPinned))$.ensureIndexVisible(z.rowIndex);if(!z.column.isPinned())$.ensureColumnVisible(z.column)}ensureColumnVisible(z){let J=this.gridBodyCon.scrollFeature;if(!z.isPinned())J.ensureColumnVisible(z)}ensureRowVisible(z){this.gridBodyCon.scrollFeature.ensureIndexVisible(z)}};function AQ(z){return z.ctrlsSvc.getScrollFeature().getVScrollPosition()}var Y1={moduleName:"KeyboardNavigation",version:i,beans:[bK,e3,_3],apiFunctions:{getFocusedCell:zK,clearFocusedCell:JK,setFocusedCell:QK,setFocusedHeader:XK,tabToNextCell:ZK,tabToPreviousCell:$K}},xK=class extends S{constructor(){super(...arguments);this.beanName="pageBoundsListener"}postConstruct(){this.addManagedEventListeners({modelUpdated:this.onModelUpdated.bind(this),recalculateRowBounds:this.calculatePages.bind(this)}),this.onModelUpdated()}onModelUpdated(z){this.calculatePages(),this.eventSvc.dispatchEvent({type:"paginationChanged",animate:z?.animate??!1,newData:z?.newData??!1,newPage:z?.newPage??!1,newPageSize:z?.newPageSize??!1,keepRenderedRows:z?.keepRenderedRows??!1})}calculatePages(){let{pageBounds:z,pagination:J,rowModel:Q}=this.beans;if(J)J.calculatePages();else z.calculateBounds(0,Q.getRowCount()-1)}},wK=class extends S{constructor(){super(...arguments);this.beanName="pageBounds",this.pixelOffset=0}getFirstRow(){return this.topRowBounds?.rowIndex??-1}getLastRow(){return this.bottomRowBounds?.rowIndex??-1}getCurrentPageHeight(){let{topRowBounds:z,bottomRowBounds:J}=this;if(!z||!J)return 0;return Math.max(J.rowTop+J.rowHeight-z.rowTop,0)}getCurrentPagePixelRange(){let{topRowBounds:z,bottomRowBounds:J}=this,Q=z?.rowTop??0,Z=J?J.rowTop+J.rowHeight:0;return{pageFirstPixel:Q,pageLastPixel:Z}}calculateBounds(z,J){let{rowModel:Q}=this.beans,Z=Q.getRowBounds(z);if(Z)Z.rowIndex=z;this.topRowBounds=Z;let $=Q.getRowBounds(J);if($)$.rowIndex=J;this.bottomRowBounds=$,this.calculatePixelOffset()}getPixelOffset(){return this.pixelOffset}calculatePixelOffset(){let z=this.topRowBounds?.rowTop??0;if(this.pixelOffset===z)return;this.pixelOffset=z,this.eventSvc.dispatchEvent({type:"paginationPixelOffsetChanged"})}},NK=".ag-pinned-left-floating-bottom,.ag-pinned-left-floating-top,.ag-pinned-right-floating-bottom,.ag-pinned-right-floating-top{min-width:0;overflow:hidden;position:relative}.ag-pinned-left-sticky-top,.ag-pinned-right-sticky-top{height:100%;overflow:hidden;position:relative}.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{height:100%;overflow:hidden;width:100%}.ag-pinned-left-header,.ag-pinned-right-header{display:inline-block;height:100%;overflow:hidden;position:relative}.ag-body-horizontal-scroll:not(.ag-scrollbar-invisible){.ag-horizontal-left-spacer:not(.ag-scroller-corner){border-right:var(--ag-pinned-column-border)}.ag-horizontal-right-spacer:not(.ag-scroller-corner){border-left:var(--ag-pinned-column-border)}}.ag-pinned-right-header{border-left:var(--ag-pinned-column-border)}.ag-pinned-left-header{border-right:var(--ag-pinned-column-border)}.ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left,.ag-cell-range-single-cell,.ag-cell-focus:not(.ag-cell-range-selected):focus-within){border-left:var(--ag-pinned-column-border)}.ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right,.ag-cell-range-single-cell,.ag-cell-focus:not(.ag-cell-range-selected):focus-within){border-right:var(--ag-pinned-column-border)}.ag-pinned-left-header .ag-header-cell-resize:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}.ag-pinned-right-header .ag-header-cell-resize:after{left:50%}.ag-pinned-left-header .ag-header-cell-resize{right:-3px}.ag-pinned-right-header .ag-header-cell-resize{left:-3px}",gK=class extends S{constructor(z,J){super();this.isLeft=z,this.elements=J,this.getWidth=z?()=>this.beans.pinnedCols.leftWidth:()=>this.beans.pinnedCols.rightWidth}postConstruct(){this.addManagedEventListeners({[`${this.isLeft?"left":"right"}PinnedWidthChanged`]:this.onPinnedWidthChanged.bind(this)})}onPinnedWidthChanged(){let z=this.getWidth(),J=z>0;for(let Q of this.elements)if(Q)w(Q,J),N4(Q,z)}},A6=50,hK=class extends S{constructor(){super(...arguments);this.beanName="pinnedCols"}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(J)=>{this.gridBodyCtrl=J.gridBodyCtrl});let z=this.checkContainerWidths.bind(this);this.addManagedEventListeners({displayedColumnsChanged:z,displayedColumnsWidthChanged:z}),this.addManagedPropertyListener("domLayout",z)}checkContainerWidths(){let{gos:z,visibleCols:J,eventSvc:Q}=this.beans,Z=A0(z,"print"),$=Z?0:J.getColsLeftWidth(),X=Z?0:J.getDisplayedColumnsRightWidth();if($!=this.leftWidth)this.leftWidth=$,Q.dispatchEvent({type:"leftPinnedWidthChanged"});if(X!=this.rightWidth)this.rightWidth=X,Q.dispatchEvent({type:"rightPinnedWidthChanged"})}keepPinnedColumnsNarrowerThanViewport(){let z=this.gridBodyCtrl.eBodyViewport,J=lz(z);if(J<=A6)return;let Q=this.getPinnedColumnsOverflowingViewport(J-A6),Z=this.gos.getCallback("processUnpinnedColumns"),{columns:$,hasLockedPinned:X}=Q,Y=$;if(!Y.length&&!X)return;if(Z)Y=Z({columns:Y,viewportWidth:J});if(!Y?.length)return;Y=Y.filter((q)=>!y0(q)),this.setColsPinned(Y,null,"viewportSizeFeature")}createPinnedWidthFeature(z,...J){return new gK(z,J)}setColsPinned(z,J,Q){let{colModel:Z,colAnimation:$,visibleCols:X,gos:Y}=this.beans;if(!Z.cols)return;if(!z?.length)return;if(A0(Y,"print")){V(37);return}$?.start();let q;if(J===!0||J==="left")q="left";else if(J==="right")q="right";else q=null;let G=[];for(let U of z){if(!U)continue;let _=Z.getCol(U);if(!_)continue;if(_.getPinned()!==q)this.setColPinned(_,q),G.push(_)}if(G.length)X.refresh(Q),T$(this.eventSvc,G,Q);$?.finish()}initCol(z){let{pinned:J,initialPinned:Q}=z.colDef;if(J!==void 0)this.setColPinned(z,J);else this.setColPinned(z,Q)}setColPinned(z,J){if(J===!0||J==="left")z.pinned="left";else if(J==="right")z.pinned="right";else z.pinned=null;z.dispatchStateUpdatedEvent("pinned")}setupHeaderPinnedWidth(z){let{scrollVisibleSvc:J}=this.beans;if(z.pinned==null)return;let Q=z.pinned==="left",Z=z.pinned==="right";z.hidden=!0;let $=()=>{let X=Q?this.leftWidth:this.rightWidth;if(X==null)return;let Y=X==0,q=z.hidden!==Y,G=this.gos.get("enableRtl"),U=J.getScrollbarWidth(),H=J.verticalScrollShowing&&(G&&Q||!G&&Z)?X+U:X;if(z.comp.setPinnedContainerWidth(`${H}px`),z.comp.setDisplayed(!Y),q)z.hidden=Y,z.refresh()};z.addManagedEventListeners({leftPinnedWidthChanged:$,rightPinnedWidthChanged:$,scrollVisibilityChanged:$,scrollbarWidthChanged:$})}getHeaderResizeDiff(z,J){if(J.getPinned()){let{leftWidth:Z,rightWidth:$}=this,X=lz(this.beans.ctrlsSvc.getGridBodyCtrl().eBodyViewport)-A6;if(Z+$+z>X)if(X>Z+$)z=X-Z-$;else return 0}return z}getPinnedColumnsOverflowingViewport(z){let J=this.rightWidth??0,Q=this.leftWidth??0,Z=J+Q,$=!1;if(Z0){if(G0){let B=Y[U++];if(B.colDef.lockPinned){$=!0;continue}W-=B.getActualWidth(),H.push(B)}}return{columns:H,hasLockedPinned:$}}},uK={moduleName:"PinnedColumn",version:i,beans:[hK],css:[NK]},mK=class extends k0{constructor(){super();this.beanName="ariaAnnounce",this.descriptionContainer=null,this.pendingAnnouncements=new Map,this.lastAnnouncement="",this.updateAnnouncement=i0(this,this.updateAnnouncement.bind(this),200)}postConstruct(){let z=this.beans,J=Y0(z),Q=this.descriptionContainer=J.createElement("div");Q.classList.add("ag-aria-description-container"),h8(Q,"polite"),LG(Q,"additions text"),FG(Q,!0),z.eRootDiv.appendChild(Q)}announceValue(z,J){this.pendingAnnouncements.set(J,z),this.updateAnnouncement()}updateAnnouncement(){if(!this.descriptionContainer)return;let z=Array.from(this.pendingAnnouncements.values()).join(". ");this.pendingAnnouncements.clear(),this.descriptionContainer.textContent="",setTimeout(()=>{this.handleAnnouncementUpdate(z)},50)}handleAnnouncementUpdate(z){if(!this.isAlive()||!this.descriptionContainer)return;let J=z;if(J==null||J.replace(/[ .]/g,"")==""){this.lastAnnouncement="";return}if(this.lastAnnouncement===J)J=`${J}​`;this.lastAnnouncement=J,this.descriptionContainer.textContent=J}destroy(){super.destroy();let{descriptionContainer:z}=this;if(z)J0(z),z.remove();this.descriptionContainer=null,this.pendingAnnouncements.clear()}},cK=class extends mK{},iK={moduleName:"Aria",version:i,beans:[cK]},pK=":where(.ag-delay-render){.ag-cell,.ag-header-cell,.ag-header-group-cell,.ag-row,.ag-spanned-cell-wrapper{visibility:hidden}}",X8="ag-delay-render",nK=class extends S{constructor(){super(...arguments);this.beanName="colDelayRenderSvc",this.hideRequested=!1,this.alreadyRevealed=!1,this.timesRetried=0,this.requesters=new Set}hideColumns(z){if(this.alreadyRevealed||this.requesters.has(z))return;if(this.requesters.add(z),!this.hideRequested)this.beans.ctrlsSvc.whenReady(this,(J)=>{J.gridBodyCtrl.eGridBody.classList.add(X8)}),this.hideRequested=!0}revealColumns(z){if(this.alreadyRevealed||!this.isAlive())return;if(this.requesters.delete(z),this.requesters.size>0)return;let{renderStatus:J,ctrlsSvc:Q}=this.beans;if(J){if(!J.areHeaderCellsRendered()&&this.timesRetried<5){this.timesRetried++,setTimeout(()=>this.revealColumns(z));return}this.timesRetried=0}Q.getGridBodyCtrl().eGridBody.classList.remove(X8),this.alreadyRevealed=!0}},dK={moduleName:"ColumnDelayRender",version:i,beans:[nK],css:[pK]},kJ=class extends x{constructor(){super()}},rK={tag:"div",cls:"ag-overlay-exporting-center",children:[{tag:"span",ref:"eExportingIcon",cls:"ag-loading-icon"},{tag:"span",ref:"eExportingText",cls:"ag-exporting-text"}]},tK=class extends kJ{constructor(){super(...arguments);this.eExportingIcon=j,this.eExportingText=j}init(z){let{beans:J}=this;this.setTemplate(rK);let Q=h("overlayExporting",J,null);if(Q)this.eExportingIcon.appendChild(Q);let Z=z.exporting?.overlayText??this.getLocaleTextFunc()("exportingOoo","Exporting...");this.eExportingText.textContent=Z,J.ariaAnnounce.announceValue(Z,"overlay")}},sK={tag:"div",cls:"ag-overlay-loading-center",children:[{tag:"span",ref:"eLoadingIcon",cls:"ag-loading-icon"},{tag:"span",ref:"eLoadingText",cls:"ag-loading-text"}]},lK=class extends kJ{constructor(){super(...arguments);this.eLoadingIcon=j,this.eLoadingText=j}init(z){let{beans:J,gos:Q}=this,Z=q0(Q.get("overlayLoadingTemplate")?.trim());if(this.setTemplate(Z??sK),!Z){let $=h("overlayLoading",J,null);if($)this.eLoadingIcon.appendChild($);let X=z.loading?.overlayText??this.getLocaleTextFunc()("loadingOoo","Loading...");this.eLoadingText.textContent=X,J.ariaAnnounce.announceValue(X,"overlay")}}},aK={tag:"span",cls:"ag-overlay-no-matching-rows-center"},oK=class extends kJ{init(z){let{beans:J}=this;this.setTemplate(aK);let Q=z.noMatchingRows?.overlayText??this.getLocaleTextFunc()("noMatchingRows","No Matching Rows");this.getGui().textContent=Q,J.ariaAnnounce.announceValue(Q,"overlay")}},eK={tag:"span",cls:"ag-overlay-no-rows-center"},zF=class extends kJ{init(z){let{beans:J,gos:Q}=this,Z=q0(Q.get("overlayNoRowsTemplate")?.trim());if(this.setTemplate(Z??eK),!Z){let $=z.noRows?.overlayText??this.getLocaleTextFunc()("noRowsToShow","No Rows To Show");this.getGui().textContent=$,J.ariaAnnounce.announceValue($,"overlay")}}};function JF(z){z.overlays?.showLoadingOverlay()}function QF(z){z.overlays?.showNoRowsOverlay()}function ZF(z){z.overlays?.hideOverlay()}var $F=".ag-overlay{inset:0;pointer-events:none;position:absolute;z-index:2}.ag-overlay-panel,.ag-overlay-wrapper{display:flex;height:100%;width:100%}.ag-overlay-wrapper{align-items:center;flex:none;justify-content:center;text-align:center}.ag-overlay-exporting-wrapper,.ag-overlay-loading-wrapper,.ag-overlay-modal-wrapper{pointer-events:all}.ag-overlay-exporting-center,.ag-overlay-loading-center{background:var(--ag-background-color);border:solid var(--ag-border-width) var(--ag-border-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-popup-shadow);display:flex;padding:var(--ag-spacing)}",XF={tag:"div",cls:"ag-overlay",role:"presentation",children:[{tag:"div",cls:"ag-overlay-panel",role:"presentation",children:[{tag:"div",ref:"eOverlayWrapper",cls:"ag-overlay-wrapper",role:"presentation"}]}]},$X=class extends x{constructor(){super(XF);this.eOverlayWrapper=j,this.activeOverlay=null,this.activePromise=null,this.activeCssClass=null,this.elToFocusAfter=null,this.overlayExclusive=!1,this.oldWrapperPadding=null,this.registerCSS($F)}handleKeyDown(z){if(z.key!==k.TAB||z.defaultPrevented||q4(z))return;let{beans:J,eOverlayWrapper:Q}=this;if(Q&&O0(J,Q,!1,z.shiftKey))return;let $;if(z.shiftKey)$=J.focusSvc.focusGridView({column:y(J.visibleCols.allCols),backwards:!0,canFocusOverlay:!1});else $=_4(J,!1);if($)z.preventDefault()}updateLayoutClasses(z,J){let Q=this.eOverlayWrapper;if(!Q)return;let Z=Q.classList,{AUTO_HEIGHT:$,NORMAL:X,PRINT:Y}=M4;Z.toggle($,J.autoHeight),Z.toggle(X,J.normal),Z.toggle(Y,J.print)}postConstruct(){this.createManagedBean(new lZ(this)),this.setDisplayed(!1,{skipAriaHidden:!0}),this.beans.overlays.setWrapperComp(this,!1),this.addManagedElementListeners(this.getFocusableElement(),{keydown:this.handleKeyDown.bind(this)}),this.addManagedEventListeners({gridSizeChanged:this.refreshWrapperPadding.bind(this)})}setWrapperTypeClass(z){let J=this.eOverlayWrapper?.classList;if(!J){this.activeCssClass=null;return}if(this.activeCssClass)J.toggle(this.activeCssClass,!1);this.activeCssClass=z,J.toggle(z,!0)}showOverlay(z,J,Q){if(this.destroyActiveOverlay(),this.elToFocusAfter=null,this.activePromise=z,this.overlayExclusive=Q,!z)return this.refreshWrapperPadding(),N.resolve();if(this.setWrapperTypeClass(J),this.setDisplayed(!0,{skipAriaHidden:!0}),this.refreshWrapperPadding(),Q&&this.isGridFocused()){let Z=n(this.beans);if(Z&&!Vz(this.beans))this.elToFocusAfter=Z}return z.then((Z)=>{let $=this.eOverlayWrapper;if(!$){this.destroyBean(Z);return}if(this.activePromise!==z){if(this.activeOverlay!==Z)this.destroyBean(Z);return}if(this.activePromise=null,!Z)return;if(this.activeOverlay!==Z)$.appendChild(Z.getGui()),this.activeOverlay=Z;if(Q&&this.isGridFocused())E0($)}),z}refreshWrapperPadding(){if(!this.eOverlayWrapper){this.oldWrapperPadding=null;return}let z=!!this.activeOverlay||!!this.activePromise,J=0;if(z&&!this.overlayExclusive)J=this.beans.ctrlsSvc.get("gridHeaderCtrl")?.headerHeight||0;if(J!==this.oldWrapperPadding)this.oldWrapperPadding=J,this.eOverlayWrapper.style.setProperty("padding-top",`${J}px`)}destroyActiveOverlay(){this.activePromise=null;let z=this.activeOverlay;if(!z){this.overlayExclusive=!1,this.elToFocusAfter=null,this.refreshWrapperPadding();return}let J=this.elToFocusAfter;if(this.elToFocusAfter=null,this.activeOverlay=null,this.overlayExclusive=!1,J&&!this.isGridFocused())J=null;this.destroyBean(z);let Q=this.eOverlayWrapper;if(Q)J0(Q);J?.focus?.({preventScroll:!0}),this.refreshWrapperPadding()}hideOverlay(){this.destroyActiveOverlay(),this.setDisplayed(!1,{skipAriaHidden:!0})}isGridFocused(){let z=n(this.beans);return!!z&&this.beans.eGridDiv.contains(z)}destroy(){this.elToFocusAfter=null,this.destroyActiveOverlay(),this.beans.overlays.setWrapperComp(this,!0),super.destroy(),this.eOverlayWrapper=null}},YF={selector:"AG-OVERLAY-WRAPPER",component:$X},qF=["refresh"],d2=(z)=>({name:z,optionalMethods:qF}),iz={id:"agLoadingOverlay",overlayType:"loading",comp:d2("loadingOverlayComponent"),wrapperCls:"ag-overlay-loading-wrapper",exclusive:!0,compKey:"loadingOverlayComponent",paramsKey:"loadingOverlayComponentParams",isSuppressed:(z)=>{let J=z.get("loading");return J===!1||z.get("suppressLoadingOverlay")===!0&&J!==!0}},A1={id:"agNoRowsOverlay",overlayType:"noRows",comp:d2("noRowsOverlayComponent"),wrapperCls:"ag-overlay-no-rows-wrapper",compKey:"noRowsOverlayComponent",paramsKey:"noRowsOverlayComponentParams",isSuppressed:(z)=>z.get("suppressNoRowsOverlay")},_5={id:"agNoMatchingRowsOverlay",overlayType:"noMatchingRows",comp:d2("noMatchingRowsOverlayComponent"),wrapperCls:"ag-overlay-no-matching-rows-wrapper"},p6={id:"agExportingOverlay",overlayType:"exporting",comp:d2("exportingOverlayComponent"),wrapperCls:"ag-overlay-exporting-wrapper",exclusive:!0},j6={id:"activeOverlay",comp:d2("activeOverlay"),wrapperCls:"ag-overlay-modal-wrapper",exclusive:!0},GF=(z)=>{if(!z)return null;return{agLoadingOverlay:iz,agNoRowsOverlay:A1,agNoMatchingRowsOverlay:_5,agExportingOverlay:p6}[z]??j6},UF=(z)=>{if(!z)return null;return{loading:iz,noRows:A1,noMatchingRows:_5,exporting:p6}[z]},_F=class extends S{constructor(){super(...arguments);this.beanName="overlays",this.eWrapper=void 0,this.exclusive=!1,this.oldExclusive=!1,this.currentDef=null,this.showInitialOverlay=!0,this.userForcedNoRows=!1,this.exportsInProgress=0,this.newColumnsLoadedCleanup=null}postConstruct(){let z=this.gos;this.showInitialOverlay=o(z);let J=()=>{if(this.userForcedNoRows)return;this.updateOverlay(!1)},[Q,Z,$,X]=this.addManagedEventListeners({newColumnsLoaded:J,rowCountReady:()=>{this.disableInitialOverlay(),J(),Z()},rowDataUpdated:J,modelUpdated:J});this.newColumnsLoadedCleanup=Q,this.addManagedPropertyListeners(["loading","activeOverlay","activeOverlayParams","overlayComponentParams","loadingOverlayComponentParams","noRowsOverlayComponentParams"],(Y)=>this.onPropChange(new Set(Y.changeSet?.properties)))}destroy(){this.doHideOverlay(),super.destroy(),this.eWrapper=void 0}setWrapperComp(z,J){if(!this.isAlive())return;if(!J)this.eWrapper=z;else if(this.eWrapper===z)this.eWrapper=void 0;this.updateOverlay(!1)}isVisible(){return!!this.currentDef}showLoadingOverlay(){this.showInitialOverlay=!1;let z=this.gos;if(!this.eWrapper||z.get("activeOverlay"))return;if(this.isDisabled(iz))return;let J=z.get("loading");if(!J&&J!==void 0)return;this.doShowOverlay(iz)}showNoRowsOverlay(){this.showInitialOverlay=!1;let z=this.gos;if(!this.eWrapper||z.get("activeOverlay")||z.get("loading")||this.isDisabled(A1))return;this.userForcedNoRows=!0,this.doShowOverlay(A1)}async showExportOverlay(z){let{gos:J,beans:Q}=this;if(!this.eWrapper||J.get("activeOverlay")||J.get("loading")||this.isDisabled(p6)||this.userForcedNoRows&&this.currentDef===A1){z();return}let Z=this.getDesiredDefWithOverride(p6);if(!Z){z();return}this.exportsInProgress++,this.focusedCell=Q.focusSvc.getFocusedCell(),await this.doShowOverlay(Z),await new Promise((X)=>setTimeout(()=>X()));let $=Date.now();try{z()}finally{let X=Date.now()-$,Y=Math.max(0,300-X),q=()=>{if(this.exportsInProgress--,this.exportsInProgress===0)this.updateOverlay(!1),iZ(Q,this.focusedCell),this.focusedCell=null};if(Y>0)setTimeout(()=>q(),Y);else q()}}hideOverlay(){let z=this.gos;this.showInitialOverlay=!1;let J=this.userForcedNoRows;if(this.userForcedNoRows=!1,z.get("loading")){V(99);return}if(z.get("activeOverlay")){V(296);return}if(this.currentDef===_5){V(297);return}if(this.doHideOverlay(),J){if(this.getOverlayDef()!==A1)this.updateOverlay(!1)}}getOverlayWrapperSelector(){return YF}getOverlayWrapperCompClass(){return $X}onPropChange(z){let J=z.has("activeOverlay");if(J||z.has("loading")){if(this.updateOverlay(J))return}let Q=this.currentDef,Z=this.eWrapper?.activeOverlay;if(Z&&Q){let $=z.has("activeOverlayParams");if(Q===j6){if($)Z.refresh?.(this.makeCompParams(!0))}else{let X=Q.paramsKey;if(z.has("overlayComponentParams")||X&&z.has(X))Z.refresh?.(this.makeCompParams(!1,X,Q.overlayType))}}}updateOverlay(z){let J=this.eWrapper;if(!J)return this.currentDef=null,!1;let Q=this.getDesiredDefWithOverride(),Z=this.currentDef,$=Q===j6&&z;if(Q!==Z){if(!Q)return this.disableInitialOverlay(),this.doHideOverlay();return this.doShowOverlay(Q),!0}if($&&Q)return J.hideOverlay(),this.doShowOverlay(Q),!0;if(!Q)this.disableInitialOverlay();return!1}getDesiredDefWithOverride(z){let{gos:J}=this,Q=GF(J.get("activeOverlay"));if(!Q){if(Q=z??this.getOverlayDef(),Q&&this.isDisabled(Q))Q=null}return Q}getOverlayDef(){let{gos:z,beans:J}=this,{rowModel:Q}=J,Z=z.get("loading");if(Z!==void 0){if(this.disableInitialOverlay(),Z)return iz}else if(this.showInitialOverlay){if(!this.isDisabled(iz)&&(!z.get("columnDefs")||!z.get("rowData")))return iz;this.disableInitialOverlay()}else this.disableInitialOverlay();let X=Q.getOverlayType();return UF(X)}disableInitialOverlay(){this.showInitialOverlay=!1,this.newColumnsLoadedCleanup?.(),this.newColumnsLoadedCleanup=null}doShowOverlay(z){let{gos:J,beans:Q}=this,{userCompFactory:Z}=Q;this.currentDef=z;let $=z!==j6,X=!!z.exclusive;this.exclusive=X;let Y;if(z.paramsKey&&J.get(z.paramsKey)||z.compKey&&J.get(z.compKey))Y=z.paramsKey;let q=void 0;if($){if(J.get("overlayComponent")||J.get("overlayComponentSelector"))q=Z.getCompDetailsFromGridOptions({name:"overlayComponent",optionalMethods:["refresh"]},void 0,this.makeCompParams(!1,z.paramsKey,z.overlayType))}q??(q=Z.getCompDetailsFromGridOptions(z.comp,$?z.id:void 0,this.makeCompParams(!$,Y,z.overlayType),!1));let G=q?.newAgStackInstance()??null,U=this.eWrapper?this.eWrapper.showOverlay(G,z.wrapperCls,X):N.resolve();return this.eWrapper?.refreshWrapperPadding(),this.setExclusive(X),U}makeCompParams(z,J,Q){let{gos:Z}=this,$=z?Z.get("activeOverlayParams"):{...Z.get("overlayComponentParams"),...J&&Z.get(J)||null,overlayType:Q};return C(Z,$??{})}doHideOverlay(){let z=!1;if(this.currentDef)this.currentDef=null,z=!0;this.exclusive=!1;let J=this.eWrapper;if(J)J.hideOverlay(),J.refreshWrapperPadding(),this.setExclusive(!1);return z}setExclusive(z){if(this.oldExclusive!==z)this.oldExclusive=z,this.eventSvc.dispatchEvent({type:"overlayExclusiveChanged"})}isDisabled(z){let{gos:J}=this;return z.overlayType&&J.get("suppressOverlays")?.includes(z.overlayType)||z.isSuppressed?.(J)===!0}},HF={moduleName:"Overlay",version:i,userComponents:{agLoadingOverlay:lK,agNoRowsOverlay:zF,agNoMatchingRowsOverlay:oK,agExportingOverlay:tK},apiFunctions:{showLoadingOverlay:JF,showNoRowsOverlay:QF,hideOverlay:ZF},icons:{overlayLoading:"loading",overlayExporting:"loading"},beans:[_F]},WF=class extends S{constructor(){super(...arguments);this.beanName="rowContainerHeight",this.scrollY=0,this.uiBodyHeight=0}postConstruct(){this.addManagedEventListeners({bodyHeightChanged:this.updateOffset.bind(this)}),this.maxDivHeight=K_(),M2(this.gos,"RowContainerHeightService - maxDivHeight = "+this.maxDivHeight)}updateOffset(){if(!this.stretching)return;let z=this.beans.ctrlsSvc.getScrollFeature().getVScrollPosition().top,J=this.getUiBodyHeight();if(z!==this.scrollY||J!==this.uiBodyHeight)this.scrollY=z,this.uiBodyHeight=J,this.calculateOffset()}calculateOffset(){this.setUiContainerHeight(this.maxDivHeight),this.pixelsToShave=this.modelHeight-this.uiContainerHeight,this.maxScrollY=this.uiContainerHeight-this.uiBodyHeight;let z=this.scrollY/this.maxScrollY,J=z*this.pixelsToShave;M2(this.gos,`RowContainerHeightService - Div Stretch Offset = ${J} (${this.pixelsToShave} * ${z})`),this.setDivStretchOffset(J)}setUiContainerHeight(z){if(z!==this.uiContainerHeight)this.uiContainerHeight=z,this.eventSvc.dispatchEvent({type:"rowContainerHeightChanged"})}clearOffset(){this.setUiContainerHeight(this.modelHeight),this.pixelsToShave=0,this.setDivStretchOffset(0)}setDivStretchOffset(z){let J=typeof z==="number"?Math.floor(z):null;if(this.divStretchOffset===J)return;this.divStretchOffset=J,this.eventSvc.dispatchEvent({type:"heightScaleChanged"})}setModelHeight(z){if(this.modelHeight=z,this.stretching=z!=null&&this.maxDivHeight>0&&z>this.maxDivHeight,this.stretching)this.calculateOffset();else this.clearOffset()}getRealPixelPosition(z){return z-this.divStretchOffset}getUiBodyHeight(){let z=this.beans.ctrlsSvc.getScrollFeature().getVScrollPosition();return z.bottom-z.top}getScrollPositionForPixel(z){if(this.pixelsToShave<=0)return z;let J=this.modelHeight-this.getUiBodyHeight(),Q=z/J;return this.maxScrollY*Q}},BF=400,EF=class extends S{constructor(){super(...arguments);this.beanName="rowRenderer",this.destroyFuncsForColumnListeners=[],this.rowCtrlsByRowIndex={},this.zombieRowCtrls={},this.allRowCtrls=[],this.topRowCtrls=[],this.bottomRowCtrls=[],this.refreshInProgress=!1,this.dataFirstRenderedFired=!1,this.setupRangeSelectionListeners=()=>{let z=()=>{for(let X of this.getAllCellCtrls())X.onCellSelectionChanged()},J=()=>{for(let X of this.getAllCellCtrls())X.updateRangeBordersIfRangeCount()},Q=()=>{this.eventSvc.addListener("cellSelectionChanged",z),this.eventSvc.addListener("columnMoved",J),this.eventSvc.addListener("columnPinned",J),this.eventSvc.addListener("columnVisible",J)},Z=()=>{this.eventSvc.removeListener("cellSelectionChanged",z),this.eventSvc.removeListener("columnMoved",J),this.eventSvc.removeListener("columnPinned",J),this.eventSvc.removeListener("columnVisible",J)};if(this.addDestroyFunc(()=>Z()),this.addManagedPropertyListeners(["enableRangeSelection","cellSelection"],()=>{if(n0(this.gos))Q();else Z()}),n0(this.gos))Q()}}wireBeans(z){this.pageBounds=z.pageBounds,this.colModel=z.colModel,this.pinnedRowModel=z.pinnedRowModel,this.rowModel=z.rowModel,this.focusSvc=z.focusSvc,this.rowContainerHeight=z.rowContainerHeight,this.ctrlsSvc=z.ctrlsSvc,this.editSvc=z.editSvc}postConstruct(){this.ctrlsSvc.whenReady(this,(z)=>{this.gridBodyCtrl=z.gridBodyCtrl,this.initialise()})}initialise(){this.addManagedEventListeners({paginationChanged:this.onPageLoaded.bind(this),pinnedRowDataChanged:this.onPinnedRowDataChanged.bind(this),pinnedRowsChanged:this.onPinnedRowsChanged.bind(this),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),bodyScroll:this.onBodyScroll.bind(this),bodyHeightChanged:this.redraw.bind(this,{})}),this.addManagedPropertyListeners(["domLayout","embedFullWidthRows"],()=>this.onDomLayoutChanged()),this.addManagedPropertyListeners(["suppressMaxRenderedRowRestriction","rowBuffer"],()=>this.redraw()),this.addManagedPropertyListener("suppressCellFocus",(Z)=>this.onSuppressCellFocusChanged(Z.currentValue)),this.addManagedPropertyListeners(["groupSuppressBlankHeader","getBusinessKeyForNode","fullWidthCellRenderer","fullWidthCellRendererParams","suppressStickyTotalRow","groupRowRenderer","groupRowRendererParams","loadingCellRenderer","loadingCellRendererParams","detailCellRenderer","detailCellRendererParams","enableRangeSelection","enableCellTextSelection"],()=>this.redrawRows()),this.addManagedPropertyListener("cellSelection",({currentValue:Z,previousValue:$})=>{if(!$&&Z||$&&!Z)this.redrawRows()});let{stickyRowSvc:z,gos:J,showRowGroupCols:Q}=this.beans;if(Q)this.addManagedPropertyListener("showOpenedGroup",()=>{let Z=Q.columns;if(Z.length)this.refreshCells({columns:Z,force:!0})});if(z)this.stickyRowFeature=z.createStickyRowFeature(this,this.createRowCon.bind(this),this.destroyRowCtrls.bind(this));else{let Z=this.gridBodyCtrl;Z.setStickyTopHeight(0),Z.setStickyBottomHeight(0)}this.registerCellEventListeners(),this.initialiseCache(),this.printLayout=A0(J,"print"),this.embedFullWidthRows=this.printLayout||J.get("embedFullWidthRows"),this.redrawAfterModelUpdate()}initialiseCache(){if(this.gos.get("keepDetailRows")){let z=this.getKeepDetailRowsCount(),J=z!=null?z:3;this.cachedRowCtrls=new KF(J)}}getKeepDetailRowsCount(){return this.gos.get("keepDetailRowsCount")}getStickyTopRowCtrls(){return this.stickyRowFeature?.stickyTopRowCtrls??[]}getStickyBottomRowCtrls(){return this.stickyRowFeature?.stickyBottomRowCtrls??[]}updateAllRowCtrls(){let z=Object.values(this.rowCtrlsByRowIndex),J=Object.values(this.zombieRowCtrls),Q=this.cachedRowCtrls?.getEntries()??[];if(J.length>0||Q.length>0)this.allRowCtrls=[...z,...J,...Q];else this.allRowCtrls=z}isCellBeingRendered(z,J){let Q=this.rowCtrlsByRowIndex[z];if(!J||!Q)return!!Q;if(Q.isFullWidth())return!0;return!!this.beans.spannedRowRenderer?.getCellByPosition({rowIndex:z,column:J,rowPinned:null})||!!Q.getCellCtrl(J)||!Q.isRowRendered()}updateCellFocus(z){for(let J of this.getAllCellCtrls())J.onCellFocused(z);for(let J of this.getFullWidthRowCtrls())J.onFullWidthRowFocused(z)}onCellFocusChanged(z){if(z?.rowIndex!=null&&!z.rowPinned){let J=this.beans.colModel.getCol(z.column)??void 0;if(!this.isCellBeingRendered(z.rowIndex,J))this.redraw()}this.updateCellFocus(z)}onSuppressCellFocusChanged(z){for(let J of this.getAllCellCtrls())J.onSuppressCellFocusChanged(z);for(let J of this.getFullWidthRowCtrls())J.onSuppressCellFocusChanged(z)}registerCellEventListeners(){this.addManagedEventListeners({cellFocused:(z)=>this.onCellFocusChanged(z),cellFocusCleared:()=>this.updateCellFocus(),flashCells:(z)=>{let{cellFlashSvc:J}=this.beans;if(J)for(let Q of this.getAllCellCtrls())J.onFlashCells(Q,z)},columnHoverChanged:()=>{for(let z of this.getAllCellCtrls())z.onColumnHover()},displayedColumnsChanged:()=>{for(let z of this.getAllCellCtrls())z.onDisplayedColumnsChanged()},displayedColumnsWidthChanged:()=>{if(this.printLayout)for(let z of this.getAllCellCtrls())z.onLeftChanged()}}),this.setupRangeSelectionListeners(),this.refreshListenersToColumnsForCellComps(),this.addManagedEventListeners({gridColumnsChanged:this.refreshListenersToColumnsForCellComps.bind(this)}),this.addDestroyFunc(this.removeGridColumnListeners.bind(this))}removeGridColumnListeners(){for(let z of this.destroyFuncsForColumnListeners)z();this.destroyFuncsForColumnListeners.length=0}refreshListenersToColumnsForCellComps(){this.removeGridColumnListeners();let z=this.colModel.getCols();for(let J of z){let Q=(G)=>{for(let U of this.getAllCellCtrls())if(U.column===J)G(U)},Z=()=>{Q((G)=>G.onLeftChanged())},$=()=>{Q((G)=>G.onWidthChanged())},X=()=>{Q((G)=>G.onFirstRightPinnedChanged())},Y=()=>{Q((G)=>G.onLastLeftPinnedChanged())},q=()=>{Q((G)=>G.onColDefChanged())};J.__addEventListener("leftChanged",Z),J.__addEventListener("widthChanged",$),J.__addEventListener("firstRightPinnedChanged",X),J.__addEventListener("lastLeftPinnedChanged",Y),J.__addEventListener("colDefChanged",q),this.destroyFuncsForColumnListeners.push(()=>{J.__removeEventListener("leftChanged",Z),J.__removeEventListener("widthChanged",$),J.__removeEventListener("firstRightPinnedChanged",X),J.__removeEventListener("lastLeftPinnedChanged",Y),J.__removeEventListener("colDefChanged",q)})}}onDomLayoutChanged(){let z=A0(this.gos,"print"),J=z||this.gos.get("embedFullWidthRows"),Q=J!==this.embedFullWidthRows||this.printLayout!==z;if(this.printLayout=z,this.embedFullWidthRows=J,Q)this.redrawAfterModelUpdate({domLayoutChanged:!0})}datasourceChanged(){this.firstRenderedRow=0,this.lastRenderedRow=-1;let z=Object.keys(this.rowCtrlsByRowIndex);this.removeRowCtrls(z)}onPageLoaded(z){let J={recycleRows:z.keepRenderedRows,animate:z.animate,newData:z.newData,newPage:z.newPage,onlyBody:!0};this.redrawAfterModelUpdate(J)}getAllCellsNotSpanningForColumn(z){let J=[];for(let Q of this.getAllRowCtrls()){let Z=Q.getCellCtrl(z,!0)?.eGui;if(Z)J.push(Z)}return J}refreshFloatingRowComps(z=!0){this.refreshFloatingRows(this.topRowCtrls,"top",z),this.refreshFloatingRows(this.bottomRowCtrls,"bottom",z)}refreshFloatingRows(z,J,Q){let{pinnedRowModel:Z,beans:$,printLayout:X}=this,Y=Object.fromEntries(z.map((G)=>[G.rowNode.id,G]));Z?.forEachPinnedRow(J,(G,U)=>{let _=z[U];if(_&&Z.getPinnedRowById(_.rowNode.id,J)===void 0)_.destroyFirstPass(),_.destroySecondPass();if(G.id in Y&&Q)z[U]=Y[G.id],delete Y[G.id];else z[U]=new aQ(G,$,!1,!1,X)});let q=(J==="top"?Z?.getPinnedTopRowCount():Z?.getPinnedBottomRowCount())??0;z.length=q}onPinnedRowDataChanged(){let z={recycleRows:!0};this.redrawAfterModelUpdate(z)}onPinnedRowsChanged(){this.redrawAfterModelUpdate({recycleRows:!0})}redrawRow(z,J=!1){if(z.sticky)this.stickyRowFeature?.refreshStickyNode(z);else if(this.cachedRowCtrls?.has(z)){this.cachedRowCtrls.removeRow(z);return}else{let Q=(Z)=>{let $=Z[z.rowIndex];if(!$)return;if($.rowNode!==z)return;$.destroyFirstPass(),$.destroySecondPass(),Z[z.rowIndex]=this.createRowCon(z,!1,!1)};switch(z.rowPinned){case"top":Q(this.topRowCtrls);break;case"bottom":Q(this.bottomRowCtrls);break;default:Q(this.rowCtrlsByRowIndex),this.updateAllRowCtrls()}}if(!J)this.dispatchDisplayedRowsChanged(!1)}redrawRows(z){let{editSvc:J}=this.beans;if(J?.isEditing())if(J.isBatchEditing())J.cleanupEditors();else J.stopEditing(void 0,{source:"api"});if(z!=null){for(let Z of z??[])this.redrawRow(Z,!0);this.dispatchDisplayedRowsChanged(!1);return}this.redrawAfterModelUpdate()}redrawAfterModelUpdate(z={}){this.getLockOnRefresh();let J=this.beans.focusSvc?.getFocusCellToUseAfterRefresh();this.updateContainerHeights(),this.scrollToTopIfNewData(z);let Q=!z.domLayoutChanged&&!!z.recycleRows,Z=z.animate&&T1(this.gos),$=Q?this.getRowsToRecycle():null;if(!Q)this.removeAllRowComps(!Z);this.workOutFirstAndLastRowsToRender();let{stickyRowFeature:X,gos:Y}=this;if(X){X.checkStickyRows();let q=X.extraTopHeight+X.extraBottomHeight;if(q)this.updateContainerHeights(q)}if(this.recycleRows($,Z),this.gridBodyCtrl.updateRowCount(),!z.onlyBody)this.refreshFloatingRowComps(Y.get("enableRowPinning")?Q:void 0);if(this.dispatchDisplayedRowsChanged(),J!=null)this.restoreFocusedCell(J);this.releaseLockOnRefresh()}scrollToTopIfNewData(z){let J=z.newData||z.newPage,Q=this.gos.get("suppressScrollOnNewData");if(J&&!Q)this.gridBodyCtrl.scrollFeature.scrollToTop(),this.stickyRowFeature?.resetOffsets()}updateContainerHeights(z=0){let{rowContainerHeight:J}=this;if(this.printLayout){J.setModelHeight(null);return}let Q=this.pageBounds.getCurrentPageHeight();if(Q===0)Q=1;J.setModelHeight(Q+z)}getLockOnRefresh(){if(this.refreshInProgress)throw Error(Y4(252));this.refreshInProgress=!0,this.beans.frameworkOverrides.getLockOnRefresh?.()}releaseLockOnRefresh(){this.refreshInProgress=!1,this.beans.frameworkOverrides.releaseLockOnRefresh?.()}isRefreshInProgress(){return this.refreshInProgress}restoreFocusedCell(z){if(!z)return;let J=this.beans.focusSvc,Q=this.findPositionToFocus(z);if(!Q){J.focusHeaderPosition({headerPosition:{headerRowIndex:Q4(this.beans)-1,column:z.column}});return}if(z.rowIndex!==Q.rowIndex||z.rowPinned!=Q.rowPinned){J.setFocusedCell({...Q,preventScrollOnBrowserFocus:!0,forceBrowserFocus:!0});return}if(!J.doesRowOrCellHaveBrowserFocus())this.updateCellFocus(C(this.gos,{...Q,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0,type:"cellFocused"}))}findPositionToFocus(z){let{pagination:J,pageBounds:Q}=this.beans,Z=z;if(Z.rowPinned==null&&J&&Q&&!J.isRowInPage(Z.rowIndex))Z={rowPinned:null,rowIndex:Q.getFirstRow()};while(Z){if(Z.rowPinned==null&&Q){if(Z.rowIndexQ.getLastRow())Z={rowPinned:null,rowIndex:Q.getLastRow()}}let $=this.getRowByPosition(Z);if($?.isAlive())return{...$.getRowPosition(),column:z.column};Z=d0(this.beans,Z)}return null}getAllCellCtrls(){let z=[],J=this.getAllRowCtrls(),Q=J.length;for(let Z=0;Z{let $=Z.rowNode;return q8($,J)})}getCellCtrls(z,J){let Q;if(P(J))Q={},J.forEach(($)=>{let X=this.colModel.getCol($);if(P(X))Q[X.getId()]=!0});let Z=[];for(let $ of this.getRowCtrls(z))for(let X of $.getAllCellCtrls()){let Y=X.column.getId();if(Q&&!Q[Y])continue;Z.push(X)}return Z}destroy(){this.removeAllRowComps(!0),super.destroy()}removeAllRowComps(z){let J=Object.keys(this.rowCtrlsByRowIndex);this.removeRowCtrls(J,z),this.stickyRowFeature?.destroyStickyCtrls()}getRowsToRecycle(){let z=[];for(let Q of Object.keys(this.rowCtrlsByRowIndex))if(this.rowCtrlsByRowIndex[Q].rowNode.id==null)z.push(Q);this.removeRowCtrls(z);let J={};for(let Q of Object.values(this.rowCtrlsByRowIndex)){let Z=Q.rowNode;J[Z.id]=Q}return this.rowCtrlsByRowIndex={},J}removeRowCtrls(z,J=!1){for(let Q of z){let Z=this.rowCtrlsByRowIndex[Q];if(Z)Z.destroyFirstPass(J),Z.destroySecondPass();delete this.rowCtrlsByRowIndex[Q]}}onBodyScroll(z){if(z.direction!=="vertical")return;this.redraw({afterScroll:!0})}redraw(z={}){let{focusSvc:J,animationFrameSvc:Q}=this.beans,{afterScroll:Z}=z,$,X=this.stickyRowFeature;if(X)$=J?.getFocusCellToUseAfterRefresh()||void 0;let Y=this.firstRenderedRow,q=this.lastRenderedRow;this.workOutFirstAndLastRowsToRender();let G=!1;if(X){G=X.checkStickyRows();let _=X.extraTopHeight+X.extraBottomHeight;if(_)this.updateContainerHeights(_)}let U=this.firstRenderedRow!==Y||this.lastRenderedRow!==q;if(Z&&!G&&!U)return;if(this.getLockOnRefresh(),this.recycleRows(null,!1,Z),this.releaseLockOnRefresh(),this.dispatchDisplayedRowsChanged(Z&&!G),$!=null){let _=J?.getFocusCellToUseAfterRefresh();if($!=null&&_==null)Q?.flushAllFrames(),this.restoreFocusedCell($)}}removeRowCompsNotToDraw(z,J){let Q={};for(let X of z)Q[X]=!0;let $=Object.keys(this.rowCtrlsByRowIndex).filter((X)=>!Q[X]);this.removeRowCtrls($,J)}calculateIndexesToDraw(z){let J=[];for(let Y=this.firstRenderedRow;Y<=this.lastRenderedRow;Y++)J.push(Y);let Q=this.beans.pagination,Z=this.beans.focusSvc?.getFocusedCell()?.rowIndex;if(Z!=null&&(Zthis.lastRenderedRow)&&(!Q||Q.isRowInPage(Z))&&Z{let q=Y.rowNode.rowIndex;if(q==null||q===Z)return;if(qthis.lastRenderedRow){if(this.doNotUnVirtualiseRow(Y))J.push(q)}};for(let Y of Object.values(this.rowCtrlsByRowIndex))$(Y);if(z)for(let Y of Object.values(z))$(Y);J.sort((Y,q)=>Y-q);let X=[];for(let Y=0;Y{this.destroyRowCtrls(z,J),this.updateAllRowCtrls(),this.dispatchDisplayedRowsChanged()});else this.destroyRowCtrls(z,J)}this.updateAllRowCtrls()}dispatchDisplayedRowsChanged(z=!1){this.eventSvc.dispatchEvent({type:"displayedRowsChanged",afterScroll:z})}onDisplayedColumnsChanged(){let{visibleCols:z}=this.beans,J=z.isPinningLeft(),Q=z.isPinningRight();if(this.pinningLeft!==J||Q!==this.pinningRight){if(this.pinningLeft=J,this.pinningRight=Q,this.embedFullWidthRows)this.redrawFullWidthEmbeddedRows()}}redrawFullWidthEmbeddedRows(){let z=[];for(let J of this.getFullWidthRowCtrls()){let Q=J.rowNode.rowIndex;z.push(Q.toString())}this.refreshFloatingRowComps(),this.removeRowCtrls(z),this.redraw({afterScroll:!0})}getFullWidthRowCtrls(z){let J=Y8(z);return this.getAllRowCtrls().filter((Q)=>{if(!Q.isFullWidth())return!1;let Z=Q.rowNode;if(J!=null&&!q8(Z,J))return!1;return!0})}createOrUpdateRowCtrl(z,J,Q,Z){let $,X=this.rowCtrlsByRowIndex[z];if(!X){if($=this.rowModel.getRow(z),P($)&&P(J)&&J[$.id]&&$.alreadyRendered)X=J[$.id],J[$.id]=null}if(!X){if(!$)$=this.rowModel.getRow(z);if(P($))X=this.createRowCon($,Q,Z);else return}if($)$.alreadyRendered=!0;this.rowCtrlsByRowIndex[z]=X}destroyRowCtrls(z,J){let Q=[];if(z)for(let Z of Object.values(z)){if(!Z)continue;if(this.cachedRowCtrls&&Z.isCacheable()){this.cachedRowCtrls.addRow(Z);continue}if(Z.destroyFirstPass(!J),J){let $=Z.instanceId;this.zombieRowCtrls[$]=Z,Q.push(()=>{Z.destroySecondPass(),delete this.zombieRowCtrls[$]})}else Z.destroySecondPass()}if(J)Q.push(()=>{if(this.isAlive())this.updateAllRowCtrls(),this.dispatchDisplayedRowsChanged()}),window.setTimeout(()=>{for(let Z of Q)Z()},BF)}getRowBuffer(){return this.gos.get("rowBuffer")}getRowBufferInPixels(){let z=this.getRowBuffer(),J=E9(this.beans);return z*J}workOutFirstAndLastRowsToRender(){let{rowContainerHeight:z,pageBounds:J,rowModel:Q}=this;z.updateOffset();let Z,$;if(!Q.isRowsToRender())Z=0,$=-1;else if(this.printLayout)this.beans.environment.refreshRowHeightVariable(),Z=J.getFirstRow(),$=J.getLastRow();else{let _=this.getRowBufferInPixels(),H=this.ctrlsSvc.getScrollFeature(),W=this.gos.get("suppressRowVirtualisation"),B,E,K;do{let f=J.getPixelOffset(),{pageFirstPixel:A,pageLastPixel:R}=J.getCurrentPagePixelRange(),O=z.divStretchOffset,v=H.getVScrollPosition(),I=v.top,b=v.bottom;if(W)E=A+O,K=R+O;else E=Math.max(I+f-_,A)+O,K=Math.min(b+f+_,R)+O;this.firstVisibleVPixel=Math.max(I+f,A)+O,this.lastVisibleVPixel=Math.min(b+f,R)+O,B=this.ensureAllRowsInRangeHaveHeightsCalculated(E,K)}while(B);let F=Q.getRowIndexAtPixel(E),L=Q.getRowIndexAtPixel(K),D=J.getFirstRow(),M=J.getLastRow();if(FM)L=M;Z=F,$=L}let X=A0(this.gos,"normal"),Y=this.gos.get("suppressMaxRenderedRowRestriction"),q=Math.max(this.getRowBuffer(),500);if(X&&!Y){if($-Z>q)$=Z+q}let G=Z!==this.firstRenderedRow,U=$!==this.lastRenderedRow;if(G||U)this.firstRenderedRow=Z,this.lastRenderedRow=$,this.eventSvc.dispatchEvent({type:"viewportChanged",firstRow:Z,lastRow:$})}dispatchFirstDataRenderedEvent(){if(this.dataFirstRenderedFired)return;this.dataFirstRenderedFired=!0,O4(this.beans,()=>{this.beans.eventSvc.dispatchEvent({type:"firstDataRendered",firstRow:this.firstRenderedRow,lastRow:this.lastRenderedRow})})}ensureAllRowsInRangeHaveHeightsCalculated(z,J){let Q=this.pinnedRowModel?.ensureRowHeightsValid(),Z=this.stickyRowFeature?.ensureRowHeightsValid(),{pageBounds:$,rowModel:X}=this,Y=X.ensureRowHeightsValid(z,J,$.getFirstRow(),$.getLastRow());if(Y||Z)this.eventSvc.dispatchEvent({type:"recalculateRowBounds"});if(Z||Y||Q)return this.updateContainerHeights(),!0;return!1}doNotUnVirtualiseRow(z){let Z=z.rowNode,$=this.focusSvc.isRowFocused(Z.rowIndex,Z.rowPinned),X=this.editSvc?.isEditing(z),Y=Z.detail;if(!($||X||Y))return!1;return this.isRowPresent(Z)?!0:!1}isRowPresent(z){if(!this.rowModel.isRowPresent(z))return!1;return this.beans.pagination?.isRowInPage(z.rowIndex)??!0}createRowCon(z,J,Q){let Z=this.cachedRowCtrls?.getRow(z)??null;if(Z)return Z;let $=Q&&!this.printLayout&&!!this.beans.animationFrameSvc?.active;return new aQ(z,this.beans,J,$,this.printLayout)}getRenderedNodes(){let z=Object.values(this.rowCtrlsByRowIndex).map((Z)=>Z.rowNode),J=this.getStickyTopRowCtrls().map((Z)=>Z.rowNode),Q=this.getStickyBottomRowCtrls().map((Z)=>Z.rowNode);return[...J,...z,...Q]}getRowByPosition(z){let J,{rowIndex:Q}=z;switch(z.rowPinned){case"top":J=this.topRowCtrls[Q];break;case"bottom":J=this.bottomRowCtrls[Q];break;default:if(J=this.rowCtrlsByRowIndex[Q],!J){if(J=this.getStickyTopRowCtrls().find((Z)=>Z.rowNode.rowIndex===Q)||null,!J)J=this.getStickyBottomRowCtrls().find((Z)=>Z.rowNode.rowIndex===Q)||null}break}return J}isRangeInRenderedViewport(z,J){if(z==null||J==null)return!1;let Z=z>this.lastRenderedRow;return!(Jthis.maxCount){let J=this.entriesList[0];J.destroyFirstPass(),J.destroySecondPass(),this.removeFromCache(J)}}getRow(z){if(z?.id==null)return null;let J=this.entriesMap[z.id];if(!J)return null;return this.removeFromCache(J),J.setCached(!1),J.rowNode!=z?null:J}has(z){return this.entriesMap[z.id]!=null}removeRow(z){let J=z.id,Q=this.entriesMap[J];delete this.entriesMap[J],X0(this.entriesList,Q)}removeFromCache(z){let J=z.rowNode.id;delete this.entriesMap[J],X0(this.entriesList,z)}getEntries(){return this.entriesList}};function Y8(z){if(!z)return;let J={top:{},bottom:{},normal:{}};for(let Q of z){let Z=Q.id;switch(Q.rowPinned){case"top":J.top[Z]=Q;break;case"bottom":J.bottom[Z]=Q;break;default:J.normal[Z]=Q;break}}return J}function q8(z,J){let Q=z.id;switch(z.rowPinned){case"top":return J.top[Q]!=null;case"bottom":return J.bottom[Q]!=null;default:return J.normal[Q]!=null}}var FF=class extends S{constructor(){super(...arguments);this.beanName="rowNodeSorter",this.accentedSort=!1,this.primaryColumnsSortGroups=!1,this.pivotActive=!1}postConstruct(){this.firstLeaf=o(this.gos)?X1:LF,this.addManagedPropertyListeners(["accentedSort","autoGroupColumnDef","treeData"],this.updateOptions.bind(this));let z=this.updatePivotModeState.bind(this);this.addManagedEventListeners({columnPivotModeChanged:z,columnPivotChanged:z}),this.updateOptions(),z()}updateOptions(){this.accentedSort=!!this.gos.get("accentedSort"),this.primaryColumnsSortGroups=b4(this.gos)}updatePivotModeState(){this.pivotActive=this.beans.colModel.isPivotActive()}doFullSortInPlace(z,J){return z.sort((Q,Z)=>this.compareRowNodes(J,Q,Z))}compareRowNodes(z,J,Q){if(J===Q)return 0;let Z=this.accentedSort;for(let $=0,X=z.length;${if(z.data)return z;let J=z.childrenAfterGroup;while(J?.length){let Q=J[0];if(Q.data)return Q;J=Q.childrenAfterGroup}},G8=(z)=>{if(!z)return z;if(typeof z==="bigint")return z<0n?-z:z;let J=Number(z);return isNaN(J)?z:Math.abs(J)};function DF(z){z.sortSvc?.onSortChanged("api")}var mz=(z,J)=>({tag:"span",ref:`eSort${z}`,cls:`ag-sort-indicator-icon ag-sort-${J} ag-hidden`,attrs:{"aria-hidden":"true"}}),MF={tag:"span",cls:"ag-sort-indicator-container",children:[mz("Order","order"),mz("Asc","ascending-icon"),mz("Desc","descending-icon"),mz("Mixed","mixed-icon"),mz("AbsoluteAsc","absolute-ascending-icon"),mz("AbsoluteDesc","absolute-descending-icon"),mz("None","none-icon")]},H5=class extends x{constructor(z){super();if(this.eSortOrder=j,this.eSortAsc=j,this.eSortDesc=j,this.eSortMixed=j,this.eSortNone=j,this.eSortAbsoluteAsc=j,this.eSortAbsoluteDesc=j,!z)this.setTemplate(MF)}attachCustomElements(z,J,Q,Z,$,X,Y){this.eSortOrder=z,this.eSortAsc=J,this.eSortDesc=Q,this.eSortMixed=Z,this.eSortNone=$,this.eSortAbsoluteAsc=X,this.eSortAbsoluteDesc=Y}setupSort(z,J=!1,Q){if(this.column=z,this.suppressOrder=J,this.getSortDefOverride=Q,this.setupMultiSortIndicator(),!z.isSortable()&&!z.colDef.showRowGroup)return;this.addInIcon("sortAscending",this.eSortAsc,z),this.addInIcon("sortDescending",this.eSortDesc,z),this.addInIcon("sortUnSort",this.eSortNone,z),this.addInIcon("sortAbsoluteAscending",this.eSortAbsoluteAsc,z),this.addInIcon("sortAbsoluteDescending",this.eSortAbsoluteDesc,z);let Z=this.updateIcons.bind(this),$=this.onSortChanged.bind(this);this.addManagedPropertyListener("unSortIcon",Z),this.addManagedEventListeners({newColumnsLoaded:Z,sortChanged:$,columnRowGroupChanged:$}),this.onSortChanged()}addInIcon(z,J,Q){if(J==null)return;let Z=h(z,this.beans,Q);if(Z)J.appendChild(Z)}onSortChanged(){if(this.updateIcons(),!this.suppressOrder)this.updateSortOrder()}updateIcons(){let{eSortAsc:z,eSortDesc:J,eSortAbsoluteAsc:Q,eSortAbsoluteDesc:Z,eSortNone:$,column:X,gos:Y,beans:q}=this,G=PZ(X,q,this.getSortDefOverride),U=G.isDefaultSortAllowed,_=G.isAbsoluteSortAllowed,{isAbsoluteSort:H,isDefaultSort:W,isAscending:B,isDescending:E,direction:K}=G;if(z)w(z,B&&W&&U,{skipAriaHidden:!0});if(J)w(J,E&&W&&U,{skipAriaHidden:!0});if($){let F=!X.colDef.unSortIcon&&!Y.get("unSortIcon");w($,!F&&!K,{skipAriaHidden:!0})}if(Q)w(Q,B&&H&&_,{skipAriaHidden:!0});if(Z)w(Z,E&&H&&_,{skipAriaHidden:!0})}setupMultiSortIndicator(){let{eSortMixed:z,column:J,gos:Q}=this;this.addInIcon("sortUnSort",z,J);let Z=J.colDef.showRowGroup;if(b4(Q)&&Z)this.addManagedEventListeners({sortChanged:this.updateMultiSortIndicator.bind(this),columnRowGroupChanged:this.updateMultiSortIndicator.bind(this)}),this.updateMultiSortIndicator()}updateMultiSortIndicator(){let{eSortMixed:z,beans:J,column:Q}=this;if(z){let Z=J.sortSvc.getDisplaySortForColumn(Q)?.direction==="mixed";w(z,Z,{skipAriaHidden:!0})}}updateSortOrder(){let{eSortOrder:z,column:J,beans:{sortSvc:Q}}=this;if(!z)return;let Z=Q.getColumnsWithSortingOrdered(),$=Q.getDisplaySortIndexForColumn(J)??-1,X=Z.some((q)=>Q.getDisplaySortIndexForColumn(q)??!1),Y=$>=0&&X;if(w(z,Y,{skipAriaHidden:!0}),$>=0)z.textContent=($+1).toString();else J0(z)}refresh(){this.onSortChanged()}},kF={selector:"AG-SORT-INDICATOR",component:H5},fF=class extends S{constructor(){super(...arguments);this.beanName="sortSvc"}progressSort(z,J,Q){let Z=this.getNextSortDirection(z);this.setSortForColumn(z,Z,J,Q)}progressSortFromEvent(z,J){let Z=this.gos.get("multiSortKey")==="ctrl"?J.ctrlKey||J.metaKey:J.shiftKey;this.progressSort(z,Z,"uiColumnSorted")}setSortForColumn(z,J,Q,Z){let{gos:$,showRowGroupCols:X}=this.beans,Y=b4($),q=[z];if(Y){if(z.colDef.showRowGroup){let H=X?.getSourceColumnsForGroupColumn?.(z)?.filter((W)=>W.isSortable());if(H)q=[z,...H]}}for(let _ of q)this.setColSort(_,J,Z);let G=(Q||$.get("alwaysMultiSort"))&&!$.get("suppressMultiSort"),U=[];if(!G){let _=this.clearSortBarTheseColumns(q,Z);U.push(..._)}this.updateSortIndex(z),U.push(...q),this.dispatchSortChangedEvents(Z,U)}updateSortIndex(z){let{gos:J,colModel:Q,showRowGroupCols:Z}=this.beans,$=b4(J),X=Z?.getShowRowGroupCol(z.getId()),Y=$?X||z:z,q=this.getColumnsWithSortingOrdered();Q.forAllCols((_)=>this.setColSortIndex(_,null));let G=q.filter((_)=>{if($&&_.colDef.showRowGroup)return!1;return _!==Y});(Y.getSortDef()?[...G,Y]:G).forEach((_,H)=>this.setColSortIndex(_,H))}onSortChanged(z,J){this.dispatchSortChangedEvents(z,J)}isSortActive(){let z=!1;return this.beans.colModel.forAllCols((J)=>{if(J.getSortDef())return z=!0,!0}),z}dispatchSortChangedEvents(z,J){let Q={type:"sortChanged",source:z};if(J)Q.columns=J;this.eventSvc.dispatchEvent(Q)}clearSortBarTheseColumns(z,J){let Q=[];return this.beans.colModel.forAllCols((Z)=>{if(!z.includes(Z)){if(Z.getSortDef())Q.push(Z);let $=Z4();this.setColSort(Z,$,J)}}),Q}getNextSortDirection(z,J){let Q=z.getSortingOrder(),Z=J===void 0?z.getSortDef():Z4(J),X=Q.findIndex((Y)=>f6(Y,Z))+1;if(X>=Q.length)X=0;return Z4(Q[X])}getIndexedSortMap(){let{gos:z,colModel:J,showRowGroupCols:Q,rowGroupColsSvc:Z}=this.beans,$=[];if(J.forAllCols((U)=>{if(U.getSortDef())$.push(U)}),J.pivotMode){let U=b4(z);$=$.filter((_)=>{let H=!!_.aggFunc,W=!_.primary,B=U?Q?.getShowRowGroupCol(_.getId()):_.colDef.showRowGroup;return H||W||B})}let X=Z?.columns.filter((U)=>!!U.getSortDef())??[],Y={};$.forEach((U,_)=>Y[U.getId()]=_),$.sort((U,_)=>{let H=U.getSortIndex(),W=_.getSortIndex();if(H!=null&&W!=null)return H-W;else if(H==null&&W==null){let B=Y[U.getId()],E=Y[_.getId()];return B>E?1:-1}else if(W==null)return-1;else return 1});let q=b4(z)&&!!X.length;if(q)$=[...new Set($.map((U)=>Q?.getShowRowGroupCol(U.getId())??U))];let G=new Map;if($.forEach((U,_)=>G.set(U,_)),q)for(let U of X){let _=Q.getShowRowGroupCol(U.getId());G.set(U,G.get(_))}return G}getColumnsWithSortingOrdered(){return[...this.getIndexedSortMap().entries()].sort(([,z],[,J])=>z-J).map(([z])=>z)}collectSortItems(z=!1){let J=[],Q=this.getColumnsWithSortingOrdered();for(let Z of Q){let $=Z.getSortDef()?.direction;if(!$)continue;let X=A4(Z.getSortDef()?.type),Y={sort:$,type:X};if(z)Y.colId=Z.getId();else Y.column=Z;J.push(Y)}return J}getSortModel(){return this.collectSortItems(!0)}getSortOptions(){return this.collectSortItems()}canColumnDisplayMixedSort(z){let J=b4(this.gos),Q=!!z.colDef.showRowGroup;return J&&Q}getDisplaySortForColumn(z){let J=this.beans.showRowGroupCols?.getSourceColumnsForGroupColumn(z);if(!this.canColumnDisplayMixedSort(z)||!J?.length)return z.getSortDef();let Z=z.colDef.field!=null||!!z.colDef.valueGetter?[z,...J]:J,$=Z[0].getSortDef();if(!Z.every((Y)=>f6(Y.getSortDef(),$)))return{type:A4(z.getSortDef()?.type),direction:"mixed"};return $}getDisplaySortIndexForColumn(z){return this.getIndexedSortMap().get(z)}setupHeader(z,J){let Q=()=>{let{type:Z,direction:$}=Z4(J.getSortDef());if(z.toggleCss("ag-header-cell-sorted-asc",$==="asc"),z.toggleCss("ag-header-cell-sorted-desc",$==="desc"),z.toggleCss("ag-header-cell-sorted-abs-asc",Z==="absolute"&&$==="asc"),z.toggleCss("ag-header-cell-sorted-abs-desc",Z==="absolute"&&$==="desc"),z.toggleCss("ag-header-cell-sorted-none",!$),J.colDef.showRowGroup){let q=!this.beans.showRowGroupCols?.getSourceColumnsForGroupColumn(J)?.every((G)=>$==G.getSortDef()?.direction);z.toggleCss("ag-header-cell-sorted-mixed",q)}};z.addManagedEventListeners({sortChanged:Q,columnPinned:Q,columnRowGroupChanged:Q,displayedColumnsChanged:Q})}initCol(z){let{sortIndex:J,initialSortIndex:Q}=z.colDef,Z=C9(z.colDef);if(Z)z.setSortDef(Z);if(J!==void 0){if(J!==null)z.sortIndex=J}else if(Q!==null)z.sortIndex=Q}updateColSort(z,J,Q){if(J===void 0)return;this.setColSort(z,Z4(J),Q)}setColSort(z,J,Q){if(!f6(z.getSortDef(),J))z.setSortDef(J),z.dispatchColEvent("sortChanged",Q);z.dispatchStateUpdatedEvent("sort")}setColSortIndex(z,J){z.sortIndex=J,z.dispatchStateUpdatedEvent("sortIndex")}createSortIndicator(z){return new H5(z)}getSortIndicatorSelector(){return kF}},XX={moduleName:"Sort",version:i,beans:[fF,FF],apiFunctions:{onSortChanged:DF},userComponents:{agSortIndicator:H5},icons:{sortAscending:"asc",sortDescending:"desc",sortUnSort:"none",sortAbsoluteAscending:"aasc",sortAbsoluteDescending:"adesc"}},SF=class extends S{constructor(){super(...arguments);this.beanName="syncSvc",this.waitingForColumns=!1}postConstruct(){this.addManagedPropertyListener("columnDefs",(z)=>this.setColumnDefs(z))}start(){this.beans.ctrlsSvc.whenReady(this,()=>{let z=this.gos.get("columnDefs");if(z)this.setColumnsAndData(z);else this.waitingForColumns=!0;this.gridReady()})}setColumnsAndData(z){let{colModel:J,rowModel:Q}=this.beans;J.setColumnDefs(z??[],"gridInitializing"),Q.start()}gridReady(){let{eventSvc:z,gos:J}=this;z.dispatchEvent({type:"gridReady"}),M2(J,`initialised successfully, enterprise = ${J.isModuleRegistered("EnterpriseCore")}`)}setColumnDefs(z){let J=this.gos.get("columnDefs");if(!J)return;if(this.waitingForColumns){this.waitingForColumns=!1,this.setColumnsAndData(J);return}this.beans.colModel.setColumnDefs(J,Dz(z.source))}};var VF="paste",RF=class extends S{constructor(){super(...arguments);this.beanName="changeDetectionSvc",this.deferredDepth=0,this.batchedPath=null,this.batchedNodes=null}destroy(){super.destroy(),this.batchedPath=null,this.batchedNodes=null}postConstruct(){this.csrm=uZ(this.beans),this.addManagedEventListeners({cellValueChanged:this.onCellValueChanged.bind(this)})}beginDeferred(){this.deferredDepth++}endDeferred(){if(this.deferredDepth===0)return;if(--this.deferredDepth>0)return;let z=this.batchedPath,J=this.batchedNodes;if(this.batchedPath=null,this.batchedNodes=null,z)this.csrm?.doAggregate(z);let{rowRenderer:Q}=this.beans;if(J)for(let Z of J)U8(Q,Z);if(z){let Z=z.getSortedRows();for(let $=0,X=Z.length;${let{sibling:Q,pinnedSibling:Z}=J;z.refreshRowByNode(J),z.refreshRowByNode(Q),z.refreshRowByNode(Z),z.refreshRowByNode(Q?.pinnedSibling),z.refreshRowByNode(Z?.sibling)},AF=class extends S{constructor(){super(...arguments);this.beanName="expressionSvc",this.cache={}}evaluate(z,J){if(typeof z==="string")return this.evaluateExpression(z,J);else r(15,{expression:z})}evaluateExpression(z,J){try{return this.createExpressionFunction(z)(J.value,J.context,J.oldValue,J.newValue,J.value,J.node,J.data,J.colDef,J.rowIndex,J.api,J.getValue,J.column,J.columnGroup)}catch(Q){return r(16,{expression:z,params:J,e:Q}),null}}createExpressionFunction(z){let J=this.cache;if(J[z])return J[z];let Q=this.createFunctionBody(z),Z=Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, getValue, column, columnGroup",Q);return J[z]=Z,Z}createFunctionBody(z){if(z.includes("return"))return z;else return"return "+z+";"}};var jF={moduleName:"Expression",version:i,beans:[AF]},OF={moduleName:"ChangeDetection",version:i,beans:[RF]};var PF=class extends S{constructor(){super(...arguments);this.beanName="valueSvc",this.executeValueGetter=this.executeValueGetterWithoutValueCache,this.isTreeData=!1,this.isSsrm=!1,this.cellExpressions=!1,this.groupSuppressBlankHeader=!1,this.editSvc=void 0,this.valueCache=void 0,this.rowGroupColsSvc=void 0,this.expressionSvc=void 0,this.dataTypeSvc=void 0,this.formulaDataSvc=void 0}wireBeans(z){this.expressionSvc=z.expressionSvc,this.colModel=z.colModel,this.valueCache=z.valueCache,this.dataTypeSvc=z.dataTypeSvc,this.editSvc=z.editSvc,this.formulaDataSvc=z.formulaDataSvc,this.rowGroupColsSvc=z.rowGroupColsSvc,this.init()}init(){let z=this.gos;this.isSsrm=Az(z),this.cellExpressions=z.get("enableCellExpressions"),this.isTreeData=z.get("treeData"),this.groupSuppressBlankHeader=z.get("groupSuppressBlankHeader"),this.executeValueGetter=this.valueCache&&z.get("valueCache")?this.executeValueGetterWithValueCache:this.executeValueGetterWithoutValueCache}postConstruct(){this.init();let z=(J)=>this.callColumnCellValueChangedHandler(J);this.eventSvc.addListener("cellValueChanged",z,!0),this.addDestroyFunc(()=>this.eventSvc.removeListener("cellValueChanged",z,!0)),this.addManagedPropertyListener("treeData",(J)=>this.isTreeData=J.currentValue),this.addManagedPropertyListener("groupSuppressBlankHeader",(J)=>this.groupSuppressBlankHeader=J.currentValue)}getValueForDisplay(z){let J=this.beans,Q=z.column,Z=z.node,$=J.showRowGroupColValueSvc,X=!Q&&Z.group,Y=!this.isTreeData||Z.footer;if($&&Y&&(X||Q?.colDef.showRowGroup)){let W=$.getGroupValue(Z,Q,this.displayIgnoresAggData(Z));if(W==null)return{value:null,valueFormatted:null};return{value:W.value,valueFormatted:z.includeValueFormatted?$.formatAndPrefixGroupColValue(W,Q,z.exporting):null}}if(!Q)return{value:Z.key,valueFormatted:null};let q=this.getValue(Q,Z,z.from,this.displayIgnoresAggData(Z)),G=q,U=J.formula,_=Q.colDef;if(_.allowFormula&&U?.isFormula(q))if(z.useRawFormula)q=U.normaliseFormula(q,!0),G=U.resolveValue(Q,Z);else q=U.resolveValue(Q,Z),G=q;let H=z.includeValueFormatted&&!(z.exporting&&_.useValueFormatterForExport===!1);return{value:q,valueFormatted:H?this.formatValue(Q,Z,G):null}}getValue(z,J,Q,Z=!1){if(!J)return;let $=z.colDef,X=J.group;if(!X&&!J.rowPinned){let G=$.pivotValueColumn;if(G)z=G}let Y=this.editSvc;if(Y&&Q!=="data"){let G=Y.getPendingEditValue(J,z,Q);if(G!==void 0)return G}let q=this.resolveValue(z,J,Z,X);if(q===void 0){if(X){let G=$.showRowGroup;if(typeof G==="string"){let U=this.rowGroupColsSvc?.getColumnIndex(G);if(U!=null&&U>J.level)return null}}return}if(this.cellExpressions&&GZ(q)){let G=q.substring(1);q=this.executeValueGetter(G,J.data,z,J)}return q}displayIgnoresAggData(z){if(!z.group||z.footer||z.level===-1)return!1;if(!z.sibling||this.groupSuppressBlankHeader)return!1;if(z.leafGroup&&this.colModel.pivotMode)return!1;return!!z.expanded}resolveValue(z,J,Q,Z){let{colDef:$,colId:X}=z;if(!Z&&$.allowFormula){let L=this.beans.formula?.getDataSourceFormula(J,z);if(L!==void 0)return L}let Y=Z&&!Q?J.aggData:void 0,q=this.isTreeData;if(q&&Y?.[X]!==void 0)return Y[X];let G=J.data,U=$.field,_=$.valueGetter;if(q){if(_)return this.executeValueGetter(_,G,z,J);if(U&&G)return z.fieldContainsDots?B2(G,U):G[U]}let H=J.groupData;if(H&&X in H)return H[X];if(Y?.[X]!==void 0)return Y[X];let W=$.showRowGroup,B=typeof W!=="string"||!Z,E=this.isSsrm,K=E&&Q&&!!$.aggFunc;if(_&&!K)return B?this.executeValueGetter(_,G,z,J):void 0;if(E&&J.footer&&J.field&&(W===!0||W===J.field)){if(!G)return;let L=J.field;return z.fieldContainsDots?B2(G,L):G[L]}if(U&&G&&!K){if(!B)return;return z.fieldContainsDots?B2(G,U):G[U]}return}parseValue(z,J,Q,Z){let $=z.colDef;if($.allowFormula&&this.beans.formula?.isFormula(Q))return Q;let X=$.valueParser;if(P(X)){let Y=C(this.gos,{node:J,data:J?.data,oldValue:Z,newValue:Q,colDef:$,column:z});if(typeof X==="function")return X(Y);return this.expressionSvc?.evaluate(X,Y)}return Q}getDeleteValue(z,J){if(P(z.colDef.valueParser))return this.parseValue(z,J,"",this.getValueForDisplay({column:z,node:J,from:"edit"}).value)??null;return null}formatValue(z,J,Q,Z,$=!0){let{expressionSvc:X}=this.beans,Y=null,q,G=z.colDef;if(Z)q=Z;else if($)q=G.valueFormatter;if(q){let U=J?J.data:null,_=C(this.gos,{value:Q,node:J,data:U,colDef:G,column:z});if(typeof q==="function")Y=q(_);else Y=X?X.evaluate(q,_):null}else if(G.refData)return G.refData[Q]||"";if(Y==null&&Array.isArray(Q))Y=Q.join(", ");return Y}setValue(z,J,Q,Z){let $=J.colDef;if(!z.data&&this.canCreateRowNodeData(z,$))z.data={};if(!this.isSetValueSupported(J,z,Q,$))return!1;let X=this.getValue(J,z,"data"),Y=C(this.gos,{node:z,data:z.data,oldValue:X,newValue:Q,colDef:$,column:J}),q=!1;if(z.data){let U=this.handleExternalFormulaChange({column:J,eventSource:Z,newValue:Q,setterParams:Y,rowNode:z});if(U!==null)return U;q=this.computeValueChange({column:J,rowNode:z,newValue:Q,params:Y,rowData:z.data,valueSetter:$.valueSetter,field:$.field})??!0}let G=this.beans.changeDetectionSvc;G?.beginDeferred();try{if(z.group){let U=this.beans.rowGroupingEditValueSvc?.setGroupDataValue(z,J,Q,X,Z,q||Q!==X);if(U!==void 0){if(!q&&!U)return!1;return this.finishValueChange(z,J,Y,Z,Q)}}if(!q)return!1;return this.finishValueChange(z,J,Y,Z)}finally{G?.endDeferred()}}canCreateRowNodeData(z,J){if(!z.group)return!0;if(J.groupRowValueSetter!=null||J.groupRowEditable!=null)return!1;if(J.pivotValueColumn)return!1;return!0}finishValueChange(z,J,Q,Z,$){z.resetQuickFilterAggregateText(),this.valueCache?.onDataChanged();let X=$===void 0?this.getValue(J,z,"data"):$;if(this.dispatchCellValueChangedEvent(z,Q,X,Z),z.pinnedSibling)this.dispatchCellValueChangedEvent(z.pinnedSibling,Q,X,Z);return!0}isSetValueSupported(z,J,Q,Z){let{field:$,valueSetter:X}=Z,Y=this.beans.formula,q=z.colDef.allowFormula&&Y?.isFormula(Q),G=!!this.formulaDataSvc?.hasDataSource();if(d($)&&d(X)&&!(G&&q)){if(J.group&&(Z.groupRowValueSetter||Z.groupRowEditable))return!0;return V(17),!1}if(this.dataTypeSvc&&!this.dataTypeSvc.checkType(z,Q))return V(135),!1;return!0}handleExternalFormulaChange(z){let{column:J,rowNode:Q,newValue:Z,eventSource:$,setterParams:X}=z,Y=this.beans.formula,q=this.formulaDataSvc;if(!J.colDef.allowFormula||!q?.hasDataSource())return null;let G=Y?.isFormula(Z),U=q.getFormula({column:J,rowNode:Q});if(G){if(U===Z)return!1;q.setFormula({column:J,rowNode:Q,formula:Z});let H=Y?.resolveValue(J,Q),W=J.colDef;if(P(W.valueSetter)||!d(W.field)){let B={...X,newValue:H};this.computeValueChange({column:J,rowNode:Q,newValue:H,params:B,rowData:Q.data,valueSetter:W.valueSetter,field:W.field})}return this.finishValueChange(Q,J,X,$)}if(U!==void 0)q.setFormula({column:J,rowNode:Q,formula:void 0});return null}computeValueChange(z){let{valueSetter:J,params:Q,rowData:Z,field:$,column:X,newValue:Y}=z;if(P(J)){if(typeof J==="function")return J(Q);return this.expressionSvc?.evaluate(J,Q)}return!!Z&&this.setValueUsingField(Z,$,Y,X.fieldContainsDots)}dispatchCellValueChangedEvent(z,J,Q,Z){this.eventSvc.dispatchEvent({type:"cellValueChanged",event:null,rowIndex:z.rowIndex,rowPinned:z.rowPinned,column:J.column,colDef:J.colDef,data:z.data,node:z,oldValue:J.oldValue,newValue:Q,newRawValue:J.newValue,value:Q,source:Z})}callColumnCellValueChangedHandler(z){let J=z.colDef.onCellValueChanged;if(typeof J==="function")this.beans.frameworkOverrides.wrapOutgoing(()=>{J(z)})}setValueUsingField(z,J,Q,Z){if(!J)return!1;let $=!1;if(!Z){if($=z[J]===Q,!$)z[J]=Q}else{let X=J.split("."),Y=z;while(X.length>0&&Y){let q=X.shift();if(X.length===0){if($=Y[q]===Q,!$)Y[q]=Q}else Y=Y[q]}}return!$}executeValueGetterWithValueCache(z,J,Q,Z){let $=Q.colId,X=this.valueCache.getValue(Z,$);if(X!==void 0)return X;let Y=this.executeValueGetterWithoutValueCache(z,J,Q,Z);return this.valueCache.setValue(Z,$,Y),Y}executeValueGetterWithoutValueCache(z,J,Q,Z){let $=C(this.gos,{data:J,node:Z,column:Q,colDef:Q.colDef,getValue:(Y)=>this.getValueCallback(Z,Y)}),X;if(typeof z==="function")X=z($);else X=this.expressionSvc?.evaluate(z,$);return X}getValueCallback(z,J){let Q=this.colModel.getColDefColOrCol(J);return Q?this.getValue(Q,z,"data"):null}getKeyForNode(z,J){let Q=this.getValue(z,J,"data"),Z=z.colDef.keyCreator,$=Q;if(Z){let X=C(this.gos,{value:Q,colDef:z.colDef,column:z,node:J,data:J.data});$=Z(X)}if(typeof $==="string"||$==null)return $;if($=String($),$==="[object Object]")V(121);return $}},TF={moduleName:"CommunityCore",version:i,beans:[K3,oH,mB,gU,WF,ZB,U3,N3,GB,wK,xK,EF,PF,B3,q3,E3,iB,SF,bB,xB,s3],icons:{selectOpen:"small-down",smallDown:"small-down",colorPicker:"color-picker",smallUp:"small-up",checkboxChecked:"small-up",checkboxIndeterminate:"checkbox-indeterminate",checkboxUnchecked:"checkbox-unchecked",radioButtonOn:"radio-button-on",radioButtonOff:"radio-button-off",smallLeft:"small-left",smallRight:"small-right"},apiFunctions:{getGridId:eH,destroy:zW,isDestroyed:JW,getGridOption:QW,setGridOption:ZW,updateGridOptions:M$,isModuleRegistered:$W},dependsOn:[CB,n2,cW,XX,n3,Z5,d3,HF,OF,t3,Y1,uK,iK,o3,gB,yB,jF,DB,dK]};function oQ(z){let{inputValue:J,allSuggestions:Q,hideIrrelevant:Z,maxSuggestions:$}=z,X=(Q??[]).map((G,U)=>({value:G,relevance:vF(J,G),idx:U}));if(X.sort((G,U)=>G.relevance-U.relevance),Z)X=X.filter((G)=>G.relevance0)X=X.slice(0,$);let Y=[],q=[];for(let G of X)Y.push(G.value),q.push(G.idx);return{values:Y,indices:q}}function vF(z,J){let Q=z.length,Z=J.length;if(Z===0)return Q?Q:0;let $=z.toLocaleLowerCase(),X=J.toLocaleLowerCase(),Y;if(Q>0){let H=X.indexOf($);if(H>=0)return H*0.01}if(z.length1&&E>1){let L=z[H-2],D=$[H-2],M=J[E-2],f=X[E-2];if(D===f){if(U++,L===M)U++}}if(H<_)U++;G[E]=q[E-1]}Y=q,q=G,G=Y}return q[Z]/(U+1)}var YX={AdvancedFilter:1,AiToolkit:1,AllEnterprise:1,BatchEdit:1,CellSelection:1,Clipboard:1,ColumnMenu:1,ColumnsToolPanel:1,ContextMenu:1,ExcelExport:1,FiltersToolPanel:1,Find:1,GridCharts:1,IntegratedCharts:1,GroupFilter:1,MasterDetail:1,Menu:1,MultiFilter:1,NewFiltersToolPanel:1,Pivot:1,RangeSelection:1,RichSelect:1,RowNumbers:1,RowGrouping:1,RowGroupingEdit:1,RowGroupingPanel:1,ServerSideRowModelApi:1,ServerSideRowModel:1,SetFilter:1,SideBar:1,Sparklines:1,StatusBar:1,Toolbar:1,TreeData:1,ViewportRowModel:1,Formula:1,Notes:1},jQ=["TextFilter","NumberFilter","BigIntFilter","DateFilter","SetFilter","MultiFilter","GroupFilter","CustomFilter"],IF={EditCore:["TextEditor","NumberEditor","DateEditor","CheckboxEditor","LargeTextEditor","SelectEditor","RichSelect","CustomEditor"],CheckboxCellRenderer:["AllCommunity"],CsrmHierarchy:["RowGrouping","Pivot","TreeData"],CsrmGroupStages:["RowGrouping","Pivot","TreeData"],ColumnFilter:jQ,ColumnGroupHeaderComp:["AllCommunity"],ColumnGroup:["AllCommunity"],ColumnHeaderComp:["AllCommunity"],ColumnMove:["AllCommunity"],ColumnResize:["AllCommunity"],CommunityCore:["AllCommunity"],CsrmSsrmSharedApi:["ClientSideRowModelApi","ServerSideRowModelApi"],RowModelSharedApi:["ClientSideRowModelApi","ServerSideRowModelApi"],EnterpriseCore:["AllEnterprise"],FilterCore:[...jQ,"QuickFilter","ExternalFilter","AdvancedFilter"],GroupCellRenderer:["RowGrouping","Pivot","TreeData","MasterDetail","ServerSideRowModel"],KeyboardNavigation:["AllCommunity"],LoadingCellRenderer:["ServerSideRowModel"],MenuCore:["ColumnMenu","ContextMenu"],MenuItem:["ColumnMenu","ContextMenu","MultiFilter","IntegratedCharts","ColumnsToolPanel"],Overlay:["AllCommunity"],PinnedColumn:["AllCommunity"],SharedAggregation:["RowGrouping","Pivot","TreeData","ServerSideRowModel"],SharedDragAndDrop:["AllCommunity"],SharedMasterDetail:["MasterDetail","ServerSideRowModel"],SharedMenu:[...jQ,"ColumnMenu","ContextMenu"],SharedPivot:["Pivot","ServerSideRowModel"],SharedRowGrouping:["RowGrouping","ServerSideRowModel"],SharedRowSelection:["RowSelection","ServerSideRowModel"],SkeletonCellRenderer:["ServerSideRowModel"],Sort:["AllCommunity"],SsrmInfiniteSharedApi:["InfiniteRowModel","ServerSideRowModelApi"],SharedTreeData:["TreeData","ServerSideRowModel"]},CF={InfiniteRowModel:"infinite",ClientSideRowModelApi:"clientSide",ClientSideRowModel:"clientSide",ServerSideRowModelApi:"serverSide",ServerSideRowModel:"serverSide",ViewportRowModel:"viewport"};function yF(z,J){let Q=[];for(let Z of Array.isArray(z)?z:[z]){let $=IF[Z];if($)for(let X of $){let Y=CF[X];if(!Y||Y===J)Q.push(X)}else Q.push(Z)}return Q}var qX=(z,J,Q)=>{if(Q)return`${["import { AgGridProvider, AgGridReact } from 'ag-grid-react';",...z].join(` +`)} + +const modules = [ ${J} ]; + +function App() { + return ( + + + + ); +}`;return`${z.join(` +`)} + +ModuleRegistry.registerModules([ ${J} ]);`},GX=(z)=>{let J=z!==void 0;return`No AG Grid modules are registered! It is recommended to start with all Community features via the AllCommunityModule: + +${qX([`import { ${J?"":"ModuleRegistry, "}AllCommunityModule } from 'ag-grid-community';`],"AllCommunityModule",J)} +`},bF=(z,J)=>{let Q=z.map((X)=>`import { ${K2(X)} } from '${YX[X]?"ag-grid-enterprise":"ag-grid-community"}';`);if(z.some((X)=>X==="IntegratedCharts"||X==="Sparklines"))Q.push("import { AgChartsEnterpriseModule } from 'ag-charts-enterprise';");let $=z.map((X)=>K2(X,!0)).join(", ");if(!J)Q.unshift("import { ModuleRegistry } from 'ag-grid-community';");return`${qX(Q,$,J)} + +For more info see: ${P1}/modules/`};function K2(z,J=!1){if(J&&(z==="IntegratedCharts"||z==="Sparklines"))return`${z}Module.with(AgChartsEnterpriseModule)`;return`${z}Module`}function xF(z,J){let Q=J.filter((X)=>X==="IntegratedCharts"||X==="Sparklines"),Z="";if(!globalThis?.agCharts&&Q.length>0)Z=`Unable to use ${z} as either the ag-charts-community or ag-charts-enterprise script needs to be included alongside ag-grid-enterprise. +`;else if(J.some((X)=>YX[X]))Z=Z+`Unable to use ${z} as that requires the ag-grid-enterprise script to be included. +`;return Z}function UX({moduleName:z,rowModelType:J}){return`To use the ${z}Module you must set the gridOption "rowModelType='${J}'"`}var OQ=({reasonOrId:z,moduleName:J,gridScoped:Q,gridId:Z,rowModelType:$,additionalText:X,isUmd:Y,usesAgGridProvider:q})=>{let G=yF(J,$),U=typeof z==="string"?z:hF[z];if(Y)return xF(U,G);let _=G.filter((B)=>B==="IntegratedCharts"||B==="Sparklines"),H=_.length>0?`${_.map((B)=>K2(B)).join()} must be initialised with an AG Charts module. One of 'AgChartsCommunityModule' / 'AgChartsEnterpriseModule'.`:"";return`${`Unable to use ${U} as ${G.length>1?"one of "+G.map((B)=>K2(B)).join(", "):K2(G[0])} is not registered${Q?" for gridId: "+Z:""}. ${H} Check if you have registered the module: +`} +${bF(G,q)}`+(X?` + +${X}`:"")},_8=(z)=>{return`${z} must be initialised with an AG Charts module. One of 'AgChartsCommunityModule' / 'AgChartsEnterpriseModule'. + +import { AgChartsEnterpriseModule } from 'ag-charts-enterprise'; +import { ModuleRegistry } from 'ag-grid-community'; +import { ${z} } from 'ag-grid-enterprise'; + +ModuleRegistry.registerModules([${z}.with(AgChartsEnterpriseModule)]); + `},wF=(z)=>`AG Grid: Unable to use the Clipboard API (navigator.clipboard.${z}()). The reason why it could not be used has been logged in the previous line. For this reason the grid has defaulted to using a workaround which doesn't perform as well. Either fix why Clipboard API is blocked, OR stop this message from appearing by setting grid property suppressClipboardApi=true (which will default the grid to using the workaround rather than the API.`,NF={1:()=>"`rowData` must be an array",2:({nodeId:z})=>`Duplicate node id '${z}' detected from getRowId callback, this could cause issues in your grid.`,3:()=>"Calling gridApi.resetRowHeights() makes no sense when using Auto Row Height.",4:({id:z})=>`Could not find row id=${z}, data item was not found for this id`,5:({data:z})=>["Could not find data item as object was not found.",z," Consider using getRowId to help the Grid find matching row data"],6:()=>"'groupHideOpenParents' only works when specifying specific columns for 'colDef.showRowGroup'",7:()=>"Pivoting is not supported with aligned grids as it may produce different columns in each grid.",8:({key:z})=>`Unknown key for navigation ${z}`,9:({variable:z})=>`No value for ${z?.cssName}. This usually means that the grid has been initialised before styles have been loaded. The default value of ${z?.defaultValue} will be used and updated when styles load.`,10:({eventType:z})=>`As of v33, the '${z}' event is deprecated. Use the global 'modelUpdated' event to determine when row children have changed.`,11:()=>"No gridOptions provided to createGrid",12:({colKey:z})=>["column ",z," not found"],13:()=>"Could not find rowIndex, this means tasks are being executed on a rowNode that has been removed from the grid.",14:({groupPrefix:z})=>`Row IDs cannot start with ${z}, this is a reserved prefix for AG Grid's row grouping feature.`,15:({expression:z})=>["value should be either a string or a function",z],16:({expression:z,params:J,e:Q})=>["Processing of the expression failed","Expression = ",z,"Params = ",J,"Exception = ",Q],17:()=>"you need either field or valueSetter set on colDef for editing to work",18:()=>"alignedGrids contains an undefined option.",19:()=>"alignedGrids - No api found on the linked grid.",20:()=>`You may want to configure via a callback to avoid setup race conditions: + "alignedGrids: () => [linkedGrid]"`,21:()=>"pivoting is not supported with aligned grids. You can only use one of these features at a time in a grid.",22:({key:z})=>`${z} is an initial property and cannot be updated.`,23:()=>"The return of `getRowHeight` cannot be zero. If the intention is to hide rows, use a filter instead.",24:()=>"row height must be a number if not using standard row model",25:({id:z})=>["The getRowId callback must return a string. The ID ",z," is being cast to a string."],26:({fnName:z,preDestroyLink:J})=>{return`Grid API function ${z}() cannot be called as the grid has been destroyed. + Either clear local references to the grid api, when it is destroyed, or check gridApi.isDestroyed() to avoid calling methods against a destroyed grid. + To run logic when the grid is about to be destroyed use the gridPreDestroy event. See: ${J}`},27:({fnName:z,module:J})=>`API function '${z}' not registered to module '${J}'`,28:()=>"setRowCount cannot be used while using row grouping.",29:()=>"tried to call sizeColumnsToFit() but the grid is coming back with zero width, maybe the grid is not visible yet on the screen?",30:({toIndex:z})=>["tried to insert columns in invalid location, toIndex = ",z,"remember that you should not count the moving columns when calculating the new index"],31:()=>"infinite loop in resizeColumnSets",32:()=>"applyColumnState() - the state attribute should be an array, however an array was not found. Please provide an array of items (one for each col you want to change) for state.",33:()=>"stateItem.aggFunc must be a string. if using your own aggregation functions, register the functions first before using them in get/set state. This is because it is intended for the column state to be stored and retrieved as simple JSON.",34:({key:z})=>`the column type '${z}' is a default column type and cannot be overridden.`,35:()=>"Column type definitions 'columnTypes' with a 'type' attribute are not supported because a column type cannot refer to another column type. Only column definitions 'columnDefs' can use the 'type' attribute to refer to a column type.",36:({t:z})=>"colDef.type '"+z+"' does not correspond to defined gridOptions.columnTypes",37:()=>"Changing the column pinning status is not allowed with domLayout='print'",38:({iconName:z})=>`provided icon '${z}' needs to be a string or a function`,39:()=>"Applying column order broke a group where columns should be married together. Applying new order has been discarded.",40:({e:z,method:J})=>`${z} +${wF(J)}`,41:()=>"Browser did not allow document.execCommand('copy'). Ensure 'api.copySelectedRowsToClipboard() is invoked via a user event, i.e. button click, otherwise the browser will prevent it for security reasons.",42:()=>"Browser does not support document.execCommand('copy') for clipboard operations",43:({iconName:z})=>`As of v33, icon '${z}' is deprecated. Use the icon CSS name instead.`,44:()=>'Data type definition hierarchies (via the "extendsDataType" property) cannot contain circular references.',45:({parentCellDataType:z})=>`The data type definition ${z} does not exist.`,46:()=>'The "baseDataType" property of a data type definition must match that of its parent.',47:({cellDataType:z})=>`Missing data type definition - "${z}"`,48:({property:z,inferred:J,colId:Q})=>{let Z=J?" (inferred)":"",$=Q?` for column "${Q}"`:"";return`Cell data type is "object"${Z} but no Value ${z} has been provided${$}. Please either provide an object data type definition with a Value ${z}, or set: + - "colDef.value${z}"${J&&z==="Parser"?` + - "colDef.cellDataType = 'object'"`:""}`},49:({methodName:z})=>`Framework component is missing the method ${z}()`,50:({compName:z})=>`Could not find component ${z}, did you forget to configure this component?`,51:()=>"Export cancelled. Export is not allowed as per your configuration.",52:()=>"There is no `window` associated with the current `document`",53:()=>"unknown value type during csv conversion",54:()=>"Could not find document body, it is needed for drag and drop and context menu.",55:()=>"addRowDropZone - A container target needs to be provided",56:()=>"addRowDropZone - target already exists in the list of DropZones. Use `removeRowDropZone` before adding it again.",57:()=>"unable to show popup filter, filter instantiation failed",58:()=>"no values found for select cellEditor",59:()=>"cannot select pinned rows",60:()=>"cannot select node until it has finished loading",61:()=>"since version v32.2.0, rowNode.isFullWidthCell() has been deprecated. Instead check `rowNode.detail` followed by the user provided `isFullWidthRow` grid option.",62:({colId:z})=>`setFilterModel() - no column found for colId: ${z}`,63:({colId:z})=>`setFilterModel() - unable to fully apply model, filtering disabled for colId: ${z}`,64:({colId:z})=>`setFilterModel() - unable to fully apply model, unable to create filter for colId: ${z}`,65:()=>"filter missing setModel method, which is needed for setFilterModel",66:()=>"filter API missing getModel method, which is needed for getFilterModel",67:()=>"Filter is missing isFilterActive() method",68:()=>"Column Filter API methods have been disabled as Advanced Filters are enabled.",69:({guiFromFilter:z})=>`getGui method from filter returned ${z}; it should be a DOM element.`,70:({newFilter:z})=>`Grid option quickFilterText only supports string inputs, received: ${typeof z}`,71:()=>"debounceMs is ignored when apply button is present",72:({keys:z})=>["ignoring FilterOptionDef as it doesn't contain one of ",z],73:()=>"invalid FilterOptionDef supplied as it doesn't contain a 'displayKey'",74:()=>"no filter options for filter",75:()=>"Unknown button type specified",76:({filterModelType:z})=>['Unexpected type of filter "',z,'", it looks like the filter was configured with incorrect Filter Options'],77:()=>"Filter model is missing 'conditions'",78:()=>'Filter Model contains more conditions than "filterParams.maxNumConditions". Additional conditions have been ignored.',79:()=>'"filterParams.maxNumConditions" must be greater than or equal to zero.',80:()=>'"filterParams.numAlwaysVisibleConditions" must be greater than or equal to zero.',81:()=>'"filterParams.numAlwaysVisibleConditions" cannot be greater than "filterParams.maxNumConditions".',82:({param:z})=>`DateFilter ${z} is not a number`,83:()=>"DateFilter minValidYear should be <= maxValidYear",84:()=>"DateFilter minValidDate should be <= maxValidDate",85:()=>"DateFilter should not have both minValidDate and minValidYear parameters set at the same time! minValidYear will be ignored.",86:()=>"DateFilter should not have both maxValidDate and maxValidYear parameters set at the same time! maxValidYear will be ignored.",87:()=>"DateFilter parameter minValidDate should always be lower than or equal to parameter maxValidDate.",88:({index:z})=>`Invalid row index for ensureIndexVisible: ${z}`,89:()=>"A template was provided for Header Group Comp - templates are only supported for Header Comps (not groups)",90:()=>"datasource is missing getRows method",91:()=>"Filter is missing method doesFilterPass",92:()=>"AnimationFrameService called but animation frames are off",93:()=>"cannot add multiple ranges when `cellSelection.suppressMultiRanges = true`",94:({paginationPageSizeOption:z,pageSizeSet:J,pageSizesSet:Q,pageSizeOptions:Z})=>`'paginationPageSize=${z}'${J?"":" (default value)"}, but ${z} is not included in${Q?"":" the default"} paginationPageSizeSelector=[${Z?.join(", ")}].`,95:({paginationPageSizeOption:z,paginationPageSizeSelector:J})=>`Either set '${J}' to an array that includes ${z} or to 'false' to disable the page size selector.`,96:({id:z,data:J})=>["Duplicate ID",z,"found for pinned row with data",J,"When `getRowId` is defined, it must return unique IDs for all pinned rows. Use the `rowPinned` parameter."],97:({colId:z})=>`cellEditor for column ${z} is missing getGui() method`,98:()=>"popup cellEditor does not work with fullRowEdit - you cannot use them both - either turn off fullRowEdit, or stop using popup editors.",99:()=>"Since v32, `api.hideOverlay()` does not hide the loading overlay when `loading=true`. Set `loading=false` instead.",101:({propertyName:z,componentName:J,agGridDefaults:Q,jsComps:Z})=>{let $=[],X=[...Object.keys(Q??[]).filter((q)=>!["agCellEditor","agGroupRowRenderer","agSortIndicator"].includes(q)),...Object.keys(Z??[]).filter((q)=>!!Z[q])],Y=oQ({inputValue:J,allSuggestions:X,hideIrrelevant:!0,maxSuggestions:4}).values;if($.push(`Could not find '${J}' component. It was configured as "${z}: '${J}'" but it wasn't found in the list of registered components. +`),Y.length>0)$.push(` Did you mean: [${Y.slice(0,3)}]? +`);return $.push("If using a custom component check it has been registered correctly."),$},102:()=>"selectAll: 'filtered' only works when gridOptions.rowModelType='clientSide'",103:()=>"Invalid selection state. When using client-side row model, the state must conform to `string[]`.",104:({value:z,param:J})=>`Numeric value ${z} passed to ${J} param will be interpreted as ${z} seconds. If this is intentional use "${z}s" to silence this warning.`,105:({e:z})=>["chart rendering failed",z],106:()=>`Theming API and Legacy Themes are both used in the same page. A Theming API theme has been provided to the 'theme' grid option, but the file (ag-grid.css) is also included and will cause styling issues. Remove ag-grid.css from the page. See the migration guide: ${P1}/theming-migration/`,107:({key:z,value:J})=>`Invalid value for theme param ${z} - ${J}`,108:({e:z})=>["chart update failed",z],109:({inputValue:z,allSuggestions:J})=>{let Q=oQ({inputValue:z,allSuggestions:J,hideIrrelevant:!0,maxSuggestions:4}).values;return[`Could not find '${z}' aggregate function. It was configured as "aggFunc: '${z}'" but it wasn't found in the list of registered aggregations.`,Q.length>0?` Did you mean: [${Q.slice(0,3)}]?`:"","If using a custom aggregation function check it has been registered correctly."].join(` +`)},110:()=>"groupHideOpenParents only works when specifying specific columns for colDef.showRowGroup",111:()=>"Invalid selection state. When `groupSelects` is enabled, the state must conform to `IServerSideGroupSelectionState`.",113:()=>"Set Filter cannot initialise because you are using a row model that does not contain all rows in the browser. Either use a different filter type, or configure Set Filter such that you provide it with values",114:({component:z})=>`Could not find component with name of ${z}. Is it in Vue.components?`,116:()=>"Invalid selection state. The state must conform to `IServerSideSelectionState`.",117:()=>"selectAll must be of boolean type.",118:()=>"Infinite scrolling must be enabled in order to set the row count.",119:()=>"Unable to instantiate filter",120:()=>"MultiFloatingFilterComp expects MultiFilter as its parent",121:()=>"a column you are grouping or pivoting by has objects as values. If you want to group by complex objects then either a) use a colDef.keyCreator (see AG Grid docs) or b) to toString() on the object to return a key",122:()=>"could not find the document, document is empty",123:()=>"Advanced Filter is only supported with the Client-Side Row Model or Server-Side Row Model.",124:()=>"No active charts to update.",125:({chartId:z})=>`Unable to update chart. No active chart found with ID: ${z}.`,126:()=>"unable to restore chart as no chart model is provided",127:({allRange:z})=>`unable to create chart as ${z?"there are no columns in the grid":"no range is selected"}.`,128:({feature:z})=>`${z} is only available if using 'multiRow' selection mode.`,129:({feature:z,rowModel:J})=>`${z} is only available if using 'clientSide' or 'serverSide' rowModelType, you are using ${J}.`,130:()=>'cannot multi select unless selection mode is "multiRow"',132:()=>"Row selection features are not available unless `rowSelection` is enabled.",133:({iconName:z})=>`icon '${z}' function should return back a string or a dom object`,134:({iconName:z})=>`Did not find icon '${z}'`,135:()=>"Data type of the new value does not match the cell data type of the column",136:()=>"Unable to update chart as the 'type' is missing. It must be either 'rangeChartUpdate', 'pivotChartUpdate', or 'crossFilterChartUpdate'.",137:({type:z,currentChartType:J})=>`Unable to update chart as a '${z}' update type is not permitted on a ${J}.`,138:({chartType:z})=>`invalid chart type supplied: ${z}`,139:({customThemeName:z})=>`a custom chart theme with the name ${z} has been supplied but not added to the 'chartThemes' list`,140:({name:z})=>`no stock theme exists with the name '${z}' and no custom chart theme with that name was supplied to 'customChartThemes'`,141:()=>"cross filtering with row grouping is not supported.",142:()=>"cross filtering is only supported in the client side row model.",143:({panel:z})=>`'${z}' is not a valid Chart Tool Panel name`,144:({type:z})=>`Invalid charts data panel group name supplied: '${z}'`,145:({group:z})=>`As of v32, only one charts customize panel group can be expanded at a time. '${z}' will not be expanded.`,146:({comp:z})=>`Unable to instantiate component '${z}' as its module hasn't been loaded. Add 'ValidationModule' to see which module is required.`,147:({group:z})=>`Invalid charts customize panel group name supplied: '${z}'`,148:({group:z})=>`invalid chartGroupsDef config '${z}'`,149:({group:z,chartType:J})=>`invalid chartGroupsDef config '${z}.${J}'`,150:()=>"'seriesChartTypes' are required when the 'customCombo' chart type is specified.",151:({chartType:z})=>`invalid chartType '${z}' supplied in 'seriesChartTypes', converting to 'line' instead.`,152:({colId:z})=>`no 'seriesChartType' found for colId = '${z}', defaulting to 'line'.`,153:({chartDataType:z})=>`unexpected chartDataType value '${z}' supplied, instead use 'category', 'series' or 'excluded'`,154:({colId:z})=>`cross filtering requires a 'agSetColumnFilter' or 'agMultiColumnFilter' to be defined on the column with id: ${z}`,155:({option:z})=>`'${z}' is not a valid Chart Toolbar Option`,156:({panel:z})=>`Invalid panel in chartToolPanelsDef.panels: '${z}'`,157:({unrecognisedGroupIds:z})=>["unable to find group(s) for supplied groupIds:",z],158:()=>"can not expand a column item that does not represent a column group header",159:()=>"Invalid params supplied to createExcelFileForExcel() - `ExcelExportParams.data` is empty.",160:()=>"Export cancelled. Export is not allowed as per your configuration.",161:()=>"The Excel Exporter is currently on Multi Sheet mode. End that operation by calling 'api.getMultipleSheetAsExcel()' or 'api.exportMultipleSheetsAsExcel()'",162:({id:z,dataType:J})=>`Unrecognized data type for excel export [${z}.dataType=${J}]`,163:({featureName:z})=>`Excel table export does not work with ${z}. The exported Excel file will not contain any Excel tables. + Please turn off ${z} to enable Excel table exports.`,164:()=>"Unable to add data table to Excel sheet: A table already exists.",165:()=>"Unable to add data table to Excel sheet: Missing required parameters.",166:({unrecognisedGroupIds:z})=>["unable to find groups for these supplied groupIds:",z],167:({unrecognisedColIds:z})=>["unable to find columns for these supplied colIds:",z],168:()=>"detailCellRendererParams.template should be function or string",169:()=>'Reference to eDetailGrid was missing from the details template. Please add data-ref="eDetailGrid" to the template.',170:({providedStrategy:z})=>`invalid cellRendererParams.refreshStrategy = ${z} supplied, defaulting to refreshStrategy = 'rows'.`,171:()=>"could not find detail grid options for master detail, please set gridOptions.detailCellRendererParams.detailGridOptions",172:()=>"could not find getDetailRowData for master / detail, please set gridOptions.detailCellRendererParams.getDetailRowData",173:({group:z})=>`invalid chartGroupsDef config '${z}'`,174:({group:z,chartType:J})=>`invalid chartGroupsDef config '${z}.${J}'`,175:({menuTabName:z,itemsToConsider:J})=>[`Trying to render an invalid menu item '${z}'. Check that your 'menuTabs' contains one of `,J],176:({key:z})=>`unknown menu item type ${z}`,177:()=>"valid values for cellSelection.handle.direction are 'x', 'y' and 'xy'. Default to 'xy'.",178:({colId:z})=>`column ${z} is not visible`,179:()=>"totalValueGetter should be either a function or a string (expression)",180:()=>"agRichSelectCellEditor requires cellEditorParams.values to be set",181:()=>"agRichSelectCellEditor cannot have `multiSelect` and `allowTyping` set to `true`. AllowTyping has been turned off.",182:()=>'you cannot mix groupDisplayType = "multipleColumns" with treeData, only one column can be used to display groups when doing tree data',183:()=>"Group Column Filter only works on group columns. Please use a different filter.",184:({parentGroupData:z,childNodeData:J})=>["duplicate group keys for row data, keys should be unique",[z,J]],185:({data:z})=>["getDataPath() should not return an empty path",[z]],186:({rowId:z,rowData:J,duplicateRowsData:Q})=>["duplicate group keys for row data, keys should be unique",z,J,...Q??[]],187:({rowId:z,firstData:J,secondData:Q})=>[`Duplicate node id ${z}. Row IDs are provided via the getRowId() callback. Please modify the getRowId() callback code to provide unique row id values.`,"first instance",J,"second instance",Q],188:(z)=>`getRowId callback must be provided for Server Side Row Model ${z?.feature||"selection"} to work correctly.`,189:({startRow:z})=>`invalid value ${z} for startRow, the value should be >= 0`,190:({rowGroupId:z,data:J})=>["null and undefined values are not allowed for server side row model keys",z?`column = ${z}`:"","data is ",J],194:({method:z})=>`calling gridApi.${z}() is only possible when using rowModelType=\`clientSide\`.`,195:({justCurrentPage:z})=>`selecting just ${z?"current page":"filtered"} only works when gridOptions.rowModelType='clientSide'`,196:({key:z})=>`Provided ids must be of string type. Invalid id provided: ${z}`,197:()=>"`toggledNodes` must be an array of string ids.",199:()=>"getSelectedNodes and getSelectedRows functions cannot be used with select all functionality with the server-side row model. Use `api.getServerSideSelectionState()` instead.",200:OQ,201:({rowModelType:z})=>`Could not find row model for rowModelType = ${z}`,202:()=>"`getSelectedNodes` and `getSelectedRows` functions cannot be used with `groupSelectsChildren` and the server-side row model. Use `api.getServerSideSelectionState()` instead.",203:()=>"Server Side Row Model does not support Dynamic Row Height and Cache Purging. Either a) remove getRowHeight() callback or b) remove maxBlocksInCache property. Purging has been disabled.",204:()=>"Server Side Row Model does not support Auto Row Height and Cache Purging. Either a) remove colDef.autoHeight or b) remove maxBlocksInCache property. Purging has been disabled.",205:({duplicateIdText:z})=>`Unable to display rows as duplicate row ids (${z}) were returned by the getRowId callback. Please modify the getRowId callback to provide unique ids.`,206:()=>"getRowId callback must be implemented for transactions to work. Transaction was ignored.",207:()=>'The Set Filter Parameter "defaultToNothingSelected" value was ignored because it does not work when "excelMode" is used.',208:()=>"Set Filter Value Formatter must return string values. Please ensure the Set Filter Value Formatter returns string values for complex objects.",209:()=>`Set Filter Key Creator is returning null for provided values and provided values are primitives. Please provide complex objects. See ${P1}/filter-set-filter-list/#filter-value-types`,210:()=>"Set Filter has a Key Creator, but provided values are primitives. Did you mean to provide complex objects?",211:()=>"property treeList=true for Set Filter params, but you did not provide a treeListPathGetter or values of type Date.",212:()=>"please review all your toolPanel components, it seems like at least one of them doesn't have an id",213:()=>"Advanced Filter does not work with Filters Tool Panel. Filters Tool Panel has been disabled.",214:({key:z})=>`unable to lookup Tool Panel as invalid key supplied: ${z}`,215:({key:z,defaultByKey:J})=>`the key ${z} is not a valid key for specifying a tool panel, valid keys are: ${Object.keys(J??{}).join(",")}`,216:({name:z})=>`Missing component for '${z}'`,217:({invalidColIds:z})=>["unable to find grid columns for the supplied colDef(s):",z],218:({property:z,defaultOffset:J})=>`${z} must be a number, the value you provided is not a valid number. Using the default of ${J}px.`,219:({property:z})=>`Property ${z} does not exist on the target object.`,220:({lineDash:z})=>`'${z}' is not a valid 'lineDash' option.`,221:()=>"agAggregationComponent should only be used with the client and server side row model.",222:()=>"agFilteredRowCountComponent should only be used with the client side row model.",223:()=>"agSelectedRowCountComponent should only be used with the client and server side row model.",224:()=>"agTotalAndFilteredRowCountComponent should only be used with the client side row model.",225:()=>"agTotalRowCountComponent should only be used with the client side row model.",226:()=>"viewport is missing init method.",227:()=>"menu item icon must be DOM node or string",228:({menuItemOrString:z})=>`unrecognised menu item ${z}`,230:()=>"detailCellRendererParams.template is not supported by AG Grid React. To change the template, provide a Custom Detail Cell Renderer. See https://www.ag-grid.com/react-data-grid/master-detail-custom-detail/",231:()=>"As of v32, using custom components with `reactiveCustomComponents = false` is deprecated.",232:()=>"Using both rowData and v-model. rowData will be ignored.",233:({methodName:z})=>`Framework component is missing the method ${z}()`,234:()=>'Group Column Filter does not work with the colDef property "field". This property will be ignored.',235:()=>'Group Column Filter does not work with the colDef property "filterValueGetter". This property will be ignored.',236:()=>'Group Column Filter does not work with the colDef property "filterParams". This property will be ignored.',237:()=>"Group Column Filter does not work with Tree Data enabled. Please disable Tree Data, or use a different filter.",238:()=>"setRowCount can only accept a positive row count.",239:()=>'Theming API and CSS File Themes are both used in the same page. In v33 we released the Theming API as the new default method of styling the grid. See the migration docs https://www.ag-grid.com/react-data-grid/theming-migration/. Because no value was provided to the `theme` grid option it defaulted to themeQuartz. But the file (ag-grid.css) is also included and will cause styling issues. Either pass the string "legacy" to the theme grid option to use v32 style themes, or remove ag-grid.css from the page to use Theming API.',240:({theme:z})=>`theme grid option must be a Theming API theme object or the string "legacy", received: ${z}`,243:()=>"Failed to deserialize state - each provided state object must be an object.",244:()=>"Failed to deserialize state - `selectAllChildren` must be a boolean value or undefined.",245:()=>"Failed to deserialize state - `toggledNodes` must be an array.",246:()=>"Failed to deserialize state - Every `toggledNode` requires an associated string id.",247:()=>`Row selection state could not be parsed due to invalid data. Ensure all child state has toggledNodes or does not conform with the parent rule. +Please rebuild the selection state and reapply it.`,248:()=>"SetFloatingFilter expects SetFilter as its parent",249:()=>"Must supply a Value Formatter in Set Filter params when using a Key Creator",250:()=>"Must supply a Key Creator in Set Filter params when `treeList = true` on a group column, and Tree Data or Row Grouping is enabled.",251:({chartType:z})=>`AG Grid: Unable to create chart as an invalid chartType = '${z}' was supplied.`,252:()=>`cannot get grid to draw rows when it is in the middle of drawing rows. +Your code probably called a grid API method while the grid was in the render stage. +To overcome this, put the API call into a timeout, e.g. instead of api.redrawRows(), call setTimeout(function() { api.redrawRows(); }, 0). +To see what part of your code that caused the refresh check this stacktrace.`,253:({version:z})=>["Illegal version string: ",z],254:()=>"Cannot create chart: no chart themes available.",255:({point:z})=>`Lone surrogate U+${z?.toString(16).toUpperCase()} is not a scalar value`,256:()=>"Unable to initialise. See validation error, or load ValidationModule if missing.",257:()=>_8("IntegratedChartsModule"),258:()=>_8("SparklinesModule"),259:({part:z})=>`the argument to theme.withPart must be a Theming API part object, received: ${z}`,260:({propName:z,compName:J,gridScoped:Q,gridId:Z,rowModelType:$,usesAgGridProvider:X})=>OQ({reasonOrId:`AG Grid '${z}' component: ${J}`,moduleName:C1[J],gridId:Z,gridScoped:Q,rowModelType:$,usesAgGridProvider:X}),261:()=>"As of v33, `column.isHovered()` is deprecated. Use `api.isColumnHovered(column)` instead.",262:()=>'As of v33, icon key "smallDown" is deprecated. Use "advancedFilterBuilderSelect" for Advanced Filter Builder dropdown, "selectOpen" for Select cell editor and dropdowns (e.g. Integrated Charts menu), "richSelectOpen" for Rich Select cell editor.',263:()=>'As of v33, icon key "smallLeft" is deprecated. Use "panelDelimiterRtl" for Row Group Panel / Pivot Panel, "subMenuOpenRtl" for sub-menus.',264:()=>'As of v33, icon key "smallRight" is deprecated. Use "panelDelimiter" for Row Group Panel / Pivot Panel, "subMenuOpen" for sub-menus.',265:({colId:z})=>`Unable to infer chart data type for column '${z}' if first data entry is null. Please specify "chartDataType", or a "cellDataType" in the column definition. For more information, see ${P1}/integrated-charts-range-chart#coldefchartdatatype .`,266:()=>'As of v33.1, using "keyCreator" with the Rich Select Editor has been deprecated. It now requires the "formatValue" callback to convert complex data to strings.',267:()=>"Detail grids can not use a different theme to the master grid, the `theme` detail grid option will be ignored.",268:()=>"Transactions aren't supported with tree data when using treeDataChildrenField",269:()=>"When `masterSelects: 'detail'`, detail grids must be configured with multi-row selection",270:({id:z,parentId:J})=>`Cycle detected for row with id='${z}' and parent id='${J}'. Resetting the parent for row with id='${z}' and showing it as a root-level node.`,271:({id:z,parentId:J})=>`Parent row not found for row with id='${z}' and parent id='${J}'. Showing row with id='${z}' as a root-level node.`,272:()=>GX(),273:({providedId:z,usedId:J})=>`Provided column id '${z}' was already in use, ensure all column and group ids are unique. Using '${J}' instead.`,274:({prop:z})=>{let J=`Since v33, ${z} has been deprecated.`;switch(z){case"maxComponentCreationTimeMs":J+=" This property is no longer required and so will be removed in a future version.";break;case"setGridApi":J+=" This method is not called by AG Grid. To access the GridApi see: https://ag-grid.com/react-data-grid/grid-interface/#grid-api ";break;case"children":J+=" For multiple versions AgGridReact does not support children.";break}return J},275:UX,276:()=>"Row Numbers Row Resizer cannot be used when Grid Columns have `autoHeight` enabled.",277:({colId:z})=>`'enableFilterHandlers' is set to true, but column '${z}' does not have 'filter.doesFilterPass' or 'filter.handler' set.`,278:({colId:z})=>`Unable to create filter handler for column '${z}'`,279:(z)=>{},280:({colId:z})=>`'name' must be provided for custom filter components for column '${z}`,281:({colId:z})=>`Filter for column '${z}' does not have 'filterParams.buttons', but the new Filters Tool Panel has buttons configured. Either configure buttons for the filter, or disable buttons on the Filters Tool Panel.`,282:()=>"New filter tool panel requires `enableFilterHandlers: true`.",283:()=>"As of v34, use the same method on the filter handler (`api.getColumnFilterHandler(colKey)`) instead.",284:()=>"As of v34, filters are active when they have a model. Use `api.getColumnFilterModel()` instead.",285:()=>"As of v34, use (`api.getColumnFilterModel()`) instead.",286:()=>"As of v34, use (`api.setColumnFilterModel()`) instead.",287:()=>"`api.doFilterAction()` requires `enableFilterHandlers = true",288:()=>"`api.getColumnFilterModel(key, true)` requires `enableFilterHandlers = true",289:({rowModelType:z})=>`Row Model '${z}' is not supported with Batch Editing`,290:({rowIndex:z,rowPinned:J})=>`Row with index '${z}' and pinned state '${J}' not found`,291:()=>"License Key being set multiple times with different values. This can result in an incorrect license key being used,",292:({colId:z})=>`The Multi Filter for column '${z}' has buttons configured against the child filters. When 'enableFilterHandlers=true', buttons must instead be provided against the parent Multi Filter params. The child filter buttons will be ignored.`,293:()=>"The grid was initialised detached from the DOM and was then inserted into a Shadow Root. Theme styles are probably broken. Pass the themeStyleContainer grid option to let the grid know where in the document to insert theme CSS.",294:()=>"When using the `agRichSelectCellEditor` setting `filterListAsync = true` requires `allowTyping = true` and the `values()` callback must return a Promise of filtered values.",295:({blockedService:z})=>`colDef.allowFormula is not supported with ${z}. Formulas has been turned off.`,296:()=>"Since v35, `api.hideOverlay()` does not hide the overlay when `activeOverlay` is set. Set `activeOverlay=null` instead.",297:()=>'`api.hideOverlay()` does not hide the no matching rows overlay as it is only controlled by grid state. Set `suppressOverlays=["noMatchingRows"] to not show it.',298:()=>"Columns Tool Panel 'buttons' requires 'apply' to enable Deferred Updates.",301:({key:z})=>`Toolbar item '${z}' is missing the 'toolbarItem' property and will not be rendered.`,302:({itemName:z,moduleName:J,gridScoped:Q,gridId:Z,rowModelType:$})=>OQ({reasonOrId:`Toolbar item '${z}'`,moduleName:J,gridId:Z,gridScoped:Q,rowModelType:$,additionalText:"The item will not be rendered."}),303:({key:z})=>`Multiple toolbar items share the explicit key '${z}'. Only the first item is rendered.`};function gF(z,J){let Q=NF[z];if(!Q)return[`Missing error text for error id ${z}!`];let Z=Q(J),X=` +See ${_9(z,J)}`;return Array.isArray(Z)?Z.concat(X):[Z,X]}var hF={1:"Charting Aggregation",2:"pivotResultFields",3:"setTooltip"},uF=class{constructor(z="javascript"){this.frameworkName=z,this.renderingEngine="vanilla",this.batchFrameworkComps=!1,this.usesAgGridProvider=void 0,this.wrapIncoming=(J)=>J(),this.wrapOutgoing=(J)=>J(),this.baseDocLink=`${z9}/${this.frameworkName}-data-grid`,zU(this.baseDocLink)}frameworkComponent(z){return null}isFrameworkComponent(z){return!1}getDocLink(z){return this.baseDocLink+(z?"/"+z:"")}},H8=new WeakMap,W8=new WeakMap;function fJ(z,J,Q){if(!J)return r(11),{};let Z=Q,$;if(!Z?.setThemeOnGridDiv){let Y=z0({tag:"div"});Y.style.height="100%",z.appendChild(Y),z=Y,$=()=>z.remove()}return new cF().create(z,J,(Y)=>{let q=new lH(z);Y.createBean(q)},void 0,Q,$)}var mF=1,cF=class{create(z,J,Q,Z,$,X){let Y=fZ.applyGlobalGridOptions(J),q=Y.gridId??String(mF++),G=this.getRegisteredModules($,q,Y.rowModelType),U=this.createBeansList(Y.rowModelType,G,q,$?.frameworkOverrides?.usesAgGridProvider),_=this.createProvidedBeans(z,Y,$);if(!U)return;let B=new T_({providedBeanInstances:_,beanClasses:U,id:q,beanInitComparator:C_,beanDestroyComparator:y_,derivedBeans:[v_],destroyCallback:()=>{W8.delete(E),H8.delete(z),sG(q),X?.()}});this.registerModuleFeatures(B,G),Q(B),B.getBean("syncSvc").start(),Z?.(B);let E=B.getBean("gridApi");return H8.set(z,E),W8.set(E,z),E}getRegisteredModules(z,J,Q){return k2(TF,void 0,!0),z?.modules?.forEach((Z)=>k2(Z,J)),lG(J,B8(Q))}registerModuleFeatures(z,J){let Q=z.getBean("registry"),Z=z.getBean("apiFunctionSvc");for(let $ of J){Q.registerModule($);let X=$.apiFunctions;if(X){let Y=Object.keys(X);for(let q of Y)Z?.addFunction(q,X[q])}}}createProvidedBeans(z,J,Q){let Z=Q?Q.frameworkOverrides:null;if(d(Z))Z=new uF;let $={gridOptions:J,eGridDiv:z,eRootDiv:z,globalListener:Q?Q.globalListener:null,globalSyncListener:Q?Q.globalSyncListener:null,frameworkOverrides:Z,withinStudio:Q?.withinStudio};if(Q?.providedBeanInstances)Object.assign($,Q.providedBeanInstances);return $}createBeansList(z,J,Q,Z){let $={clientSide:"ClientSideRowModel",infinite:"InfiniteRowModel",serverSide:"ServerSideRowModel",viewport:"ViewportRowModel"},X=B8(z),Y=$[X];if(!Y){G2(201,{rowModelType:X},`Unknown rowModelType ${X}.`);return}if(!oG()){G2(272,void 0,GX(Z));return}if(!z){let G=Object.entries($).filter(([U,_])=>yQ(_,Q,U));if(G.length==1){let[U,_]=G[0];if(U!==X){let H={moduleName:_,rowModelType:U};G2(275,H,UX(H));return}}}if(!yQ(Y,Q,X)){let G=VZ(),U=`rowModelType = '${X}'`,_=G?`Unable to use ${U} as that requires the ag-grid-enterprise script to be included. +`:`Missing module ${Y}Module for rowModelType ${X}.`;G2(200,{reasonOrId:U,moduleName:Y,gridScoped:SZ(),gridId:Q,rowModelType:X,isUmd:G},_);return}let q=new Set;for(let G of J)for(let U of G.beans??[])q.add(U);return Array.from(q)}};function B8(z){return z??"clientSide"}function iF(z,J,Q="auto"){z.frameworkOverrides.wrapIncoming(()=>z.ctrlsSvc.getScrollFeature().ensureColumnVisible(J,Q),"ensureVisible")}function pF(z,J,Q){z.frameworkOverrides.wrapIncoming(()=>z.ctrlsSvc.getScrollFeature().ensureIndexVisible(J,Q),"ensureVisible")}var nF=class extends S{constructor(z){super();this.rootNode=z,this.nextId=0,this.allNodesMap={},E8(z)}getRowNode(z){return this.allNodesMap[z]}setNewRowData(z){this.dispatchRowDataUpdateStarted(z),this.destroyAllNodes();let J=E8(this.rootNode),Q=Array(z.length);J._leafs=Q;let Z=0,$=this.beans.groupStage?.getNestedDataGetter(),X=$?new Set:null,Y=(q,G)=>{let U=q.level+1;for(let _=0,H=G.length;_{if(!H&&H!==void 0){let M=L.sourceRowIndex;H=M<=W,W=M}if(L.data!==D){if(L.updateData(D),!Y.has(L))q.add(L);if(!L.selectable&&L.isSelected())U.push(L)}},K=(L,D,M)=>{for(let f=0,A=D.length;f0;if(F){let L=Q._leafs??(Q._leafs=[]);if(H===void 0)lF(L,G,X);else if(sF(L,G))X.reordered=!0}if(F||B||q.size)z.rowDataUpdated=!0,this.deselect(U)}deleteUnusedNodes(z,{removals:J},Q,Z){let $=this.rootNode._leafs;for(let X=0,Y=$.length;X0}updateRowData(z,J,Q){if(this.dispatchRowDataUpdateStarted(z.add),this.beans.groupStage?.getNestedDataGetter())return V(268),{remove:[],update:[],add:[]};let Z=[],$=wQ(this.gos),X=this.executeRemove($,z,J,Z,Q),Y=this.executeUpdate($,z,J,Z),q=this.executeAdd(z,J);return this.deselect(Z),{remove:X,update:Y,add:q}}executeRemove(z,{remove:J},{adds:Q,updates:Z,removals:$},X,Y){let q=this.rootNode._leafs,G=q?.length,U=J?.length;if(!U||!G)return[];let _=0,H=G,W=0,B=Array(U);for(let E=0;EW)W=F;if(B[_++]=K,!this.destroyNode(K,Y))continue;if(K.isSelected())X.push(K);if(!Q.delete(K))Z.delete(K),$.push(K)}if(B.length=_,_)tF(q,H,W);return B}executeUpdate(z,{update:J},{adds:Q,updates:Z},$){let X=J?.length;if(!X)return[];let Y=Array(X),q=0;for(let G=0;G=G;--H){let B=Z[H];B.sourceRowIndex=W,Z[W--]=B}J.reordered=!0}Z.length=q;let U=Array(Y),_=J.adds;for(let H=0;H=Q||Number.isNaN(J))return Q;J=Math.ceil(J);let Z=this.gos;if(J>0&&Z.get("treeData")&&Z.get("getDataPath"))J=dF(z,J);return J}},dF=(z,J)=>{for(let Q=0,Z=z.length;Q{if(z.group=!0,z.level=-1,z._expanded=!0,z.id=IZ,z._leafs?.length!==0)z._leafs=[];let J=[],Q=[],Z=[],$=[];z.childrenAfterGroup=J,z.childrenAfterSort=Q,z.childrenAfterAggFilter=Z,z.childrenAfterFilter=$;let X=z.sibling;if(X)X.childrenAfterGroup=J,X.childrenAfterSort=Q,X.childrenAfterAggFilter=Z,X.childrenAfterFilter=$,X.childrenMapped=z.childrenMapped;return z.updateHasChildren(),z},rF=(z,J)=>{if(z)for(let Q=0,Z=z.length;Q{J=Math.max(0,J);for(let Z=J,$=z.length;Z<$;++Z){let X=z[Z];if(Z<=Q&&X.destroyed)continue;X.sourceRowIndex=J,z[J++]=X}z.length=J},sF=(z,J)=>{let Q=J.size;z.length=Q;let Z=0,$=!1,X=!1;for(let Y of J){let q=Y.sourceRowIndex;if(q===Z)X||(X=$);else{if(q>=0)X=!0;else $=!0;Y.sourceRowIndex=Z,z[Z]=Y}++Z}return X},lF=(z,J,{adds:Q})=>{let Z=z.length,$=J.size;if($>Z)z.length=$;let X=0;for(let Y=0;Y{this.beans.groupStage?.invalidateGroupCols(),this.refreshModel({step:"group",afterColumnsChanged:!0,keepRenderedRows:!0,animate:!this.gos.get("suppressAnimationFrame")})};this.addManagedEventListeners({newColumnsLoaded:Q,columnRowGroupChanged:Q,columnValueChanged:this.onValueChanged.bind(this),columnPivotChanged:()=>this.refreshModel({step:"pivot"}),columnPivotModeChanged:()=>this.refreshModel({step:"group"}),filterChanged:this.onFilterChanged.bind(this),sortChanged:this.onSortChanged.bind(this),stylesChanged:this.onGridStylesChanges.bind(this),gridReady:this.onGridReady.bind(this),rowExpansionStateChanged:this.onRowGroupOpened.bind(this)}),this.addPropertyListeners()}addPropertyListeners(){let{beans:z,stagesRefreshProps:J}=this,Q=[z.groupStage,z.filterStage,z.groupFilterStage,z.pivotStage,z.aggStage,z.sortStage,z.groupSortStage,z.filterAggStage,z.flattenStage].filter((Z)=>!!Z);this.stages=Q;for(let Z=Q.length-1;Z>=0;--Z){let $=Q[Z].refreshProps;if($)for(let X of $)J.set(X,Z)}this.addManagedPropertyListeners([...J.keys(),"rowData"],(Z)=>{let $=Z.changeSet?.properties;if($)this.onPropChange($)}),this.addManagedPropertyListener("rowHeight",()=>this.resetRowHeights())}start(){if(this.started=!0,this.rowNodesCountReady)this.refreshModel({step:"group",rowDataUpdated:!0,newData:!0});else this.setInitialData()}setInitialData(){if(this.gos.get("rowData"))this.onPropChange(["rowData"])}ensureRowHeightsValid(z,J,Q,Z){let $,X=!1;do{$=!1;let Y=this.getRowIndexAtPixel(z),q=this.getRowIndexAtPixel(J),G=Math.max(Y,Q),U=Math.min(q,Z);for(let _=G;_<=U;_++){let H=this.getRow(_);if(H.rowHeightEstimated){let W=f2(this.beans,H);H.setRowHeight(W.height),$=!0,X=!0}}if($)this.setRowTopAndRowIndex()}while($);return X}onPropChange(z){let{nodeManager:J,gos:Q,beans:Z}=this,$=Z.groupStage;if(!J)return;let X=new Set(z),Y=$?.onPropChange(X),q;if(X.has("rowData"))q=Q.get("rowData");else if(Y)q=$?.extractData();if(q&&!Array.isArray(q))q=null,V(1);let G={step:"nothing",changedProps:X};if(q){let _=!Y&&!this.isEmpty()&&q.length>0&&Q.exists("getRowId")&&!Q.get("resetRowDataOnUpdate");if(this.refreshingData=!0,_)G.keepRenderedRows=!0,G.animate=!Q.get("suppressAnimationFrame"),G.changedRowNodes=new I1,J.setImmutableRowData(G,q);else G.rowDataUpdated=!0,G.newData=!0,J.setNewRowData(q),this.rowNodesCountReady=!0}let U=G.rowDataUpdated?"group":this.getRefreshedStage(z);if(U)G.step=U,this.refreshModel(G)}getRefreshedStage(z){let{stages:J,stagesRefreshProps:Q}=this;if(!J)return null;let Z=J.length,$=Z;for(let X=0,Y=z.length;X{if(X?.id!=null&&!J.has(X.id))X.clearRowTopAndRowIndex()},Z=(X)=>{Q(X),Q(X.detailNode),Q(X.sibling);let Y=X.childrenAfterGroup;if(!X.hasChildren()||!Y)return;if(z&&X.level!==-1&&!X.expanded)return;for(let q=0,G=Y.length;q{let U=X[G];if(this.gos.get("groupHideOpenParents"))while(U.expanded&&U.childrenAfterSort&&U.childrenAfterSort.length>0)U=U.childrenAfterSort[0];return U.rowIndex},q=J.footerSvc;if(q)return q?.getTopDisplayIndex(Z,z,X,Y);return Y(z)}getTopLevelIndexFromDisplayedIndex(z){let{rootNode:J,rowsToDisplay:Q}=this;if(!J||!Q.length||Q[0]===J)return z;let $=this.getRow(z);if($.footer)$=$.sibling;let X=$.parent;while(X&&X!==J)$=X,X=$.parent;let Y=J.childrenAfterSort?.indexOf($)??-1;return Y>=0?Y:z}getRowBounds(z){let J=this.rowsToDisplay[z];return J?{rowTop:J.rowTop,rowHeight:J.rowHeight}:null}onRowGroupOpened(){this.refreshModel({step:"map",keepRenderedRows:!0,animate:T1(this.gos)})}onFilterChanged({afterDataChange:z,columns:J}){if(!z){let Z=J.length===0||J.some(($)=>$.isPrimary())?"filter":"filter_aggregates";this.refreshModel({step:Z,keepRenderedRows:!0,animate:T1(this.gos)})}}onSortChanged(){this.refreshModel({step:"sort",keepRenderedRows:!0,animate:T1(this.gos)})}getType(){return"clientSide"}onValueChanged(){this.refreshModel({step:this.beans.colModel.isPivotActive()?"pivot":"aggregate"})}isSuppressModelUpdateAfterUpdateTransaction(z){if(!this.gos.get("suppressModelUpdateAfterUpdateTransaction"))return!1;let{changedRowNodes:J,newData:Q,rowDataUpdated:Z}=z;if(!J||Q||!Z)return!1;if(J.removals.length||J.adds.size)return!1;return!0}reMapRows(){if(this.refreshingModel||this.refreshingData){this.noKeepRenderedRows=!0,this.noKeepUndoRedoStack=!0,this.noAnimate=!0;return}this.refreshModel({step:"map",keepRenderedRows:!1,keepUndoRedoStack:!1,animate:!1})}refreshModel(z){let{nodeManager:J,eventSvc:Q,started:Z}=this;if(!J)return;let $=!!z.rowDataUpdated;if(Z&&$)Q.dispatchEvent({type:"rowDataUpdated"});if(this.deferRefresh(z)){this.setPendingRefreshFlags(z),this.rowDataUpdatedPending||(this.rowDataUpdatedPending=$);return}if(this.rowDataUpdatedPending)this.rowDataUpdatedPending=!1,z.step="group";this.updateRefreshParams(z);let X=!1;this.refreshingModel=!0;try{this.executeRefresh(z,$),X=!0}finally{if(this.refreshingData=!1,this.refreshingModel=!1,!X)this.setPendingRefreshFlags(z)}this.clearPendingRefreshFlags(),this.beans.formula?.onRowsChanged(z.changedRowNodes,z.newData),Q.dispatchEvent({type:"modelUpdated",animate:z.animate,keepRenderedRows:z.keepRenderedRows,newData:z.newData,newPage:!1,keepUndoRedoStack:z.keepUndoRedoStack})}executeRefresh(z,J){let{beans:Q,rootNode:Z}=this;if(Q.masterDetailSvc?.refreshModel(z),J&&z.step!=="group")Q.colFilter?.refreshModel();let $=z.changedPath;if($?.addRow(Z),z.step==="group")this.doGrouping(Z,z),$??($=z.changedPath);switch($??($=Q.changedPathFactory?.ensureRowsPath(z,Z)),z.step){case"group":case"filter":this.doFilter($);case"pivot":if(this.doPivot($,z.changedProps))$=void 0,z.changedPath=void 0;case"aggregate":this.doAggregate($);case"filter_aggregates":this.doFilterAggregates($);case"sort":this.doSort($,z.changedRowNodes);case"map":this.doRowsToDisplay()}let X=new Set;this.setRowTopAndRowIndex(X),this.clearRowTopAndRowIndex($,X),this.updateRefreshParams(z)}deferRefresh(z){if(this.refreshingModel)return!0;if(this.beans.colModel.changeEventsDispatching)return!0;if(this.isSuppressModelUpdateAfterUpdateTransaction(z)){if(this.started)this.refreshingData=!1;return!0}if(!this.started)return!0;return!1}setPendingRefreshFlags(z){this.pendingNewData||(this.pendingNewData=!!z.newData),this.noKeepRenderedRows||(this.noKeepRenderedRows=!z.keepRenderedRows),this.noKeepUndoRedoStack||(this.noKeepUndoRedoStack=!z.keepUndoRedoStack),this.noAnimate||(this.noAnimate=!z.animate)}clearPendingRefreshFlags(){this.pendingNewData=!1,this.noKeepRenderedRows=!1,this.noKeepUndoRedoStack=!1,this.noAnimate=!1}updateRefreshParams(z){z.newData=this.pendingNewData||!!z.newData,z.keepRenderedRows=!this.noKeepRenderedRows&&!!z.keepRenderedRows,z.keepUndoRedoStack=!this.noKeepUndoRedoStack&&!!z.keepUndoRedoStack,z.animate=!this.noAnimate&&!!z.animate}isEmpty(){return!this.rootNode?._leafs?.length||!this.beans.colModel?.ready}isRowsToRender(){return this.rowsToDisplay.length>0}getOverlayType(){let{beans:z,gos:J}=this;if(this.rootNode?._leafs?.length){if(z.filterManager?.isAnyFilterPresent()&&this.getRowCount()===0)return"noMatchingRows"}else if(this.rowCountReady||(J.get("rowData")?.length??0)==0)return"noRows";return null}getNodesInRangeForSelection(z,J){let Q=!1,Z=!1,$=[],X=V2(this.gos);return this.forEachNodeAfterFilterAndSort((Y)=>{if(Z)return;if(Q){if(Y===J||Y===z){if(Z=!0,X&&Y.group){_X($,Y);return}}}if(!Q){if(Y!==J&&Y!==z)return;if(Q=!0,J===z)Z=!0}if(!Y.group||!X)$.push(Y)}),$}getTopLevelNodes(){return this.rootNode?.childrenAfterGroup??null}getRow(z){return this.rowsToDisplay[z]}getFormulaRow(z){return this.formulaRows[z]}isRowPresent(z){return this.rowsToDisplay.indexOf(z)>=0}getRowIndexAtPixel(z){let J=this.rowsToDisplay,Q=J.length;if(this.isEmpty()||Q===0)return-1;let Z=0,$=Q-1;if(z<=0)return 0;if(J[$].rowTop<=z)return $;let Y=-1,q=-1;while(!0){let G=Math.floor((Z+$)/2),U=J[G];if(this.isRowInPixel(U,z))return G;if(U.rowTopz)$=G-1;if(Y===Z&&q===$)return G;Y=Z,q=$}}isRowInPixel(z,J){let Q=z.rowTop,Z=Q+z.rowHeight;return Q<=J&&Z>J}forEachLeafNode(z){let J=this.rootNode?._leafs;if(J)for(let Q=0,Z=J.length;QQ.childrenAfterAggFilter)}forEachNodeAfterFilterAndSort(z,J=!1){this.depthFirstSearchRowNodes(z,J,(Q)=>Q.childrenAfterSort)}forEachPivotNode(z,J,Q){let{colModel:Z,rowGroupColsSvc:$}=this.beans;if(!Z.pivotMode)return;if(!$?.columns.length){z(this.rootNode,0);return}let X=Q?"childrenAfterSort":"childrenAfterGroup";this.depthFirstSearchRowNodes(z,J,(Y)=>!Y.leafGroup?Y[X]:null)}depthFirstSearchRowNodes(z,J=!1,Q=(X)=>X.childrenAfterGroup,Z=this.rootNode,$=0){let X=$;if(!Z)return X;let Y=Z===this.rootNode;if(!Y)z(Z,X++);if(Z.hasChildren()&&!Z.footer){let q=Y||this.hierarchical?Q(Z):null;if(q){let G=this.beans.footerSvc;X=G?.addTotalRows(X,Z,z,J,Y,"top")??X;for(let U of q)X=this.depthFirstSearchRowNodes(z,J,Q,U,X);return G?.addTotalRows(X,Z,z,J,Y,"bottom")??X}}return X}doAggregate(z){if(this.rootNode)this.beans.aggStage?.execute(z)}doFilterAggregates(z){if(this.hierarchical){let Z=this.beans.filterAggStage;if(Z){Z.execute(z);return}}let J=this.rootNode;J.childrenAfterAggFilter=J.childrenAfterFilter;let Q=J.sibling;if(Q)Q.childrenAfterAggFilter=J.childrenAfterFilter}doSort(z,J){let Q=this.beans;(this.hierarchical&&Q.groupSortStage||Q.sortStage).execute(z,J)}doGrouping(z,J){let Z=this.beans.groupStage?.execute(J);if(Z===void 0){let $=z._leafs;z.childrenAfterGroup=$,z.updateHasChildren();let X=z.sibling;if(X)X.childrenAfterGroup=$}if(Z||J.rowDataUpdated)this.beans.colFilter?.refreshModel();if(!this.rowCountReady&&this.rowNodesCountReady)this.rowCountReady=!0,this.eventSvc.dispatchEventOnce({type:"rowCountReady"})}doFilter(z){let J=this.beans;(this.hierarchical&&J.groupFilterStage||J.filterStage).execute(z);let Q=this.rootNode,Z=Q.sibling;if(Z)Z.childrenAfterFilter=Q.childrenAfterFilter}doPivot(z,J){return this.beans.pivotStage?.execute(z,J)??!1}getRowNode(z){if(typeof z!=="string")z=String(z);let J=this.nodeManager?.getRowNode(z);if(typeof J==="object")return J;let Q=this.beans.groupStage?.getNonLeaf(z);if(Q)return Q;return this.getSpecialRowNode(z)}getSpecialRowNode(z){if(z===IZ)return this.rootNode??void 0;if(z===PU){let J=this.rootNode?.sibling;return J?.footer?J:void 0}if(z.startsWith(hQ)){let J=z.slice(hQ.length),Q=this.getRowNode(J);return Q?.sibling?.footer?Q.sibling:void 0}if(z.startsWith(S7)){let J=z.slice(S7.length),Q=this.nodeManager?.getRowNode(J);if(typeof Q==="object"&&Q.detailNode?.id===z)return Q.detailNode}}batchUpdateRowData(z,J){if(!this.asyncTransactionsTimer){this.asyncTransactions=[];let Q=this.gos.get("asyncTransactionWaitMillis");this.asyncTransactionsTimer=setTimeout(()=>this.executeBatchUpdateRowData(),Q)}this.asyncTransactions.push({rowDataTransaction:z,callback:J})}flushAsyncTransactions(){let z=this.asyncTransactionsTimer;if(z)clearTimeout(z),this.executeBatchUpdateRowData()}executeBatchUpdateRowData(){let{nodeManager:z,beans:J,eventSvc:Q,asyncTransactions:Z}=this;if(!z)return;J.valueCache?.onDataChanged();let $=[],X=[],Y=new I1,q=!this.gos.get("suppressAnimationFrame");for(let{rowDataTransaction:G,callback:U}of Z??[]){this.rowNodesCountReady=!0,this.refreshingData=!0;let _=z.updateRowData(G,Y,q);if($.push(_),U)X.push(U.bind(null,_))}if(this.commitTransactions(Y,q),X.length>0)setTimeout(()=>{for(let G=0,U=X.length;G0)Q.dispatchEvent({type:"asyncTransactionsFlushed",results:$});this.asyncTransactionsTimer=0,this.asyncTransactions=null}updateRowData(z){let J=this.nodeManager;if(!J)return null;this.beans.valueCache?.onDataChanged(),this.rowNodesCountReady=!0;let Q=new I1,Z=!this.gos.get("suppressAnimationFrame");this.refreshingData=!0;let $=J.updateRowData(z,Q,Z);return this.commitTransactions(Q,Z),$}commitTransactions(z,J){this.refreshModel({step:"group",rowDataUpdated:!0,keepRenderedRows:!0,animate:J,changedRowNodes:z})}doRowsToDisplay(){let{rootNode:z,beans:J}=this;if(J.formula?.active){let $=z?.childrenAfterSort??[];this.formulaRows=$,this.rowsToDisplay=$.filter((X)=>!X.softFiltered);for(let X of this.rowsToDisplay)X.setUiLevel(0);return}let Q=J.flattenStage;if(Q){this.rowsToDisplay=Q.execute();return}let Z=this.rootNode.childrenAfterSort??[];for(let $ of Z)$.setUiLevel(0);this.rowsToDisplay=Z}onRowHeightChanged(){this.refreshModel({step:"map",keepRenderedRows:!0,keepUndoRedoStack:!0})}resetRowHeights(){let z=this.rootNode;if(!z)return;let J=this.resetRowHeightsForAllRowNodes();z.setRowHeight(z.rowHeight,!0);let Q=z.sibling;if(Q?.setRowHeight(Q.rowHeight,!0),J)this.onRowHeightChanged()}resetRowHeightsForAllRowNodes(){let z=!1;return this.forEachNode((J)=>{J.setRowHeight(J.rowHeight,!0);let Q=J.detailNode;Q?.setRowHeight(Q.rowHeight,!0);let Z=J.sibling;Z?.setRowHeight(Z.rowHeight,!0),z=!0}),z}onGridStylesChanges(z){if(z.rowHeightChanged&&!this.beans.rowAutoHeight?.active)this.resetRowHeights()}onGridReady(){if(!this.started)this.setInitialData()}destroy(){super.destroy(),this.nodeManager=this.destroyBean(this.nodeManager),this.started=!1,this.rootNode=null,this.rowsToDisplay=[],this.asyncTransactions=null,this.stages=null,this.stagesRefreshProps.clear(),clearTimeout(this.asyncTransactionsTimer)}onRowHeightChangedDebounced(){this.onRowHeightChanged_debounced()}},_X=(z,J)=>{let Q=J.childrenAfterGroup;if(Q)for(let Z=0,$=Q.length;Z<$;++Z){let X=Q[Z];if(X.data)z.push(X);if(X.group)_X(z,X)}};var oF=class extends S{constructor(){super(...arguments);this.beanName="filterStage",this.step="filter",this.refreshProps=null}wireBeans(z){this.filterManager=z.filterManager}execute(){let z=this.beans,J=z.rowModel.rootNode,Q=J.childrenAfterGroup,Z=Q.length,$=this.filterManager,X=!!$?.isChildFilterPresent();if(z.formula?.active)if(J.childrenAfterFilter=Q,X)for(let Y=0;Y{let $=Q.length,X=0;for(let Y=0;Y=$||Q[X]!==q)return K8(z,J,Y,X,Q,Z);++X}else if(X<$)return K8(z,J,Y,X,Q,Z)}return X===$?Q:z},K8=(z,J,Q,Z,$,X)=>{let Y=Z>0?$.slice(0,Z):[];while(Q{let{childrenAfterSort:X,childrenAfterAggFilter:Y}=J;if(!Y)return X&&X.length>0?X:[];let q=Y.length;if(q<=1){if(X?.length===q&&(q===0||X[0]===Y[0]))return X;return Y.slice()}if(!X||q<=zL)return z.doFullSortInPlace(Y.slice(),$);let G=new Map,{updates:U,adds:_}=Q,H=[];for(let B=0;Bz.compareRowNodes($,B,E)||~G.get(B)-~G.get(E)),W===q)return H;return QL(z,$,H,X,G,q)},QL=(z,J,Q,Z,$,X)=>{let Y=Array(X),q=0,G=Q[q],U,_=-1,H=0,W=0,B=Q.length,E=Z.length;while(!0){if(_<0){if(H>=E)break;if(U=Z[H++],_=$.get(U)??-1,_<0)continue}if((z.compareRowNodes(J,G,U)||~$.get(G)-_)<0){if(Y[W++]=G,++q>=B)break;G=Q[q]}else Y[W++]=U,_=-1}while(q=0)Y[W++]=K}return Y},ZL=(z,J,Q)=>{let Z=0;Q.length=J.size;for(let $=0,X=z.length;${let{childrenAfterSort:J,sibling:Q}=z;if(Q)Q.childrenAfterSort=J;if(!J)return;for(let Z=0,$=J.length-1;Z<=$;Z++){let X=J[Z],Y=Z===0,q=Z===$;if(X.firstChild!==Y)X.firstChild=Y,X.dispatchRowEvent("firstChildChanged");if(X.lastChild!==q)X.lastChild=q,X.dispatchRowEvent("lastChildChanged");if(X.childIndex!==Z)X.childIndex=Z,X.dispatchRowEvent("childIndexChanged")}},XL=class extends S{constructor(){super(...arguments);this.beanName="sortStage",this.step="sort",this.refreshProps=["postSortRows","accentedSort"]}execute(z,J){let{rowModel:Q,sortSvc:Z,rowNodeSorter:$}=this.beans,X=Q.rootNode,Y=Z.getSortOptions(),q=Y.length>0,G=this.gos.getCallback("postSortRows"),U=q&&!G&&this.gos.get("deltaSort")&&J,_=X.childrenAfterSort,H=X.childrenAfterAggFilter,W;if(q)if(U)W=JL($,X,U,z,Y);else W=$.doFullSortInPlace(H?.slice()??[],Y);else W=GG(_,H);X.childrenAfterSort=W,$L(X),G?.({nodes:W})}},HX={moduleName:"ClientSideRowModel",version:i,rowModels:["clientSide"],beans:[aF,oF,XL],dependsOn:[XX]};var YL=":where(.ag-ltr) :where(.ag-animate-autosize){.ag-cell,.ag-header-cell,.ag-header-group-cell{transition:width .2s ease-in-out,left .2s ease-in-out}}:where(.ag-rtl) :where(.ag-animate-autosize){.ag-cell,.ag-header-cell,.ag-header-group-cell{transition:width .2s ease-in-out,right .2s ease-in-out}}";function qL(z,J){if(typeof J==="number")z.colAutosize?.sizeColumnsToFit(J,"api");else z.colAutosize?.sizeColumnsToFitGridBody(J)}function WX({colAutosize:z,visibleCols:J},Q,Z){if(Array.isArray(Q))z?.autoSizeCols({colKeys:Q,skipHeader:Z,source:"api"});else z?.autoSizeCols({...Q,colKeys:Q.colIds??J.allCols,source:"api"})}function GL(z,J){if(J&&typeof J==="object")WX(z,J);else z.colAutosize?.autoSizeAllColumns({source:"api",skipHeader:J})}var UL=class extends S{constructor(){super(...arguments);this.beanName="colAutosize",this.timesDelayed=0,this.shouldQueueResizeOperations=!1,this.resizeOperationQueue=[]}postConstruct(){let{gos:z}=this,J=z.get("autoSizeStrategy");if(J){let Q=!1,Z=J.type;if(Z==="fitGridWidth"||Z==="fitProvidedWidth")Q=!0;else if(Z==="fitCellContents"){this.addManagedEventListeners({firstDataRendered:()=>this.onFirstDataRendered(J)});let $=z.get("rowData");Q=$!=null&&$.length>0&&o(z)}if(Q)this.beans.colDelayRenderSvc?.hideColumns(Z)}}autoSizeCols(z){let{eventSvc:J,visibleCols:Q,colModel:Z}=this.beans;Y2(this.beans,!0),this.innerAutoSizeCols(z).then(($)=>{let X=(_)=>N1(J,Array.from(_),!0,"autosizeColumns");if(!z.scaleUpToFitGridWidth)return Y2(this.beans,!1),X($);let Y=F8(this.beans),q=(_)=>Q.leftCols.some((H)=>h4(H,_)),G=(_)=>Q.rightCols.some((H)=>h4(H,_)),U=z.colKeys.filter((_)=>{return!Z.getCol(_)?.colDef.suppressAutoSize&&!y0(_)&&!q(_)&&!G(_)});this.sizeColumnsToFit(Y,z.source,!0,{defaultMaxWidth:z.defaultMaxWidth,defaultMinWidth:z.defaultMinWidth,columnLimits:z.columnLimits?.map((_)=>({..._,key:_.colId})),colKeys:U,onlyScaleUp:!0,animate:!1}),Y2(this.beans,!1),X($)})}innerAutoSizeCols(z){return new Promise((J,Q)=>{if(this.shouldQueueResizeOperations)return this.pushResizeOperation(()=>this.innerAutoSizeCols(z).then(J,Q));let{colKeys:Z,skipHeader:$,skipHeaderGroups:X,stopAtGroup:Y,defaultMaxWidth:q,defaultMinWidth:G,columnLimits:U=[],source:_="api"}=z,{animationFrameSvc:H,renderStatus:W,colModel:B,autoWidthCalc:E,visibleCols:K}=this.beans;if(H?.flushAllFrames(),this.timesDelayed<5&&W&&(!W.areHeaderCellsRendered()||!W.areCellsRendered())){this.timesDelayed++,setTimeout(()=>{if(this.isAlive())this.innerAutoSizeCols(z).then(J,Q)});return}this.timesDelayed=0;let F=new Set,L=-1,D=Object.fromEntries(U.map(({colId:A,...R})=>[A,R])),M=$??this.gos.get("skipHeaderOnAutoSize"),f=X??M;while(L!==0){L=0;let A=[];for(let R of Z){if(!R||w2(R))continue;let O=B.getCol(R);if(!O||F.has(O)||O.colDef.suppressAutoSize)continue;let v=E.getPreferredWidthForColumn(O,M);if(v>0){let I=D[O.colId]??{};I.minWidth??(I.minWidth=G),I.maxWidth??(I.maxWidth=q);let b=_L(O,v,I);O.setActualWidth(b,_),F.add(O),L++}A.push(O)}if(A.length)K.refresh(_)}if(!f)this.autoSizeColumnGroupsByColumns(Z,_,Y);J(F)})}autoSizeColumn(z,J,Q){this.autoSizeCols({colKeys:[z],skipHeader:Q,skipHeaderGroups:!0,source:J})}autoSizeColumnGroupsByColumns(z,J,Q){let{colModel:Z,ctrlsSvc:$}=this.beans,X=new Set,Y=Z.getColsForKeys(z);for(let G of Y){let U=G.parent;while(U&&U!=Q){if(!U.isPadding())X.add(U);U=U.parent}}let q;for(let G of X){for(let U of $.getHeaderRowContainerCtrls())if(q=U.getHeaderCtrlForColumn(G),q)break;q?.resizeLeafColumnsToFit(J)}}autoSizeAllColumns(z){if(this.shouldQueueResizeOperations){this.pushResizeOperation(()=>this.autoSizeAllColumns(z));return}this.autoSizeCols({colKeys:this.beans.visibleCols.allCols,...z})}addColumnAutosizeListeners(z,J){let Q=this.gos.get("skipHeaderOnAutoSize"),Z=()=>{this.autoSizeColumn(J,"uiColumnResized",Q)};z.addEventListener("dblclick",Z);let $=new c0(z);return $.addEventListener("doubleTap",Z),()=>{z.removeEventListener("dblclick",Z),$.destroy()}}addColumnGroupResize(z,J,Q){let Z=this.gos.get("skipHeaderOnAutoSize"),$=()=>{let X=[],Y=J.getDisplayedLeafColumns();for(let q of Y)if(!q.colDef.suppressAutoSize)X.push(q.colId);if(X.length>0)this.autoSizeCols({colKeys:X,skipHeader:Z,stopAtGroup:J,source:"uiColumnResized"});Q()};return z.addEventListener("dblclick",$),()=>z.removeEventListener("dblclick",$)}sizeColumnsToFitGridBody(z,J){if(!this.isAlive())return;let Q=F8(this.beans);if(Q>0&&this.beans.visibleCols.centerCols.length===0)Q=Math.max(Q-A6,0);if(Q>0){this.sizeColumnsToFit(Q,"sizeColumnsToFit",!1,z);return}if(J===void 0)window.setTimeout(()=>{this.sizeColumnsToFitGridBody(z,100)},0);else if(J===100)window.setTimeout(()=>{this.sizeColumnsToFitGridBody(z,500)},100);else if(J===500)window.setTimeout(()=>{this.sizeColumnsToFitGridBody(z,-1)},500);else V(29)}sizeColumnsToFit(z,J="sizeColumnsToFit",Q,Z){if(this.shouldQueueResizeOperations){this.pushResizeOperation(()=>this.sizeColumnsToFit(z,J,Q,Z));return}let{beans:$}=this,X=Z?.animate??!0;if(X)Y2($,!0);let Y={};for(let{key:L,...D}of Z?.columnLimits??[])Y[typeof L==="string"?L:L.getColId()]=D;let q=$.visibleCols.allCols;if(z<=0||!q.length)return;let G=t4(q);if(Z?.onlyScaleUp&&G>z)return;if(z===G){if(q.every((D)=>{if(D.colDef.suppressSizeToFit)return!0;let M=Y?.[D.getId()],f=M?.minWidth??Z?.defaultMinWidth,A=M?.maxWidth??Z?.defaultMaxWidth,R=D.getActualWidth();return(f==null||R>=f)&&(A==null||R<=A)}))return}let _=[],H=[];for(let L of q){let D=Z?.colKeys?.some((M)=>h4(L,M))??!0;if(L.colDef.suppressSizeToFit||!D)H.push(L);else _.push(L)}let W=_.slice(0),B=!1,E=(L)=>{X0(_,L),H.push(L)},K={};for(let L of _){if(Z?.onlyScaleUp)K[L.colId]=L.getActualWidth();L.resetActualWidth(J);let D=Y?.[L.getId()],M=D?.minWidth??Z?.defaultMinWidth??-1/0,f=D?.maxWidth??Z?.defaultMaxWidth??1/0,A=L.getActualWidth(),R=Math.max(Math.min(A,f),M);if(R!=A)L.setActualWidth(R,J,!0)}while(!B){B=!0;let L=z-t4(H);if(L<=0)for(let D of _){let M=Y?.[D.getId()]?.minWidth??Z?.defaultMinWidth??D.minWidth;D.setActualWidth(M,J,!0)}else{let D=L/t4(_),M=L;for(let f=_.length-1;f>=0;f--){let A=_[f],R=A.colId,O=K[R],v=Y?.[R],I=v?.minWidth??Z?.defaultMinWidth??O,b=v?.maxWidth??Z?.defaultMaxWidth,m=Math.max(I??-1/0,A.getMinWidth()),g=Math.min(b??1/0,A.getMaxWidth()),e=Math.round(A.getActualWidth()*D);if(eg)e=g,E(A),B=!1;else if(f===0)e=M;A.setActualWidth(e,J,!0),M-=e}}}for(let L of W)L.fireColumnWidthChangedEvent(J);let F=$.visibleCols;if(F.setLeftValues(J),F.updateBodyWidths(),Q)return;if(N1(this.eventSvc,W,!0,J),X)Y2($,!1)}applyAutosizeStrategy(){let{gos:z,colDelayRenderSvc:J}=this.beans,Q=z.get("autoSizeStrategy");if(Q?.type!=="fitGridWidth"&&Q?.type!=="fitProvidedWidth")return;setTimeout(()=>{if(!this.isAlive())return;let Z=Q.type;if(Z==="fitGridWidth"){let{columnLimits:$,defaultMinWidth:X,defaultMaxWidth:Y}=Q,q=$?.map(({colId:G,minWidth:U,maxWidth:_})=>({key:G,minWidth:U,maxWidth:_}));this.sizeColumnsToFitGridBody({defaultMinWidth:X,defaultMaxWidth:Y,columnLimits:q})}else if(Z==="fitProvidedWidth")this.sizeColumnsToFit(Q.width,"sizeColumnsToFit");J?.revealColumns(Z)})}onFirstDataRendered({colIds:z,...J}){setTimeout(()=>{if(!this.isAlive())return;let Q="autosizeColumns";if(z)this.autoSizeCols({...J,source:Q,colKeys:z});else this.autoSizeAllColumns({...J,source:Q});this.beans.colDelayRenderSvc?.revealColumns(J.type)})}processResizeOperations(){this.shouldQueueResizeOperations=!1;for(let z of this.resizeOperationQueue)z();this.resizeOperationQueue=[]}pushResizeOperation(z){this.resizeOperationQueue.push(z)}destroy(){this.resizeOperationQueue.length=0,super.destroy()}};function _L(z,J,Q={}){let Z=Q.minWidth??z.getMinWidth();if(J$)J=$;return J}function F8({ctrlsSvc:z,scrollVisibleSvc:J}){let Q=z.getGridBodyCtrl(),$=Q.isVerticalScrollShowing()?J.getScrollbarWidth():0;return lz(Q.eGridBody)-$}var L8="ag-animate-autosize";function Y2({ctrlsSvc:z,gos:J},Q){if(!J.get("animateColumnResizing")||J.get("enableRtl")||!z.isAlive())return;let Z=z.getGridBodyCtrl().eGridBody.classList;if(Q)Z.add(L8);else Z.remove(L8)}var BX={moduleName:"ColumnAutoSize",version:i,beans:[UL],apiFunctions:{sizeColumnsToFit:qL,autoSizeColumns:WX,autoSizeAllColumns:GL},dependsOn:[O$],css:[YL]};var HL=class extends S{constructor(){super(...arguments);this.beanName="gridSerializer"}wireBeans(z){this.visibleCols=z.visibleCols,this.colModel=z.colModel,this.rowModel=z.rowModel,this.pinnedRowModel=z.pinnedRowModel}serialize(z,J={}){let{allColumns:Q,columnKeys:Z,skipRowGroups:$,exportRowNumbers:X}=J,Y=this.getColumnsToExport({allColumns:Q,skipRowGroups:$,columnKeys:Z,exportRowNumbers:X});return[this.prepareSession(Y),this.prependContent(J),this.exportColumnGroups(J,Y),this.exportHeaders(J,Y),this.processPinnedTopRows(J,Y),this.processRows(J,Y),this.processPinnedBottomRows(J,Y),this.appendContent(J)].reduce((q,G)=>G(q),z).parse()}processRow(z,J,Q,Z){let $=J.shouldRowBeSkipped||(()=>!1),Y=J.rowPositions!=null||!!J.onlySelected,q=this.gos.get("groupHideOpenParents")&&!Y,G=this.colModel.pivotMode?Z.leafGroup:!Z.group,U=!!Z.footer,_=Z.allChildrenCount===1&&Z.childrenAfterGroup?.length===1&&UU(this.gos,Z);if(!G&&!U&&(J.skipRowGroups||_||q)||J.onlySelected&&!Z.isSelected()||J.skipPinnedTop&&Z.rowPinned==="top"||J.skipPinnedBottom&&Z.rowPinned==="bottom"||Z.stub)return;if(Z.level===-1&&!G&&!U)return;if($(C(this.gos,{node:Z})))return;let B=z.onNewBodyRow(Z);if(Q.forEach((E,K)=>{B.onColumn(E,K,Z)}),J.getCustomContentBelowRow){let E=J.getCustomContentBelowRow(C(this.gos,{node:Z}));if(E)z.addCustomContent(E)}}appendContent(z){return(J)=>{let Q=z.appendContent;if(Q)J.addCustomContent(Q);return J}}prependContent(z){return(J)=>{let Q=z.prependContent;if(Q)J.addCustomContent(Q);return J}}prepareSession(z){return(J)=>{return J.prepare(z),J}}exportColumnGroups(z,J){return(Q)=>{if(!z.skipColumnGroupHeaders){let Z=new I$,{colGroupSvc:$}=this.beans,X=$?$.createColumnGroups({columns:J,idCreator:Z,pinned:null,isStandaloneStructure:!0}):J;this.recursivelyAddHeaderGroups(X,Q,z.processGroupHeaderCallback)}return Q}}exportHeaders(z,J){return(Q)=>{if(!z.skipColumnHeaders){let Z=Q.onNewHeaderRow();J.forEach(($,X)=>{Z.onColumn($,X,void 0)})}return Q}}processPinnedTopRows(z,J){return(Q)=>{let Z=this.processRow.bind(this,Q,z,J);if(z.rowPositions)z.rowPositions.filter(($)=>$.rowPinned==="top").sort(($,X)=>$.rowIndex-X.rowIndex).map(($)=>this.pinnedRowModel?.getPinnedTopRow($.rowIndex)).forEach(Z);else if(!this.pinnedRowModel?.isManual())this.pinnedRowModel?.forEachPinnedRow("top",Z);return Q}}processRows(z,J){return(Q)=>{let Z=this.rowModel,$=o(this.gos,Z),X=Az(this.gos,Z),Y=!$&&z.onlySelected,q=this.processRow.bind(this,Q,z,J),{exportedRows:G="filteredAndSorted"}=z;if(z.rowPositions)z.rowPositions.filter((U)=>U.rowPinned==null).sort((U,_)=>U.rowIndex-_.rowIndex).map((U)=>Z.getRow(U.rowIndex)).forEach(q);else if(this.colModel.pivotMode)if($)Z.forEachPivotNode(q,!0,G==="filteredAndSorted");else if(X)Z.forEachNodeAfterFilterAndSort(q,!0);else Z.forEachNode(q);else if(z.onlySelectedAllPages||Y){let U=this.beans.selectionSvc?.getSelectedNodes()??[];this.replicateSortedOrder(U),U.forEach(q)}else if(G==="all")Z.forEachNode(q);else if($||X)Z.forEachNodeAfterFilterAndSort(q,!0);else Z.forEachNode(q);return Q}}replicateSortedOrder(z){let{sortSvc:J,rowNodeSorter:Q}=this.beans;if(!J||!Q)return;let Z=J.getSortOptions(),$=(X,Y)=>{if(X.rowIndex!=null&&Y.rowIndex!=null)return X.rowIndex-Y.rowIndex;if(X.level===Y.level){if(X.parent?.id===Y.parent?.id)return Q.compareRowNodes(Z,X,Y)||(X.rowIndex??-1)-(Y.rowIndex??-1);return $(X.parent,Y.parent)}if(X.level>Y.level)return $(X.parent,Y);return $(X,Y.parent)};z.sort($)}processPinnedBottomRows(z,J){return(Q)=>{let Z=this.processRow.bind(this,Q,z,J);if(z.rowPositions)z.rowPositions.filter(($)=>$.rowPinned==="bottom").sort(($,X)=>$.rowIndex-X.rowIndex).map(($)=>this.pinnedRowModel?.getPinnedBottomRow($.rowIndex)).forEach(Z);else if(!this.pinnedRowModel?.isManual())this.pinnedRowModel?.forEachPinnedRow("bottom",Z);return Q}}getColumnsToExport(z){let{allColumns:J=!1,skipRowGroups:Q=!1,exportRowNumbers:Z=!1,columnKeys:$}=z,{colModel:X,gos:Y,visibleCols:q}=this,G=X.pivotMode,U=(W)=>{if(i4(W))return!1;return!y0(W)||Z};if($?.length)return X.getColsForKeys($).filter(U);let _=Y.get("treeData"),H;if(J&&!G)H=X.getCols();else H=q.allCols;return H=H.filter((W)=>U(W)&&(Q&&!_?!Z1(W):!0)),H}recursivelyAddHeaderGroups(z,J,Q){let Z=[];for(let $ of z){let X=$;if(!X.getChildren)continue;for(let Y of X.getChildren()??[])Z.push(Y)}if(z.length>0&&K0(z[0]))this.doAddHeaderHeader(J,z,Q);if(Z&&Z.length>0)this.recursivelyAddHeaderGroups(Z,J,Q)}doAddHeaderHeader(z,J,Q){let Z=z.onNewHeaderGroupingRow(),$=0;for(let X of J){let Y=X,q;if(Q)q=Q(C(this.gos,{columnGroup:Y}));else q=this.beans.colNames.getDisplayNameForColumnGroup(Y,"header");let U=(Y.isExpandable()?Y.getLeafColumns():[]).reduce((_,H,W,B)=>{let E=y(_);if(H.getColumnGroupShow()!=="open"){if(E&&E[1]==null)E[1]=W-1}else if(!E||E[1]!=null)E=[W],_.push(E);if(W===B.length-1&&E&&E[1]==null)E[1]=W;return _},[]);Z.onColumn(Y,q||"",$++,Y.getLeafColumns().length-1,U)}}},W5={moduleName:"SharedExport",version:i,beans:[HL]};function SJ(z,J){let Q=document.defaultView??window;if(!Q)return;let Z=document.createElement("a"),$=Q.URL.createObjectURL(J);Z.setAttribute("href",$),Z.setAttribute("download",z),Z.style.display="none",document.body.appendChild(Z),Z.dispatchEvent(new MouseEvent("click",{bubbles:!1,cancelable:!0,view:Q})),Z.remove(),Q.setTimeout(()=>{Q.URL.revokeObjectURL($)},0)}var B5=class extends S{getFileName(z){let J=this.getDefaultFileExtension();if(!z?.length)z=this.getDefaultFileName();return z.includes(".")?z:`${z}.${J}`}getData(z){return this.beans.gridSerializer.serialize(this.createSerializingSession(z),z)}getDefaultFileName(){return`export.${this.getDefaultFileExtension()}`}},E5=class{constructor(z){this.valueFrom="data";let{colModel:J,rowGroupColsSvc:Q,colNames:Z,valueSvc:$,gos:X,processCellCallback:Y,processHeaderCallback:q,processGroupHeaderCallback:G,processRowGroupCallback:U,valueFrom:_}=z;if(this.colModel=J,this.rowGroupColsSvc=Q,this.colNames=Z,this.valueSvc=$,this.gos=X,this.processCellCallback=Y,this.processHeaderCallback=q,this.processGroupHeaderCallback=G,this.processRowGroupCallback=U,_)this.valueFrom=_}prepare(z){}extractHeaderValue(z){return this.getHeaderName(this.processHeaderCallback,z)??""}extractRowCellValue(z){let{column:J,node:Q,currentColumnIndex:Z,accumulatedRowIndex:$,type:X,useRawFormula:Y}=z,q=Z===0&&F9(this.gos,Q,this.colModel.pivotMode);if(this.processRowGroupCallback&&(this.gos.get("treeData")||Q.group)&&(J.isRowGroupDisplayed(Q.rowGroupColumn?.colId??"")||q))return{value:this.processRowGroupCallback(C(this.gos,{column:J,node:Q}))??""};if(this.processCellCallback)return{value:this.processCellCallback(C(this.gos,{accumulatedRowIndex:$,column:J,node:Q,value:this.valueSvc.getValueForDisplay({column:J,node:Q,from:this.valueFrom}).value,type:X,parseValue:(E)=>this.valueSvc.parseValue(J,Q,E,this.valueSvc.getValue(J,Q,this.valueFrom)),formatValue:(E)=>this.valueSvc.formatValue(J,Q,E)??E}))??""};let G=this.gos.get("treeData"),U=this.valueSvc,_=Q.level===-1&&Q.footer,H=J.colDef.showRowGroup===!0&&(Q.group||G);if(!_&&(q||H)){let E="",K=Q;while(K&&K.level!==-1){let{value:F,valueFormatted:L}=U.getValueForDisplay({column:q?void 0:J,node:K,includeValueFormatted:!0,exporting:!0,from:this.valueFrom});E=` -> ${L??F??""}${E}`,K=K.parent}return{value:E,valueFormatted:E}}let{value:W,valueFormatted:B}=U.getValueForDisplay({column:J,node:Q,includeValueFormatted:!0,exporting:!0,useRawFormula:Y,from:this.valueFrom});return{value:W??"",valueFormatted:B}}getHeaderName(z,J){if(z)return z(C(this.gos,{column:J}));return this.colNames.getDisplayNameForColumn(J,"csv",!0)}},D8=`\r +`,WL=class extends E5{constructor(z){super(z);this.config=z,this.isFirstLine=!0,this.result="";let{suppressQuotes:J,columnSeparator:Q}=z;this.suppressQuotes=J,this.columnSeparator=Q}addCustomContent(z){if(!z)return;if(typeof z==="string"){if(!/^\s*\n/.test(z))this.beginNewLine();z=z.replace(/\r?\n/g,D8),this.result+=z}else z.forEach((J)=>{this.beginNewLine(),J.forEach((Q,Z)=>{if(Z!==0)this.result+=this.columnSeparator;if(this.result+=this.putInQuotes(Q.data.value||""),Q.mergeAcross)this.appendEmptyCells(Q.mergeAcross)})})}onNewHeaderGroupingRow(){return this.beginNewLine(),{onColumn:this.onNewHeaderGroupingRowColumn.bind(this)}}onNewHeaderGroupingRowColumn(z,J,Q,Z){if(Q!=0)this.result+=this.columnSeparator;this.result+=this.putInQuotes(J),this.appendEmptyCells(Z)}appendEmptyCells(z){for(let J=1;J<=z;J++)this.result+=this.columnSeparator+this.putInQuotes("")}onNewHeaderRow(){return this.beginNewLine(),{onColumn:this.onNewHeaderRowColumn.bind(this)}}onNewHeaderRowColumn(z,J){if(J!=0)this.result+=this.columnSeparator;this.result+=this.putInQuotes(this.extractHeaderValue(z))}onNewBodyRow(){return this.beginNewLine(),{onColumn:this.onNewBodyRowColumn.bind(this)}}onNewBodyRowColumn(z,J,Q){if(J!=0)this.result+=this.columnSeparator;let Z=this.extractRowCellValue({column:z,node:Q,currentColumnIndex:J,accumulatedRowIndex:J,type:"csv",useRawFormula:!1});this.result+=this.putInQuotes(Z.valueFormatted??Z.value)}putInQuotes(z){if(this.suppressQuotes)return z;if(z===null||z===void 0)return'""';let J;if(typeof z==="string")J=z;else if(typeof z.toString==="function")J=z.toString();else V(53),J="";return'"'+J.replace(/"/g,'""')+'"'}parse(){return this.result}beginNewLine(){if(!this.isFirstLine)this.result+=D8;this.isFirstLine=!1}},BL=class extends B5{constructor(){super(...arguments);this.beanName="csvCreator"}getMergedParams(z){let J=this.gos.get("defaultCsvExportParams");return Object.assign({},J,z)}export(z){if(this.isExportSuppressed()){V(51);return}let J=()=>{let Z=this.getMergedParams(z),$=this.getData(Z),X=new Blob(["\uFEFF",$],{type:"text/plain"}),Y=Z.fileName,q=typeof Y==="function"?Y(C(this.gos,{})):Y;SJ(this.getFileName(q),X)},{overlays:Q}=this.beans;if(Q)Q.showExportOverlay(J);else J()}exportDataAsCsv(z){this.export(z)}getDataAsCsv(z,J=!1){let Q=J?Object.assign({},z):this.getMergedParams(z);return this.getData(Q)}getDefaultFileExtension(){return"csv"}createSerializingSession(z){let{colModel:J,colNames:Q,rowGroupColsSvc:Z,valueSvc:$,gos:X}=this.beans,{processCellCallback:Y,processHeaderCallback:q,processGroupHeaderCallback:G,processRowGroupCallback:U,suppressQuotes:_,columnSeparator:H,valueFrom:W}=z;return new WL({colModel:J,colNames:Q,valueSvc:$,gos:X,processCellCallback:Y||void 0,processHeaderCallback:q||void 0,processGroupHeaderCallback:G||void 0,processRowGroupCallback:U||void 0,suppressQuotes:_||!1,columnSeparator:H||",",rowGroupColsSvc:Z,valueFrom:W})}isExportSuppressed(){return this.gos.get("suppressCsvExport")}};function EL(z,J){return z.csvCreator?.getDataAsCsv(J)}function KL(z,J){z.csvCreator?.exportDataAsCsv(J)}var EX={moduleName:"CsvExport",version:i,beans:[BL],apiFunctions:{getDataAsCsv:EL,exportDataAsCsv:KL},dependsOn:[W5]},KX=class extends k0{constructor(z,J){super();if(this.ctrl=z,J)this.beans=J}postConstruct(){this.refreshTooltip()}setBrowserTooltip(z,J){let Z=this.ctrl.getGui();if(!Z)return;if(z!=null&&(z!=""||J))Z.setAttribute("title",z);else Z.removeAttribute("title")}updateTooltipText(){let{getTooltipValue:z}=this.ctrl;if(z)this.tooltip=z()}createTooltipFeatureIfNeeded(){if(this.tooltipManager==null){let z=this.beans.registry.createDynamicBean("tooltipStateManager",!0,this.ctrl,()=>this.tooltip);if(z)this.tooltipManager=this.createBean(z,this.beans.context)}}attemptToShowTooltip(){this.tooltipManager?.prepareToShowTooltip()}attemptToHideTooltip(){this.tooltipManager?.hideTooltip()}setTooltipAndRefresh(z){this.tooltip=z,this.refreshTooltip()}refreshTooltip(z){if(this.browserTooltips=this.beans.gos.get("enableBrowserTooltips"),this.updateTooltipText(),this.browserTooltips)this.setBrowserTooltip(this.tooltip),this.tooltipManager=this.destroyBean(this.tooltipManager,this.beans.context);else this.setBrowserTooltip(z?"":null,z),this.createTooltipFeatureIfNeeded()}destroy(){this.tooltipManager=this.destroyBean(this.tooltipManager,this.beans.context),super.destroy()}},FL=1000,LL=1000,M8=100,k8,E6=!1,DL=class extends k0{constructor(z,J){super();this.tooltipCtrl=z,this.getTooltipValue=J,this.interactionEnabled=!1,this.isInteractingWithTooltip=!1,this.state=0,this.tooltipInstanceCount=0,this.tooltipMouseTrack=!1}wireBeans(z){this.popupSvc=z.popupSvc}postConstruct(){if(this.gos.get("tooltipInteraction"))this.interactionEnabled=!0;this.tooltipTrigger=this.getTooltipTrigger(),this.tooltipMouseTrack=this.gos.get("tooltipMouseTrack");let z=this.tooltipCtrl.getGui();if(this.tooltipTrigger===0)this.addManagedListeners(z,{mouseenter:this.onMouseEnter.bind(this),mouseleave:this.onMouseLeave.bind(this)});if(this.tooltipTrigger===1)this.addManagedListeners(z,{focusin:this.onFocusIn.bind(this),focusout:this.onFocusOut.bind(this)});if(this.addManagedListeners(z,{mousemove:this.onMouseMove.bind(this)}),!this.interactionEnabled)this.addManagedListeners(z,{mousedown:this.onMouseDown.bind(this),keydown:this.onKeyDown.bind(this)})}getGridOptionsTooltipDelay(z){let J=this.gos.get(z);return Math.max(200,J)}getTooltipDelay(z){return this.tooltipCtrl[`getTooltip${z}DelayOverride`]?.()??this.getGridOptionsTooltipDelay(`tooltip${z}Delay`)}destroy(){this.setToDoNothing(),super.destroy()}getTooltipTrigger(){let z=this.gos.get("tooltipTrigger");if(!z||z==="hover")return 0;return 1}onMouseEnter(z){if(this.interactionEnabled&&this.interactiveTooltipTimeoutId)this.unlockService(),this.startHideTimeout();if(a4())return;if(E6)this.showTooltipTimeoutId=window.setTimeout(()=>{this.prepareToShowTooltip(z)},M8);else this.prepareToShowTooltip(z)}onMouseMove(z){if(this.lastMouseEvent)this.lastMouseEvent=z;if(this.tooltipMouseTrack&&this.state===2&&this.tooltipComp)this.positionTooltip()}onMouseDown(){this.setToDoNothing()}onMouseLeave(){if(this.interactionEnabled)this.lockService();else this.setToDoNothing()}onFocusIn(){this.prepareToShowTooltip()}onFocusOut(z){let J=z.relatedTarget,Q=this.tooltipCtrl.getGui(),Z=this.tooltipComp?.getGui();if(this.isInteractingWithTooltip||Q.contains(J)||this.interactionEnabled&&Z?.contains(J))return;this.setToDoNothing()}onKeyDown(){if(this.isInteractingWithTooltip)this.isInteractingWithTooltip=!1;this.setToDoNothing()}prepareToShowTooltip(z){if(this.state!=0||E6)return;let J=0;if(z)J=this.isLastTooltipHiddenRecently()?this.getTooltipDelay("SwitchShow"):this.getTooltipDelay("Show");this.lastMouseEvent=z||null,this.showTooltipTimeoutId=window.setTimeout(this.showTooltip.bind(this),J),this.state=1}isLastTooltipHiddenRecently(){return Date.now()-k8this.hideTooltip(!0),...J.getAdditionalParams?.()});this.state=2,this.tooltipInstanceCount++;let Z=this.newTooltipComponentCallback.bind(this,this.tooltipInstanceCount);this.createTooltipComp(Q,Z)}hideTooltip(z){if(!z&&this.isInteractingWithTooltip)return;if(this.tooltipComp)this.destroyTooltipComp(),k8=Date.now();if(this.eventSvc.dispatchEvent({type:"tooltipHide",parentGui:this.tooltipCtrl.getGui()}),z)this.isInteractingWithTooltip=!1;this.setToDoNothing(!0)}newTooltipComponentCallback(z,J){if(this.state!==2||this.tooltipInstanceCount!==z){this.destroyBean(J);return}let Z=J.getGui();if(this.tooltipComp=J,!Z.classList.contains("ag-tooltip"))Z.classList.add("ag-tooltip-custom");if(this.tooltipTrigger===0)Z.classList.add("ag-tooltip-animate");if(this.interactionEnabled)Z.classList.add("ag-tooltip-interactive");let $=this.getLocaleTextFunc(),X=this.popupSvc?.addPopup({eChild:Z,ariaLabel:$("ariaLabelTooltip","Tooltip")});if(X)this.tooltipPopupDestroyFunc=X.hideFunc;if(this.positionTooltip(),this.tooltipTrigger===1){let Y=()=>this.setToDoNothing();[this.onBodyScrollEventCallback]=this.addManagedEventListeners({bodyScroll:Y}),this.setEventHandlers(Y)}if(this.interactionEnabled){if([this.tooltipMouseEnterListener,this.tooltipMouseLeaveListener]=this.addManagedElementListeners(Z,{mouseenter:this.onTooltipMouseEnter.bind(this),mouseleave:this.onTooltipMouseLeave.bind(this)}),[this.onDocumentKeyDownCallback]=this.addManagedElementListeners(Y0(this.beans),{keydown:(Y)=>{if(!Z.contains(Y?.target))this.onKeyDown()}}),this.tooltipTrigger===1)[this.tooltipFocusInListener,this.tooltipFocusOutListener]=this.addManagedElementListeners(Z,{focusin:this.onTooltipFocusIn.bind(this),focusout:this.onTooltipFocusOut.bind(this)})}this.eventSvc.dispatchEvent({type:"tooltipShow",tooltipGui:Z,parentGui:this.tooltipCtrl.getGui()}),this.startHideTimeout()}onTooltipMouseEnter(){this.isInteractingWithTooltip=!0,this.unlockService()}onTooltipMouseLeave(){if(this.isTooltipFocused())return;this.isInteractingWithTooltip=!1,this.lockService()}onTooltipFocusIn(){this.isInteractingWithTooltip=!0}isTooltipFocused(){let z=this.tooltipComp?.getGui(),J=n(this.beans);return!!z&&z.contains(J)}onTooltipFocusOut(z){let J=this.tooltipCtrl.getGui();if(this.isTooltipFocused())return;if(this.isInteractingWithTooltip=!1,J.contains(z.relatedTarget))this.startHideTimeout();else this.hideTooltip()}positionTooltip(){let z={type:"tooltip",ePopup:this.tooltipComp.getGui(),nudgeY:18,skipObserver:this.tooltipMouseTrack};if(this.lastMouseEvent)this.popupSvc?.positionPopupUnderMouseEvent({...z,mouseEvent:this.lastMouseEvent});else this.popupSvc?.positionPopupByComponent({...z,eventSource:this.tooltipCtrl.getGui(),position:"under",keepWithinBounds:!0,nudgeY:5})}destroyTooltipComp(){this.tooltipComp.getGui().classList.add("ag-tooltip-hiding");let z=this.tooltipPopupDestroyFunc,J=this.tooltipComp,Q=this.tooltipTrigger===0?LL:0;window.setTimeout(()=>{z(),this.destroyBean(J)},Q),this.clearTooltipListeners(),this.tooltipPopupDestroyFunc=void 0,this.tooltipComp=void 0}clearTooltipListeners(){for(let z of[this.tooltipMouseEnterListener,this.tooltipMouseLeaveListener,this.tooltipFocusInListener,this.tooltipFocusOutListener])if(z)z();this.tooltipMouseEnterListener=this.tooltipMouseLeaveListener=this.tooltipFocusInListener=this.tooltipFocusOutListener=null}lockService(){E6=!0,this.interactiveTooltipTimeoutId=window.setTimeout(()=>{this.unlockService(),this.setToDoNothing()},M8)}unlockService(){E6=!1,this.clearInteractiveTimeout()}startHideTimeout(){this.clearHideTimeout(),this.hideTooltipTimeoutId=window.setTimeout(this.hideTooltip.bind(this),this.getTooltipDelay("Hide"))}clearShowTimeout(){if(!this.showTooltipTimeoutId)return;window.clearTimeout(this.showTooltipTimeoutId),this.showTooltipTimeoutId=void 0}clearHideTimeout(){if(!this.hideTooltipTimeoutId)return;window.clearTimeout(this.hideTooltipTimeoutId),this.hideTooltipTimeoutId=void 0}clearInteractiveTimeout(){if(!this.interactiveTooltipTimeoutId)return;window.clearTimeout(this.interactiveTooltipTimeoutId),this.interactiveTooltipTimeoutId=void 0}clearTimeouts(){this.clearShowTimeout(),this.clearHideTimeout(),this.clearInteractiveTimeout()}},ML=class extends KX{constructor(z,J,Q){super(z,Q);this.highlightTracker=J,this.onHighlight=this.onHighlight.bind(this)}postConstruct(){super.postConstruct(),this.wireHighlightListeners()}wireHighlightListeners(){this.addManagedPropertyListener("tooltipTrigger",({currentValue:z})=>{this.setTooltipMode(z)}),this.setTooltipMode(this.gos.get("tooltipTrigger")),this.highlightTracker.addEventListener("itemHighlighted",this.onHighlight)}onHighlight(z){if(this.tooltipMode!==1)return;if(z.highlighted)this.attemptToShowTooltip();else this.attemptToHideTooltip()}setTooltipMode(z="focus"){this.tooltipMode=z==="focus"?1:0}destroy(){this.highlightTracker.removeEventListener("itemHighlighted",this.onHighlight),super.destroy()}},kL=class extends hZ{constructor(){super({tag:"div",cls:"ag-tooltip"})}init(z){let{value:J}=z,Q=this.getGui();Q.textContent=T2(J);let Z=z.location.replace(/([a-z])([A-Z0-9])/g,"$1-$2").toLowerCase();Q.classList.add(`ag-${Z}-tooltip`)}},fL=".ag-tooltip{background-color:var(--ag-tooltip-background-color);border:var(--ag-tooltip-border);border-radius:var(--ag-border-radius);color:var(--ag-tooltip-text-color);padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);position:absolute;white-space:normal;z-index:99999;&:where(.ag-cell-editor-tooltip),&:where(.ag-cell-formula-tooltip){background-color:var(--ag-tooltip-error-background-color);border:var(--ag-tooltip-error-border);color:var(--ag-tooltip-error-text-color);font-weight:500}}.ag-tooltip-custom{position:absolute;z-index:99999}.ag-tooltip-custom:where(:not(.ag-tooltip-interactive)),.ag-tooltip:where(:not(.ag-tooltip-interactive)){pointer-events:none}.ag-tooltip-animate{transition:opacity 1s;&:where(.ag-tooltip-hiding){opacity:0}}";function f8(z,J){return{top:z.top-J.top,left:z.left-J.left,right:z.right-J.left,bottom:z.bottom-J.top}}function q2(z,J,Q,Z=0){let[$,X]=Q.split("-"),Y=FX(z,X),q=SL(J,$),G=VL($,X);return{x:Y.x-q.x+G.dx*Z,y:Y.y-q.y+G.dy*Z}}function FX(z,J){let Q=(z.left+z.right)/2,Z=(z.top+z.bottom)/2;switch(J){case"tl":return{x:z.left,y:z.top};case"tc":return{x:Q,y:z.top};case"tr":return{x:z.right,y:z.top};case"l":return{x:z.left,y:Z};case"c":return{x:Q,y:Z};case"r":return{x:z.right,y:Z};case"bl":return{x:z.left,y:z.bottom};case"bc":return{x:Q,y:z.bottom};case"br":return{x:z.right,y:z.bottom}}}function SL(z,J){return FX({top:0,left:0,right:z.width,bottom:z.height},J)}function VL(z,J){let Q=S8(z),Z=S8(J),$=V8(z),X=V8(J);return{dx:Math.sign(Z-Q),dy:Math.sign(X-$)}}function S8(z){let J=z.length===2?z[1]:z;if(J==="l")return-1;if(J==="r")return 1;return 0}function V8(z){if(z.length===1)return 0;if(z.startsWith("t"))return-1;if(z.startsWith("b"))return 1;return 0}var K6=0,RL=200,AL=class extends k0{constructor(){super(...arguments);this.beanName="popupSvc",this.popupList=[]}postConstruct(){this.addManagedEventListeners({stylesChanged:this.handleThemeChange.bind(this)})}getPopupParent(){let z=this.gos.get("popupParent");if(z)return z;return this.getDefaultPopupParent()}positionPopupUnderMouseEvent(z){let{ePopup:J,nudgeX:Q,nudgeY:Z,skipObserver:$}=z;this.positionPopup({ePopup:J,nudgeX:Q,nudgeY:Z,keepWithinBounds:!0,skipObserver:$,updatePosition:()=>this.calculatePointerAlign(z.mouseEvent),postProcessCallback:()=>this.callPostProcessPopup(z.additionalParams,z.type,z.ePopup,null,z.mouseEvent)})}calculatePointerAlign(z){let J=this.getParentRect();return{x:z.clientX-J.left,y:z.clientY-J.top}}positionPopupByComponent(z){let{ePopup:J,nudgeX:Q,nudgeY:Z,keepWithinBounds:$,eventSource:X,alignSide:Y="left",position:q="over",type:G}=z,U=X.getBoundingClientRect(),_=this.getParentRect();this.setAlignedTo(X,J);let H=()=>{let W=f8(U,_),B={width:J.offsetWidth,height:J.offsetHeight},E=Y==="right";if(q==="over")return this.setAlignedStyles(J,"over"),q2(W,B,E?"tr-tr":"tl-tl");if(this.setAlignedStyles(J,"under"),this.shouldRenderUnderOrAbove(J,U,_,z.nudgeY||0)==="under")return q2(W,B,E?"tr-br":"tl-bl");let F=q2(W,B,E?"br-tr":"bl-tl");return F.y-=(Z||0)*2,F};this.positionPopup({ePopup:J,nudgeX:Q,nudgeY:Z,keepWithinBounds:$,updatePosition:H,postProcessCallback:()=>this.callPostProcessPopup(z.additionalParams,G,J,X,null)})}positionPopupForMenu(z){let{eventSource:J,ePopup:Q,event:Z}=z,$=J.getBoundingClientRect(),X=this.getParentRect();this.setAlignedTo(J,Q);let Y=!1,q=()=>{let G=f8($,X),U=this.keepXYWithinBounds(Q,G.top,0),_=Q.clientWidth>0?Q.clientWidth:200;if(!Y)Q.style.minWidth=`${_}px`,Y=!0;let W=X.right-X.left-_,B={width:_,height:Q.offsetHeight},E=q2(G,B,"tl-tr").x-2,K=q2(G,B,"tr-tl").x,F;if(this.gos.get("enableRtl")){if(F=K,F<0)F=E,this.setAlignedStyles(Q,"left");if(F>W)F=0,this.setAlignedStyles(Q,"right")}else{if(F=E,F>W)F=K,this.setAlignedStyles(Q,"right");if(F<0)F=0,this.setAlignedStyles(Q,"left")}return{x:F,y:U}};this.positionPopup({ePopup:Q,keepWithinBounds:!0,updatePosition:q,postProcessCallback:()=>this.callPostProcessPopup(z.additionalParams,"subMenu",Q,J,Z instanceof MouseEvent?Z:void 0)})}shouldRenderUnderOrAbove(z,J,Q,Z){let $=Q.bottom-J.bottom,X=J.top-Q.top,Y=z.offsetHeight+Z;if($>Y)return"under";if(X>Y||X>$)return"above";return"under"}setAlignedStyles(z,J){let Q=this.getPopupIndex(z);if(Q===-1)return;let Z=this.popupList[Q],{alignedToElement:$}=Z;if(!$)return;let X=["right","left","over","above","under"];for(let Y of X)$.classList.remove(`ag-has-popup-positioned-${Y}`),z.classList.remove(`ag-popup-positioned-${Y}`);if(!J)return;$.classList.add(`ag-has-popup-positioned-${J}`),z.classList.add(`ag-popup-positioned-${J}`)}setAlignedTo(z,J){let Q=this.getPopupIndex(J);if(Q!==-1){let Z=this.popupList[Q];Z.alignedToElement=z}}positionPopup(z){let{ePopup:J,keepWithinBounds:Q,nudgeX:Z,nudgeY:$,skipObserver:X,updatePosition:Y}=z,q={width:0,height:0},G=(U=!1)=>{let{x:_,y:H}=Y();if(U&&J.clientWidth===q.width&&J.clientHeight===q.height)return;if(q.width=J.clientWidth,q.height=J.clientHeight,Z)_+=Z;if($)H+=$;if(Q)_=this.keepXYWithinBounds(J,_,1),H=this.keepXYWithinBounds(J,H,0);if(J.style.left=`${_}px`,J.style.top=`${H}px`,z.postProcessCallback)z.postProcessCallback()};if(G(),!X){let U=j4(this.beans,J,()=>G(!0));setTimeout(()=>U(),RL)}}getParentRect(){let z=Y0(this.beans),J=this.getPopupParent();if(J===z.body)J=z.documentElement;else if(getComputedStyle(J).position==="static")J=J.offsetParent;return d8(J)}keepXYWithinBounds(z,J,Q){let Z=Q===0,$=Z?"clientHeight":"clientWidth",X=Z?"top":"left",Y=Z?"height":"width",q=Z?"scrollTop":"scrollLeft",G=Y0(this.beans),U=G.documentElement,_=this.getPopupParent(),H=z.getBoundingClientRect(),W=_.getBoundingClientRect(),B=G.documentElement.getBoundingClientRect(),E=_===G.body,K=Math.ceil(H[Y]),L=E?(Z?n8:P6)(U)+U[q]:_[$];if(E)L-=Math.abs(B[X]-W[X]);let D=L-K;return Math.min(Math.max(J,0),Math.max(D,0))}addPopup(z){let{eChild:J,ariaLabel:Q,ariaOwns:Z,alwaysOnTop:$,positionCallback:X,anchorToElement:Y}=z,q=this.getPopupIndex(J);if(q!==-1)return{hideFunc:this.popupList[q].hideFunc};this.initialisePopupPosition(J);let G=this.createPopupWrapper(J,!!$,Q,Z),U=this.addEventListenersToPopup({...z,wrapperEl:G});if(X)X();return this.addPopupToPopupList(J,G,U,Y),{hideFunc:U}}initialisePopupPosition(z){let Q=this.getPopupParent().getBoundingClientRect();if(!P(z.style.top))z.style.top=`${Q.top*-1}px`;if(!P(z.style.left))z.style.left=`${Q.left*-1}px`}createPopupWrapper(z,J,Q,Z){let $=this.getPopupParent(),{environment:X,gos:Y}=this.beans,q=H0({tag:"div"});if(X.applyThemeClasses(q),q.classList.add("ag-popup"),z.classList.add(Y.get("enableRtl")?"ag-rtl":"ag-ltr","ag-popup-child"),!z.hasAttribute("role"))U0(z,"dialog");if(Q)_0(z,Q);else if(Z)z.id||(z.id=`popup-component-${K6}`),K7(Z,z.id);if(q.appendChild(z),$.appendChild(q),J)this.setAlwaysOnTop(z,!0);else this.bringPopupToFront(z);return q}addEventListenersToPopup(z){let J=this.beans,Q=Y0(J),{wrapperEl:Z,eChild:$,closedCallback:X,afterGuiAttached:Y,closeOnEsc:q,modal:G,ariaOwns:U}=z,_=!1,H=(K)=>{if(!Z.contains(n(J)))return;if(K.key===k.ESCAPE&&!this.isStopPropagation(K))E({keyboardEvent:K})},W=(K)=>E({mouseEvent:K}),B=(K)=>E({touchEvent:K}),E=(K={})=>{let{mouseEvent:F,touchEvent:L,keyboardEvent:D,forceHide:M}=K;if(!M&&(this.isEventFromCurrentPopup({mouseEvent:F,touchEvent:L},$)||_))return;if(_=!0,Z.remove(),Q.removeEventListener("keydown",H),Q.removeEventListener("mousedown",W),Q.removeEventListener("touchstart",B),Q.removeEventListener("contextmenu",W),this.eventSvc.removeListener("dragStarted",W),X)X(F||L||D);this.removePopupFromPopupList($,U)};if(Y)Y({hidePopup:E});return window.setTimeout(()=>{if(q)Q.addEventListener("keydown",H);if(G)Q.addEventListener("mousedown",W),this.eventSvc.addListener("dragStarted",W),Q.addEventListener("touchstart",B),Q.addEventListener("contextmenu",W)},0),E}addPopupToPopupList(z,J,Q,Z){if(this.popupList.push({element:z,wrapper:J,hideFunc:Q,instanceId:K6,isAnchored:!!Z}),Z)this.setPopupPositionRelatedToElement(z,Z);K6=K6+1}getPopupIndex(z){return this.popupList.findIndex((J)=>J.element===z)}setPopupPositionRelatedToElement(z,J){let Q=this.getPopupIndex(z);if(Q===-1)return;let Z=this.popupList[Q];if(Z.stopAnchoringPromise)Z.stopAnchoringPromise.then((X)=>X?.());if(Z.stopAnchoringPromise=void 0,Z.isAnchored=!1,!J)return;let $=this.keepPopupPositionedRelativeTo({element:J,ePopup:z,hidePopup:Z.hideFunc});return Z.stopAnchoringPromise=$,Z.isAnchored=!0,$}removePopupFromPopupList(z,J){if(this.setAlignedStyles(z,null),this.setPopupPositionRelatedToElement(z,null),J)K7(J,null);this.popupList=this.popupList.filter((Q)=>Q.element!==z)}keepPopupPositionedRelativeTo(z){let J=this.getPopupParent(),Q=J.getBoundingClientRect(),{element:Z,ePopup:$}=z,X=Z.getBoundingClientRect(),Y=(H)=>Number.parseInt(H.substring(0,H.length-1),10),q=(H,W)=>{let B=Q[H]-X[H],E=Y($.style[H]);return{initialDiff:B,lastDiff:B,initial:E,last:E,direction:W}},G=q("top",0),U=q("left",1),_=this.beans.frameworkOverrides;return new N((H)=>{_.wrapIncoming(()=>{xU(()=>{let W=J.getBoundingClientRect(),B=Z.getBoundingClientRect();if(B.top==0&&B.left==0&&B.height==0&&B.width==0){z.hidePopup();return}let K=(F,L)=>{let D=Y($.style[L]);if(F.last!==D)F.initial=D,F.last=D;let M=W[L]-B[L];if(M!=F.lastDiff){let f=this.keepXYWithinBounds($,F.initial+F.initialDiff-M,F.direction);$.style[L]=`${f}px`,F.last=f}F.lastDiff=M};K(G,"top"),K(U,"left")},200).then((W)=>{H(()=>{if(W!=null)window.clearInterval(W)})})},"popupPositioning")})}isEventFromCurrentPopup(z,J){let{mouseEvent:Q,touchEvent:Z}=z,$=Q?Q:Z;if(!$)return!1;let X=this.getPopupIndex(J);if(X===-1)return!1;for(let Y=X;Yz.element)}hasAnchoredPopup(){return this.popupList.some((z)=>z.isAnchored)}isStopPropagation(z){return q4(z)}},q1={moduleName:"Popup",version:i,beans:[jL]};function h1(z){return z.get("tooltipShowMode")==="whenTruncated"}function t1(z,J){return h1(z)?y1(J):void 0}var OL=(z,J)=>{let Q=z;if(typeof Q.getTranslatedMessage==="function")return Q.getTranslatedMessage(J);return z.message},eQ=(z,J,Q)=>{let{editModelSvc:Z}=z,$=Z?.getCellValidationModel()?.getCellValidation(J)?.errorMessages,X=Z?.getRowValidationModel().getRowValidation(J)?.errorMessages,Y=$||X;return Y?.length?Y.join(Q("tooltipValidationErrorSeparator",". ")):void 0},PL=(z,J)=>{if(!h1(z.gos))return;if(J.isCellRenderer()){let Z=J.column.colDef;if(!(!!Z.showRowGroup||Z.cellRenderer==="agGroupCellRenderer"))return;return y1(()=>{let X=J.eGui;return X.querySelector(".ag-group-value")||X.querySelector(".ag-cell-value")||X})}return y1(()=>{let Z=J.eGui;return Z.children.length===0?Z:Z.querySelector(".ag-cell-value")})},TL=(z,J,Q)=>{let{editSvc:Z}=z,{column:$}=J,X=PL(z,J),Y=()=>{if(Z?.isEditing(J))return!1;if(!X)return!0;if(!$.isTooltipEnabled())return!1;return X()};return{shouldDisplayDefault:Y,shouldDisplayColumnTooltip:Y,shouldDisplayCustomTooltip:Q??Y}},vL=({beans:z,ctrl:J,value:Q,displayFunctions:Z,translate:$})=>{let{editSvc:X,formula:Y,gos:q}=z,{column:G,rowNode:U}=J,_=G.colDef;if(_.allowFormula&&Y?.active){let F=Y.getFormulaError(G,U);if(F)return{value:OL(F,$),location:"cellFormula",shouldDisplay:()=>!!Y?.getFormulaError(G,U)}}if(!X?.isEditing(J)){let F=eQ(z,J,$);if(F)return{value:F,location:"cellEditor",shouldDisplay:()=>!X?.isEditing(J)&&!!eQ(z,J,$)}}let{shouldDisplayCustomTooltip:W,shouldDisplayColumnTooltip:B}=Z;if(Q!=null)return{value:Q,location:"cell",shouldDisplay:W};let E=U.data;if(_.tooltipField&&P(E)){let F=_.tooltipField;return{value:G.isTooltipFieldContainsDots()?B2(E,F):E[F],location:"cell",shouldDisplay:B}}let K=_.tooltipValueGetter;if(K)return{value:K(C(q,{location:"cell",colDef:G.colDef,column:G,rowIndex:J.cellPosition.rowIndex,node:U,data:U.data,value:J.value,valueFormatted:J.valueFormatted})),location:"cell",shouldDisplay:B};return null},IL=class extends S{constructor(){super(...arguments);this.beanName="tooltipSvc"}setupHeaderTooltip(z,J,Q,Z){if(z)J.destroyBean(z);if(!J.isAlive())return;let $=this.gos,X=h1($),{column:Y,eGui:q}=J,G=Y.colDef;if(!Z&&X&&!G.headerComponent)Z=y1(()=>q.querySelector(".ag-header-cell-text"));let U="header",_="header",H=this.beans.colNames.getDisplayNameForColumn(Y,_,!0),W=Q??H,B={getGui:()=>q,getLocation:()=>U,getTooltipValue:()=>Q??G?.headerTooltipValueGetter?.(C($,{location:U,colDef:G,column:Y,value:W,valueFormatted:H}))??G?.headerTooltip,shouldDisplayTooltip:Z,getAdditionalParams:()=>({column:Y,colDef:Y.colDef})},E=this.createTooltipFeature(B);if(E)E=J.createBean(E),J.setRefreshFunction("tooltip",()=>E.refreshTooltip());return E}setupHeaderGroupTooltip(z,J,Q,Z){if(z)J.destroyBean(z);if(!J.isAlive())return;let $=this.gos,X=h1($),{column:Y,eGui:q}=J,G=Y.getColGroupDef();if(!Z&&X&&!G?.headerGroupComponent)Z=y1(()=>q.querySelector(".ag-header-group-text"));let U="headerGroup",_="header",H=this.beans.colNames.getDisplayNameForColumnGroup(Y,_),W=Q??H,B={getGui:()=>q,getLocation:()=>U,getTooltipValue:()=>Q??G?.headerTooltipValueGetter?.(C($,{location:U,colDef:G,column:Y,value:W,valueFormatted:H}))??G?.headerTooltip,shouldDisplayTooltip:Z,getAdditionalParams:()=>{let K={column:Y};if(G)K.colDef=G;return K}},E=this.createTooltipFeature(B);return E?J.createBean(E):E}enableCellTooltipFeature(z,J,Q){let{beans:Z}=this,{column:$,rowNode:X}=z,Y=TL(Z,z,Q),q=this.getLocaleTextFunc(),G=null,U=()=>{return G=vL({beans:Z,ctrl:z,value:J,displayFunctions:Y,translate:q}),G},H={getGui:()=>z.eGui,getLocation:()=>G?.location??"cell",getTooltipValue:()=>U()?.value,shouldDisplayTooltip:()=>{let W=G??U();if(!W)return!1;return W.shouldDisplay?W.shouldDisplay():!0},getAdditionalParams:()=>({column:$,colDef:$.colDef,rowIndex:z.cellPosition.rowIndex,node:X,data:X.data,valueFormatted:z.valueFormatted})};return this.createTooltipFeature(H,Z)}setupFullWidthRowTooltip(z,J,Q,Z){let $={getGui:()=>J.getFullWidthElement(),getTooltipValue:()=>Q,getLocation:()=>"fullWidthRow",shouldDisplayTooltip:Z},X=this.beans,Y=X.context;if(z)J.destroyBean(z,Y);let q=this.createTooltipFeature($,X);if(!q)return;return J.createBean(q,Y)}setupCellEditorTooltip(z,J){let{beans:Q}=this,{context:Z}=Q,$=J.getValidationElement?.(!0)||!J.isPopup?.()&&z.eGui;if(!$)return;let X={getGui:()=>$,getTooltipValue:()=>eQ(Q,z,this.getLocaleTextFunc()),getLocation:()=>"cellEditor",shouldDisplayTooltip:()=>{let{editModelSvc:q}=Q,G=q?.getRowValidationModel()?.getRowValidationMap(),U=q?.getCellValidationModel()?.getCellValidationMap(),_=!!G&&G.size>0,H=!!U&&U.size>0;return _||H}},Y=this.createTooltipFeature(X,Q);if(!Y)return;return z.createBean(Y,Z)}initCol(z){let{colDef:J}=z;z.tooltipEnabled=P(J.tooltipField)||P(J.tooltipValueGetter)||P(J.tooltipComponent)}createTooltipFeature(z,J){return this.beans.registry.createDynamicBean("tooltipFeature",!1,z,J)}},CL=class extends DL{createTooltipComp(z,J){H_(this.beans.userCompFactory,z)?.newAgStackInstance().then(J)}setEventHandlers(z){[this.onColumnMovedEventCallback]=this.addManagedEventListeners({columnMoved:z})}clearEventHandlers(){this.onColumnMovedEventCallback?.(),this.onColumnMovedEventCallback=void 0}},yL={moduleName:"Tooltip",version:i,beans:[IL],dynamicBeans:{tooltipFeature:KX,highlightTooltipFeature:ML,tooltipStateManager:CL},userComponents:{agTooltipComponent:kL},dependsOn:[q1],css:[fL]};var bL=".ag-cell-inline-editing{border:var(--ag-cell-editing-border)!important;border-radius:var(--ag-border-radius);box-shadow:var(--ag-cell-editing-shadow);padding:0;z-index:1;.ag-cell-edit-wrapper,.ag-cell-editor,.ag-cell-wrapper,:where(.ag-cell-editor) .ag-input-field-input,:where(.ag-cell-editor) .ag-wrapper{height:100%;line-height:normal;min-height:100%;width:100%}&.ag-cell-editing-error{border-color:var(--ag-invalid-color)!important}}:where(.ag-popup-editor) .ag-large-text{background-color:var(--ag-background-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);padding:0}.ag-large-text-input{display:block;height:auto;padding:var(--ag-cell-horizontal-padding)}:where(.ag-rtl .ag-large-text-input) .ag-text-area-input{resize:none}:where(.ag-ltr) .ag-checkbox-edit{padding-left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-checkbox-edit{padding-right:var(--ag-cell-horizontal-padding)}:where(.ag-row.ag-row-editing-invalid .ag-cell-inline-editing){opacity:.8}.ag-popup-editor{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}";var s1=class extends V1{constructor(z,J="ag-text-field",Q="text"){super(z,J,Q)}postConstruct(){if(super.postConstruct(),this.config.allowedCharPattern)this.preventDisallowedCharacters()}setValue(z,J){let Q=this.eInput;if(Q.value!==z)Q.value=P(z)?z:"";return super.setValue(z,J)}setStartValue(z){this.setValue(z,!0)}setCustomValidity(z){let J=this.eInput,Q=z.length>0;if(J.setCustomValidity(z),Q)J.reportValidity();HZ(J,Q)}preventDisallowedCharacters(){let z=new RegExp(`[${this.config.allowedCharPattern}]`),J=(Q)=>{if(!_$(Q))return;if(Q.key&&!z.test(Q.key))Q.preventDefault()};this.addManagedListeners(this.eInput,{keydown:J,paste:(Q)=>{if(Q.clipboardData?.getData("text")?.split("").some(($)=>!z.test($)))Q.preventDefault()}})}},Zz={selector:"AG-INPUT-TEXT-FIELD",component:s1};var xL=class extends k_{constructor(z){super();this.cellEditorInput=z,this.eEditor=j}initialiseEditor(z){let{cellEditorInput:J}=this;this.setTemplate({tag:"div",cls:"ag-cell-edit-wrapper",children:[J.getTemplate()]},J.getAgComponents());let{eEditor:Q}=this,{cellStartedEdit:Z,eventKey:$,suppressPreventDefault:X}=z;Q.getInputElement().setAttribute("title",""),J.init(Q,z);let Y,q=!0;if(Z){if(this.focusAfterAttached=!0,$===k.BACKSPACE||$===k.DELETE)Y="";else if($?.length===1)if(X)q=!1;else Y=$;else if(Y=J.getStartValue(),$!==k.F2)this.highlightAllOnFocus=!0}else this.focusAfterAttached=!1,Y=J.getStartValue();if(q&&Y!=null)Q.setStartValue(Y);this.addGuiEventListener("keydown",(G)=>{let{key:U}=G;if(U===k.PAGE_UP||U===k.PAGE_DOWN)G.preventDefault()})}afterGuiAttached(){let z=this.getLocaleTextFunc(),J=this.eEditor;if(J.setInputAriaLabel(z("ariaInputEditor","Input Editor")),!this.focusAfterAttached)return;if(!jz())J.getFocusableElement().focus();let Q=J.getInputElement();if(this.highlightAllOnFocus)Q.select();else this.cellEditorInput.setCaret?.()}focusIn(){let{eEditor:z}=this,J=z.getFocusableElement(),Q=z.getInputElement();J.focus(),Q.select()}getValue(){return this.cellEditorInput.getValue()}agSetEditValue(z){this.params.value=z;let J=this.cellEditorInput.getStartValue();this.eEditor.setStartValue(J??null)}isPopup(){return!1}getValidationElement(){return this.eEditor.getInputElement()}getValidationErrors(){return this.cellEditorInput.getValidationErrors()}};var LX=class extends s1{constructor(z){super(z,"ag-number-field","number")}postConstruct(){super.postConstruct();let z=this.eInput;this.addManagedListeners(z,{blur:()=>{let X=Number.parseFloat(z.value),Y=isNaN(X)?"":this.normalizeValue(X.toString());if(this.value!==Y)this.setValue(Y)},wheel:this.onWheel.bind(this)}),z.step="any";let{precision:J,min:Q,max:Z,step:$}=this.config;if(typeof J==="number")this.setPrecision(J);if(typeof Q==="number")this.setMin(Q);if(typeof Z==="number")this.setMax(Z);if(typeof $==="number")this.setStep($)}onWheel(z){if(n(this.beans)===this.eInput)z.preventDefault()}normalizeValue(z){if(z==="")return"";if(this.precision!=null)z=this.adjustPrecision(z);return z}adjustPrecision(z,J){let Q=this.precision;if(Q==null)return z;if(J){let $=Number.parseFloat(z).toFixed(Q);return Number.parseFloat($).toString()}let Z=String(z).split(".");if(Z.length>1){if(Z[1].length<=Q)return z;else if(Q>0)return`${Z[0]}.${Z[1].slice(0,Q)}`}return Z[0]}setMin(z){if(this.min===z)return this;return this.min=z,f4(this.eInput,"min",z),this}setMax(z){if(this.max===z)return this;return this.max=z,f4(this.eInput,"max",z),this}setPrecision(z){return this.precision=z,this}setStep(z){if(this.step===z)return this;return this.step=z,f4(this.eInput,"step",z),this}setValue(z,J){return this.setValueOrInputValue((Q)=>super.setValue(Q,J),()=>this,z)}setStartValue(z){return this.setValueOrInputValue((J)=>super.setValue(J,!0),(J)=>{this.eInput.value=J},z)}setValueOrInputValue(z,J,Q){if(P(Q)){let Z=this.isScientificNotation(Q);if(Z&&this.eInput.validity.valid)return z(Q);if(!Z){Q=this.adjustPrecision(Q);let $=this.normalizeValue(Q);Z=Q!=$}if(Z)return J(Q)}return z(Q)}getValue(z=!1){let J=this.eInput;if(!J.validity.valid&&!z)return;let Q=J.value;if(this.isScientificNotation(Q))return this.adjustPrecision(Q,!0);return super.getValue()}isScientificNotation(z){return typeof z==="string"&&z.includes("e")}};var wL=".ag-list-item{align-items:center;display:flex;height:var(--ag-list-item-height);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;&.ag-active-item{background-color:var(--ag-row-hover-color)}}",NL="ag-active-item",gL=(z,J)=>({tag:"div",cls:`ag-list-item ag-${z}-list-item`,attrs:{role:"option"},children:[{tag:"span",cls:`ag-list-item-text ag-${z}-list-item-text`,ref:"eText",children:J}]}),hL=class extends I0{constructor(z,J,Q){super(gL(z,J));this.label=J,this.value=Q,this.eText=j}postConstruct(){this.createTooltip(),this.addEventListeners()}setHighlighted(z){let J=this.getGui();J.classList.toggle(NL,z),o6(J,z),this.dispatchLocalEvent({type:"itemHighlighted",highlighted:z})}getHeight(){return this.getGui().clientHeight}setIndex(z,J){let Q=this.getGui();I2(Q,z),v2(Q,J)}createTooltip(){let z={getTooltipValue:()=>this.label,getGui:()=>this.getGui(),getLocation:()=>"UNKNOWN",shouldDisplayTooltip:()=>l8(this.eText)},J=this.createOptionalManagedBean(this.beans.registry.createDynamicBean("highlightTooltipFeature",!1,z,this));if(J)this.tooltipFeature=J}addEventListeners(){let z=this.getParentComponent();if(!z)return;this.addGuiEventListener("mouseover",()=>{z.highlightItem(this)}),this.addGuiEventListener("mousedown",(J)=>{J.preventDefault(),J.stopPropagation(),z.setValue(this.value)})}},uL=class extends I0{constructor(z="default"){super({tag:"div",cls:`ag-list ag-${z}-list`});this.cssIdentifier=z,this.options=[],this.listItems=[],this.highlightedItem=null,this.registerCSS(wL)}postConstruct(){let z=this.getGui();this.addManagedElementListeners(z,{mouseleave:()=>this.clearHighlighted()})}handleKeyDown(z){let J=z.key;switch(J){case k.ENTER:if(!this.highlightedItem)this.setValue(this.getValue());else{let Q=this.listItems.indexOf(this.highlightedItem);this.setValueByIndex(Q)}break;case k.DOWN:case k.UP:z.preventDefault(),this.navigate(J);break;case k.PAGE_DOWN:case k.PAGE_UP:case k.PAGE_HOME:case k.PAGE_END:z.preventDefault(),this.navigateToPage(J);break}}addOptions(z){for(let J of z)this.addOption(J);return this}addOption(z){let{value:J,text:Q}=z,Z=Q??J;return this.options.push({value:J,text:Z}),this.renderOption(J,Z),this.updateIndices(),this}clearOptions(){this.options=[],this.reset(!0);for(let z of this.listItems)z.destroy();J0(this.getGui()),this.listItems=[],this.refreshAriaRole()}updateOptions(z){let J=this.options!==z;if(J)this.clearOptions(),this.addOptions(z);return J}setValue(z,J){if(this.value===z)return this.fireItemSelected(),this;if(z==null)return this.reset(J),this;let Q=this.options.findIndex((Z)=>Z.value===z);if(Q!==-1){let Z=this.options[Q];if(this.value=Z.value,this.displayValue=Z.text,this.highlightItem(this.listItems[Q]),!J)this.fireChangeEvent()}return this}setValueByIndex(z){return this.setValue(this.options[z].value)}getValue(){return this.value}getDisplayValue(){return this.displayValue}refreshHighlighted(){this.clearHighlighted();let z=this.options.findIndex((J)=>J.value===this.value);if(z!==-1)this.highlightItem(this.listItems[z])}highlightItem(z){let J=z.getGui();if(!B0(J))return;this.clearHighlighted(),z.setHighlighted(!0),this.highlightedItem=z;let Q=this.getGui(),{scrollTop:Z,clientHeight:$}=Q,{offsetTop:X,offsetHeight:Y}=J;if(X+Y>Z+$||X{Q.setIndex(Z+1,J)})}fireChangeEvent(){this.dispatchLocalEvent({type:"fieldValueChanged"}),this.fireItemSelected()}fireItemSelected(){this.dispatchLocalEvent({type:"selectedItem"})}},mL=".ag-picker-field-display{flex:1 1 auto}.ag-picker-field{align-items:center;display:flex}.ag-picker-field-icon{border:0;cursor:pointer;display:flex;margin:0;padding:0}.ag-picker-field-wrapper{background-color:var(--ag-picker-button-background-color);border:var(--ag-picker-button-border);border-radius:5px;min-height:max(var(--ag-list-item-height),calc(var(--ag-spacing)*4));overflow:hidden;&:where(.invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}}.ag-picker-field-wrapper:where(.ag-picker-has-focus),.ag-picker-field-wrapper:where(:focus-within){background-color:var(--ag-picker-button-focus-background-color);border:var(--ag-picker-button-focus-border);box-shadow:var(--ag-focus-shadow);&:where(.invalid){box-shadow:var(--ag-focus-error-shadow)}}.ag-picker-field-wrapper:disabled{opacity:.5}",cL={tag:"div",cls:"ag-picker-field",role:"presentation",children:[{tag:"div",ref:"eLabel"},{tag:"div",ref:"eWrapper",cls:"ag-wrapper ag-picker-field-wrapper ag-picker-collapsed",children:[{tag:"div",ref:"eDisplayField",cls:"ag-picker-field-display"},{tag:"div",ref:"eIcon",cls:"ag-picker-field-icon",attrs:{"aria-hidden":"true"}}]}]},iL=class extends x${constructor(z){super(z,z?.template||cL,z?.agComponents||[],z?.className);if(this.isPickerDisplayed=!1,this.skipClick=!1,this.pickerGap=4,this.hideCurrentPicker=null,this.eLabel=j,this.eWrapper=j,this.eDisplayField=j,this.eIcon=j,this.registerCSS(mL),this.ariaRole=z?.ariaRole,this.onPickerFocusIn=this.onPickerFocusIn.bind(this),this.onPickerFocusOut=this.onPickerFocusOut.bind(this),!z)return;let{pickerGap:J,maxPickerHeight:Q,variableWidth:Z,minPickerWidth:$,maxPickerWidth:X}=z;if(J!=null)this.pickerGap=J;if(this.variableWidth=!!Z,Q!=null)this.setPickerMaxHeight(Q);if($!=null)this.setPickerMinWidth($);if(X!=null)this.setPickerMaxWidth(X)}postConstruct(){super.postConstruct(),this.setupAria();let z=`ag-${this.getCompId()}-display`;this.eDisplayField.setAttribute("id",z);let J=this.getAriaElement();this.addManagedElementListeners(J,{keydown:this.onKeyDown.bind(this)}),this.addManagedElementListeners(this.eLabel,{mousedown:this.onLabelOrWrapperMouseDown.bind(this)}),this.addManagedElementListeners(this.eWrapper,{mousedown:this.onLabelOrWrapperMouseDown.bind(this)});let{pickerIcon:Q,inputWidth:Z}=this.config;if(Q){let $=this.beans.iconSvc.createIconNoSpan(Q);if($)this.eIcon.appendChild($)}if(Z!=null)this.setInputWidth(Z)}setupAria(){let z=this.getAriaElement();if(z.setAttribute("tabindex",this.gos.get("tabIndex").toString()),j0(z,!1),this.ariaRole)U0(z,this.ariaRole)}onLabelOrWrapperMouseDown(z){if(z){let J=this.getFocusableElement();if(J!==this.eWrapper&&z?.target===J)return;z.preventDefault(),this.getFocusableElement().focus()}if(this.skipClick){this.skipClick=!1;return}if(this.isDisabled())return;if(this.isPickerDisplayed)this.hidePicker();else this.showPicker()}onKeyDown(z){switch(z.key){case k.UP:case k.DOWN:case k.ENTER:case k.SPACE:z.preventDefault(),this.onLabelOrWrapperMouseDown();break;case k.ESCAPE:if(this.isPickerDisplayed){if(z.preventDefault(),z.stopPropagation(),this.hideCurrentPicker)this.hideCurrentPicker()}break}}showPicker(){if(this.isPickerDisplayed=!0,!this.pickerComponent)this.pickerComponent=this.createPickerComponent();let z=this.pickerComponent.getGui();z.addEventListener("focusin",this.onPickerFocusIn),z.addEventListener("focusout",this.onPickerFocusOut),this.hideCurrentPicker=this.renderAndPositionPicker(),this.toggleExpandedStyles(!0)}renderAndPositionPicker(){let z=this.pickerComponent.getGui();if(!this.gos.get("suppressScrollWhenPopupsAreOpen"))[this.destroyMouseWheelFunc]=this.addManagedEventListeners({bodyScroll:()=>{this.hidePicker()}});let J=this.getLocaleTextFunc(),{config:{pickerAriaLabelKey:Q,pickerAriaLabelValue:Z,modalPicker:$=!0},maxPickerHeight:X,minPickerWidth:Y,maxPickerWidth:q,variableWidth:G,beans:U,eWrapper:_}=this,H={modal:$,eChild:z,closeOnEsc:!0,closedCallback:()=>{let K=Vz(U);if(this.beforeHidePicker(),K&&this.isAlive())this.getFocusableElement().focus()},ariaLabel:J(Q,Z),anchorToElement:_};z.style.position="absolute";let W=U.popupSvc,B=W.addPopup(H);if(G){if(Y)z.style.minWidth=Y;if(z.style.width=FZ(P6(_)),q)z.style.maxWidth=q}else I6(z,q??P6(_));let E=X??`${C2(W.getPopupParent())}px`;return z.style.setProperty("max-height",E),this.alignPickerToComponent(),B.hideFunc}alignPickerToComponent(){if(!this.pickerComponent)return;let{pickerGap:z,config:{pickerType:J},beans:{popupSvc:Q,gos:Z},eWrapper:$,pickerComponent:X}=this,Y=Z.get("enableRtl")?"right":"left";Q.positionPopupByComponent({type:J,eventSource:$,ePopup:X.getGui(),position:"under",alignSide:Y,keepWithinBounds:!0,nudgeY:z})}beforeHidePicker(){if(this.destroyMouseWheelFunc)this.destroyMouseWheelFunc(),this.destroyMouseWheelFunc=void 0;this.toggleExpandedStyles(!1);let z=this.pickerComponent.getGui();z.removeEventListener("focusin",this.onPickerFocusIn),z.removeEventListener("focusout",this.onPickerFocusOut),this.isPickerDisplayed=!1,this.pickerComponent=void 0,this.hideCurrentPicker=null}toggleExpandedStyles(z){if(!this.isAlive())return;let J=this.getAriaElement();j0(J,z);let Q=this.eWrapper.classList;Q.toggle("ag-picker-expanded",z),Q.toggle("ag-picker-collapsed",!z)}onPickerFocusIn(){this.togglePickerHasFocus(!0)}onPickerFocusOut(z){if(!this.pickerComponent?.getGui().contains(z.relatedTarget))this.togglePickerHasFocus(!1)}togglePickerHasFocus(z){if(!this.pickerComponent)return;this.eWrapper.classList.toggle("ag-picker-has-focus",z)}hidePicker(){if(this.hideCurrentPicker)this.hideCurrentPicker(),this.dispatchLocalEvent({type:"pickerHidden"})}setInputWidth(z){return I6(this.eWrapper,z),this}getFocusableElement(){return this.eWrapper}setPickerGap(z){return this.pickerGap=z,this}setPickerMinWidth(z){if(typeof z==="number")z=`${z}px`;return this.minPickerWidth=z==null?void 0:z,this}setPickerMaxWidth(z){if(typeof z==="number")z=`${z}px`;return this.maxPickerWidth=z==null?void 0:z,this}setPickerMaxHeight(z){if(typeof z==="number")z=`${z}px`;return this.maxPickerHeight=z==null?void 0:z,this}destroy(){this.hidePicker(),super.destroy()}},pL=".ag-select{align-items:center;display:flex;&.ag-disabled{opacity:.5}}.ag-select:where(:not(.ag-cell-editor,.ag-label-align-top)){min-height:var(--ag-list-item-height)}:where(.ag-select){.ag-picker-field-wrapper{cursor:default;padding-left:var(--ag-spacing);padding-right:var(--ag-spacing)}&.ag-disabled .ag-picker-field-wrapper:focus{box-shadow:none}.ag-picker-field-display{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-picker-field-icon{align-items:center;display:flex}}.ag-select-list{background-color:var(--ag-picker-list-background-color);border:var(--ag-picker-list-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);overflow:hidden auto}.ag-select-list-item{cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none}:where(.ag-ltr) .ag-select-list-item{padding-left:var(--ag-spacing)}:where(.ag-rtl) .ag-select-list-item{padding-right:var(--ag-spacing)}.ag-select-list-item-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}",nL=class extends iL{constructor(z){super({pickerAriaLabelKey:"ariaLabelSelectField",pickerAriaLabelValue:"Select Field",pickerType:"ag-list",className:"ag-select",pickerIcon:"selectOpen",ariaRole:"combobox",...z});this.registerCSS(pL)}postConstruct(){this.tooltipFeature=this.createOptionalManagedBean(this.beans.registry.createDynamicBean("tooltipFeature",!1,{shouldDisplayTooltip:y1(()=>this.eDisplayField),getGui:()=>this.getGui()})),super.postConstruct(),this.createListComponent(),this.eWrapper.tabIndex=this.gos.get("tabIndex");let{options:z,value:J,placeholder:Q}=this.config;if(z!=null)this.addOptions(z);if(J!=null)this.setValue(J,!0);if(Q&&J==null)this.eDisplayField.textContent=Q;this.addManagedElementListeners(this.eWrapper,{focusout:this.onWrapperFocusOut.bind(this)})}onWrapperFocusOut(z){if(!this.eWrapper.contains(z.relatedTarget))this.hidePicker()}createListComponent(){let z=this.createBean(new uL("select"));this.listComponent=z,z.setParentComponent(this);let J=z.getAriaElement(),Q=`ag-select-list-${z.getCompId()}`;J.setAttribute("id",Q),WZ(this.getAriaElement(),J),z.addManagedElementListeners(z.getGui(),{mousedown:(Z)=>{Z?.preventDefault()}}),z.addManagedListeners(z,{selectedItem:()=>{this.hidePicker(),this.dispatchLocalEvent({type:"selectedItem"})},fieldValueChanged:()=>{if(!this.listComponent)return;this.setValue(this.listComponent.getValue(),!1,!0),this.hidePicker()}})}createPickerComponent(){return this.listComponent}beforeHidePicker(){this.listComponent?.hideItemTooltip(),super.beforeHidePicker()}onKeyDown(z){let{key:J}=z;if(J===k.TAB)this.hidePicker();switch(J){case k.ENTER:case k.UP:case k.DOWN:case k.PAGE_UP:case k.PAGE_DOWN:case k.PAGE_HOME:case k.PAGE_END:if(z.preventDefault(),this.isPickerDisplayed)this.listComponent?.handleKeyDown(z);else super.onKeyDown(z);break;case k.ESCAPE:super.onKeyDown(z);break;case k.SPACE:if(this.isPickerDisplayed)z.preventDefault();else super.onKeyDown(z);break}}showPicker(){let z=this.listComponent;if(!z)return;super.showPicker(),z.refreshHighlighted()}addOptions(z){for(let J of z)this.addOption(J);return this}addOption(z){return this.listComponent.addOption(z),this}clearOptions(){return this.listComponent?.clearOptions(),this.setValue(void 0,!0),this}updateOptions(z){if(this.listComponent?.updateOptions(z))this.setValue(void 0,!0);return this}setValue(z,J,Q){let{listComponent:Z,config:{placeholder:$},eDisplayField:X,tooltipFeature:Y}=this;if(this.value===z||!Z)return this;if(!Q)Z.setValue(z,!0);if(Z.getValue()===this.getValue())return this;let G=Z.getDisplayValue();if(G==null&&$)G=$;return X.textContent=G,Y?.setTooltipAndRefresh(G??null),super.setValue(z,J)}destroy(){this.listComponent=this.destroyBean(this.listComponent),super.destroy()}};var dL={tag:"ag-input-text-field",ref:"eEditor",cls:"ag-cell-editor"},rL=class{constructor(z){this.getLocaleTextFunc=z,this.cachedRaw=this}getTemplate(){return dL}getAgComponents(){return[Zz]}init(z,J){this.eEditor=z,this.params=J;let Q=J.maxLength;if(Q!=null)z.setMaxLength(Q)}getValidationErrors(){let{params:z}=this,{maxLength:J,getValidationErrors:Q}=z,Z=this.getValue(),$=this.getLocaleTextFunc(),X=[];if(J!=null&&typeof Z==="string"&&Z.length>J)X.push($("maxLengthValidation",`Must be ${J} characters or fewer.`,[String(J)]));if(!X.length)X=null;if(Q)return Q({value:Z,cellEditorParams:z,internalErrors:X});return X}getValue(){let{eEditor:z,params:J}=this,Q=z.getValue();if(!P(Q)&&!P(J.value))return J.value;if(Object.is(this.cachedRaw,Q))return this.cachedParsed;let Z=J.parseValue(Q);return this.cachedRaw=Q,this.cachedParsed=Z,Z}getStartValue(){let z=this.params;return z.useFormatter||z.column.getColDef().refData?z.formatValue(z.value):z.value}setCaret(){if(jz())this.eEditor.getInputElement().focus({preventScroll:!0});let z=this.eEditor,J=z.getValue(),Q=P(J)&&J.length||0;if(Q)z.getInputElement().setSelectionRange(Q,Q)}},R8=class extends xL{constructor(){super(new rL(()=>this.getLocaleTextFunc()))}};function tL(z,J){return z.editModelSvc?.getEditRowDataValue(J,{checkSiblings:!0})}function sL(z){let J=z.editModelSvc?.getEditMap(),Q=[];return J?.forEach((Z,$)=>{let{rowIndex:X,rowPinned:Y}=$;Z.forEach((q,G)=>{let{editorValue:U,pendingValue:_,sourceValue:H,state:W}=q,B=S4(q),E=U??_;if(E===v0)E=void 0;let K={newValue:E,oldValue:H,state:W,column:G,colId:G.getColId(),colKey:G.getColId(),rowIndex:X,rowPinned:Y},F=W==="editing";if(F||!F&&B)Q.push(K)})}),Q}function lL(z,J=!1){let{editSvc:Q}=z;if(Q?.isBatchEditing()){if(J){for(let Z of z.editModelSvc?.getEditPositions()??[])if(Z.state==="editing")Q.revertSingleCellEdit(Z)}else Kz(z,{persist:!0});Bz(z,void 0,{cancel:J})}else Q?.stopEditing(void 0,{cancel:J,source:"edit",forceStop:!J,forceCancel:J})}function aL(z,J){let Q=l(z,J);return!!z.editSvc?.isEditing(Q)}function oL(z,J){let{key:Q,colKey:Z,rowIndex:$,rowPinned:X}=J,{editSvc:Y,colModel:q}=z,G=q.getCol(Z);if(!G){V(12,{colKey:Z});return}let _=S0(z,{rowIndex:$,rowPinned:X||null,column:G});if(!_){V(290,{rowIndex:$,rowPinned:X});return}if(!Y?.isCellEditable({rowNode:_,column:G},"api"))return;if(X==null)pF(z,$);iF(z,Z),Y?.startEditing({rowNode:_,column:G},{event:Q?new KeyboardEvent("keydown",{key:Q}):void 0,source:"api",editable:!0})}function eL(z){return z.editSvc?.validateEdit()||null}var zD={tag:"div",cls:"ag-popup-editor",attrs:{tabindex:"-1"}},JD=class extends hZ{constructor(z){super(zD);this.params=z}postConstruct(){az(this.gos,this.getGui(),"popupEditorWrapper",!0),this.addKeyDownListener()}addKeyDownListener(){let z=this.getGui(),J=this.params,Q=(Z)=>{if(!pQ(this.gos,Z,J.node,J.column,!0))J.onKeyDown(Z)};this.addManagedElementListeners(z,{keydown:Q})}};function QD(z,{column:J},Q,Z,$="ui"){if(Q instanceof KeyboardEvent&&(Q.key===k.TAB||Q.key===k.ENTER||Q.key===k.F2||Q.key===k.BACKSPACE&&Z))return!0;if(Q?.shiftKey&&z.rangeSvc?.getCellRanges().length!=0)return!1;let Y=J?.getColDef(),q=ZD(z.gos,Y),G=Q?.type;if(G==="click"&&Q?.detail===1&&q===1)return!0;if(G==="dblclick"&&Q?.detail===2&&q===2)return!0;if($==="api")return!!Z;return!1}function ZD(z,J){if(z.get("suppressClickEdit")===!0)return 0;if(z.get("singleClickEdit")===!0)return 1;if(J?.singleClickEdit)return 1;return 2}function PQ(z,J){return z.editModelSvc?.hasEdits(J,{withOpenEditor:!0})??!1}function zZ(z,J){let{column:Q,rowNode:Z}=J,$=Q.getColDef();if(!Z)return PQ(z,J);let X=$.editable;if(Z.group&&$.groupRowEditable!=null){if(z.rowGroupingEditValueSvc?.isGroupCellEditable(Z,Q))return!0;return PQ(z,J)}if(Q.isColumnFunc(Z,X))return!0;return PQ(z,J)}function $D(z,J,Q="ui"){let Z=zZ(z,J);if(Z||Q==="ui")return Z;let{rowNode:$,column:X}=J;for(let Y of z.colModel.getCols())if(Y!==X&&zZ(z,{rowNode:$,column:Y}))return!0;return!1}var n6=(z,J=!1)=>{if(z!==void 0)return S4(z)||J&&z.state==="editing"};function DX(z,J,Q=!1){return n6(z.editModelSvc?.getEdit(J),Q)}var MX=(z,J,Q)=>{if(!z)return;for(let Z=0,$=z.length;Z<$;++Z){let X=z[Z];if(X.data){if(n6(J?.getEdit({rowNode:X,column:Q}))||n6(J?.getEdit({rowNode:X.pinnedSibling,column:Q})))return!0}if(MX(X.childrenAfterGroup,J,Q))return!0}};function kX(z,J){let{column:Q,rowNode:Z}=J;if(z.gos.get("groupTotalRow")&&!Z?.footer)return!1;return MX(Z?.childrenAfterGroup,z.editModelSvc,Q)}function fX(z,{rowNode:J,column:Q}){if(J=J.pinnedSibling,!J)return;return n6(z.editModelSvc?.getEdit({rowNode:J,column:Q}))}var XD=class extends S{constructor(z,J){super();this.cellCtrl=z,this.beans=J,this.editSvc=J.editSvc,this.editModelSvc=J.editModelSvc}setComp(z){this.cellComp=z,this.applyCellStyles()}applyCellStyles(){let{cellCtrl:z,editSvc:J,beans:Q}=this;if(J?.isBatchEditing()&&J.isEditing()){let $=DX(Q,z)||kX(Q,z)||fX(Q,z);this.applyBatchingStyle($)}else this.applyBatchingStyle(!1);let Z=!!this.editModelSvc?.getCellValidationModel().hasCellValidation(this.cellCtrl);this.cellComp.toggleCss("ag-cell-editing-error",Z)}applyBatchingStyle(z){this.cellComp.toggleCss("ag-cell-editing",z??!1),this.cellComp.toggleCss("ag-cell-batch-edit",(z&&this.editSvc?.isBatchEditing())??!1)}},YD=class extends S{constructor(z,J){super();this.rowCtrl=z,this.beans=J,this.gos=J.gos,this.editSvc=J.editSvc,this.editModelSvc=J.editModelSvc}applyRowStyles(){let{rowCtrl:z,editModelSvc:J,beans:Q}=this,Z=z.rowNode,$=J?.getEditRow(Z),X=this.editModelSvc?.getRowValidationModel().hasRowValidation({rowNode:Z});if(!$&&Z.pinnedSibling)Z=Z.pinnedSibling,$=J?.getEditRow(Z);if($){let Y=Array.from($.keys()).some((q)=>{let G={rowNode:Z,column:q};return DX(Q,G,!0)||kX(Q,G)||fX(Q,G)});this.applyStyle(X,Y);return}this.applyStyle(X)}applyStyle(z=!1,J=!1){let Q=!!this.editSvc?.isBatchEditing(),Z=this.gos.get("editType")==="fullRow";this.rowCtrl?.forEachGui(void 0,({rowComp:$})=>{$.toggleCss("ag-row-editing",Z&&J),$.toggleCss("ag-row-batch-edit",Z&&J&&Q),$.toggleCss("ag-row-inline-editing",J),$.toggleCss("ag-row-not-inline-editing",!J),$.toggleCss("ag-row-editing-invalid",Z&&J&&z)})}},qD=({rowModel:z,pinnedRowModel:J,editModelSvc:Q},Z)=>{let $=new Set;z.forEachNode((X)=>Z.has(X)&&$.add(X)),J?.forEachPinnedRow("top",(X)=>Z.has(X)&&$.add(X)),J?.forEachPinnedRow("bottom",(X)=>Z.has(X)&&$.add(X));for(let X of Z)if(!$.has(X))Q.removeEdits({rowNode:X});return $},GD=({editModelSvc:z},J,Q)=>{for(let Z of J)z?.getEditRow(Z)?.forEach(($,X)=>!Q.has(X)&&z.removeEdits({rowNode:Z,column:X}))},UD=(z)=>()=>{let J=new Set(z.colModel.getCols()),Q=z.editModelSvc.getEditMap(!0),Z=new Set(Q.keys());GD(z,qD(z,Z),J)},_D=new Set(["undo","redo","paste","bulk","rangeSvc"]),HD=new Set(["ui","api"]),SX={paste:"api",rangeSvc:"api",fillHandle:"api",cellClear:"api",bulk:"api"},WD=new Set(Object.keys(SX)),BD=new Set(["paste","rangeSvc","cellClear","redo","undo"]),TQ={cancel:!0,source:"api"},ED={cancel:!1,source:"api"},cz={checkSiblings:!0},_z={force:!0,suppressFlash:!0},KD={force:!0},FD=class extends S{constructor(){super(...arguments);this.beanName="editSvc",this.committing=!1,this.batch=!1,this.batchStartDispatched=!1,this.stopping=!1,this.rangeSelectionWhileEditing=0}postConstruct(){let{beans:z}=this;this.model=z.editModelSvc,this.valueSvc=z.valueSvc,this.rangeSvc=z.rangeSvc,this.addManagedPropertyListener("editType",({currentValue:Z})=>{this.stopEditing(void 0,TQ),this.createStrategy(Z)});let J=UD(z),Q=()=>{let Z=this.model.getCellValidationModel().getCellValidationMap().size>0,$=this.model.getRowValidationModel().getRowValidationMap().size>0;if(Z||$)this.stopEditing(void 0,TQ);else if(this.isEditing())if(this.batch)Bz(z,this.model.getEditPositions());else this.stopEditing(void 0,ED);return!1};this.addManagedEventListeners({columnPinned:J,columnVisible:J,columnRowGroupChanged:J,rowExpansionStateChanged:J,pinnedRowsChanged:J,displayedRowsChanged:J,sortChanged:Q,filterChanged:Q,cellFocused:this.onCellFocused.bind(this)})}isBatchEditing(){return this.batch}startBatchEditing(){if(this.batch)return;this.batch=!0,this.batchStartDispatched=!1,this.stopEditing(void 0,TQ)}stopBatchEditing(z){if(!this.batch)return;if(z)this.stopEditing(void 0,z);if(this.batchStartDispatched)this.dispatchBatchStopped(new Map,!1);this.batch=!1,this.batchStartDispatched=!1}ensureBatchStarted(){if(!this.batch||this.batchStartDispatched)return;this.batchStartDispatched=!0,this.dispatchBatchEvent("batchEditingStarted",new Map)}createStrategy(z){let{beans:J,gos:Q,strategy:Z}=this,$=A8(Q,z);if(Z){if(Z.beanName===$)return Z;this.destroyStrategy()}return this.strategy=this.createOptionalManagedBean(J.registry.createDynamicBean($,!0))}destroyStrategy(){if(!this.strategy)return;this.strategy.destroy(),this.strategy=this.destroyBean(this.strategy)}shouldStartEditing(z,J,Q,Z="ui"){let $=QD(this.beans,z,J,Q,Z);if($)this.strategy??(this.strategy=this.createStrategy());return $}shouldStopEditing(z,J,Q="ui"){return this.strategy?.shouldStop(z,J,Q)??null}shouldCancelEditing(z,J,Q="ui"){return this.strategy?.shouldCancel(z,J,Q)??null}validateEdit(){return DK(this.beans)}isEditing(z,J){return this.model.hasEdits(z??void 0,J??cz)}isRowEditing(z,J){return!!z&&this.model.hasRowEdits(z,J)}enableRangeSelectionWhileEditing(){if(this.beans.rangeSvc&&this.gos.get("cellSelection"))this.rangeSelectionWhileEditing++}disableRangeSelectionWhileEditing(){this.rangeSelectionWhileEditing=Math.max(0,this.rangeSelectionWhileEditing-1)}isRangeSelectionEnabledWhileEditing(){return this.rangeSelectionWhileEditing>0}startEditing(z,J){let{startedEdit:Q=!0,event:Z=null,source:$="ui",ignoreEventKey:X=!1,silent:Y}=J;if(this.strategy??(this.strategy=this.createStrategy()),!(J.editable??this.isCellEditable(z,"api")))return;let G=l(this.beans,z);if(G&&!G.comp){J.editable=void 0,G.onCompAttachedFuncs.push(()=>this.startEditing(z,J));return}let U=this.shouldStartEditing(z,Z,Q,$);if(U===!1&&$!=="api"){if(this.isEditing(z))this.stopEditing();return}if(!this.batch&&this.shouldStopEditing(z,void 0,$)&&!J.continueEditing)this.stopEditing(void 0,{source:$});if(U)this.ensureBatchStarted();this.strategy.start({position:z,event:Z,source:$,ignoreEventKey:X,startedEdit:Q,silent:Y})}stopEditing(z,J){let Q=this.prepareStopContext(z,J);if(!Q)return!1;this.stopping=!0;let Z=!1;try{let $=this.processStopRequest(Q);return Z||(Z=$.res),this.finishStopEditing({...Q,edits:$.edits,params:J,position:z,res:Z}),Z}finally{this.rangeSelectionWhileEditing=0,this.stopping=!1}}prepareStopContext(z,J){let{event:Q=null,cancel:Z=!1,source:$="ui",forceCancel:X=!1,forceStop:Y=!1,commit:q=!1}=J||{};if(WD.has($)&&this.batch){if(z?.rowNode&&z?.column)this.bulkRefreshCell(z);return null}let G=this.committing?SX[$]:$;if(!(this.committing||this.isEditing(z)||this.batch&&this.model.hasEdits(z,cz))||!this.strategy||this.stopping)return null;let _=l(this.beans,z);if(_)_.onEditorAttachedFuncs=[];let H=!Z&&(!!this.shouldStopEditing(z,Q,G)||(this.committing||$==="paste")&&!this.batch)||Y,W=Z&&!!this.shouldCancelEditing(z,Q,G)||X;return{cancel:Z,cellCtrl:_,edits:this.model.getEditMap(!0),event:Q??null,forceCancel:X,forceStop:Y,commit:q,position:z,source:$,treatAsSource:G,willCancel:W,willStop:H}}processStopRequest(z){let{event:J,position:Q,willCancel:Z,willStop:$}=z;if($||Z)return this.handleStopOrCancel(z);if(this.shouldHandleMidBatchKey(J,Q))return{res:!1,edits:this.handleMidBatchKey(J,Q,z)};if(Kz(this.beans,{persist:!0}),this.batch)this.strategy?.cleanupEditors(Q);return{res:!1,edits:this.model.getEditMap()}}handleStopOrCancel(z){let{beans:J,model:Q}=this,{cancel:Z,commit:$,edits:X,event:Y,source:q,willCancel:G,willStop:U}=z,_=!this.batch||!G;Kz(J,{persist:_,isCancelling:G||Z,isStopping:U});let H=Q.getEditMap(),B=!G&&(!this.batch||$)?this.processEdits(H,q):[];if(Z)this.strategy?.stopCancelled(z.forceCancel);else this.strategy?.stopCommitted(Y,$);this.clearValidationIfNoOpenEditors();for(let E of B)Q.clearEditValue(E);this.bulkRefreshMap(X);for(let E of Q.getEditPositions(H)){let K=l(J,E),F=S4(E);K?.refreshCell({force:!0,suppressFlash:!F})}return{res:U,edits:H}}shouldHandleMidBatchKey(z,J){return z instanceof KeyboardEvent&&this.batch&&!!this.strategy?.midBatchInputsAllowed(J)&&this.isEditing(J,{withOpenEditor:!0})}handleMidBatchKey(z,J,Q){let{beans:Z,model:$}=this,{cellCtrl:X,edits:Y}=Q,{key:q}=z,G=q===k.ENTER,U=q===k.ESCAPE,_=q===k.TAB;if(G||_||U){if(G||_)Kz(Z,{persist:!0});else if(U&&X){let{rowNode:H,column:W}=X;if(this.batch&&H&&W){let B={rowNode:H,column:W};Bz(Z,[B],{silent:!0}),this.model.stop(B,!0,!0),l(Z,B)?.refreshCell(_z)}else this.revertSingleCellEdit(X)}if(this.batch)this.strategy?.cleanupEditors();else Bz(Z,$.getEditPositions(),{event:z,cancel:U});return z.preventDefault(),this.bulkRefreshMap(Y,{suppressFlash:!0}),$.getEditMap()}return Y}finishStopEditing({cellCtrl:z,edits:J,params:Q,position:Z,res:$,commit:X,forceCancel:Y,willCancel:q,willStop:G}){let U=this.beans;if($&&Z){if(!this.batch||X)this.model.removeEdits(Z)}this.navigateAfterEdit(Q,z?.cellPosition),U2(U),this.clearValidationIfNoOpenEditors();let{rowRenderer:_,formula:H}=U;if(q)_.refreshRows({rowNodes:Array.from(J.keys())});if(this.batch){if(H)H.refreshFormulas(!0);else _.refreshRows({suppressFlash:!0,force:!0});let W=G&&X;if(W||q&&Y)this.dispatchBatchStopped(J,W)}}dispatchBatchStopped(z,J){let Q;if(J){if(Q=_K(z),Q.size>0)this.ensureBatchStarted()}if(this.batchStartDispatched)this.batchStartDispatched=!1,this.dispatchBatchEvent("batchEditingStopped",Q??new Map)}clearValidationIfNoOpenEditors(){if(!this.model.hasEdits(void 0,{withOpenEditor:!0}))this.model.getCellValidationModel().clearCellValidationMap(),this.model.getRowValidationModel().clearRowValidationMap()}navigateAfterEdit(z,J){if(!z||!J)return;let{event:Q,suppressNavigateAfterEdit:Z}=z;if(!(Q instanceof KeyboardEvent)||Z)return;let{key:X,shiftKey:Y}=Q,q=this.gos.get("enterNavigatesVerticallyAfterEdit");if(X!==k.ENTER||!q)return;let G=Y?k.UP:k.DOWN;this.beans.navigation?.navigateToNextCell(null,G,J,!1)}processEdits(z,J){let Q=Array.from(z.keys()),Z=this.model.getCellValidationModel().getCellValidationMap().size>0||this.model.getRowValidationModel().getRowValidationMap().size>0,$=[],{changeDetectionSvc:X}=this.beans;X?.beginDeferred();try{for(let Y of Q){let q=z.get(Y);for(let G of q.keys()){let U=q.get(G),_={rowNode:Y,column:G};if(S4(U)&&!Z){let H=l(this.beans,_);if(!this.setNodeDataValue(Y,G,U.pendingValue,H,J))$.push(_)}}}}finally{X?.endDeferred()}return $}setNodeDataValue(z,J,Q,Z,$="edit"){let X=HD.has($)?"edit":$;if(Z)Z.suppressRefreshCell=!0;this.committing=!0;try{return z.setDataValue(J,Q,X)}finally{if(this.committing=!1,Z)Z.suppressRefreshCell=!1}}syncEditAfterCommit(z,J){let Q=this.model.getEdit(z);if(Q&&Q.state!=="editing")if(J)this.beans.editModelSvc?.setEdit(z,{sourceValue:Q.pendingValue});else this.model.clearEditValue(z)}setEditMap(z,J){this.strategy??(this.strategy=this.createStrategy()),this.strategy?.setEditMap(z,J),this.bulkRefreshMap(z);let Q=_z;if(J?.forceRefreshOfEditCellsOnly)Q={...LD(z),..._z};this.beans.rowRenderer.refreshCells(Q)}dispatchEditValuesChanged({rowNode:z,column:J},Q={}){if(!z||!J||!Q)return;let{pendingValue:Z,sourceValue:$}=Q,{rowIndex:X,rowPinned:Y,data:q}=z;this.beans.eventSvc.dispatchEvent({type:"cellEditValuesChanged",node:z,rowIndex:X,rowPinned:Y,column:J,source:"api",data:q,newValue:Z,oldValue:$,value:Z,colDef:J.getColDef()})}bulkRefreshCell(z,J){if(o(this.gos,this.beans.rowModel))this.refCell(z,this.model.getEdit(z),J)}bulkRefreshMap(z,J){if(o(this.gos,this.beans.rowModel))z.forEach((Q,Z)=>{for(let $ of Q.keys())this.refCell({rowNode:Z,column:$},Q.get($),J)})}refCell({rowNode:z,column:J},Q,Z={}){let{beans:$,gos:X}=this,Y=new Set([z]),q=new Set,G=z.pinnedSibling;if(G)Y.add(G);let U=z.sibling;if(U)q.add(U);let _=z.parent;while(_){if(_.sibling?.footer&&X.get("groupTotalRow"))q.add(_.sibling);else if(!_.parent&&_.sibling&&X.get("grandTotalRow"))q.add(_.sibling);else q.add(_);_=_.parent}for(let H of Y)this.dispatchEditValuesChanged({rowNode:H,column:J},Q);for(let H of Y)l($,{rowNode:H,column:J})?.refreshCell(Z);for(let H of q){let W=l($,{rowNode:H,column:J});if(W){if(W.refreshCell(Z),!Z.force&&this.batch)W.editStyleFeature?.applyCellStyles?.()}}}stopAllEditing(z=!1,J="ui"){if(this.isEditing())this.stopEditing(void 0,{cancel:z,source:J})}isCellEditable(z,J="ui"){let{gos:Q,beans:Z}=this,$=z.rowNode;if($.group&&z.column.getColDef().groupRowEditable==null){if(Q.get("treeData")){if(!$.data&&!Q.get("enableGroupEdit"))return!1}else if(!Q.get("enableGroupEdit"))return!1}let X=A8(Q)==="fullRow"?$D(Z,z,J):zZ(Z,z);if(X)this.strategy??(this.strategy=this.createStrategy());return X}cellEditingInvalidCommitBlocks(){return this.gos.get("invalidEditValueMode")==="block"}checkNavWithValidation(z,J,Q=!0){if(this.hasValidationErrors(z)){let Z=l(this.beans,z);if(this.cellEditingInvalidCommitBlocks()){if(J?.preventDefault?.(),Q){if(Z&&!Z.hasBrowserFocus())Z.focusCell();Z?.comp?.getCellEditor()?.focusIn?.()}return"block-stop"}if(Z)this.revertSingleCellEdit(Z);return"revert-continue"}return"continue"}revertSingleCellEdit(z,J=!1){let Q=l(this.beans,z);if(!Q?.comp?.getCellEditor())return;if(Bz(this.beans,[z],{silent:!0}),this.model.clearEditValue(z),z1(this.beans,z,{silent:!0}),Mz(this.beans),Q?.refreshCell(_z),!J)return;Q?.focusCell(),Q?.comp?.getCellEditor()?.focusIn?.()}hasValidationErrors(z){Mz(this.beans);let J=l(this.beans,z);if(J)J.refreshCell(_z),J.rowCtrl.rowEditStyleFeature?.applyRowStyles();let Q=!1;if(z?.rowNode){if(Q||(Q=this.model.getRowValidationModel().hasRowValidation({rowNode:z.rowNode})),z.column)Q||(Q=this.model.getCellValidationModel().hasCellValidation({rowNode:z.rowNode,column:z.column}))}else Q||(Q=this.model.getCellValidationModel().getCellValidationMap().size>0),Q||(Q=this.model.getRowValidationModel().getRowValidationMap().size>0);return Q}moveToNextCell(z,J,Q,Z="ui"){let $,X=this.isEditing(),Y=X&&this.checkNavWithValidation(void 0,Q)==="block-stop";if(z instanceof E2&&X)$=this.strategy?.moveToNextEditingCell(z,J,Q,Z,Y);if($===null)return $;if($=$||!!this.beans.focusSvc.focusedHeader,$===!1&&!Y)this.stopEditing();return $}getPendingEditValue(z,J,Q){if(Q==="batch"&&!this.batch)return;let Z=this.model.getEdit({rowNode:z,column:J},cz);if(!Z)return;if(this.stopping&&!this.batch&&!Z.editorState?.cellStartedEditing)return;if(Q==="edit"){let X=Z.editorValue;if(X!=null&&X!==v0)return X}let $=Z.pendingValue;if($!==v0)return $;return}getCellDataValue(z){let J=this.model.getEdit(z,cz);if(J){let Q=J.pendingValue;if(Q!==v0)return Q;let Z=J.sourceValue;if(Z!=null)return Z}return this.valueSvc.getValue(z.column,z.rowNode,"data")}addStopEditingWhenGridLosesFocus(z){qK(this,this.beans,z)}createPopupEditorWrapper(z){return new JD(z)}batchResetToSourceValue(z){if(!this.batch)return!1;let J=this.model.getEdit(z);if(!J)return!1;let{pendingValue:Q,sourceValue:Z,state:$}=J;if(Q===Z)return!1;if($==="editing")return!1;return this.dispatchEditValuesChanged(z,{...J,pendingValue:Z}),this.beans.editModelSvc?.removeEdits(z),l(this.beans,z)?.refreshCell(_z),!0}setDataValue(z,J,Q){try{let Z=this.batch,$=this.isEditing(Z?void 0:z);if((!$||this.committing)&&!Z&&!BD.has(Q))return;if(!$&&!Z&&Q==="paste")return;if(Q==="batch"&&!Z)return;if(Q==="edit"){if($&&this.applyEditorValue(z,J))return!0;if(!Z)return}if(this.strategy??(this.strategy=this.createStrategy()),Q==="batch"||Q==="edit")return this.applyDirectValue(z,J,Q);let X=this.beans,Y;if(Z)Y="ui";else if(this.committing)Y=Q??"api";else Y="api";if(!Q||_D.has(Q))return this.applyDirectValue(z,J,Q);let q=this.applyExistingEdit(z,J,Q,Y);if(q!==void 0)return q;return k1(X,z,J,Q,void 0,{persist:!0}),this.ensureBatchStarted(),this.stopEditing(z,{source:Y,suppressNavigateAfterEdit:!0}),!0}finally{this.committing=!1}}applyExistingEdit(z,J,Q,Z){let $=this.model.getEdit(z);if(!$)return;if($.pendingValue===J)return!1;if($.sourceValue!==J)return k1(this.beans,z,J,Q,void 0,{persist:!0}),this.ensureBatchStarted(),this.stopEditing(z,{source:Z,suppressNavigateAfterEdit:!0}),!0;return this.beans.editModelSvc?.removeEdits(z),this.ensureBatchStarted(),this.dispatchEditValuesChanged(z,{...$,pendingValue:J}),!0}applyEditorValue(z,J){let Q=this.beans,Z=l(Q,z),$=Z?.comp?.getCellEditor();if(!Z||!$)return!1;if(k1(Q,z,J,"edit",void 0,{persist:!0}),Z.editStyleFeature?.applyCellStyles?.(),"agSetEditValue"in $)return $.agSetEditValue(J),!0;if($.refresh&&Z.editCompDetails)return $.refresh({...Z.editCompDetails.params,value:J}),!0;if(Z.hasBrowserFocus())Z.onEditorAttachedFuncs.push(()=>{let Y=l(this.beans,z);Y?.focusCell(!0),Y?.comp?.getCellEditor()?.focusIn?.()});return Bz(Q,[z],{silent:!0,cancel:!0}),z1(Q,z,{silent:!0}),Mz(Q),l(Q,z)?.refreshCell(_z),!0}applyDirectValue(z,J,Q){let Z=this.beans;if(this.batch){if(Q==="batch"&&l(Z,z)?.comp?.getCellEditor()){let{editModelSvc:Y,valueSvc:q}=Z,{rowNode:G,column:U}=z;if(Y?.getEdit(z)?.sourceValue===void 0)Y?.setEdit(z,{sourceValue:q.getValue(U,G,"data")});Y?.setEdit(z,{pendingValue:J})}else if(k1(Z,z,J,Q,void 0,{persist:!0}),Q!=="batch")this.cleanupEditors();return U2(Z),this.ensureBatchStarted(),this.bulkRefreshCell(z),!0}k1(Z,z,J,Q,void 0,{persist:!0});let $=l(Z,z),X=this.setNodeDataValue(z.rowNode,z.column,J,$,Q);return this.syncEditAfterCommit(z,X),U2(Z),l(Z,z)?.refreshCell(X?KD:_z),X}handleColDefChanged(z){WK(this.beans,z)}destroy(){this.model.clear(),this.destroyStrategy(),super.destroy()}prepDetailsDuringBatch(z,J){let{model:Q}=this;if(!this.batch)return;if(!Q.hasRowEdits(z.rowNode,cz))return;let{rowNode:$}=z,{compDetails:X,valueToDisplay:Y}=J;if(X){let{params:q}=X;return q.data=Q.getEditRowDataValue($,cz),{compDetails:X}}return{valueToDisplay:Y}}cleanupEditors(){this.strategy?.cleanupEditors()}dispatchCellEvent(z,J,Q,Z){this.strategy?.dispatchCellEvent(z,J,Q,Z)}dispatchBatchEvent(z,J){this.eventSvc.dispatchEvent(this.createBatchEditEvent(z,J))}createBatchEditEvent(z,J){return C(this.gos,{type:z,...z==="batchEditingStopped"?{changes:this.toEventChangeList(J)}:{}})}toEventChangeList(z){return this.model.getEditPositions(z).map((J)=>({rowIndex:J.rowNode.rowIndex,rowPinned:J.rowNode.rowPinned,columnId:J.column.getColId(),newValue:J.pendingValue,oldValue:J.sourceValue}))}applyBulkEdit({rowNode:z,column:J},Q){if(!Q||Q.length===0)return;let{beans:Z,rangeSvc:$,valueSvc:X}=this,{formula:Y}=Z;Kz(Z,{persist:!0});let q=this.model.getEditMap(!0),G=q.get(z)?.get(J)?.pendingValue,U=!1;if(!this.batch)this.eventSvc.dispatchEvent({type:"bulkEditingStarted"}),U=!0;let _=Y?.isFormula(G)??!1;Q.forEach((W)=>{let B=W.columns.some((E)=>E?.isAllowFormula());if($?.forEachRowInRange(W,(E)=>{let K=S0(Z,E);if(K===void 0)return;let F=q.get(K)??new Map,L=G;for(let D of W.columns){if(!D)continue;let M=!!_&&D.isAllowFormula();if(this.isCellEditable({rowNode:K,column:D},"api")){let f=X.getValue(D,K,"data",!0),A=X.parseValue(D,K??null,L,f);if(Number.isNaN(A))A=null;F.set(D,{editorValue:void 0,pendingValue:A,sourceValue:f,state:"changed",editorState:{isCancelAfterEnd:void 0,isCancelBeforeStart:void 0}})}if(M)L=Y?.updateFormulaByOffset({value:L,columnDelta:1})}if(F.size>0)q.set(K,F);if(_&&B)G=Y?.updateFormulaByOffset({value:G,rowDelta:1})}),this.setEditMap(q),this.batch){this.cleanupEditors(),U2(Z),this.ensureBatchStarted();return}this.committing=!0;try{this.stopEditing(void 0,{source:"bulk"})}finally{if(this.committing=!1,U)this.eventSvc.dispatchEvent({type:"bulkEditingStopped",changes:this.toEventChangeList(q)})}});let H=l(Z,{rowNode:z,column:J});if(H)H.focusCell(!0)}createCellStyleFeature(z){return new XD(z,this.beans)}createRowStyleFeature(z){return new YD(z,this.beans)}setEditingCells(z,J){let{beans:Q}=this,{colModel:Z,valueSvc:$}=Q,X=new Map;for(let{colId:Y,column:q,colKey:G,rowIndex:U,rowPinned:_,newValue:H,state:W}of z){let B=Y?Z.getCol(Y):G?Z.getCol(G):q;if(!B)continue;let E=S0(Q,{rowIndex:U,rowPinned:_});if(!E)continue;let K=$.getValue(B,E,"data",!0);if(!J?.forceRefreshOfEditCellsOnly&&!S4({pendingValue:H,sourceValue:K})&&W!=="editing")continue;let F=X.get(E);if(!F)F=new Map,X.set(E,F);if(H===void 0)H=v0;F.set(B,{editorValue:void 0,pendingValue:H,sourceValue:K,state:W??"changed",editorState:{isCancelAfterEnd:void 0,isCancelBeforeStart:void 0}})}this.setEditMap(X,J)}onCellFocused(z){let J=l(this.beans,z);if(!J||!this.isEditing(J,cz))return;let Q=this.model.getEdit(J);if(!Q||!S4(Q))return;let $=this.getLocaleTextFunc()("ariaPendingChange","Pending Change");this.beans.ariaAnnounce?.announceValue($,"pendingChange")}allowedFocusTargetOnValidation(z){return l(this.beans,z)}};function LD(z){return{rowNodes:z?Array.from(z.keys()):void 0,columns:z?[...new Set(Array.from(z.values()).flatMap((J)=>Array.from(J.keys())))]:void 0}}function A8(z,J){return J??z.get("editType")??"singleCell"}var VX=class extends S{postConstruct(){this.model=this.beans.editModelSvc,this.editSvc=this.beans.editSvc,this.addManagedEventListeners({cellFocused:this.onCellFocusChanged?.bind(this),cellFocusCleared:this.onCellFocusChanged?.bind(this)})}clearEdits(z){this.model.clearEditValue(z)}onCellFocusChanged(z){let J,Q=z.previousParams,{editSvc:Z,beans:$}=this,X=z.type==="cellFocused"?z.sourceEvent:null;if(Q)J=l($,Q);let{gos:Y,editModelSvc:q}=$,G=z.type==="cellFocusCleared";if(Z.isEditing(void 0,{withOpenEditor:!0})){let{column:U,rowIndex:_,rowPinned:H}=z,W={column:U,rowNode:S0($,{rowIndex:_,rowPinned:H})},B=Y.get("invalidEditValueMode")==="block";if(B)return;let E=!B,K=!!q?.getCellValidationModel().hasCellValidation(W),F=E&&K;if(!(Q||G?Z.stopEditing(void 0,{cancel:F,source:G&&E?"api":void 0,event:X}):!0))if(Z.isBatchEditing())Z.cleanupEditors();else Z.stopEditing(void 0,{source:"api"})}J?.refreshCell({suppressFlash:!0,force:!0})}stopCancelled(z){let J=this.editSvc.isBatchEditing()&&!z;for(let Q of this.model.getEditPositions())j2(this.beans,Q,{cancel:!0},l(this.beans,Q)),this.model.stop(Q,J,!0);return!0}stopCommitted(z,J){let Q=this.model.getEditPositions(),Z={all:[],pass:[],fail:[]};for(let Y of Q)if(Z.all.push(Y),(this.model.getCellValidationModel().getCellValidation(Y)?.errorMessages?.length??0)>0)Z.fail.push(Y);else Z.pass.push(Y);let $=this.processValidationResults(Z),X=this.editSvc.isBatchEditing()&&!J;for(let Y of $.destroy)j2(this.beans,Y,{event:z},l(this.beans,Y)),this.model.stop(Y,X,!1);for(let Y of $.keep){let q=l(this.beans,Y);if(!this.editSvc.cellEditingInvalidCommitBlocks()&&q)this.editSvc.revertSingleCellEdit(q)}return!0}cleanupEditors({rowNode:z}={},J){Kz(this.beans,{persist:!1});let Q=this.model.getEditPositions(),Z=[];if(z){for(let $ of Q)if($.rowNode!==z)Z.push($)}else for(let $ of Q)Z.push($);Bz(this.beans,Z),U2(this.beans,J)}setFocusOutOnEditor(z){z.comp?.getCellEditor()?.focusOut?.()}setFocusInOnEditor(z){let J=z.comp,Q=J?.getCellEditor();if(Q?.focusIn)Q.focusIn();else{let Z=this.beans.gos.get("editType")==="fullRow";z.focusCell(Z),z.onEditorAttachedFuncs.push(()=>J?.getCellEditor()?.focusIn?.())}}setupEditors(z){let{event:J,ignoreEventKey:Q=!1,startedEdit:Z,position:$,cells:X=this.model.getEditPositions()}=z,Y=J instanceof KeyboardEvent&&!Q&&J.key||void 0;UK(this.beans,X,$,Y,J,Z)}dispatchCellEvent(z,J,Q,Z){let $=l(this.beans,z);if($)this.eventSvc.dispatchEvent({...$.createEvent(J??null,Q),...Z})}dispatchRowEvent(z,J,Q){if(Q)return;let Z=i6(this.beans,z);if(Z)this.eventSvc.dispatchEvent(Z.createRowEvent(J))}shouldStop(z,J,Q="ui"){let Z=this.editSvc.isBatchEditing();if(Z&&Q==="api")return!0;if(Z&&(Q==="ui"||Q==="edit"))return!1;if(Q==="api")return!0;if(J instanceof KeyboardEvent&&!Z)return J.key===k.ENTER;return null}shouldCancel(z,J,Q="ui"){let Z=this.editSvc.isBatchEditing();if(J instanceof KeyboardEvent&&!Z){if(J.key===k.ESCAPE)return!0}if(Z&&Q==="api")return!0;if(Q==="api")return!0;return!1}setEditMap(z,J){if(!J?.update)this.editSvc.stopEditing(void 0,{cancel:!0,source:"api"});let Q=[];if(z.forEach((Z,$)=>{Z.forEach((X,Y)=>{if(X.state==="editing")Q.push({...X,rowNode:$,column:Y})})}),J?.update)z=new Map([...this.model.getEditMap(),...z]);if(this.model?.setEditMap(z),Q.length>0){let Z=Q.at(-1),$=Z.pendingValue===v0?void 0:Z.pendingValue;this.start({position:Z,event:new KeyboardEvent("keydown",{key:$}),source:"api"});let X=l(this.beans,Z);if(X)this.setFocusInOnEditor(X)}}destroy(){this.cleanupEditors(),super.destroy()}},DD=class extends VX{constructor(){super(...arguments);this.beanName="fullRow",this.startedRows=new Set}shouldStop(z,J,Q="ui"){let{rowNode:Z,beans:$}=this,{rowNode:X}=z||{};if(!i6($,{rowNode:Z}))return!0;let q=super.shouldStop({rowNode:Z},J,Q);if(q!==null)return q;if(!Z)return!1;return X!==Z}midBatchInputsAllowed({rowNode:z}){if(!z)return!1;return this.model.hasEdits({rowNode:z})}clearEdits(z){this.model.clearEditValue(z)}start(z){let{position:J,silent:Q,startedEdit:Z,event:$,ignoreEventKey:X}=z,{rowNode:Y}=J,{beans:q,model:G,startedRows:U}=this;if(this.rowNode!==Y)super.cleanupEditors(J);let _=q.visibleCols.allCols,H=[],W=[];for(let B of _)if(B.isCellEditable(Y))W.push(B);if(W.length==0)return;if(!U.has(Y))this.dispatchRowEvent({rowNode:Y},"rowEditingStarted",Q),U.add(Y);for(let B of W){let E={rowNode:Y,column:B};H.push(E),G.start(E)}this.rowNode=Y,this.setupEditors({cells:H,position:J,startedEdit:Z,event:$,ignoreEventKey:X})}processValidationResults(z){if(z.fail.length>0&&this.editSvc.cellEditingInvalidCommitBlocks())return{destroy:[],keep:z.all};return{destroy:z.all,keep:[]}}stopCancelled(z){let{rowNode:J,model:Q}=this;if(J&&!Q.hasEdits())return!1;return super.stopCancelled(z),this.cleanupEditors({rowNode:J},!0),this.rowNode=void 0,!0}stopCommitted(z,J){let{rowNode:Q,beans:Z,model:$,editSvc:X}=this;if(Q&&!$.hasEdits())return!1;let Y=[];if($.getEditMap().forEach((q,G)=>{if(!q||q.size===0)return;for(let U of q.values())if(S4(U)){Y.push(G);break}}),Mz(Z),X.checkNavWithValidation({rowNode:Q})==="block-stop")return!1;if(super.stopCommitted(z,J),J||!X.isBatchEditing())for(let q of Y)this.dispatchRowEvent({rowNode:q},"rowValueChanged");return this.cleanupEditors({rowNode:Q},!0),this.rowNode=void 0,!0}onCellFocusChanged(z){let{rowIndex:J}=z,Q=z.previousParams;if(Q?.rowIndex===J||z.sourceEvent instanceof KeyboardEvent)return;let{beans:Z,gos:$,model:X}=this;if(Z.editSvc?.isRangeSelectionEnabledWhileEditing())return;let Y=l(Z,Q);if($.get("invalidEditValueMode")==="block"&&Y&&(X.getCellValidationModel().getCellValidation(Y)||X.getRowValidationModel().getRowValidation(Y)))return;super.onCellFocusChanged(z)}cleanupEditors(z={},J){super.cleanupEditors(z,J);let{startedRows:Q}=this;for(let Z of Q)this.dispatchRowEvent({rowNode:Z},"rowEditingStopped"),this.destroyEditorsForRow(Z);Q.clear()}destroyEditorsForRow(z){let J=i6(this.beans,{rowNode:z});if(!J)return;let Q={};for(let Z of J.getAllCellCtrls())if(Z.comp?.getCellEditor())j2(this.beans,Z,Q,Z)}moveToNextEditingCell(z,J,Q,Z="ui",$=!1){let{beans:X,model:Y,gos:q,editSvc:G}=this,U=z.cellPosition,_;Y.suspend(!0);try{_=X.navigation?.findNextCellToFocusOn(U,{backwards:J,startEditing:!0,skipToNextEditableCell:!1})}finally{Y.suspend(!1)}if(_===!1)return null;if(_==null)return!1;let H=_.cellPosition,W=z.isCellEditable(),B=_.isCellEditable(),E=U.rowIndex===H?.rowIndex&&U.rowPinned===H.rowPinned;if(W)this.setFocusOutOnEditor(z);this.restoreEditors();let K=q.get("suppressStartEditOnTab");if(B&&!$)if(K)_.focusCell(!0,Q);else{if(!_.comp?.getCellEditor())z1(X,_,{event:Q,cellStartedEdit:!0});this.setFocusInOnEditor(_),_.focusCell(!1,Q)}else{if(B&&$)this.setFocusInOnEditor(_);_.focusCell(!0,Q)}if(!E&&!$){if(G?.stopEditing({rowNode:z.rowNode},{event:Q,forceStop:!0}),G?.isRowEditing(z.rowNode,{withOpenEditor:!0}))this.cleanupEditors(_,!0);if(K)_.focusCell(!0,Q);else G.startEditing(_,{startedEdit:!0,event:Q,source:Z,ignoreEventKey:!0,editable:B||void 0})}return z.rowCtrl?.refreshRow({suppressFlash:!0,force:!0}),!0}restoreEditors(){let{beans:z,model:J}=this;J.getEditMap().forEach((Q,Z)=>Q.forEach(({state:$},X)=>{if($!=="editing")return;let Y=l(z,{rowNode:Z,column:X});if(Y&&!Y.comp?.getCellEditor())z1(z,Y,{silent:!0})}))}destroy(){super.destroy(),this.rowNode=void 0,this.startedRows.clear()}},MD=class extends VX{constructor(){super(...arguments);this.beanName="singleCell"}shouldStop(z,J,Q="ui"){let Z=super.shouldStop(z,J,Q);if(Z!==null)return Z;let $=z?.rowNode,X=z?.column,Y=this.rowNode,q=this.column;if((!Y||!q)&&$&&X)return null;if(Y!==$||q!==X)return!0;if(!Y&&!q)return this.model.hasEdits(void 0,{withOpenEditor:!0});return!1}midBatchInputsAllowed(z){return this.model.hasEdits(z)}start(z){let{position:J,startedEdit:Q,event:Z,ignoreEventKey:$}=z;if(this.rowNode!==J.rowNode||this.column!==J.column)super.cleanupEditors();this.rowNode=J.rowNode,this.column=J.column,this.model.start(J),this.setupEditors({cells:[J],position:J,startedEdit:Q,event:Z,ignoreEventKey:$})}dispatchRowEvent(z,J,Q){}processValidationResults(z){if(z.fail.length>0&&this.editSvc.cellEditingInvalidCommitBlocks())return{destroy:[],keep:z.all};return{destroy:z.all,keep:[]}}stopCancelled(z){return super.stopCancelled(z),this.clearPosition()}stopCommitted(z,J){return super.stopCommitted(z,J),this.clearPosition()}clearPosition(){return this.rowNode=void 0,this.column=void 0,!0}onCellFocusChanged(z){let{colModel:J,editSvc:Q}=this.beans,{rowIndex:Z,column:$,rowPinned:X}=z,Y=S0(this.beans,{rowIndex:Z,rowPinned:X}),q=lQ($),G=J.getCol(q),U=z.previousParams;if(U){let _=lQ(U.column);if(U?.rowIndex===Z&&_===q&&U?.rowPinned===X)return}if(z.type=="cellFocused"&&(Q?.isRangeSelectionEnabledWhileEditing()||Q?.isEditing({rowNode:Y,column:G},{withOpenEditor:!0})))return;super.onCellFocusChanged(z)}moveToNextEditingCell(z,J,Q,Z="ui",$=!1){let X=this.beans.focusSvc.getFocusedCell();if(X)z=X4(this.beans,X)??z;let Y=z.cellPosition,q,G=this.beans.gos.get("editType")==="fullRow";if(G)this.model.suspend(!0);if(!$)z.eGui.focus(),this.editSvc?.stopEditing(z,{source:this.editSvc?.isBatchEditing()?"ui":"api",event:Q});try{q=this.beans.navigation?.findNextCellToFocusOn(Y,{backwards:J,startEditing:!0})}finally{if(G)this.model.suspend(!1)}if(q===!1)return null;if(q==null)return!1;let U=q.cellPosition,_=z.isCellEditable(),H=q.isCellEditable(),W=Y.rowIndex===U?.rowIndex&&Y.rowPinned===U.rowPinned;if(_&&!$)this.setFocusOutOnEditor(z);let B=this.gos.get("suppressStartEditOnTab"),E=!1;if(!W&&!$)if(super.cleanupEditors(q,!0),B)q.focusCell(!0,Q);else E=!0,this.editSvc.startEditing(q,{startedEdit:!0,event:Q,source:Z,ignoreEventKey:!0,editable:H});if(H&&!$){if(q.focusCell(!1,Q),B)q.focusCell(!0,Q);else if(!q.comp?.getCellEditor()){if(!E){let K=this.editSvc?.isEditing(q,{withOpenEditor:!0});z1(this.beans,q,{event:Q,cellStartedEdit:!0,silent:K})}this.setFocusInOnEditor(q),this.cleanupEditors(q)}}else{if(H&&$)this.setFocusInOnEditor(q);q.focusCell(!0,Q)}return z.rowCtrl?.refreshRow({suppressFlash:!0,force:!0}),!0}destroy(){super.destroy(),this.rowNode=void 0,this.column=void 0}},kD={moduleName:"EditCore",version:i,beans:[YK,FD],apiFunctions:{getEditingCells:sL,getEditRowValues:tL,getCellEditorInstances:GK,startEditingCell:oL,stopEditing:lL,isEditing:aL,validateEdit:eL},dynamicBeans:{singleCell:MD,fullRow:DD},dependsOn:[q1,yL],css:[bL]};var RX={moduleName:"TextEditor",version:i,userComponents:{agCellEditor:R8,agTextCellEditor:R8},dependsOn:[kD]};var AX={agSetColumnFilter:"agSetColumnFilterHandler",agMultiColumnFilter:"agMultiColumnFilterHandler",agGroupColumnFilter:"agGroupColumnFilterHandler",agNumberColumnFilter:"agNumberColumnFilterHandler",agBigIntColumnFilter:"agBigIntColumnFilterHandler",agDateColumnFilter:"agDateColumnFilterHandler",agTextColumnFilter:"agTextColumnFilterHandler"},fD=new Set(Object.values(AX));function Hz(z,J){let Q=z.filterUi;if(!Q)return null;if(Q.created)return Q.promise;if(J)return null;let Z=Q.create(Q.refreshed),$=Q;return $.created=!0,$.promise=Z,Z}function VJ(z,J,Q,Z,$,X,Y){return J.refresh?.({...Q,model:Z,source:X,additionalEventAttributes:Y}),z().then((q)=>{if(q){let{filter:G,filterParams:U}=q;l1(G,U,Z,$,X,Y)}})}function l1(z,J,Q,Z,$,X){z?.refresh?.({...J,model:Q,state:Z,source:$,additionalEventAttributes:X})}function jX(z,J,Q,Z){let $=z();if($?.created)$.promise.then((X)=>{let Y=J();l1(X,$.filterParams,Y,Q()??{model:Y},"ui",Z)})}function d6(z){let J,Q=!1,Z,{action:$,filterParams:X,getFilterUi:Y,getModel:q,getState:G,updateState:U,updateModel:_,processModelToApply:H}=z;switch($){case"apply":{let W=G();if(Z=W?.model??null,H)Z=H(Z);J={state:W?.state,model:Z},Q=!0;break}case"clear":{if(J={model:null},!X?.buttons?.includes("apply"))Q=!0,Z=null;break}case"reset":{J={model:null},Q=!0,Z=null;break}case"cancel":{J={model:q()};break}}if(U(J),Q)_(Z);else jX(Y,q,G,{fromAction:$})}function f0(z,J){return z[J]??null}var SD=class extends sZ{constructor(){super(...arguments);this.iconCreated=!1}wireComp(z,J,Q,Z,$){this.comp=z;let X=m2(this,this.beans.context,$);this.eButtonShowMainFilter=Q,this.eFloatingFilterBody=Z,this.setGui(J,X),this.setupActive(),this.refreshHeaderStyles(),this.setupWidth(X),this.setupLeft(X),this.setupHover(X),this.setupFocus(X),this.setupAria(),this.setupFilterButton(),this.setupUserComp(),this.setupSyncWithFilter(X),this.setupUi(),X.addManagedElementListeners(this.eButtonShowMainFilter,{click:this.showParentFilter.bind(this)}),this.setupFilterChangedListener(X);let Y=()=>this.onColDefChanged(X);X.addManagedListeners(this.column,{colDefChanged:Y}),X.addManagedEventListeners({filterSwitched:({column:q})=>{if(q===this.column)Y()}}),X.addDestroyFunc(()=>{this.eButtonShowMainFilter=null,this.eFloatingFilterBody=null,this.userCompDetails=null,this.clearComponent()})}resizeHeader(){}moveHeader(){}getHeaderClassParams(){let{column:z,beans:J}=this,Q=z.colDef;return C(J.gos,{colDef:Q,column:z,floatingFilter:!0})}setupActive(){let z=this.column.colDef,J=!!z.filter,Q=!!z.floatingFilter;this.active=J&&Q}setupUi(){if(this.comp.setButtonWrapperDisplayed(!this.suppressFilterButton&&this.active),this.comp.addOrRemoveBodyCssClass("ag-floating-filter-full-body",this.suppressFilterButton),this.comp.addOrRemoveBodyCssClass("ag-floating-filter-body",!this.suppressFilterButton),!this.active||this.iconCreated)return;let z=h("filter",this.beans,this.column);if(z)this.iconCreated=!0,this.eButtonShowMainFilter.appendChild(z)}setupFocus(z){z.createManagedBean(new Jz(this.eGui,{shouldStopEventPropagation:this.shouldStopEventPropagation.bind(this),onTabKeyDown:this.onTabKeyDown.bind(this),handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this)}))}setupAria(){let z=this.getLocaleTextFunc();_0(this.eButtonShowMainFilter,z("ariaFilterMenuOpen","Open Filter Menu"))}onTabKeyDown(z){let{beans:J}=this;if(n(J)===this.eGui)return;let $=O0(J,this.eGui,null,z.shiftKey);if($){J.headerNavigation?.scrollToColumn(this.column),z.preventDefault(),$.focus();return}let X=this.findNextColumnWithFloatingFilter(z.shiftKey);if(!X)return;if(J.focusSvc.focusHeaderPosition({headerPosition:{headerRowIndex:this.rowCtrl.rowIndex,column:X},event:z}))z.preventDefault()}findNextColumnWithFloatingFilter(z){let J=this.beans.visibleCols,Q=this.column;do if(Q=z?J.getColBefore(Q):J.getColAfter(Q),!Q)break;while(!Q.colDef.filter||!Q.colDef.floatingFilter);return Q}handleKeyDown(z){super.handleKeyDown(z);let J=this.getWrapperHasFocus();switch(z.key){case k.UP:case k.DOWN:case k.LEFT:case k.RIGHT:if(J)return;l0(z);case k.ENTER:if(J){if(E0(this.eGui))z.preventDefault()}break;case k.ESCAPE:if(!J)this.eGui.focus()}}onFocusIn(z){if(this.eGui.contains(z.relatedTarget))return;let Q=!!z.relatedTarget&&!z.relatedTarget.classList.contains("ag-floating-filter"),Z=!!z.relatedTarget&&nz(z.relatedTarget,"ag-floating-filter");if(Q&&Z&&z.target===this.eGui){let $=this.lastFocusEvent,X=$?.key===k.TAB;if($&&X){let Y=$.shiftKey;E0(this.eGui,Y)}}this.focusThis()}setupHover(z){this.beans.colHover?.addHeaderFilterColumnHoverListener(z,this.comp,this.column,this.eGui)}setupLeft(z){let J=new tZ(this.column,this.eGui,this.beans);z.createManagedBean(J)}setupFilterButton(){this.suppressFilterButton=!this.beans.menuSvc?.isFloatingFilterButtonEnabled(this.column),this.highlightFilterButtonWhenActive=!F0(this.gos)}setupUserComp(){if(!this.active)return;let z=this.beans.colFilter?.getFloatingFilterCompDetails(this.column,()=>this.showParentFilter());if(z)this.setCompDetails(z)}setCompDetails(z){this.userCompDetails=z,this.comp.setCompDetails(z)}showParentFilter(){let z=this.suppressFilterButton?this.eFloatingFilterBody:this.eButtonShowMainFilter;this.beans.menuSvc?.showFilterMenu({column:this.column,buttonElement:z,containerType:"floatingFilter",positionBy:"button"})}setupSyncWithFilter(z){if(!this.active)return;let{beans:{colFilter:J},column:Q,gos:Z}=this,$=(X)=>{if(X?.source==="filterDestroyed"&&(!this.isAlive()||!J?.isAlive()))return;let Y=this.comp.getFloatingFilterComp();if(!Y)return;Y.then((q)=>{if(q){if(Z.get("enableFilterHandlers")){let _=X,H="filter";if(_?.afterFloatingFilter)H="ui";else if(_?.afterDataChange)H="dataChanged";else if(X?.source==="api")H="api";this.updateFloatingFilterParams(this.userCompDetails,H);return}let G=J?.getCurrentFloatingFilterParentModel(Q),U=X?{...X,columns:X.columns??[],source:X.source==="api"?"api":"columnFilter"}:null;q.onParentModelChanged(G,U)}})};if([this.destroySyncListener]=z.addManagedListeners(Q,{filterChanged:$}),J?.isFilterActive(Q))$(null)}setupWidth(z){let J=()=>{let Q=`${this.column.getActualWidth()}px`;this.comp.setWidth(Q)};z.addManagedListeners(this.column,{widthChanged:J}),J()}setupFilterChangedListener(z){if(this.active)[this.destroyFilterChangedListener]=z.addManagedListeners(this.column,{filterChanged:this.updateFilterButton.bind(this)}),this.updateFilterButton()}updateFilterButton(){if(!this.suppressFilterButton&&this.comp){let z=!!this.beans.filterManager?.isFilterAllowed(this.column);if(this.comp.setButtonWrapperDisplayed(z),this.highlightFilterButtonWhenActive&&z)this.eButtonShowMainFilter.classList.toggle("ag-filter-active",this.column.isFilterActive())}}onColDefChanged(z){let J=this.active;this.setupActive();let Q=!J&&this.active;if(J&&!this.active)this.destroySyncListener(),this.destroyFilterChangedListener();let Z=this.beans.colFilter,$=this.active?Z?.getFloatingFilterCompDetails(this.column,()=>this.showParentFilter()):null,X=this.comp.getFloatingFilterComp();if(!X||!$)this.updateCompDetails(z,$,Q);else X.then((Y)=>{if(!Y||Z?.areFilterCompsDifferent(this.userCompDetails??null,$))this.updateCompDetails(z,$,Q);else this.updateFloatingFilterParams($,"colDef")})}updateCompDetails(z,J,Q){if(!this.isAlive())return;if(this.setCompDetails(J),this.setupFilterButton(),this.setupUi(),Q)this.setupSyncWithFilter(z),this.setupFilterChangedListener(z)}updateFloatingFilterParams(z,J){if(!z)return;let Q=z.params;this.comp.getFloatingFilterComp()?.then((Z)=>{if(typeof Z?.refresh==="function"){if(this.gos.get("enableFilterHandlers"))Q={...Q,model:f0(this.beans.colFilter?.model??{},this.column.colId),source:J};Z.refresh(Q)}})}addResizeAndMoveKeyboardListeners(){}destroy(){super.destroy(),this.destroySyncListener=null,this.destroyFilterChangedListener=null}};function VD(z,J){let Q=z.colModel.getCol(J);if(!Q){r(12,{colKey:J});return}z.menuSvc?.showColumnMenu({column:Q,positionBy:"auto"})}function RD(z){z.menuSvc?.hidePopupMenu()}var AD=class extends S{constructor(){super(...arguments);this.beanName="menuSvc"}postConstruct(){let{enterpriseMenuFactory:z,filterMenuFactory:J}=this.beans;this.activeMenuFactory=z??J}showColumnMenu(z){this.showColumnMenuCommon(this.activeMenuFactory,z,"columnMenu")}showFilterMenu(z){this.showColumnMenuCommon(j8(this.beans),z,z.containerType,!0)}showHeaderContextMenu(z,J,Q){this.activeMenuFactory?.showMenuAfterContextMenuEvent(z,J,Q)}hidePopupMenu(){this.beans.contextMenuSvc?.hideActiveMenu(),this.activeMenuFactory?.hideActiveMenu()}hideFilterMenu(){j8(this.beans)?.hideActiveMenu()}isColumnMenuInHeaderEnabled(z){let{suppressHeaderMenuButton:J}=z.colDef;return!J&&!!this.activeMenuFactory?.isMenuEnabled(z)&&(F0(this.gos)||!!this.beans.enterpriseMenuFactory)}isFilterMenuInHeaderEnabled(z){return!z.colDef.suppressHeaderFilterButton&&!!this.beans.filterManager?.isFilterAllowed(z)}isHeaderContextMenuEnabled(z){return!(z&&G4(z)?z.colDef:z?.getColGroupDef())?.suppressHeaderContextMenu&&this.gos.get("columnMenu")==="new"}isHeaderMenuButtonAlwaysShowEnabled(){return this.isSuppressMenuHide()}isHeaderMenuButtonEnabled(){let z=!this.isSuppressMenuHide();return!(a4()&&z)}isHeaderFilterButtonEnabled(z){return this.isFilterMenuInHeaderEnabled(z)&&!F0(this.gos)&&!this.isFloatingFilterButtonDisplayed(z)}isFilterMenuItemEnabled(z){return!!this.beans.filterManager?.isFilterAllowed(z)&&!F0(this.gos)&&!this.isFilterMenuInHeaderEnabled(z)&&!this.isFloatingFilterButtonDisplayed(z)}isFloatingFilterButtonEnabled(z){return!z.getColDef().suppressFloatingFilterButton}isFloatingFilterButtonDisplayed(z){return!!z.getColDef().floatingFilter&&this.isFloatingFilterButtonEnabled(z)}isSuppressMenuHide(){let z=this.gos,J=z.get("suppressMenuHide");if(F0(z))return z.exists("suppressMenuHide")?J:!1;return J}showColumnMenuCommon(z,J,Q,Z){let{positionBy:$,onClosedCallback:X}=J,Y=J.column;if($==="button"){let{buttonElement:q}=J;z?.showMenuAfterButtonClick(Y,q,Q,X,Z)}else if($==="mouse"){let{mouseEvent:q}=J;z?.showMenuAfterMouseEvent(Y,q,Q,X,Z)}else if(Y){let q=this.beans,G=q.ctrlsSvc;G.getScrollFeature().ensureColumnVisible(Y,"auto"),O4(q,()=>{let U=G.getHeaderRowContainerCtrl(Y.getPinned())?.getHeaderCtrlForColumn(Y);if(U)z?.showMenuAfterButtonClick(Y,U.getAnchorElementForMenu(Z),Q,X,Z)})}}};function O2(z,J,Q){if(z.menuVisible!==J)z.menuVisible=J,z.dispatchColEvent("menuVisibleChanged",Q)}function j8(z){let{enterpriseMenuFactory:J,filterMenuFactory:Q,gos:Z}=z;return J&&F0(Z)?J:Q}var K5={moduleName:"SharedMenu",version:i,beans:[AD],apiFunctions:{showColumnMenu:VD,hidePopupMenu:RD}},jD=".ag-set-filter{--ag-indentation-level:0}.ag-set-filter-item{align-items:center;display:flex;height:100%}:where(.ag-ltr) .ag-set-filter-item{padding-left:calc(var(--ag-widget-container-horizontal-padding) + var(--ag-indentation-level)*var(--ag-set-filter-indent-size))}:where(.ag-rtl) .ag-set-filter-item{padding-right:calc(var(--ag-widget-container-horizontal-padding) + var(--ag-indentation-level)*var(--ag-set-filter-indent-size))}.ag-set-filter-item-checkbox{display:flex;height:100%;width:100%}.ag-set-filter-group-icons{display:block;:where(.ag-set-filter-group-closed-icon),:where(.ag-set-filter-group-indeterminate-icon),:where(.ag-set-filter-group-opened-icon){cursor:pointer}}:where(.ag-ltr) .ag-set-filter-group-icons{margin-right:var(--ag-widget-container-horizontal-padding)}:where(.ag-rtl) .ag-set-filter-group-icons{margin-left:var(--ag-widget-container-horizontal-padding)}.ag-filter-body-wrapper{display:flex;flex-direction:column}:where(.ag-menu:not(.ag-tabs) .ag-filter) .ag-filter-body-wrapper{min-width:180px}.ag-filter-filter{flex:1 1 0px}.ag-filter-condition{display:flex;justify-content:center}.ag-floating-filter-body{display:flex;flex:1 1 auto;height:100%;position:relative}.ag-floating-filter-full-body{align-items:center;display:flex;flex:1 1 auto;height:100%;overflow:hidden;width:100%}.ag-floating-filter-input{align-items:center;display:flex;width:100%;>:where(.ag-date-floating-filter-wrapper),>:where(.ag-floating-filter-input),>:where(.ag-input-field){flex:1 1 auto}:where(.ag-input-field-input[type=date]),:where(.ag-input-field-input[type=datetime-local]){width:1px}}.ag-floating-filter-button{display:flex;flex:none}.ag-date-floating-filter-wrapper{display:flex}.ag-set-floating-filter-input :where(.ag-input-field-input)[disabled]{pointer-events:none}.ag-floating-filter-button-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;height:var(--ag-icon-size);width:var(--ag-icon-size)}.ag-filter-loading{align-items:unset;background-color:var(--ag-chrome-background-color);height:100%;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);position:absolute;width:100%;z-index:1;:where(.ag-menu) &{background-color:var(--ag-menu-background-color)}}.ag-filter-separator{border-top:solid var(--ag-border-width) var(--menu-separator-color)}:where(.ag-filter-select) .ag-picker-field-wrapper{width:0}.ag-filter-condition-operator{height:17px}:where(.ag-ltr) .ag-filter-condition-operator-or{margin-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-filter-condition-operator-or{margin-right:calc(var(--ag-spacing)*2)}.ag-set-filter-select-all{padding-top:var(--ag-widget-container-vertical-padding)}.ag-filter-no-matches,.ag-set-filter-list{height:calc(var(--ag-list-item-height)*6)}.ag-filter-no-matches{padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}.ag-set-filter-tree-list{height:calc(var(--ag-list-item-height)*10)}.ag-set-filter-filter{margin-left:var(--ag-widget-container-horizontal-padding);margin-right:var(--ag-widget-container-horizontal-padding);margin-top:var(--ag-widget-container-vertical-padding)}.ag-filter-to{margin-top:var(--ag-widget-vertical-spacing)}.ag-mini-filter{margin:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}:where(.ag-ltr) .ag-set-filter-add-group-indent{margin-left:calc(var(--ag-icon-size) + var(--ag-widget-container-horizontal-padding))}:where(.ag-rtl) .ag-set-filter-add-group-indent{margin-right:calc(var(--ag-icon-size) + var(--ag-widget-container-horizontal-padding))}:where(.ag-filter-menu) .ag-set-filter-list{min-width:max(200px,100%)}.ag-filter-virtual-list-item:focus-visible{box-shadow:inset var(--ag-focus-shadow)}.ag-filter-apply-panel{display:flex;justify-content:flex-end;overflow:hidden;padding:var(--ag-widget-vertical-spacing) var(--ag-widget-container-horizontal-padding) var(--ag-widget-container-vertical-padding)}.ag-filter-apply-panel-button{line-height:1.5}:where(.ag-ltr) .ag-filter-apply-panel-button{margin-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-filter-apply-panel-button{margin-right:calc(var(--ag-spacing)*2)}.ag-simple-filter-body-wrapper{display:flex;flex-direction:column;gap:var(--ag-widget-vertical-spacing);min-height:calc(var(--ag-list-item-height) + var(--ag-widget-container-vertical-padding) + var(--ag-widget-vertical-spacing));overflow-y:auto;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);padding-bottom:var(--ag-widget-container-vertical-padding);:where(.ag-resizer-wrapper){margin:0}}.ag-multi-filter-menu-item{margin:var(--ag-spacing) 0}.ag-multi-filter-group-title-bar{background-color:transparent;color:var(--ag-header-text-color);font-weight:500;padding:calc(var(--ag-spacing)*1.5) var(--ag-spacing)}.ag-group-filter-field-select-wrapper{display:flex;flex-direction:column;gap:var(--ag-widget-vertical-spacing);padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}";function OD(z){let J=z.filterManager;return!!J?.isColumnFilterPresent()||!!J?.isAggregateFilterPresent()}function PD(z,J){return z.filterManager?.getColumnFilterInstance(J)??Promise.resolve(void 0)}function TD(z,J){let Q=z.colModel.getColDefColOrCol(J);if(Q)return z.colFilter?.destroyFilter(Q,"api")}function vD(z,J){z.frameworkOverrides.wrapIncoming(()=>z.filterManager?.setFilterModel(J))}function ID(z){return z.filterManager?.getFilterModel()??{}}function CD(z,J,Q){let{gos:Z,colModel:$,colFilter:X}=z;if(Q&&!Z.get("enableFilterHandlers"))V(288),Q=!1;let Y=$.getColDefColOrCol(J);return Y?X?.getModelForColumn(Y,Q)??null:null}function yD(z,J,Q){return z.filterManager?.setColumnFilterModel(J,Q)??Promise.resolve()}function bD(z,J){let Q=z.colModel.getColDefColOrCol(J);if(!Q){r(12,{colKey:J});return}z.menuSvc?.showFilterMenu({column:Q,containerType:"columnFilter",positionBy:"auto"})}function xD(z){z.menuSvc?.hideFilterMenu()}function wD(z,J){let Q=z.colModel.getColDefColOrCol(J);if(!Q){r(12,{colKey:J});return}return z.colFilter?.getHandler(Q,!0)}function ND(z,J){let{colModel:Q,colFilter:Z,gos:$}=z;if(!$.get("enableFilterHandlers")){V(287);return}let{colId:X,action:Y}=J;if(X){let q=Q.getColById(X);if(q)Z?.updateModel(q,Y)}else Z?.updateAllModels(Y)}var O8={january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"},P8=["january","february","march","april","may","june","july","august","september","october","november","december"];function gD(z,J){if(z==null)return-1;if(J==null)return 1;return Number.parseFloat(z)-Number.parseFloat(J)}function hD(z,J){if(z==null)return-1;if(J==null)return 1;let Q=Sz(z),Z=Sz(J);if(Q!=null&&Z!=null){if(Q===Z)return 0;return Q>Z?1:-1}return String(z).localeCompare(String(J))}function T8(z){return z instanceof Date&&!isNaN(z.getTime())}var JZ={number:()=>{return},bigint:()=>{return},boolean:()=>({maxNumConditions:1,debounceMs:0,filterOptions:["empty",{displayKey:"true",displayName:"True",predicate:(z,J)=>J,numberOfInputs:0},{displayKey:"false",displayName:"False",predicate:(z,J)=>J===!1,numberOfInputs:0}]}),date:()=>({isValidDate:T8}),dateString:({dataTypeDefinition:z})=>({comparator:(J,Q)=>{let Z=z.dateParser(Q);if(Q==null||ZJ)return 1;return 0},isValidDate:(J)=>typeof J==="string"&&T8(z.dateParser(J))}),dateTime:(z)=>JZ.date(z),dateTimeString:(z)=>JZ.dateString(z),object:()=>{return},text:()=>{return}},QZ={number:()=>({comparator:gD}),bigint:()=>({comparator:hD}),boolean:({t:z})=>({valueFormatter:(J)=>P(J.value)?z(String(J.value),J.value?"True":"False"):z("blanks","(Blanks)")}),date:({formatValue:z,t:J})=>({valueFormatter:(Q)=>{let Z=z(Q);return P(Z)?Z:J("blanks","(Blanks)")},treeList:!0,treeListFormatter:(Q,Z)=>{if(Q==="NaN")return J("invalidDate","Invalid Date");if(Z===1&&Q!=null){let $=P8[Number(Q)-1];return J($,O8[$])}return Q??J("blanks","(Blanks)")},treeListPathGetter:(Q)=>Ez(Q,!1)}),dateString:({formatValue:z,dataTypeDefinition:J,t:Q})=>({valueFormatter:(Z)=>{let $=z(Z);return P($)?$:Q("blanks","(Blanks)")},treeList:!0,treeListPathGetter:(Z)=>Ez(J.dateParser(Z??void 0),!1),treeListFormatter:(Z,$)=>{if($===1&&Z!=null){let X=P8[Number(Z)-1];return Q(X,O8[X])}return Z??Q("blanks","(Blanks)")}}),dateTime:(z)=>{let J=QZ.date(z);return J.treeListPathGetter=Ez,J},dateTimeString(z){let J=z.dataTypeDefinition.dateParser,Q=QZ.dateString(z);return Q.treeListPathGetter=(Z)=>Ez(J(Z??void 0)),Q},object:({formatValue:z,t:J})=>({valueFormatter:(Q)=>{let Z=z(Q);return P(Z)?Z:J("blanks","(Blanks)")}}),text:()=>{return}};function F5(z,J,Q,Z,$,X,Y){let q=Q,G=z==="agSetColumnFilter";if(!q&&Z.baseDataType==="object"&&!G)q=({column:B,node:E})=>$({column:B,node:E,value:X.valueSvc.getValue(B,E,"data")});let _=(G?QZ:JZ)[Z.baseDataType],H=_({dataTypeDefinition:Z,formatValue:$,t:Y});return{filterParams:typeof J==="object"?{...H,...J}:H,filterValueGetter:q}}var uD={boolean:"agTextColumnFilter",date:"agDateColumnFilter",dateString:"agDateColumnFilter",dateTime:"agDateColumnFilter",dateTimeString:"agDateColumnFilter",bigint:"agBigIntColumnFilter",number:"agNumberColumnFilter",object:"agTextColumnFilter",text:"agTextColumnFilter"},mD={boolean:"agTextColumnFloatingFilter",date:"agDateColumnFloatingFilter",dateString:"agDateColumnFloatingFilter",dateTime:"agDateColumnFloatingFilter",dateTimeString:"agDateColumnFloatingFilter",bigint:"agBigIntColumnFloatingFilter",number:"agNumberColumnFloatingFilter",object:"agTextColumnFloatingFilter",text:"agTextColumnFloatingFilter"};function L5(z,J=!1){return(J?mD:uD)[z??"text"]}function D5(z,J,Q){if(J==null)return null;let Z=null,{compName:$,jsComp:X,fwComp:Y}=h9(z,J);if($)Z={agSetColumnFilter:"agSetColumnFloatingFilter",agMultiColumnFilter:"agMultiColumnFloatingFilter",agGroupColumnFilter:"agGroupColumnFloatingFilter",agNumberColumnFilter:"agNumberColumnFloatingFilter",agBigIntColumnFilter:"agBigIntColumnFloatingFilter",agDateColumnFilter:"agDateColumnFloatingFilter",agTextColumnFilter:"agTextColumnFloatingFilter"}[$];else if(X==null&&Y==null&&J.filter===!0)Z=Q();return Z}var cD={filterHandler:()=>({doesFilterPass:()=>!0})};function v8(z,J,Q,Z){if(!z.isPrimary())return!0;let X=!Q;if(!z.isValueActive()||!X)return!1;if(J)return!0;return Z}var iD=class extends S{constructor(){super(...arguments);this.beanName="colFilter",this.allColumnFilters=new Map,this.allColumnListeners=new Map,this.activeAggregateFilters=[],this.activeColumnFilters=[],this.processingFilterChange=!1,this.modelUpdates=[],this.columnModelUpdates=[],this.state=new Map,this.handlerMap={...AX},this.isGlobalButtons=!1,this.activeFilterComps=new Set}postConstruct(){this.addManagedEventListeners({gridColumnsChanged:this.onColumnsChanged.bind(this),dataTypesInferred:this.processFilterModelUpdateQueue.bind(this)}),this.addManagedPropertyListener("pivotMode",this.onPivotModeChanged.bind(this));let z=this.gos,J={...z.get("initialState")?.filter?.filterModel??{}};if(this.initialModel=J,this.model={...J},!z.get("enableFilterHandlers"))delete this.handlerMap.agMultiColumnFilter}refreshModel(){this.onNewRowsLoaded("rowDataUpdated")}setModel(z,J="api",Q){let{colModel:Z,dataTypeSvc:$,filterManager:X}=this.beans;if($?.isPendingInference){this.modelUpdates.push({model:z,source:J});return}let Y=[],q=this.getModel(!0);if(z){let G=new Set(Object.keys(z));this.allColumnFilters.forEach((U,_)=>{let H=z[_];Y.push(this.setModelOnFilterWrapper(U,H)),G.delete(_)}),G.forEach((U)=>{let _=Z.getColDefColOrCol(U);if(!_){V(62,{colId:U});return}if(!_.isFilterAllowed()){V(63,{colId:U});return}let H=this.getOrCreateFilterWrapper(_,!0);if(!H){V(64,{colId:U});return}Y.push(this.setModelOnFilterWrapper(H,z[U],!0))})}else this.model={},this.allColumnFilters.forEach((G)=>{Y.push(this.setModelOnFilterWrapper(G,null))});N.all(Y).then(()=>{let G=this.getModel(!0),U=[];if(this.allColumnFilters.forEach((_,H)=>{let W=q?q[H]:null,B=G?G[H]:null;if(!s6(W,B))U.push(_.column)}),U.length>0)X?.onFilterChanged({columns:U,source:J});else if(Q)this.updateActive("filterChanged")})}getModel(z){let J={},{allColumnFilters:Q,initialModel:Z,beans:{colModel:$}}=this;if(Q.forEach((X,Y)=>{let q=this.getModelFromFilterWrapper(X);if(P(q))J[Y]=q}),!z)for(let X of Object.keys(Z)){let Y=Z[X];if(P(Y)&&!Q.has(X)&&$.getCol(X)?.isFilterAllowed())J[X]=Y}return J}setState(z,J,Q="api"){if(this.state.clear(),J)for(let Z of Object.keys(J)){let $=J[Z];this.state.set(Z,{model:f0(this.model,Z),state:$})}this.setModel(z,Q,!0)}getState(){let z=this.state;if(!z.size)return;let J={},Q=!1;return z.forEach((Z,$)=>{let X=Z.state;if(X!=null)Q=!0,J[$]=X}),Q?J:void 0}getModelFromFilterWrapper(z){let Q=z.column.getColId();if(z.isHandler)return f0(this.model,Q);let Z=z.filter;if(Z){if(typeof Z.getModel!=="function")return V(66),null;return Z.getModel()}return f0(this.initialModel,Q)}isFilterPresent(){return this.activeColumnFilters.length>0}isAggFilterPresent(){return!!this.activeAggregateFilters.length}disableFilters(){this.initialModel={};let{allColumnFilters:z}=this;if(z.size)return z.forEach((J)=>this.disposeFilterWrapper(J,"advancedFilterEnabled")),!0;return!1}updateActiveFilters(){let z=(G)=>{if(!G)return!1;if(!G.isFilterActive)return V(67),!1;return G.isFilterActive()},{colModel:J,gos:Q}=this.beans,Z=!!u4(Q),$=[],X=[],Y=(G,U,_)=>{if(U)if(v8(G,J.isPivotMode(),J.isPivotActive(),Z))$.push(_);else X.push(_)},q=[];return this.allColumnFilters.forEach((G)=>{let U=G.column,_=U.getColId();if(G.isHandler)q.push(N.resolve().then(()=>{Y(U,this.isHandlerActive(U),{colId:_,isHandler:!0,handler:G.handler,handlerParams:G.handlerParams})}));else{let H=Hz(G);if(H)q.push(H.then((W)=>{Y(U,z(W),{colId:_,isHandler:!1,comp:W})}))}}),N.all(q).then(()=>{this.activeAggregateFilters=$,this.activeColumnFilters=X})}updateFilterFlagInColumns(z,J){let Q=[];return this.allColumnFilters.forEach((Z)=>{let $=Z.column;if(Z.isHandler)Q.push(N.resolve().then(()=>{this.setColFilterActive($,this.isHandlerActive($),z,J)}));else{let X=Hz(Z);if(X)Q.push(X.then((Y)=>{this.setColFilterActive($,Y.isFilterActive(),z,J)}))}}),this.beans.groupFilter?.updateFilterFlags(z,J),N.all(Q)}doFiltersPass(z,J,Q){let{data:Z,aggData:$}=z,X=Q?this.activeAggregateFilters:this.activeColumnFilters,Y=Q?$:Z,q=this.model;for(let G=0;G{if(this.isAlive())Q?.onFilterChanged(z)};if(J.isRefreshInProgress())setTimeout(Z,0);else Z()}updateBeforeFilterChanged(z={}){let{column:J,additionalEventAttributes:Q}=z,Z=J?.getColId();return this.updateActiveFilters().then(()=>this.updateFilterFlagInColumns("filterChanged",Q).then(()=>{this.allColumnFilters.forEach(($)=>{let{column:X,isHandler:Y}=$;if(Z===X.getColId())return;if(Y)$.handler.onAnyFilterChanged?.();Hz($,Y)?.then((q)=>{if(typeof q?.onAnyFilterChanged==="function")q.onAnyFilterChanged()})}),this.processingFilterChange=!0}))}updateAfterFilterChanged(){this.processingFilterChange=!1}isSuppressFlashingCellsBecauseFiltering(){return!(this.gos.get("allowShowChangeAfterFilter")??!1)&&this.processingFilterChange}onNewRowsLoaded(z){let J=[];this.allColumnFilters.forEach((Q)=>{let Z=Q.isHandler;if(Z)Q.handler.onNewRowsLoaded?.();let $=Hz(Q,Z);if($)J.push($.then((X)=>{X.onNewRowsLoaded?.()}))}),N.all(J).then(()=>this.updateActive(z,{afterDataChange:!0}))}updateActive(z,J){this.updateFilterFlagInColumns(z,J).then(()=>this.updateActiveFilters())}createGetValue(z,J){let{filterValueSvc:Q,colModel:Z}=this.beans;return($,X)=>{let Y=X?Z.getColDefColOrCol(X):z;return Y?Q.getValue(Y,$,J):void 0}}isFilterActive(z){let J=this.cachedFilter(z);if(J?.isHandler)return this.isHandlerActive(z);let Q=J?.filter;if(Q)return Q.isFilterActive();return f0(this.initialModel,z.getColId())!=null}isHandlerActive(z){let J=P(f0(this.model,z.getColId()));if(J)return J;let Q=this.beans.groupFilter;return Q?.isGroupFilter(z)?Q.isFilterActive(z):!1}getOrCreateFilterUi(z){let J=this.getOrCreateFilterWrapper(z,!0);return J?Hz(J):null}getFilterUiForDisplay(z){let J=this.getOrCreateFilterWrapper(z,!0);if(!J)return null;let Q=Hz(J);if(!Q)return null;return Q.then((Z)=>({comp:Z,params:J.filterUi.filterParams,isHandler:J.isHandler}))}getHandler(z,J){let Q=this.getOrCreateFilterWrapper(z,J);return Q?.isHandler?Q.handler:void 0}getOrCreateFilterWrapper(z,J){if(!z.isFilterAllowed())return;let Q=this.cachedFilter(z);if(!Q&&J)Q=this.createFilterWrapper(z),this.setColumnFilterWrapper(z,Q);return Q}cachedFilter(z){return this.allColumnFilters.get(z.getColId())}getDefaultFilter(z,J=!1){return this.getDefaultFilterFromDataType(()=>this.beans.dataTypeSvc?.getBaseDataType(z),J)}getDefaultFilterFromDataType(z,J=!1){if(KU(this.gos))return J?"agSetColumnFloatingFilter":"agSetColumnFilter";return L5(z(),J)}getDefaultFloatingFilter(z){return this.getDefaultFilter(z,!0)}createFilterComp(z,J,Q,Z,$,X){let Y=()=>{let U=this.createFilterCompParams(z,$,X),_=Z(U,$);return yZ(this.beans.userCompFactory,J,_,Q)},q=Y();if(!q)return null;return{compDetails:q,createFilterUi:(U)=>{return(U?Y():q).newAgStackInstance()}}}createFilterInstance(z,J,Q,Z){let $=this.beans.selectableFilter;if($?.isSelectable(J))J=$.getFilterDef(z,J);let{handler:X,handlerParams:Y,handlerGenerator:q}=this.createHandler(z,J,Q)??{},G=this.createFilterComp(z,J,Q,Z,!!X,"init");if(!G)return{compDetails:null,createFilterUi:null,handler:X,handlerGenerator:q,handlerParams:Y};let{compDetails:U,createFilterUi:_}=G;if(this.isGlobalButtons){if(!U.params?.buttons?.length)V(281,{colId:z.getColId()})}return{compDetails:U,handler:X,handlerGenerator:q,handlerParams:Y,createFilterUi:_}}createBaseFilterParams(z,J){let{filterManager:Q,rowModel:Z}=this.beans;return C(this.gos,{column:z,colDef:z.getColDef(),getValue:this.createGetValue(z),doesRowPassOtherFilter:J?()=>!0:($)=>Q?.doesRowPassFilter($,z.getColId())??!0,rowModel:Z})}createFilterCompParams(z,J,Q,Z){let $=this.filterChangedCallbackFactory(z),X=this.createBaseFilterParams(z,Z);if(X.filterChangedCallback=$,X.filterModifiedCallback=Z?()=>{}:(Y)=>this.filterModified(z,Y),J){let Y=X,q=z.getColId(),G=f0(this.model,q);Y.model=G,Y.state=this.state.get(q)??{model:G},Y.onModelChange=(U,_)=>{this.updateStoredModel(q,U),this.refreshHandlerAndUi(z,U,"ui",!1,_).then(()=>{$({..._,source:"columnFilter"})})},Y.onStateChange=(U)=>{this.updateState(z,U),this.updateOrRefreshFilterUi(z)},Y.onAction=(U,_,H)=>{this.updateModel(z,U,_),this.dispatchLocalEvent({type:"filterAction",column:z,action:U,event:H})},Y.getHandler=()=>this.getHandler(z,!0),Y.onUiChange=(U)=>this.filterUiChanged(z,U),Y.source=Q}return X}createFilterUiForHandler(z,J){return J?{created:!1,create:J,filterParams:z.params,compDetails:z}:null}createFilterUiLegacy(z,J,Q){let Z=J(),$={created:!0,create:J,filterParams:z.params,compDetails:z,promise:Z};return Z.then(Q),$}createFilterWrapper(z){let{compDetails:J,handler:Q,handlerGenerator:Z,handlerParams:$,createFilterUi:X}=this.createFilterInstance(z,z.getColDef(),this.getDefaultFilter(z),(q)=>q),Y=z.getColId();if(Q)return delete this.initialModel[Y],Q.init?.({...$,source:"init",model:f0(this.model,Y)}),{column:z,isHandler:!0,handler:Q,handlerGenerator:Z,handlerParams:$,filterUi:this.createFilterUiForHandler(J,X)};if(X){let q={column:z,filterUi:null,isHandler:!1};return q.filterUi=this.createFilterUiLegacy(J,X,(G)=>{q.filter=G??void 0}),q}return{column:z,filterUi:null,isHandler:!1}}createHandlerFunc(z,J,Q){let{gos:Z,frameworkOverrides:$,registry:X}=this.beans,Y,q=(B)=>{let E=B.filter;if(w9(E)){let K=E.handler;if(K)return K;if(Y=E.doesFilterPass,Y)return()=>({doesFilterPass:Y});return}return typeof E==="string"?E:void 0},G=Z.get("enableFilterHandlers"),U=G?q(J):void 0,_=(B)=>()=>this.createBean(X.createDynamicBean(B,!0)),H,W;if(typeof U==="string"){let B=Z.get("filterHandlers")?.[U];if(B!=null)H=B;else if(fD.has(U))H=_(U),W=U}else H=U;if(!H){let B,{compName:E,jsComp:K,fwComp:F}=h9($,J);if(E)B=E;else if(K==null&&F==null&&J.filter===!0)B=Q;if(W=this.handlerMap[B],W)H=_(W)}if(!H){if(!G)return;if(o(Z))V(277,{colId:z.getColId()});return cD}return{filterHandler:H,handlerNameOrCallback:Y??W}}createHandler(z,J,Q){let Z=this.createHandlerFunc(z,J,Q);if(!Z)return;let $=JQ(this.beans.userCompFactory,J,this.createFilterCompParams(z,!0,"init")),{handlerNameOrCallback:X,filterHandler:Y}=Z,{handler:q,handlerParams:G}=this.createHandlerFromFunc(z,Y,$);return{handler:q,handlerParams:G,handlerGenerator:X??Y}}createHandlerFromFunc(z,J,Q){let Z=z.getColDef(),$=J(C(this.gos,{column:z,colDef:Z})),X=this.createHandlerParams(z,Q);return{handler:$,handlerParams:X}}createHandlerParams(z,J){let Q=z.getColDef(),Z=z.getColId(),$=this.filterChangedCallbackFactory(z);return C(this.gos,{colDef:Q,column:z,getValue:this.createGetValue(z),doesRowPassOtherFilter:(X)=>this.beans.filterManager?.doesRowPassFilter(X,Z)??!0,onModelChange:(X,Y)=>{this.updateStoredModel(Z,X),this.refreshHandlerAndUi(z,X,"handler",!1,Y).then(()=>{$({...Y,source:"columnFilter"})})},onModelAsStringChange:()=>{z.dispatchColEvent("filterChanged","filterChanged"),this.dispatchLocalEvent({type:"filterModelAsStringChanged",column:z})},filterParams:J})}onColumnsChanged(){let z=[],{colModel:J,filterManager:Q,groupFilter:Z}=this.beans;this.allColumnFilters.forEach((X,Y)=>{let q;if(X.column.isPrimary())q=J.getColDefCol(Y);else q=J.getCol(Y);if(q&&q===X.column)return;z.push(X.column),this.disposeFilterWrapper(X,"columnChanged"),this.disposeColumnListener(Y)});let $=Z&&z.every((X)=>Z.isGroupFilter(X));if(z.length>0&&!$)Q?.onFilterChanged({columns:z,source:"api"})}isFilterAllowed(z){if(!z.isFilterAllowed())return!1;let Q=this.beans.groupFilter;if(Q?.isGroupFilter(z))return Q.isFilterAllowed(z);return!0}getFloatingFilterCompDetails(z,J){let{userCompFactory:Q,frameworkOverrides:Z,selectableFilter:$,gos:X}=this.beans,Y=(B)=>{this.getOrCreateFilterUi(z)?.then((K)=>{B(zz(K))})},q=z.getColDef(),G=$?.isSelectable(q)?$.getFilterDef(z,q):q,U=D5(Z,G,()=>this.getDefaultFloatingFilter(z))??"agReadOnlyFloatingFilter",_=X.get("enableFilterHandlers"),H=JQ(Q,G,this.createFilterCompParams(z,_,"init",!0)),W=C(X,{column:z,filterParams:H,currentParentModel:()=>this.getCurrentFloatingFilterParentModel(z),parentFilterInstance:Y,showParentFilter:J});if(_){let B=W,E=z.getColId(),K=this.filterChangedCallbackFactory(z);B.onUiChange=(F)=>this.floatingFilterUiChanged(z,F),B.model=f0(this.model,E),B.onModelChange=(F,L)=>{this.updateStoredModel(E,F),this.refreshHandlerAndUi(z,F,"floating",!0,L).then(()=>{K({...L,source:"columnFilter"})})},B.getHandler=()=>this.getHandler(z,!0),B.source="init"}return bZ(Q,q,W,U)}getCurrentFloatingFilterParentModel(z){return this.getModelFromFilterWrapper(this.cachedFilter(z)??{column:z})}destroyFilterUi(z,J,Q,Z){if(z.isHandler){let X=J.getColId();delete this.initialModel[X],this.state.delete(X);let Y=z.filterUi,q=this.createFilterUiForHandler(Q,Z);z.filterUi=q;let G=this.eventSvc;if(Y?.created)Y.promise.then((U)=>{this.destroyBean(U),G.dispatchEvent({type:"filterDestroyed",source:"paramsUpdated",column:J})});else G.dispatchEvent({type:"filterHandlerDestroyed",source:"paramsUpdated",column:J})}else this.destroyFilter(J,"paramsUpdated")}destroyFilter(z,J="api"){let Q=z.getColId(),Z=this.allColumnFilters.get(Q);if(this.disposeColumnListener(Q),delete this.initialModel[Q],Z)this.disposeFilterWrapper(Z,J).then(($)=>{if($&&this.isAlive())this.beans.filterManager?.onFilterChanged({columns:[z],source:"api"})})}disposeColumnListener(z){let J=this.allColumnListeners.get(z);if(J)this.allColumnListeners.delete(z),J()}disposeFilterWrapper(z,J){let Q=!1,{column:Z,isHandler:$,filterUi:X}=z,Y=Z.getColId();if($)Q=this.isHandlerActive(Z),this.destroyBean(z.handler),delete this.model[Y],this.state.delete(Y);let q=()=>{this.setColFilterActive(Z,!1,"filterDestroyed"),this.allColumnFilters.delete(Y),this.eventSvc.dispatchEvent({type:"filterDestroyed",source:J,column:Z})};if(X)if(X.created)return X.promise.then((G)=>{return Q=$?Q:!!G?.isFilterActive(),this.destroyBean(G),q(),Q});else q();return N.resolve(Q)}filterChangedCallbackFactory(z){return(J)=>{this.callOnFilterChangedOutsideRenderCycle({additionalEventAttributes:J,columns:[z],column:z,source:J?.source??"columnFilter"})}}filterParamsChanged(z,J="api"){let Q=this.allColumnFilters.get(z);if(!Q)return;let Z=this.beans,$=Q.column,X=$.getColDef(),Y=$.isFilterAllowed(),q=this.getDefaultFilter($),G=Z.selectableFilter,U=G?.isSelectable(X)?G.getFilterDef($,X):X,_=Y?this.createHandlerFunc($,U,this.getDefaultFilter($)):void 0,H=!!_,W=Q.isHandler;if(W!=H){this.destroyFilter($,"paramsUpdated");return}let{compDetails:B,createFilterUi:E}=(Y?this.createFilterComp($,U,q,(F)=>F,H,"colDef"):null)??{compDetails:null,createFilterUi:null},K=B?.params??JQ(Z.userCompFactory,U,this.createFilterCompParams($,H,"colDef"));if(W){let F=_?.handlerNameOrCallback??_?.filterHandler,L=f0(this.model,z);if(Q.handlerGenerator!=F){let D=Q.handler,{handler:M,handlerParams:f}=this.createHandlerFromFunc($,_.filterHandler,K);if(Q.handler=M,Q.handlerParams=f,Q.handlerGenerator=F,delete this.model[z],M.init?.({...f,source:"init",model:null}),this.destroyBean(D),L!=null)this.beans.filterManager?.onFilterChanged({columns:[$],source:J})}else{let D=this.createHandlerParams($,B?.params);Q.handlerParams=D,Q.handler.refresh?.({...D,source:"colDef",model:L})}}if(this.areFilterCompsDifferent(Q.filterUi?.compDetails??null,B)||!Q.filterUi||!B){this.destroyFilterUi(Q,$,B,E);return}Q.filterUi.filterParams=K,Hz(Q,W)?.then((F)=>{if((F?.refresh?F.refresh(K):!0)===!1)this.destroyFilterUi(Q,$,B,E);else this.dispatchLocalEvent({type:"filterParamsChanged",column:$,params:K})})}refreshHandlerAndUi(z,J,Q,Z,$){let X=this.cachedFilter(z);if(!X){if(Z)this.getOrCreateFilterWrapper(z,!0);return N.resolve()}if(!X.isHandler)return N.resolve();let{filterUi:Y,handler:q,handlerParams:G}=X;return VJ(()=>{if(Y){let{created:U,filterParams:_}=Y;if(U)return Y.promise.then((H)=>{return H?{filter:H,filterParams:_}:void 0});else Y.refreshed=!0}return N.resolve(void 0)},q,G,J,this.state.get(z.getColId())??{model:J},Q,$)}setColumnFilterWrapper(z,J){let Q=z.getColId();this.allColumnFilters.set(Q,J),this.allColumnListeners.set(Q,this.addManagedListeners(z,{colDefChanged:()=>this.filterParamsChanged(Q)})[0])}areFilterCompsDifferent(z,J){if(!J||!z)return!0;let{componentClass:Q}=z,{componentClass:Z}=J;return!(Q===Z||Q?.render&&Z?.render&&Q.render===Z.render)}hasFloatingFilters(){return this.beans.colModel.getCols().some((J)=>J.getColDef().floatingFilter)}getFilterInstance(z){let J=this.beans.colModel.getColDefColOrCol(z);if(!J)return Promise.resolve(void 0);let Q=this.getOrCreateFilterUi(J);if(!Q)return Promise.resolve(null);return new Promise((Z)=>{Q.then(($)=>{Z(zz($))})})}processFilterModelUpdateQueue(){this.modelUpdates.forEach(({model:z,source:J})=>this.setModel(z,J)),this.modelUpdates=[],this.columnModelUpdates.forEach(({key:z,model:J,resolve:Q})=>{this.setModelForColumn(z,J).then(()=>Q())}),this.columnModelUpdates=[]}getModelForColumn(z,J){if(J){let{state:Z,model:$}=this,X=z.getColId(),Y=Z.get(X);if(Y)return Y.model??null;return f0($,X)}let Q=this.cachedFilter(z);return Q?this.getModelFromFilterWrapper(Q):null}setModelForColumn(z,J){if(this.beans.dataTypeSvc?.isPendingInference){let Q=()=>{},Z=new Promise(($)=>{Q=$});return this.columnModelUpdates.push({key:z,model:J,resolve:Q}),Z}return new Promise((Q)=>{this.setModelForColumnLegacy(z,J).then((Z)=>Q(Z))})}getStateForColumn(z){return this.state.get(z)??{model:f0(this.model,z)}}setModelForColumnLegacy(z,J){let Q=this.beans.colModel.getColDefCol(z),Z=Q?this.getOrCreateFilterWrapper(Q,!0):null;return Z?this.setModelOnFilterWrapper(Z,J):N.resolve()}setColDefPropsForDataType(z,J,Q){let Z=z.filter,$=Z===!0?this.getDefaultFilterFromDataType(()=>J.baseDataType):Z;if(typeof $!=="string")return;let X,Y,q=this.beans,{filterParams:G,filterValueGetter:U}=z;if($==="agMultiColumnFilter")({filterParams:X,filterValueGetter:Y}=q.multiFilter?.getParamsForDataType(G,U,J,Q)??{});else({filterParams:X,filterValueGetter:Y}=F5($,G,U,J,Q,q,this.getLocaleTextFunc()));if(z.filterParams=X,Y)z.filterValueGetter=Y}setColFilterActive(z,J,Q,Z){if(z.filterActive!==J)z.filterActive=J,z.dispatchColEvent("filterActiveChanged",Q);z.dispatchColEvent("filterChanged",Q,Z)}setModelOnFilterWrapper(z,J,Q){return new N((Z)=>{if(z.isHandler){let X=z.column,Y=X.getColId(),q=this.model[Y];if(this.updateStoredModel(Y,J),Q&&J===q){Z();return}this.refreshHandlerAndUi(X,J,"api").then(()=>Z());return}let $=Hz(z);if($){$.then((X)=>{if(typeof X?.setModel!=="function"){V(65),Z();return}(X.setModel(J)||N.resolve()).then(()=>Z())});return}Z()})}updateStoredModel(z,J){if(P(J))this.model[z]=J;else delete this.model[z];let Q=this.state.get(z),Z={model:J,state:Q?.state};this.state.set(z,Z)}filterModified(z,J){this.getOrCreateFilterUi(z)?.then((Q)=>{this.eventSvc.dispatchEvent({type:"filterModified",column:z,filterInstance:Q,...J})})}filterUiChanged(z,J){if(this.gos.get("enableFilterHandlers"))this.eventSvc.dispatchEvent({type:"filterUiChanged",column:z,...J})}floatingFilterUiChanged(z,J){if(this.gos.get("enableFilterHandlers"))this.eventSvc.dispatchEvent({type:"floatingFilterUiChanged",column:z,...J})}updateModel(z,J,Q){let Z=z.getColId(),$=this.cachedFilter(z),X=()=>$?.filterUi;d6({action:J,filterParams:$?.filterUi?.filterParams,getFilterUi:X,getModel:()=>f0(this.model,Z),getState:()=>this.state.get(Z),updateState:(Y)=>this.updateState(z,Y),updateModel:(Y)=>X()?.filterParams?.onModelChange(Y,{...Q,fromAction:J}),processModelToApply:$?.isHandler?$.handler.processModelToApply?.bind($.handler):void 0})}updateAllModels(z,J){let Q=[];if(this.allColumnFilters.forEach((Z,$)=>{let X=this.beans.colModel.getColDefCol($);if(X)d6({action:z,filterParams:Z.filterUi?.filterParams,getFilterUi:()=>Z.filterUi,getModel:()=>f0(this.model,$),getState:()=>this.state.get($),updateState:(Y)=>this.updateState(X,Y),updateModel:(Y)=>{this.updateStoredModel($,Y),this.dispatchLocalEvent({type:"filterAction",column:X,action:z}),Q.push(this.refreshHandlerAndUi(X,Y,"ui"))},processModelToApply:Z?.isHandler?Z.handler.processModelToApply?.bind(Z.handler):void 0})}),Q.length)N.all(Q).then(()=>{this.callOnFilterChangedOutsideRenderCycle({source:"columnFilter",additionalEventAttributes:J,columns:[]})})}updateOrRefreshFilterUi(z){let J=z.getColId();jX(()=>this.cachedFilter(z)?.filterUi,()=>f0(this.model,J),()=>this.state.get(J))}updateState(z,J){this.state.set(z.getColId(),J),this.dispatchLocalEvent({type:"filterStateChanged",column:z,state:J})}canApplyAll(){let{state:z,model:J,activeFilterComps:Q}=this;for(let $ of Q)if($.source==="COLUMN_MENU")return!1;let Z=!1;for(let $ of z.keys()){let X=z.get($);if(X.valid===!1)return!1;if((X.model??null)!==f0(J,$))Z=!0}return Z}hasUnappliedModel(z){let{model:J,state:Q}=this;return(Q.get(z)?.model??null)!==f0(J,z)}setGlobalButtons(z){this.isGlobalButtons=z,this.dispatchLocalEvent({type:"filterGlobalButtons",isGlobal:z})}shouldKeepStateOnDetach(z,J){if(J==="newFiltersToolPanel")return!0;let Q=this.beans.filterPanelSvc;if(Q?.isActive)return!!Q.getState(z.getColId());return!1}onPivotModeChanged(z){let{colModel:J,pivotColsSvc:Q}=this.beans,Z=!!u4(this.gos),$=z.currentValue,X=$?this.activeColumnFilters:this.activeAggregateFilters,Y=$?this.activeAggregateFilters:this.activeColumnFilters,q=[];for(let G of X){let U=J.getColById(G.colId),_=$&&!!Q?.columns.length;if(U&&$===v8(U,$,_,Z))Y.push(G),q.push(G)}P2(X,q)}destroy(){super.destroy(),this.allColumnFilters.forEach((z)=>this.disposeFilterWrapper(z,"gridDestroyed")),this.allColumnListeners.clear(),this.state.clear(),this.activeFilterComps.clear()}};function pD(z){return!!z.filterManager?.isAnyFilterPresent()}function nD(z,J="api"){z.filterManager?.onFilterChanged({source:J})}var dD=class extends S{constructor(){super(...arguments);this.beanName="filterManager",this.advFilterModelUpdateQueue=[]}wireBeans(z){this.quickFilter=z.quickFilter,this.advancedFilter=z.advancedFilter,this.colFilter=z.colFilter}postConstruct(){let z=this.refreshFiltersForAggregations.bind(this),J=this.updateAdvFilterColumns.bind(this);if(this.addManagedEventListeners({columnValueChanged:z,columnPivotChanged:z,columnPivotModeChanged:z,newColumnsLoaded:J,columnVisible:J,advancedFilterEnabledChanged:({enabled:Z})=>this.onAdvFilterEnabledChanged(Z),dataTypesInferred:this.processFilterModelUpdateQueue.bind(this)}),this.externalFilterPresent=this.isExternalFilterPresentCallback(),this.addManagedPropertyListeners(["isExternalFilterPresent","doesExternalFilterPass"],()=>{this.onFilterChanged({source:"api"})}),this.updateAggFiltering(),this.addManagedPropertyListener("groupAggFiltering",()=>{this.updateAggFiltering(),this.onFilterChanged()}),this.quickFilter)this.addManagedListeners(this.quickFilter,{quickFilterChanged:()=>this.onFilterChanged({source:"quickFilter"})});let{gos:Q}=this;this.alwaysPassFilter=Q.get("alwaysPassFilter"),this.addManagedPropertyListener("alwaysPassFilter",()=>{this.alwaysPassFilter=Q.get("alwaysPassFilter"),this.onFilterChanged({source:"api"})})}isExternalFilterPresentCallback(){let z=this.gos.getCallback("isExternalFilterPresent");return typeof z==="function"&&z({})}doesExternalFilterPass(z){let J=this.gos.get("doesExternalFilterPass");return typeof J==="function"&&J(z)}setFilterState(z,J,Q="api"){if(this.isAdvFilterEnabled())return;this.colFilter?.setState(z,J,Q)}setFilterModel(z,J="api",Q){if(this.isAdvFilterEnabled()){if(!Q)this.warnAdvFilters();return}this.colFilter?.setModel(z,J)}getFilterModel(){return this.colFilter?.getModel()??{}}getFilterState(){return this.colFilter?.getState()}isColumnFilterPresent(){return!!this.colFilter?.isFilterPresent()}isAggregateFilterPresent(){return!!this.colFilter?.isAggFilterPresent()}isChildFilterPresent(){return this.isColumnFilterPresent()||this.isQuickFilterPresent()||this.externalFilterPresent||this.isAdvFilterPresent()}isAnyFilterPresent(){return this.isChildFilterPresent()||this.isAggregateFilterPresent()}isAdvFilterPresent(){return this.isAdvFilterEnabled()&&this.advancedFilter.isFilterPresent()}onAdvFilterEnabledChanged(z){if(z){if(this.colFilter?.disableFilters())this.onFilterChanged({source:"advancedFilter"})}else if(this.advancedFilter?.isFilterPresent())this.advancedFilter.setModel(null),this.onFilterChanged({source:"advancedFilter"})}isAdvFilterEnabled(){return!!this.advancedFilter?.isEnabled()}isAdvFilterHeaderActive(){return this.isAdvFilterEnabled()&&this.advancedFilter.isHeaderActive()}refreshFiltersForAggregations(){if(u4(this.gos)&&this.isAnyFilterPresent())this.onFilterChanged()}onFilterChanged(z={}){let{source:J,additionalEventAttributes:Q,columns:Z=[]}=z;this.externalFilterPresent=this.isExternalFilterPresentCallback(),(this.colFilter?this.colFilter.updateBeforeFilterChanged(z):N.resolve()).then(()=>{let $={source:J,type:"filterChanged",columns:Z};if(Q)D0($,Q);this.eventSvc.dispatchEvent($),this.colFilter?.updateAfterFilterChanged()})}isSuppressFlashingCellsBecauseFiltering(){return!!this.colFilter?.isSuppressFlashingCellsBecauseFiltering()}isQuickFilterPresent(){return!!this.quickFilter?.isFilterPresent()}updateAggFiltering(){this.aggFiltering=!!u4(this.gos)}isAggregateQuickFilterPresent(){return this.isQuickFilterPresent()&&this.shouldApplyQuickFilterAfterAgg()}isNonAggregateQuickFilterPresent(){return this.isQuickFilterPresent()&&!this.shouldApplyQuickFilterAfterAgg()}shouldApplyQuickFilterAfterAgg(){return(this.aggFiltering||this.beans.colModel.pivotMode)&&!this.gos.get("applyQuickFilterBeforePivotOrAgg")}doesRowPassAggregateFilters(z){let{rowNode:J}=z;if(this.alwaysPassFilter?.(J))return!0;if(this.isAggregateQuickFilterPresent()&&!this.quickFilter.doesRowPass(J))return!1;if(this.isAggregateFilterPresent()&&!this.colFilter.doFiltersPass(J,z.colIdToSkip,!0))return!1;return!0}doesRowPassFilter(z,J){if(this.alwaysPassFilter?.(z))return!0;if(this.isNonAggregateQuickFilterPresent()&&!this.quickFilter.doesRowPass(z))return!1;if(this.externalFilterPresent&&!this.doesExternalFilterPass(z))return!1;if(this.isColumnFilterPresent()&&!this.colFilter.doFiltersPass(z,J))return!1;if(this.isAdvFilterPresent()&&!this.advancedFilter.doesFilterPass(z))return!1;return!0}isFilterAllowed(z){if(this.isAdvFilterEnabled())return!1;return!!this.colFilter?.isFilterAllowed(z)}getAdvFilterModel(){return this.isAdvFilterEnabled()?this.advancedFilter.getModel():null}setAdvFilterModel(z,J="api"){if(!this.isAdvFilterEnabled())return;if(this.beans.dataTypeSvc?.isPendingInference){this.advFilterModelUpdateQueue.push(z);return}this.advancedFilter.setModel(z??null),this.onFilterChanged({source:J})}toggleAdvFilterBuilder(z,J){if(!this.isAdvFilterEnabled())return;this.advancedFilter.getCtrl().toggleFilterBuilder({source:J,force:z})}updateAdvFilterColumns(){if(!this.isAdvFilterEnabled())return;if(this.advancedFilter.updateValidity())this.onFilterChanged({source:"advancedFilter"})}hasFloatingFilters(){if(this.isAdvFilterEnabled())return!1;return!!this.colFilter?.hasFloatingFilters()}getColumnFilterInstance(z){if(this.isAdvFilterEnabled())return this.warnAdvFilters(),Promise.resolve(void 0);return this.colFilter?.getFilterInstance(z)??Promise.resolve(void 0)}warnAdvFilters(){V(68)}setupAdvFilterHeaderComp(z){this.advancedFilter?.getCtrl().setupHeaderComp(z)}getHeaderRowCount(){return this.isAdvFilterHeaderActive()?1:0}getHeaderHeight(){return this.isAdvFilterHeaderActive()?this.advancedFilter.getCtrl().getHeaderHeight():0}processFilterModelUpdateQueue(){for(let z of this.advFilterModelUpdateQueue)this.setAdvFilterModel(z);this.advFilterModelUpdateQueue=[]}setColumnFilterModel(z,J){if(this.isAdvFilterEnabled())return this.warnAdvFilters(),Promise.resolve();return this.colFilter?.setModelForColumn(z,J)??Promise.resolve()}};function rD(z){return{tag:"div",cls:z}}var M5=class extends x{constructor(z){let{className:J="ag-filter-apply-panel"}=z??{};super(rD(J));this.listeners=[],this.validationMessage=null,this.className=J}updateButtons(z,J){let Q=this.buttons;if(this.buttons=z,Q===z)return;let Z=this.getGui();J0(Z);let $;this.destroyListeners();let X=document.createDocumentFragment(),Y=this.className,q=({type:U,label:_})=>{let H=(L)=>{this.dispatchLocalEvent({type:U,event:L})};if(!["apply","clear","reset","cancel"].includes(U))V(75);let W=U==="apply",E=z0({tag:"button",attrs:{type:W&&J?"submit":"button"},ref:`${U}FilterButton`,cls:`ag-button ag-standard-button ${Y}-button${W?" "+Y+"-apply-button":""}`,children:_});if(this.activateTabIndex([E]),W)$=E;let K=(L)=>{if(L.key===k.ENTER)L.preventDefault(),H(L)},F=this.listeners;E.addEventListener("click",H),F.push(()=>E.removeEventListener("click",H)),E.addEventListener("keydown",K),F.push(()=>E.removeEventListener("keydown",K)),X.append(E)};for(let U of z)q(U);this.eApply=$;let G=this.validationTooltipFeature;if($&&!G)this.validationTooltipFeature=this.createOptionalManagedBean(this.beans.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.eApply,getLocation:()=>"advancedFilter",getTooltipShowDelayOverride:()=>1000}));else if(!$&&G)this.validationTooltipFeature=this.destroyBean(G);Z.append(X)}getApplyButton(){return this.eApply}updateValidity(z,J=null){let Q=this.eApply;if(!Q)return;L2(Q,!z),this.validationMessage=J,this.validationTooltipFeature?.setTooltipAndRefresh(this.validationMessage)}destroyListeners(){for(let z of this.listeners)z();this.listeners=[]}destroy(){this.destroyListeners(),super.destroy()}};var k5=class extends x{constructor(z,J,Q,Z,$,X){super();this.column=z,this.wrapper=J,this.eventParent=Q,this.updateModel=Z,this.isGlobalButtons=$,this.enableGlobalButtonCheck=X,this.hidePopup=null,this.applyActive=!1}postConstruct(){let{comp:z,params:J}=this.wrapper,Q=J,Z=Q.useForm,$=Z?"form":"div";if(this.setTemplate({tag:$,cls:"ag-filter-wrapper"}),Z)this.addManagedElementListeners(this.getGui(),{submit:(X)=>{X?.preventDefault()},keydown:this.handleKeyDown.bind(this)});this.appendChild(z.getGui()),this.params=Q,this.resetButtonsPanel(Q),this.addManagedListeners(this.eventParent,{filterParamsChanged:({column:X,params:Y})=>{if(X===this.column)this.resetButtonsPanel(Y,this.params)},filterStateChanged:({column:X,state:Y})=>{if(X===this.column)this.eButtons?.updateValidity(Y.valid!==!1)},filterAction:({column:X,action:Y,event:q})=>{if(X===this.column)this.afterAction(Y,q)},...this.enableGlobalButtonCheck?{filterGlobalButtons:({isGlobal:X})=>{if(X!==this.isGlobalButtons){this.isGlobalButtons=X;let Y=this.params;this.resetButtonsPanel(Y,Y,!0)}}}:void 0})}afterGuiAttached(z){if(z)this.hidePopup=z.hidePopup}resetButtonsPanel(z,J,Q){let{buttons:Z,readOnly:$}=J??{},{buttons:X,readOnly:Y,useForm:q}=z;if(!Q&&$===Y&&s6(Z,X))return;let G=X&&X.length>0&&!z.readOnly&&!this.isGlobalButtons,U=this.eButtons;if(G){let _=X.map((H)=>{let W=`${H}Filter`;return{type:H,label:k4(this,W)}});if(this.applyActive=d1(this.params),!U){U=this.createBean(new M5),this.appendChild(U.getGui());let H=this.column,W=(B)=>({event:E})=>{this.updateModel(H,B,{fromButtons:!0}),this.afterAction(B,E)};U?.addManagedListeners(U,{apply:W("apply"),clear:W("clear"),reset:W("reset"),cancel:W("cancel")}),this.eButtons=U}U.updateButtons(_,q)}else if(this.applyActive=!1,U)R0(U.getGui()),this.eButtons=this.destroyBean(U)}close(z){let J=this.hidePopup;if(!J)return;let Q=z,Z=Q?.key,$;if(Z===k.ENTER||Z===k.SPACE)$={keyboardEvent:Q};J($),this.hidePopup=null}afterAction(z,J){let{params:Q,applyActive:Z}=this,$=Q?.closeOnApply;switch(z){case"apply":{if(J?.preventDefault(),$&&Z)this.close(J);break}case"reset":{if($&&Z)this.close();break}case"cancel":{if($)this.close(J);break}}}handleKeyDown(z){if(!z.defaultPrevented&&z.key===k.ENTER&&this.applyActive)this.updateModel(this.column,"apply",{fromButtons:!0}),this.afterAction("apply",z)}destroy(){this.hidePopup=null,this.eButtons=this.destroyBean(this.eButtons)}},tD=":where(.ag-menu:not(.ag-tabs) .ag-filter)>:not(.ag-filter-wrapper){min-width:180px}",sD={tag:"div",cls:"ag-filter"},f5=class extends x{constructor(z,J,Q){super(sD);this.column=z,this.source=J,this.enableGlobalButtonCheck=Q,this.wrapper=null}postConstruct(){this.beans.colFilter?.activeFilterComps.add(this),this.createFilter(!0),this.addManagedEventListeners({filterDestroyed:this.onFilterDestroyed.bind(this)})}hasFilter(){return this.wrapper!=null}getFilter(){return this.wrapper?.then((z)=>z.comp)??null}afterInit(){return this.wrapper?.then(()=>{})??N.resolve()}afterGuiAttached(z){this.afterGuiAttachedParams=z,this.wrapper?.then((J)=>{this.comp?.afterGuiAttached(z),J?.comp?.afterGuiAttached?.(z)})}afterGuiDetached(){this.wrapper?.then((z)=>{z?.comp?.afterGuiDetached?.()})}createFilter(z){let{column:J,source:Q,beans:{colFilter:Z}}=this,$=Z.getFilterUiForDisplay(J)??null;this.wrapper=$,$?.then((X)=>{if(!X)return;let{isHandler:Y,comp:q}=X,G;if(Y){let U=!!this.enableGlobalButtonCheck,_=this.createBean(new k5(J,X,Z,Z.updateModel.bind(Z),U&&Z.isGlobalButtons,U));this.comp=_,G=_.getGui()}else if(this.registerCSS(tD),G=q.getGui(),!P(G))V(69,{guiFromFilter:G});if(this.appendChild(G),z)this.eventSvc.dispatchEvent({type:"filterOpened",column:J,source:Q,eGui:this.getGui()});else q.afterGuiAttached?.(this.afterGuiAttachedParams)})}onFilterDestroyed(z){let{source:J,column:Q}=z;if((J==="api"||J==="paramsUpdated")&&Q.getId()===this.column.getId()&&this.beans.colModel.getColDefCol(this.column))J0(this.getGui()),this.comp=this.destroyBean(this.comp),this.createFilter()}destroy(){this.beans.colFilter?.activeFilterComps.delete(this),this.eventSvc.dispatchEvent({type:"filterClosed",column:this.column}),this.wrapper=null,this.comp=this.destroyBean(this.comp),this.afterGuiAttachedParams=void 0,super.destroy()}},lD=class extends S{constructor(){super(...arguments);this.beanName="filterMenuFactory"}wireBeans(z){this.popupSvc=z.popupSvc}hideActiveMenu(){this.hidePopup?.()}showMenuAfterMouseEvent(z,J,Q,Z){if(z&&!z.isColumn)return;this.showPopup(z,($)=>{this.popupSvc?.positionPopupUnderMouseEvent({additionalParams:{column:z},type:Q,mouseEvent:J,ePopup:$})},Q,J.target,F0(this.gos),Z)}showMenuAfterButtonClick(z,J,Q,Z){if(z&&!z.isColumn)return;let $=-1,X="left",Y=F0(this.gos);if(!Y&&this.gos.get("enableRtl"))$=1,X="right";let q=Y?void 0:4*$,G=Y?void 0:4;this.showPopup(z,(U)=>{this.popupSvc?.positionPopupByComponent({type:Q,eventSource:J,ePopup:U,nudgeX:q,nudgeY:G,alignSide:X,keepWithinBounds:!0,position:"under",additionalParams:{column:z}})},Q,J,Y,Z)}showPopup(z,J,Q,Z,$,X){let Y=z?this.createBean(new f5(z,"COLUMN_MENU")):void 0;if(this.activeMenu=Y,!Y?.hasFilter()||!z){r(57);return}let q=z0({tag:"div",cls:`ag-menu${!$?" ag-filter-menu":""}`,role:"presentation"});[this.tabListener]=this.addManagedElementListeners(q,{keydown:(K)=>this.trapFocusWithin(K,q)}),q.appendChild(Y?.getGui());let G,U=()=>Y?.afterGuiDetached(),_=AZ(this.gos)?Z??this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody:void 0,H=(K)=>{O2(z,!1,"contextMenu");let F=K instanceof KeyboardEvent;if(this.tabListener)this.tabListener=this.tabListener();if(F&&Z&&B0(Z))_J(Z)?.focus({preventScroll:!0});U(),this.destroyBean(this.activeMenu),this.dispatchVisibleChangedEvent(!1,Q,z),X?.()},W=this.getLocaleTextFunc(),B=$&&Q!=="columnFilter"?W("ariaLabelColumnMenu","Column Menu"):W("ariaLabelColumnFilter","Column Filter"),E=this.popupSvc?.addPopup({modal:!0,eChild:q,closeOnEsc:!0,closedCallback:H,positionCallback:()=>J(q),anchorToElement:_,ariaLabel:B});if(E)this.hidePopup=G=E.hideFunc;Y.afterInit().then(()=>{J(q),Y.afterGuiAttached({container:Q,hidePopup:G})}),O2(z,!0,"contextMenu"),this.dispatchVisibleChangedEvent(!0,Q,z)}trapFocusWithin(z,J){if(z.key!==k.TAB||z.defaultPrevented||O0(this.beans,J,!1,z.shiftKey))return;z.preventDefault(),E0(J,z.shiftKey)}dispatchVisibleChangedEvent(z,J,Q){this.eventSvc.dispatchEvent({type:"columnMenuVisibleChanged",visible:z,switchingTab:!1,key:J,column:Q??null,columnGroup:null})}isMenuEnabled(z){return z.isFilterAllowed()&&(z.colDef.menuTabs??["filterMenuTab"]).includes("filterMenuTab")}showMenuAfterContextMenuEvent(){}destroy(){this.destroyBean(this.activeMenu),super.destroy()}},aD=class extends S{constructor(){super(...arguments);this.beanName="filterValueSvc"}getValue(z,J,Q){let Z=z.colDef,$=this.beans,X=Q??$.selectableFilter?.getFilterValueGetter(z.colId)??Z.filterValueGetter,Y=$.valueSvc;if(X){let G=typeof X==="function",U=$.expressionSvc;if(!G&&!U)return;let _=$.colModel,H={api:$.gridApi,context:$.gridOptions.context,data:J.data,node:J,column:z,colDef:Z,getValue:(W)=>{let B=_.getColDefColOrCol(W);return B?Y.getValue(B,J,"data"):null}};return G?X(H):U.evaluate(X,H)}let q=Y.getValue(z,J,"data");if(z.colDef.allowFormula){let G=$.formula;if(G?.isFormula(q))return G.resolveValue(z,J)}return q}};var oD=class extends FJ{constructor(z){super(z,"ag-radio-button","radio")}isSelected(){return this.eInput.checked}toggle(){if(this.eInput.disabled)return;if(!this.isSelected())this.setValue(!0)}addInputListeners(){super.addInputListeners(),this.addManagedEventListeners({checkboxChanged:this.onChange.bind(this)})}onChange(z){let J=this.eInput;if(z.selected&&z.name&&J.name&&J.name===z.name&&z.id&&J.id!==z.id)this.setValue(!1,!0)}};var S5=class{constructor(){this.customFilterOptions={}}init(z,J){this.filterOptions=z.filterOptions??J,this.mapCustomOptions(),this.defaultOption=this.getDefaultItem(z.defaultOption)}refresh(z,J){let Q=z.filterOptions??J;if(this.filterOptions!==Q)this.filterOptions=Q,this.customFilterOptions={},this.mapCustomOptions();this.defaultOption=this.getDefaultItem(z.defaultOption)}mapCustomOptions(){let{filterOptions:z}=this;if(!z)return;for(let J of z){if(typeof J==="string")continue;let Q=[["displayKey"],["displayName"],["predicate","test"]],Z=($)=>{if(!$.some((X)=>J[X]!=null))return V(72,{keys:$}),!1;return!0};if(!Q.every(Z)){this.filterOptions=z.filter(($)=>$===J)||[];continue}this.customFilterOptions[J.displayKey]=J}}getDefaultItem(z){let{filterOptions:J}=this;if(z)return z;else if(J.length>=1){let Q=J[0];if(typeof Q==="string")return Q;else if(Q.displayKey)return Q.displayKey;else V(73)}else V(74);return}getCustomOption(z){return this.customFilterOptions[z]}};function F2(z,J,Q){return Q==null?z.splice(J):z.splice(J,Q)}function r6(z){return z==null||typeof z==="string"&&z.trim().length===0}function eD(z){return z==="AND"||z==="OR"?z:"AND"}function zM(z,J,Q){if(z==null)return;let{predicate:Z}=z;if(Z!=null&&!J.some(($)=>$==null))return Z(J,Q)}function JM(z,J){let Q=z.length;if(Q>J)z.splice(J),V(78),Q=J;return Q}var QM=new Set(["empty","notBlank","blank","today","yesterday","tomorrow","thisWeek","lastWeek","nextWeek","thisMonth","lastMonth","nextMonth","thisQuarter","lastQuarter","nextQuarter","thisYear","lastYear","nextYear","yearToDate","last7Days","last30Days","last90Days","last6Months","last12Months","last24Months"]);function J1(z,J){let Q=J.getCustomOption(z);if(Q){let{numberOfInputs:Z}=Q;return Z!=null?Z:1}if(z&&QM.has(z))return 0;else if(z==="inRange")return 2;return 1}var V5=class extends $1{constructor(z,J,Q){super(z,"simple-filter");this.mapValuesFromModel=J,this.defaultOptions=Q,this.eTypes=[],this.eJoinPanels=[],this.eJoinAnds=[],this.eJoinOrs=[],this.eConditionBodies=[],this.listener=()=>this.onUiChanged(),this.lastUiCompletePosition=null,this.joinOperatorId=0}setParams(z){super.setParams(z);let J=new S5;this.optionsFactory=J,J.init(z,this.defaultOptions),this.commonUpdateSimpleParams(z),this.createOption(),this.createMissingConditionsAndOperators()}updateParams(z,J){this.optionsFactory.refresh(z,this.defaultOptions),super.updateParams(z,J),this.commonUpdateSimpleParams(z)}commonUpdateSimpleParams(z){this.setNumConditions(z),this.defaultJoinOperator=eD(z.defaultJoinOperator),this.filterPlaceholder=z.filterPlaceholder,this.createFilterListOptions(),f4(this.getGui(),"tabindex",this.isReadOnly()?"-1":null)}onFloatingFilterChanged(z,J){this.setTypeFromFloatingFilter(z),this.setValueFromFloatingFilter(J),this.onUiChanged("immediately",!0)}setTypeFromFloatingFilter(z){this.eTypes.forEach((J,Q)=>{let Z=Q===0?z:this.optionsFactory.defaultOption;J.setValue(Z,!0)})}getModelFromUi(){let z=this.getUiCompleteConditions();if(z.length===0)return null;if(this.maxNumConditions>1&&z.length>1)return{filterType:this.filterType,operator:this.getJoinOperator(),conditions:z};return z[0]}getConditionTypes(){return this.eTypes.map((z)=>z.getValue())}getConditionType(z){return this.eTypes[z].getValue()}getJoinOperator(){let{eJoinOrs:z,defaultJoinOperator:J}=this;return z.length===0?J:z[0].getValue()===!0?"OR":"AND"}areNonNullModelsEqual(z,J){let Q=!z.operator,Z=!J.operator;if(!Q&&Z||Q&&!Z)return!1;let X;if(Q){let Y=z,q=J;X=this.areSimpleModelsEqual(Y,q)}else{let Y=z,q=J;X=Y.operator===q.operator&&Z0(Y.conditions,q.conditions,(G,U)=>this.areSimpleModelsEqual(G,U))}return X}setModelIntoUi(z,J){if(z==null)return this.resetUiToDefaults(J),N.resolve();if(z.operator){let Z=z,$=Z.conditions;if($==null)$=[],V(77);let X=JM($,this.maxNumConditions),Y=this.getNumConditions();if(XY)for(let G=Y;GG.setValue(!q,!0)),this.eJoinOrs.forEach((G)=>G.setValue(q,!0)),$.forEach((G,U)=>{this.eTypes[U].setValue(G.type,!0),this.setConditionIntoUi(G,U)})}else{let Z=z;if(this.getNumConditions()>1)this.removeConditionsAndOperators(1);this.eTypes[0].setValue(Z.type,!0),this.setConditionIntoUi(Z,0)}if(this.lastUiCompletePosition=this.getNumConditions()-1,this.createMissingConditionsAndOperators(),this.updateUiVisibility(),!J)this.params.onUiChange(this.getUiChangeEventParams());return N.resolve()}setNumConditions(z){let J=z.maxNumConditions??2;if(J<1)V(79),J=1;this.maxNumConditions=J;let Q=z.numAlwaysVisibleConditions??1;if(Q<1)V(80),Q=1;if(Q>J)V(81),Q=J;this.numAlwaysVisibleConditions=Q}createOption(){let z=this.getGui(),J=this.createManagedBean(new nL);this.eTypes.push(J),J.addCss("ag-filter-select"),z.appendChild(J.getGui());let Q=this.createEValue();this.eConditionBodies.push(Q),z.appendChild(Q),this.putOptionsIntoDropdown(J),this.resetType(J);let Z=this.getNumConditions()-1;this.forEachPositionInput(Z,($)=>this.resetInput($)),this.addChangedListeners(J,Z)}createJoinOperatorPanel(){let z=z0({tag:"div",cls:"ag-filter-condition"});this.eJoinPanels.push(z);let J=this.createJoinOperator(this.eJoinAnds,z,"and"),Q=this.createJoinOperator(this.eJoinOrs,z,"or");this.getGui().appendChild(z);let Z=this.eJoinPanels.length-1,$=this.joinOperatorId++;if(this.resetJoinOperatorAnd(J,Z,$),this.resetJoinOperatorOr(Q,Z,$),!this.isReadOnly())J.onValueChange(this.listener),Q.onValueChange(this.listener)}createJoinOperator(z,J,Q){let Z=this.createManagedBean(new oD);z.push(Z);let $="ag-filter-condition-operator";return Z.addCss($),Z.addCss(`${$}-${Q}`),J.appendChild(Z.getGui()),Z}createFilterListOptions(){this.filterListOptions=this.optionsFactory.filterOptions.map((z)=>typeof z==="string"?this.createBoilerplateListOption(z):this.createCustomListOption(z))}putOptionsIntoDropdown(z){let{filterListOptions:J}=this;for(let Q of J)z.addOption(Q);z.setDisabled(J.length<=1)}createBoilerplateListOption(z){return{value:z,text:this.translate(z)}}createCustomListOption(z){let{displayKey:J}=z,Q=this.optionsFactory.getCustomOption(z.displayKey);return{value:J,text:Q?this.getLocaleTextFunc()(Q.displayKey,Q.displayName):this.translate(J)}}createBodyTemplate(){return null}getAgComponents(){return[]}updateUiVisibility(){let z=this.getJoinOperator();this.updateNumConditions(),this.updateConditionStatusesAndValues(this.lastUiCompletePosition,z)}updateNumConditions(){let z=-1,J=!0;for(let Q=0;Q0)this.removeConditionsAndOperators(Z,$);this.createMissingConditionsAndOperators()}}this.lastUiCompletePosition=z}updateConditionStatusesAndValues(z,J){this.eTypes.forEach((Z,$)=>{let X=this.isConditionDisabled($,z);if(Z.setDisabled(X||this.filterListOptions.length<=1),$===1)L2(this.eJoinPanels[0],X),this.eJoinAnds[0].setDisabled(X),this.eJoinOrs[0].setDisabled(X)}),this.eConditionBodies.forEach((Z,$)=>{w(Z,this.isConditionBodyVisible($))});let Q=(J??this.getJoinOperator())==="OR";for(let Z of this.eJoinAnds)Z.setValue(!Q,!0);for(let Z of this.eJoinOrs)Z.setValue(Q,!0);this.forEachInput((Z,$,X,Y)=>{this.setElementDisplayed(Z,$=this.getNumConditions())return;let{eTypes:Q,eConditionBodies:Z,eJoinPanels:$,eJoinAnds:X,eJoinOrs:Y}=this;this.removeComponents(Q,z,J),this.removeElements(Z,z,J),this.removeEValues(z,J);let q=Math.max(z-1,0);this.removeElements($,q,J),this.removeComponents(X,q,J),this.removeComponents(Y,q,J)}removeElements(z,J,Q){let Z=F2(z,J,Q);for(let $ of Z)R0($)}removeComponents(z,J,Q){let Z=F2(z,J,Q);for(let $ of Z)R0($.getGui()),this.destroyBean($)}afterGuiAttached(z){if(super.afterGuiAttached(z),this.resetPlaceholder(),!z?.suppressFocus){let J;if(!this.isReadOnly()){let Q=this.getInputs(0)[0];if(Q instanceof V1&&this.isConditionBodyVisible(0))J=Q.getInputElement();else J=this.eTypes[0]?.getFocusableElement()}(J??this.getGui()).focus({preventScroll:!0})}}shouldKeepInvalidInputState(){return!1}afterGuiDetached(){super.afterGuiDetached();let z=this.params;if(this.beans.colFilter?.shouldKeepStateOnDetach(z.column)||this.shouldKeepInvalidInputState())return;z.onStateChange({model:z.model});let J=-1,Q=-1,Z=!1,$=this.getJoinOperator();for(let Y=this.getNumConditions()-1;Y>=0;Y--)if(this.isConditionUiComplete(Y)){if(J===-1)J=Y,Q=Y}else{let q=Y>=this.numAlwaysVisibleConditions&&!this.isConditionUiComplete(Y-1),G=Y{if(!(Z instanceof V1))return;let q=$===0&&Y>1?"inRangeStart":$===0?"filterOoo":"inRangeEnd",G=$===0&&Y>1?z("ariaFilterFromValue","Filter from value"):$===0?z("ariaFilterValue","Filter Value"):z("ariaFilterToValue","Filter to Value"),U=Q[X].getValue(),_=t9(this,J,q,U);Z.setInputPlaceholder(_),Z.setInputAriaLabel(G)})}setElementValue(z,J,Q){if(z instanceof V1)z.setValue(J!=null?String(J):null,!0)}setElementDisplayed(z,J){if(x1(z))w(z.getGui(),J)}setElementDisabled(z,J){if(x1(z))L2(z.getGui(),J)}attachElementOnChange(z,J){if(z instanceof V1)z.onValueChange(J)}forEachInput(z){this.getConditionTypes().forEach((J,Q)=>{this.forEachPositionTypeInput(Q,J,z)})}forEachPositionInput(z,J){let Q=this.getConditionType(z);this.forEachPositionTypeInput(z,Q,J)}forEachPositionTypeInput(z,J,Q){let Z=J1(J,this.optionsFactory),$=this.getInputs(z);for(let X=0;X<$.length;X++){let Y=$[X];if(Y!=null)Q(Y,X,z,Z)}}isConditionDisabled(z,J){if(this.isReadOnly())return!0;if(z===0)return!1;return z>J+1}isConditionBodyVisible(z){let J=this.getConditionType(z);return J1(J,this.optionsFactory)>0}isConditionUiComplete(z){if(z>=this.getNumConditions())return!1;if(this.getConditionType(z)==="empty")return!1;if(this.getValues(z).some((Q)=>Q==null))return!1;if(this.positionHasInvalidInputs(z))return!1;return!0}getNumConditions(){return this.eTypes.length}getUiCompleteConditions(){let z=[];for(let J=0;Jthis.resetType(J)),this.eJoinAnds.forEach((J,Q)=>this.resetJoinOperatorAnd(J,Q,this.joinOperatorId+Q)),this.eJoinOrs.forEach((J,Q)=>this.resetJoinOperatorOr(J,Q,this.joinOperatorId+Q)),this.joinOperatorId++,this.forEachInput((J)=>this.resetInput(J)),this.resetPlaceholder(),this.createMissingConditionsAndOperators(),this.lastUiCompletePosition=null,this.updateUiVisibility(),!z)this.params.onUiChange(this.getUiChangeEventParams())}resetType(z){let Q=this.getLocaleTextFunc()("ariaFilteringOperator","Filtering operator");z.setValue(this.optionsFactory.defaultOption,!0).setAriaLabel(Q).setDisabled(this.isReadOnly()||this.filterListOptions.length<=1)}resetJoinOperatorAnd(z,J,Q){this.resetJoinOperator(z,J,this.defaultJoinOperator==="AND",this.translate("andCondition"),Q)}resetJoinOperatorOr(z,J,Q){this.resetJoinOperator(z,J,this.defaultJoinOperator==="OR",this.translate("orCondition"),Q)}resetJoinOperator(z,J,Q,Z,$){this.updateJoinOperatorDisabled(z.setValue(Q,!0).setName(`ag-simple-filter-and-or-${this.getCompId()}-${$}`).setLabel(Z),J)}updateJoinOperatorsDisabled(){let z=(J,Q)=>this.updateJoinOperatorDisabled(J,Q);this.eJoinAnds.forEach(z),this.eJoinOrs.forEach(z)}updateJoinOperatorDisabled(z,J){z.setDisabled(this.isReadOnly()||J>0)}resetInput(z){this.setElementValue(z,null),this.setElementDisabled(z,this.isReadOnly())}setConditionIntoUi(z,J){let Q=this.mapValuesFromModel(z,this.optionsFactory);this.forEachInput((Z,$,X)=>{if(X!==J)return;this.setElementValue(Z,Q[$]!=null?Q[$]:null)})}setValueFromFloatingFilter(z){this.forEachInput((J,Q,Z)=>{this.setElementValue(J,Q===0&&Z===0?z:null,!0)})}addChangedListeners(z,J){if(this.isReadOnly())return;z.onValueChange(this.listener),this.forEachPositionInput(J,(Q)=>{this.attachElementOnChange(Q,this.listener)})}hasInvalidInputs(){return!1}positionHasInvalidInputs(z){return!1}isReadOnly(){return!!this.params.readOnly}};var OX=class extends S{constructor(z,J){super();this.mapValuesFromModel=z,this.defaultOptions=J}init(z){let J=z.filterParams,Q=new S5;this.optionsFactory=Q,Q.init(J,this.defaultOptions),this.filterModelFormatter=this.createManagedBean(new this.FilterModelFormatterClass(Q,J)),this.updateParams(z),this.validateModel(z)}refresh(z){if(z.source==="colDef"){let J=z.filterParams,Q=this.optionsFactory;Q.refresh(J,this.defaultOptions),this.filterModelFormatter.updateParams({optionsFactory:Q,filterParams:J}),this.updateParams(z)}this.validateModel(z)}updateParams(z){this.params=z}doesFilterPass(z){let J=z.model;if(J==null)return!0;let{operator:Q}=J,Z=[];if(Q){let Y=J;Z.push(...Y.conditions??[])}else Z.push(J);let $=Q&&Q==="OR"?"some":"every",X=this.params.getValue(z.node);return Z[$]((Y)=>this.individualConditionPasses(z,Y,X))}getModelAsString(z,J){return this.filterModelFormatter.getModelAsString(z,J)??""}validateModel(z){let{model:J,filterParams:{filterOptions:Q,maxNumConditions:Z}}=z;if(J==null)return;let X=u9(J)?J.conditions:[J],Y=Q?.map((_)=>typeof _==="string"?_:_.displayKey)??this.defaultOptions;if(!(!X||X.every((_)=>Y.find((H)=>H===_.type)!==void 0))){this.params={...z,model:null},z.onModelChange(null);return}let G=!1,U=this.filterType;if(X&&!X.every((_)=>_.filterType===U)||J.filterType!==U)X=X.map((_)=>({..._,filterType:U})),G=!0;if(typeof Z==="number"&&X&&X.length>Z)X=X.slice(0,Z),G=!0;if(G){let _=X.length>1?{...J,filterType:U,conditions:X}:{...X[0],filterType:U};this.params={...z,model:_},z.onModelChange(_)}}individualConditionPasses(z,J,Q){let Z=this.optionsFactory,$=this.mapValuesFromModel(J,Z),X=Z.getCustomOption(J.type),Y=zM(X,$,Q);if(Y!=null)return Y;if(Q==null)return this.evaluateNullValue(J.type);return this.evaluateNonNullValue($,Q,J,z)}},PX=class extends OX{evaluateNullValue(z){let{includeBlanksInEquals:J,includeBlanksInNotEqual:Q,includeBlanksInGreaterThan:Z,includeBlanksInLessThan:$,includeBlanksInRange:X}=this.params.filterParams;switch(z){case"equals":if(J)return!0;break;case"notEqual":if(Q)return!0;break;case"greaterThan":case"greaterThanOrEqual":if(Z)return!0;break;case"lessThan":case"lessThanOrEqual":if($)return!0;break;case"inRange":if(X)return!0;break;case"blank":return!0;case"notBlank":return!1}return!1}evaluateNonNullValue(z,J,Q){let Z=Q.type;if(!this.isValid(J))return Z==="notEqual"||Z==="notBlank";let $=this.comparator(),X=z[0]!=null?$(z[0],J):0;switch(Z){case"equals":return X===0;case"notEqual":return X!==0;case"greaterThan":return X>0;case"greaterThanOrEqual":return X>=0;case"lessThan":return X<0;case"lessThanOrEqual":return X<=0;case"inRange":{let Y=$(z[1],J);return this.params.filterParams.inRangeInclusive?X>=0&&Y<=0:X>0&&Y<0}case"blank":return r6(J);case"notBlank":return!r6(J);default:return V(76,{filterModelType:Z}),!0}}},TX={equals:"Equals",notEqual:"NotEqual",greaterThan:"GreaterThan",greaterThanOrEqual:"GreaterThanOrEqual",lessThan:"LessThan",lessThanOrEqual:"LessThanOrEqual",inRange:"InRange"},ZM={contains:"Contains",notContains:"NotContains",equals:"TextEquals",notEqual:"TextNotEqual",startsWith:"StartsWith",endsWith:"EndsWith",inRange:"InRange"},R5=class extends S{constructor(z,J,Q){super();this.optionsFactory=z,this.filterParams=J,this.valueFormatter=Q}getModelAsString(z,J){let Q=this.getLocaleTextFunc(),Z=J==="filterToolPanel";if(!z)return Z?k4(this,"filterSummaryInactive"):null;if(z.operator!=null){let X=z,q=(X.conditions??[]).map((U)=>this.getModelAsString(U,J)),G=X.operator==="AND"?"andCondition":"orCondition";return q.join(` ${k4(this,G)} `)}else if(z.type==="blank"||z.type==="notBlank")return Z?k4(this,z.type==="blank"?"filterSummaryBlank":"filterSummaryNotBlank"):Q(z.type,z.type);else{let X=z,Y=this.optionsFactory.getCustomOption(X.type),{displayKey:q,displayName:G,numberOfInputs:U}=Y||{};if(q&&G&&U===0)return Q(q,G);return this.conditionToString(X,Z,X.type==="inRange"||U===2,q,G)}}updateParams(z){let{optionsFactory:J,filterParams:Q}=z;this.optionsFactory=J,this.filterParams=Q}conditionForToolPanel(z,J,Q,Z,$,X){let Y,q=this.getTypeKey(z);if(q)Y=k4(this,q);if($&&X)Y=this.getLocaleTextFunc()($,X);if(Y!=null)if(J)return`${Y} ${k4(this,"filterSummaryInRangeValues",[Q(),Z()])}`;else return`${Y} ${Q()}`;return null}getTypeKey(z){let J=this.filterTypeKeys[z];return J?`filterSummary${J}`:null}formatValue(z){let J=this.valueFormatter;return J?J(z??null)??"":String(z)}};var vX=class extends S{constructor(z){super();this.params=z,this.eInput=j,this.onValueChanged=()=>{}}setupGui(z){this.eInput=this.createManagedBean(new s1(this.params?.config));let J=this.eInput.getGui();z.appendChild(J);let Q=(Z)=>this.onValueChanged(Z);this.addManagedListeners(J,{input:Q,keydown:Q})}setEditable(z){this.eInput.setDisabled(!z)}getValue(){return this.eInput.getValue()}setValue(z,J){this.eInput.setValue(z,J)}setValueChangedListener(z){this.onValueChanged=z}setParams({ariaLabel:z,autoComplete:J,placeholder:Q}){let{eInput:Z}=this;if(Z.setInputAriaLabel(z),J!==void 0)Z.setAutoComplete(J);Z.toggleCss("ag-floating-filter-search-icon",!!Q),Z.setInputPlaceholder(Q)}};function ZZ(z){let J=z?.trim();return J===""?z:J}function IX(z,J){let{filter:Q,filterTo:Z,type:$}=z||{};return[Q||null,Z||null].slice(0,J1($,J))}var CX=class extends x{constructor(){super(...arguments);this.defaultDebounceMs=0}setLastTypeFromModel(z){if(!z){this.lastType=this.optionsFactory.defaultOption;return}let J=z.operator,Q;if(J)Q=z.conditions[0];else Q=z;this.lastType=Q.type}canWeEditAfterModelFromParentFilter(z){if(!z)return this.isTypeEditable(this.lastType);if(z.operator)return!1;let Q=z;return this.isTypeEditable(Q.type)}init(z){this.params=z;let J=this.gos.get("enableFilterHandlers");if(this.reactive=J,this.setParams(z),J){let Q=z;this.onModelUpdated(Q.model)}}setParams(z){let J=new S5;this.optionsFactory=J,J.init(z.filterParams,this.defaultOptions),this.filterModelFormatter=this.createManagedBean(new this.FilterModelFormatterClass(J,z.filterParams)),this.setSimpleParams(z,!1)}setSimpleParams(z,J=!0){let Q=this.optionsFactory.defaultOption;if(!J)this.lastType=Q;this.readOnly=!!z.filterParams.readOnly;let Z=this.isTypeEditable(Q);this.setEditable(Z)}refresh(z){this.params=z;let J=z,Q=this.reactive;if(!Q||J.source==="colDef")this.updateParams(z);if(Q){let{source:Z,model:$}=J;if(Z==="dataChanged"||Z==="ui")return;this.onModelUpdated($)}}updateParams(z){let J=this.optionsFactory;J.refresh(z.filterParams,this.defaultOptions),this.setSimpleParams(z),this.filterModelFormatter.updateParams({optionsFactory:J,filterParams:z.filterParams})}onParentModelChanged(z,J){if(J?.afterFloatingFilter||J?.afterDataChange)return;this.onModelUpdated(z)}isTypeEditable(z){return!!z&&!this.readOnly&&J1(z,this.optionsFactory)===1}getAriaLabel(z){return`${this.beans.colNames.getDisplayNameForColumn(z,"header",!0)} ${this.getLocaleTextFunc()("ariaFilterInput","Filter Input")}`}},$M={tag:"div",ref:"eFloatingFilterInputContainer",cls:"ag-floating-filter-input",role:"presentation"},yX=class extends CX{constructor(){super(...arguments);this.eFloatingFilterInputContainer=j,this.defaultDebounceMs=500}postConstruct(){this.setTemplate($M)}onModelUpdated(z){this.setLastTypeFromModel(z),this.setEditable(this.canWeEditAfterModelFromParentFilter(z)),this.inputSvc.setValue(this.filterModelFormatter.getModelAsString(z))}setParams(z){this.setupFloatingFilterInputService(z),super.setParams(z),this.setTextInputParams(z)}setupFloatingFilterInputService(z){this.inputSvc=this.createFloatingFilterInputService(z),this.inputSvc.setupGui(this.eFloatingFilterInputContainer)}setTextInputParams(z){let{inputSvc:J,defaultDebounceMs:Q,readOnly:Z}=this,{filterPlaceholder:$,column:X,browserAutoComplete:Y,filterParams:q}=z,G=this.lastType??this.optionsFactory.defaultOption,U=z.filterParams.filterPlaceholder,_=$===!0?t9(this,U,"filterOoo",G):$||void 0;if(J.setParams({ariaLabel:this.getAriaLabel(X),autoComplete:Y??!1,placeholder:_}),this.applyActive=d1(q),!Z){let H=gZ(q,Q);J.setValueChangedListener(i0(this,this.syncUpWithParentFilter.bind(this),H))}}updateParams(z){super.updateParams(z),this.setTextInputParams(z)}recreateFloatingFilterInputService(z){let{inputSvc:J}=this,Q=J.getValue();J0(this.eFloatingFilterInputContainer),this.destroyBean(J),this.setupFloatingFilterInputService(z),J.setValue(Q,!0)}syncUpWithParentFilter(z){let J=z.key===k.ENTER,Q=this.reactive;if(Q)this.params.onUiChange();if(this.applyActive&&!J)return;let{inputSvc:Z,params:$,lastType:X}=this,Y=Z.getValue();if($.filterParams.trimInput)Y=ZZ(Y),Z.setValue(Y,!0);if(Q){let q=$,G=q.model,U=this.convertValue(Y),_=U==null?null:{...G??{filterType:this.filterType,type:X??this.optionsFactory.defaultOption},filter:U};q.onModelChange(_,{afterFloatingFilter:!0})}else $.parentFilterInstance((q)=>{q?.onFloatingFilterChanged(X||null,Y||null)})}convertValue(z){return z||null}setEditable(z){this.inputSvc.setEditable(z)}};var I8=".ag-input-field-input",bX=class{constructor(z,J,Q,Z,$,X){this.context=z,this.eParent=$,this.alive=!0,this.debouncedReport=i0({isAlive:()=>this.alive},C8,500),this.timeoutHandle=null,__(J,Q,Z)?.newAgStackInstance().then((q)=>{if(!this.alive){z.destroyBean(q);return}if(this.dateComp=q,!q)return;$.appendChild(q.getGui()),q?.afterGuiAttached?.();let{tempValue:G,disabled:U}=this;if(G)q.setDate(G);if(U!=null)q.setDisabled?.(U);X?.(this)})}destroy(){this.alive=!1,this.dateComp=this.context.destroyBean(this.dateComp)}getDate(){return this.dateComp?this.dateComp.getDate():this.tempValue}setDate(z){let J=this.dateComp;if(J)J.setDate(z);else this.tempValue=z}setDisabled(z){let J=this.dateComp;if(J)J.setDisabled?.(z);else this.disabled=z}setDisplayed(z){w(this.eParent,z)}setInputPlaceholder(z){this.dateComp?.setInputPlaceholder?.(z)}setInputAriaLabel(z){this.dateComp?.setInputAriaLabel?.(z)}afterGuiAttached(z){this.dateComp?.afterGuiAttached?.(z)}updateParams(z){this.dateComp?.refresh?.(z)}setCustomValidity(z,J=!1){let Q=this.dateComp?.getGui().querySelector(I8);if(Q&&"setCustomValidity"in Q){let Z=z.length>0;if(Q.setCustomValidity(z),Z)if(J)this.timeoutHandle=this.debouncedReport(Q);else C8(Q);else if(this.timeoutHandle)window.clearTimeout(this.timeoutHandle);HZ(Q,Z)}}getValidity(){return this.dateComp?.getGui().querySelector(I8)?.validity}};function C8(z){z.reportValidity()}var A5=["equals","notEqual","lessThan","greaterThan","inRange","blank","notBlank"];function xX(z,J){let{dateFrom:Q,dateTo:Z,type:$}=z||{};return[Q&&g0(Q,void 0,!0)||null,Z&&g0(Z,void 0,!0)||null].slice(0,J1($,J))}var y8=1000,b8=1/0,XM=class extends V5{constructor(){super("dateFilter",xX,A5);this.eConditionPanelsFrom=[],this.eConditionPanelsTo=[],this.dateConditionFromComps=[],this.dateConditionToComps=[],this.minValidYear=y8,this.maxValidYear=b8,this.minValidDate=null,this.maxValidDate=null,this.filterType="date"}afterGuiAttached(z){super.afterGuiAttached(z),this.dateConditionFromComps[0].afterGuiAttached(z),this.refreshInputValidation()}shouldKeepInvalidInputState(){return!oz()&&this.hasInvalidInputs()&&this.getConditionTypes().includes("inRange")}commonUpdateSimpleParams(z){super.commonUpdateSimpleParams(z);let J=(G,U)=>{let _=z[G];if(_!=null)if(!isNaN(_))return _==null?U:Number(_);else V(82,{param:G});return U},Q=J("minValidYear",y8),Z=J("maxValidYear",b8);if(this.minValidYear=Q,this.maxValidYear=Z,Q>Z)V(83);let{minValidDate:$,maxValidDate:X}=z,Y=$ instanceof Date?$:g0($);this.minValidDate=Y;let q=X instanceof Date?X:g0(X);if(this.maxValidDate=q,Y&&q&&Y>q)V(84)}refreshInputValidation(){for(let z=0;z=2?YM(U,_,J):null,W=H?this.translate(H,[String(J?_:U)]):"",B=!oz()&&!Q;if((J?Y:q).setCustomValidity(W,B),(J?q:Y).setCustomValidity("",B),W.length>0)X.ariaAnnounce.announceValue(W,"dateFilter")}createDateCompWrapper(z,J,Q){let{beans:{userCompFactory:Z,context:$,gos:X},params:Y}=this,q=Q==="from",G=new bX($,Z,Y.colDef,C(X,{onDateChanged:()=>{this.refreshInputPairValidation(J,q),this.onUiChanged()},onFocusIn:()=>this.refreshInputPairValidation(J,q),filterParams:Y,location:"filter"}),z);return this.addDestroyFunc(()=>G.destroy()),G}getState(){return{isInvalid:this.hasInvalidInputs()}}areStatesEqual(z,J){return(z?.isInvalid??!1)===(J?.isInvalid??!1)}setElementValue(z,J){if(z.setDate(J),!J)z.setCustomValidity("")}setElementDisplayed(z,J){z.setDisplayed(J)}setElementDisabled(z,J){z.setDisabled(J)}createEValue(){let z=z0({tag:"div",cls:"ag-filter-body"});return this.createFromToElement(z,this.eConditionPanelsFrom,this.dateConditionFromComps,"from"),this.createFromToElement(z,this.eConditionPanelsTo,this.dateConditionToComps,"to"),z}createFromToElement(z,J,Q,Z){let $=z0({tag:"div",cls:`ag-filter-${Z} ag-filter-date-${Z}`});J.push($),z.appendChild($),Q.push(this.createDateCompWrapper($,J.length-1,Z))}removeEValues(z,J){this.removeDateComps(this.dateConditionFromComps,z,J),this.removeDateComps(this.dateConditionToComps,z,J),F2(this.eConditionPanelsFrom,z,J),F2(this.eConditionPanelsTo,z,J)}removeDateComps(z,J,Q){let Z=F2(z,J,Q);for(let $ of Z)$.destroy()}isValidDateValue(z){if(z===null)return!1;let{minValidDate:J,maxValidDate:Q,minValidYear:Z,maxValidYear:$}=this;if(J){if(zQ)return!1}else if(z.getUTCFullYear()>$)return!1;return!0}hasInvalidInputs(){let z=!1;return this.forEachInput((J)=>z||(z=J.getDate()!=null&&!(J.getValidity()?.valid??!0))),z}positionHasInvalidInputs(z){let J=!1;return this.forEachPositionInput(z,(Q)=>J||(J=!(Q.getValidity()?.valid??!0))),J}canApply(z){return!this.hasInvalidInputs()}isConditionUiComplete(z){if(!super.isConditionUiComplete(z))return!1;let J=!0;return this.forEachPositionInput(z,(Q,Z,$,X)=>{if(!J||Z>=X)return;J&&(J=this.isValidDateValue(Q.getDate()))}),J}areSimpleModelsEqual(z,J){return z.dateFrom===J.dateFrom&&z.dateTo===J.dateTo&&z.type===J.type}createCondition(z){let J=this.getConditionType(z),Q={},{params:Z,filterType:$}=this,X=this.getValues(z),Y=Z.useIsoSeparator?"T":" ";if(X.length>0)Q.dateFrom=o4(X[0],!0,Y);if(X.length>1)Q.dateTo=o4(X[1],!0,Y);return{dateFrom:null,dateTo:null,filterType:$,type:J,...Q}}removeConditionsAndOperators(z,J){if(this.hasInvalidInputs())return;return super.removeConditionsAndOperators(z,J)}resetPlaceholder(){let z=this.getLocaleTextFunc(),J=this.translate("dateFormatOoo"),Q=z("ariaFilterValue","Filter Value");this.forEachInput((Z)=>{Z.setInputPlaceholder(J),Z.setInputAriaLabel(Q)})}getInputs(z){let{dateConditionFromComps:J,dateConditionToComps:Q}=this;if(z>=J.length)return[null,null];return[J[z],Q[z]]}getValues(z){let J=[];return this.forEachPositionInput(z,(Q,Z,$,X)=>{if(Z=J))return null;return`${Q?"max":"min"}DateValidation`}var wX=class extends R5{constructor(z,J){super(z,J,(Q)=>{let{dataTypeSvc:Z,valueSvc:$}=this.beans,X=J.column,Y=Z?.getDateFormatterFunction(X),q=Y?Y(Q??void 0):Q;return $.formatValue(X,null,q)});this.filterTypeKeys=TX}conditionToString(z,J,Q,Z,$){let{type:X}=z,Y=g0(z.dateFrom),q=g0(z.dateTo),G=this.filterParams.inRangeFloatingFilterDateFormat,U=J?this.formatValue.bind(this):(W)=>SB(W,G),_=()=>Y!==null?U(Y):"null",H=()=>q!==null?U(q):"null";if(Y==null&&q==null)return k4(this,X);if(J){let W=this.conditionForToolPanel(X,Q,_,H,Z,$);if(W!=null)return W}if(Q)return`${_()}-${H()}`;if(Y!=null)return U(Y);return`${X}`}};function qM(z,J){let Q=J;if(Qz)return 1;return 0}var GM=class extends PX{constructor(){super(xX,A5);this.filterType="date",this.FilterModelFormatterClass=wX,this.filterTypeToRangeCache=new Map}getOrRefreshRangeCacheItem(z,J){let{filterTypeToRangeCache:Q}=this,Z=Date.now(),$=Q.get(z);if($&&$.expires=0&&$(G,J)<0}return super.evaluateNonNullValue(z,J,Q)}},UM=1,F6=null,_M=()=>{if(F6!=null)return F6;let z,J=typeof navigator>"u"?void 0:navigator.languages?.[0]??navigator.language;if(J&&typeof Intl<"u"&&typeof Intl.Locale==="function")try{z=new Intl.Locale(J).getWeekInfo?.()?.firstDay}catch{z=void 0}return F6=z==null?UM:z%7,F6},o0=(z)=>{return z.setHours(0,0,0,0),z},RJ=(z)=>{let J=z.getDay(),Q=_M(),Z=(J-Q+7)%7;return z.setDate(z.getDate()-Z),o0(z)},AJ=(z,J=1)=>{return z.setDate(z.getDate()-J),z},F4=(z)=>{return z.setDate(z.getDate()+1),o0(z)},NX=(z)=>{return RJ(z),z.setDate(z.getDate()+6),F4(z)},jJ=(z)=>{return z.setDate(1),o0(z)},j5=(z)=>{return z.setDate(1),z.setMonth(z.getMonth()+1),o0(z)},O5=(z)=>{let J=Math.floor(z.getMonth()/3);return z.setMonth(J*3),jJ(z)},gX=(z)=>{let J=Math.floor(z.getMonth()/3);return z.setMonth(J*3+2),j5(z)},P5=(z)=>{return z.setMonth(0,1),o0(z)},hX=(z)=>{return z.setMonth(12,0),F4(z)},u1=(z)=>AJ(z),$Z=(z)=>u1(RJ(z)),XZ=(z)=>u1(jJ(z)),YZ=(z)=>u1(O5(z)),T5=(z,J)=>[o0(z),F4(J)],HM=(z,J)=>T5(u1(z),u1(J)),v5=(z,J)=>[RJ(z),NX(J)],WM=(z,J)=>v5($Z(z),$Z(J)),I5=(z,J)=>[jJ(z),j5(J)],BM=(z,J)=>I5(XZ(z),XZ(J)),C5=(z,J)=>[O5(z),gX(J)],EM=(z,J)=>C5(YZ(z),YZ(J)),y5=(z,J)=>[P5(z),hX(J)],KM=(z,J)=>[P5(z),F4(J)],FM=(z,J)=>[o0(AJ(z,7)),F4(J)],LM=(z,J)=>[o0(AJ(z,30)),F4(J)],DM=(z,J)=>[o0(AJ(z,90)),F4(J)],MM=(z,J)=>{return z.setFullYear(z.getFullYear()-1),z.setMonth(z.getMonth()+6),[o0(z),F4(J)]},kM=(z,J)=>{return z.setFullYear(z.getFullYear()-1),[o0(z),F4(J)]},fM=(z,J)=>{return z.setFullYear(z.getFullYear()-2),[o0(z),F4(J)]},SM=(z,J)=>{return z.setFullYear(z.getFullYear()-1),J.setFullYear(J.getFullYear()-1),y5(z,J)},VM=(z,J)=>{return z.setFullYear(z.getFullYear()+1),J.setFullYear(J.getFullYear()+1),y5(z,J)},RM=(z,J)=>{return z.setMonth(z.getMonth()+3),J.setMonth(J.getMonth()+3),C5(z,J)},AM=(z,J)=>{return z.setMonth(z.getMonth()+1),J.setMonth(J.getMonth()+1),I5(z,J)},jM=(z,J)=>{return z.setDate(z.getDate()+7),J.setDate(J.getDate()+7),v5(z,J)},OM=(z,J)=>{return z.setDate(z.getDate()+1),J.setDate(J.getDate()+1),T5(z,J)},PM={today:T5,yesterday:HM,tomorrow:OM,thisWeek:v5,lastWeek:WM,nextWeek:jM,thisMonth:I5,lastMonth:BM,nextMonth:AM,thisQuarter:C5,lastQuarter:EM,nextQuarter:RM,thisYear:y5,lastYear:SM,nextYear:VM,yearToDate:KM,last7Days:FM,last30Days:LM,last90Days:DM,last6Months:MM,last12Months:kM,last24Months:fM,setStartOfDay:o0,setStartOfWeek:RJ,setStartOfNextDay:F4,setStartOfNextWeek:NX,setStartOfMonth:jJ,setStartOfNextMonth:j5,setStartOfQuarter:O5,setStartOfNextQuarter:gX,setStartOfYear:P5,setStartOfNextYear:hX,setPreviousDay:u1,setPreviousWeek:$Z,setPreviousMonth:XZ,setPreviousQuarter:YZ},TM={tag:"div",cls:"ag-floating-filter-input",role:"presentation",children:[{tag:"ag-input-text-field",ref:"eReadOnlyText"},{tag:"div",ref:"eDateWrapper",cls:"ag-date-floating-filter-wrapper"}]},vM=class extends CX{constructor(){super(TM,[Zz]);this.eReadOnlyText=j,this.eDateWrapper=j,this.FilterModelFormatterClass=wX,this.filterType="date",this.defaultOptions=A5}setParams(z){super.setParams(z),this.createDateComponent();let J=this.getLocaleTextFunc();this.eReadOnlyText.setDisabled(!0).setInputAriaLabel(J("ariaDateFilterInput","Date Filter Input"))}updateParams(z){super.updateParams(z),this.dateComp.updateParams(this.getDateComponentParams()),this.updateCompOnModelChange(z.currentParentModel())}updateCompOnModelChange(z){let J=!this.readOnly&&this.canWeEditAfterModelFromParentFilter(z);if(this.setEditable(J),J){let Q=z?g0(z.dateFrom):null;this.dateComp.setDate(Q),this.eReadOnlyText.setValue("")}else this.eReadOnlyText.setValue(this.filterModelFormatter.getModelAsString(z)),this.dateComp.setDate(null)}setEditable(z){w(this.eDateWrapper,z),w(this.eReadOnlyText.getGui(),!z)}onModelUpdated(z){super.setLastTypeFromModel(z),this.updateCompOnModelChange(z)}onDateChanged(){let z=this.dateComp.getDate();if(this.reactive){let J=this.params;J.onUiChange();let Q=J.model,Z=o4(z),$=Z==null?null:{...Q??{filterType:this.filterType,type:this.lastType??this.optionsFactory.defaultOption},dateFrom:Z};J.onModelChange($,{afterFloatingFilter:!0})}else this.params.parentFilterInstance((J)=>{J?.onFloatingFilterChanged(this.lastType||null,z)})}getDateComponentParams(){let{filterParams:z}=this.params,J=gZ(z,this.defaultDebounceMs);return C(this.gos,{onDateChanged:i0(this,this.onDateChanged.bind(this),J),filterParams:z,location:"floatingFilter"})}createDateComponent(){let{beans:{context:z,userCompFactory:J},eDateWrapper:Q,params:{column:Z}}=this;this.dateComp=new bX(z,J,Z.getColDef(),this.getDateComponentParams(),Q,($)=>{$.setInputAriaLabel(this.getAriaLabel(Z))}),this.addDestroyFunc(()=>this.dateComp.destroy())}},IM={tag:"div",cls:"ag-filter-filter",children:[{tag:"ag-input-text-field",ref:"eDateInput",cls:"ag-date-filter"}]},CM=class extends x{constructor(){super(IM,[Zz]);this.eDateInput=j,this.isApply=!1,this.applyOnFocusOut=!1}init(z){this.params=z,this.setParams(z);let J=this.eDateInput.getInputElement();this.addManagedListeners(J,{mouseDown:()=>{if(this.eDateInput.isDisabled()||this.usingSafariDatePicker)return;J.focus({preventScroll:!0})},input:this.handleInput.bind(this,!1),change:this.handleInput.bind(this,!0),focusout:this.handleFocusOut.bind(this),focusin:this.handleFocusIn.bind(this)})}handleInput(z){if(this.eDateInput.isDisabled())return;if(this.isApply){if(this.applyOnFocusOut=!z,z)this.params.onDateChanged();return}if(!z)this.params.onDateChanged()}handleFocusOut(){if(this.applyOnFocusOut)this.applyOnFocusOut=!1,this.params.onDateChanged()}handleFocusIn(){this.params.onFocusIn?.()}setParams(z){let J=this.eDateInput.getInputElement(),Q=this.shouldUseBrowserDatePicker(z);this.usingSafariDatePicker=Q&&jz();let{minValidYear:Z,maxValidYear:$,minValidDate:X,maxValidDate:Y,buttons:q,includeTime:G,colDef:U}=z.filterParams||{},_=this.beans.dataTypeSvc,H=G??_?.getDateIncludesTimeFlag?.(U.cellDataType)??!1;if(Q)if(H)J.type="datetime-local",J.step="1";else J.type="date";else J.type="text";let W=x8(X,Z,!0),B=x8(Y,$,!1);if(W&&B&&W.getTime()>B.getTime())V(87);if(W)J.min=o4(W,H);if(B)J.max=o4(B,H);this.isApply=z.location==="floatingFilter"&&!!q?.includes("apply")}refresh(z){this.params=z,this.setParams(z)}getDate(){return g0(this.eDateInput.getValue())}setDate(z){let J=this.params.filterParams.colDef.cellDataType,Q=this.beans.dataTypeSvc?.getDateIncludesTimeFlag(J)??!1;this.eDateInput.setValue(o4(z,Q))}setInputPlaceholder(z){this.eDateInput.setInputPlaceholder(z)}setInputAriaLabel(z){this.eDateInput.setAriaLabel(z)}setDisabled(z){this.eDateInput.setDisabled(z)}afterGuiAttached(z){if(!z?.suppressFocus)this.eDateInput.getInputElement().focus({preventScroll:!0})}shouldUseBrowserDatePicker(z){return z?.filterParams?.browserDatePicker??!0}};function x8(z,J,Q){if(z&&J)V(Q?85:86);if(z instanceof Date)return z;if(z)return g0(z);else if(J)return g0(`${J}-${Q?"01-01":"12-31"}`);return null}var b5=["equals","notEqual","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","inRange","blank","notBlank"];function qZ(z){return z?.allowedCharPattern??null}function t6(z){if(z==null)return null;return isNaN(z)?null:z}function uX(z,J){let{filter:Q,filterTo:Z,type:$}=z||{};return[t6(Q),t6(Z)].slice(0,J1($,J))}var yM=class extends V5{constructor(){super("numberFilter",uX,b5);this.eValuesFrom=[],this.eValuesTo=[],this.filterType="number",this.defaultDebounceMs=500}afterGuiAttached(z){super.afterGuiAttached(z),this.refreshInputValidation()}shouldKeepInvalidInputState(){return!oz()&&this.hasInvalidInputs()&&this.getConditionTypes().includes("inRange")}refreshInputValidation(){for(let z=0;z0)this.beans.ariaAnnounce.announceValue(q,"dateFilter")}getState(){return{isInvalid:this.hasInvalidInputs()}}areStatesEqual(z,J){return(z?.isInvalid??!1)===(J?.isInvalid??!1)}refresh(z){let J=super.refresh(z),{state:Q,additionalEventAttributes:Z}=z,$=this.state,X=Z?.fromAction;if(X&&X!="apply"||Q.model!==$.model||!this.areStatesEqual(Q.state,$.state))this.refreshInputValidation();return J}setElementValue(z,J,Q){let{numberFormatter:Z}=this.params,$=!Q&&Z?Z(J??null):J;if(super.setElementValue(z,$),$===null)z.setCustomValidity("")}createEValue(){let{params:z,eValuesFrom:J,eValuesTo:Q}=this,Z=qZ(z),$=z0({tag:"div",cls:"ag-filter-body",role:"presentation"}),X=this.createFromToElement($,J,"from",Z),Y=this.createFromToElement($,Q,"to",Z),q=(_,H,W)=>()=>this.refreshInputPairValidation(_,H,W),G=q(X,Y,!0);X.onValueChange(G),X.addGuiEventListener("focusin",G);let U=q(X,Y,!1);return Y.onValueChange(U),Y.addGuiEventListener("focusin",U),$}createFromToElement(z,J,Q,Z){let $=this.createManagedBean(Z?new s1({allowedCharPattern:Z}):new LX);return $.addCss(`ag-filter-${Q}`),$.addCss("ag-filter-filter"),J.push($),z.appendChild($.getGui()),$}removeEValues(z,J){let Q=(Z)=>this.removeComponents(Z,z,J);Q(this.eValuesFrom),Q(this.eValuesTo)}getValues(z){let J=[];return this.forEachPositionInput(z,(Q,Z,$,X)=>{if(Z0)Q.filter=Z[0];if(Z.length>1)Q.filterTo=Z[1];return Q}removeConditionsAndOperators(z,J){if(this.hasInvalidInputs())return;return super.removeConditionsAndOperators(z,J)}getInputs(z){let{eValuesFrom:J,eValuesTo:Q}=this;if(z>=J.length)return[null,null];return[J[z],Q[z]]}hasInvalidInputs(){let z=!1;return this.forEachInput((J)=>z||(z=!J.getInputElement().validity.valid)),z}positionHasInvalidInputs(z){let J=!1;return this.forEachPositionInput(z,(Q)=>J||(J=!Q.getInputElement().validity.valid)),J}canApply(z){return!this.hasInvalidInputs()}};function mX(z,J){if(typeof J==="number")return J;let Q=q0(J);if(Q?.trim()==="")Q=null;if(z)return z(Q);return Q==null||Q.trim()==="-"?null:Number.parseFloat(Q)}function w8(z,J){return t6(mX(z,J.getValue(!0)))}function bM(z,J,Q){if(!(z!=null&&J!=null&&z>=J))return null;return`strict${Q?"Max":"Min"}ValueValidation`}var cX=class extends R5{constructor(z,J){super(z,J,J.numberFormatter);this.filterTypeKeys=TX}conditionToString(z,J,Q,Z,$){let{filter:X,filterTo:Y,type:q}=z,G=this.formatValue.bind(this);if(J){let U=this.conditionForToolPanel(q,Q,()=>G(X),()=>G(Y),Z,$);if(U!=null)return U}if(Q)return`${G(X)}-${G(Y)}`;if(X!=null)return G(X);return`${q}`}},xM=class extends PX{constructor(){super(uX,b5);this.filterType="number",this.FilterModelFormatterClass=cX}comparator(){return(z,J)=>{if(z===J)return 0;return z{},this.numberInputActive=!0}setupGui(z){this.eNumberInput=this.createManagedBean(new LX),this.eTextInput=this.createManagedBean(new s1),this.eTextInput.setDisabled(!0);let J=this.eNumberInput.getGui(),Q=this.eTextInput.getGui();z.appendChild(J),z.appendChild(Q),this.setupListeners(J,(Z)=>this.onValueChanged(Z)),this.setupListeners(Q,(Z)=>this.onValueChanged(Z))}setEditable(z){this.numberInputActive=z,this.eNumberInput.setDisplayed(this.numberInputActive),this.eTextInput.setDisplayed(!this.numberInputActive)}setAutoComplete(z){this.eNumberInput.setAutoComplete(z),this.eTextInput.setAutoComplete(z)}getValue(){return this.getActiveInputElement().getValue()}setValue(z,J){this.getActiveInputElement().setValue(z,J)}getActiveInputElement(){return this.numberInputActive?this.eNumberInput:this.eTextInput}setValueChangedListener(z){this.onValueChanged=z}setupListeners(z,J){this.addManagedListeners(z,{input:J,keydown:J})}setParams({ariaLabel:z,autoComplete:J,placeholder:Q}){if(this.setAriaLabel(z),J!==void 0)this.setAutoComplete(J);this.setPlaceholder(this.eNumberInput,Q),this.setPlaceholder(this.eTextInput,Q)}setPlaceholder(z,J){z.toggleCss("ag-floating-filter-search-icon",!!J),z.setInputPlaceholder(J)}setAriaLabel(z){this.eNumberInput.setInputAriaLabel(z),this.eTextInput.setInputAriaLabel(z)}},NM=class extends yX{constructor(){super(...arguments);this.FilterModelFormatterClass=cX,this.filterType="number",this.defaultOptions=b5}updateParams(z){if(qZ(z.filterParams)!==this.allowedCharPattern)this.recreateFloatingFilterInputService(z);super.updateParams(z)}createFloatingFilterInputService(z){if(this.allowedCharPattern=qZ(z.filterParams),this.allowedCharPattern)return this.createManagedBean(new vX({config:{allowedCharPattern:this.allowedCharPattern}}));return this.createManagedBean(new wM)}convertValue(z){return z?Number(z):null}},x5=["contains","notContains","equals","notEqual","startsWith","endsWith","blank","notBlank"],gM=class extends V5{constructor(){super("textFilter",IX,x5);this.filterType="text",this.eValuesFrom=[],this.eValuesTo=[],this.defaultDebounceMs=500}createCondition(z){let J=this.getConditionType(z),Q={filterType:this.filterType,type:J},Z=this.getValues(z);if(Z.length>0)Q.filter=Z[0];if(Z.length>1)Q.filterTo=Z[1];return Q}areSimpleModelsEqual(z,J){return z.filter===J.filter&&z.filterTo===J.filterTo&&z.type===J.type}getInputs(z){let{eValuesFrom:J,eValuesTo:Q}=this;if(z>=J.length)return[null,null];return[J[z],Q[z]]}getValues(z){let J=[];return this.forEachPositionInput(z,(Q,Z,$,X)=>{if(Zthis.removeComponents(X,z,J),{eValuesFrom:Z,eValuesTo:$}=this;Q(Z),Q($)}},iX=class extends R5{constructor(){super(...arguments);this.filterTypeKeys=ZM}conditionToString(z,J,Q,Z,$){let{filter:X,filterTo:Y,type:q}=z;if(J){let G=(_)=>()=>k4(this,"filterSummaryTextQuote",[_]),U=this.conditionForToolPanel(q,Q,G(X),G(Y),Z,$);if(U!=null)return U}if(Q)return`${X}-${Y}`;if(X!=null)return`${X}`;return`${q}`}},hM=({filterOption:z,value:J,filterText:Q})=>{if(Q==null)return!1;switch(z){case"contains":return J.includes(Q);case"notContains":return!J.includes(Q);case"equals":return J===Q;case"notEqual":return J!=Q;case"startsWith":return J.indexOf(Q)===0;case"endsWith":{let Z=J.lastIndexOf(Q);return Z>=0&&Z===J.length-Q.length}default:return!1}},uM=(z)=>z,mM=(z)=>z==null?null:z.toString().toLowerCase(),cM=class extends OX{constructor(){super(IX,x5);this.filterType="text",this.FilterModelFormatterClass=iX}updateParams(z){super.updateParams(z);let J=z.filterParams;this.matcher=J.textMatcher??hM,this.formatter=J.textFormatter??(J.caseSensitive?uM:mM)}evaluateNullValue(z){return z?["notEqual","notContains","blank"].indexOf(z)>=0:!1}evaluateNonNullValue(z,J,Q,Z){let $=z.map((W)=>this.formatter(W))||[],X=this.formatter(J),{api:Y,colDef:q,column:G,context:U,filterParams:{textFormatter:_}}=this.params;if(Q.type==="blank")return r6(J);else if(Q.type==="notBlank")return!r6(J);let H={api:Y,colDef:q,column:G,context:U,node:Z.node,data:Z.data,filterOption:Q.type,value:X,textFormatter:_};return $.some((W)=>this.matcher({...H,filterText:W}))}processModelToApply(z){if(z&&this.params.filterParams.trimInput){let J=(Q)=>{let Z={...Q},{filter:$,filterTo:X}=Q;if($)Z.filter=ZZ($)??null;if(X)Z.filterTo=ZZ(X)??null;return Z};if(u9(z))return{...z,conditions:z.conditions.map(J)};return J(z)}return z}},iM=class extends yX{constructor(){super(...arguments);this.FilterModelFormatterClass=iX,this.filterType="text",this.defaultOptions=x5}createFloatingFilterInputService(){return this.createManagedBean(new vX)}};function pM(z){return!!z.quickFilter?.isFilterPresent()}function nM(z){return z.quickFilter?.getText()}function dM(z){z.quickFilter?.resetCache()}var rM=class extends S{constructor(){super(...arguments);this.beanName="quickFilter",this.quickFilter=null,this.quickFilterParts=null}postConstruct(){let z=this.resetCache.bind(this),J=this.gos;this.addManagedEventListeners({columnPivotModeChanged:z,newColumnsLoaded:z,columnRowGroupChanged:z,columnVisible:()=>{if(!J.get("includeHiddenColumnsInQuickFilter"))this.resetCache()}}),this.addManagedPropertyListener("quickFilterText",(Q)=>this.setFilter(Q.currentValue)),this.addManagedPropertyListeners(["includeHiddenColumnsInQuickFilter","applyQuickFilterBeforePivotOrAgg"],()=>this.onColumnConfigChanged()),this.quickFilter=this.parseFilter(J.get("quickFilterText")),this.parser=J.get("quickFilterParser"),this.matcher=J.get("quickFilterMatcher"),this.setFilterParts(),this.addManagedPropertyListeners(["quickFilterMatcher","quickFilterParser"],()=>this.setParserAndMatcher())}refreshCols(){let{autoColSvc:z,colModel:J,gos:Q,pivotResultCols:Z}=this.beans,$=J.pivotMode,X=z?.getColumns(),Y=J.getColDefCols(),q=($&&!Q.get("applyQuickFilterBeforePivotOrAgg")?Z?.getPivotResultCols()?.list:Y)??[];if(X)q=q.concat(X);this.colsToUse=Q.get("includeHiddenColumnsInQuickFilter")?q:q.filter((G)=>G.isVisible()||G.isRowGroupActive())}isFilterPresent(){return this.quickFilter!==null}doesRowPass(z){let J=this.gos.get("cacheQuickFilter");if(this.matcher)return this.doesRowPassMatcher(J,z);return this.quickFilterParts.every((Q)=>J?this.doesRowPassCache(z,Q):this.doesRowPassNoCache(z,Q))}resetCache(){this.beans.rowModel.forEachNode((z)=>z.quickFilterAggregateText=null)}getText(){return this.gos.get("quickFilterText")}setFilterParts(){let{quickFilter:z,parser:J}=this;if(z)this.quickFilterParts=J?J(z):z.split(" ");else this.quickFilterParts=null}parseFilter(z){if(!P(z))return null;return z.toUpperCase()}setFilter(z){if(z!=null&&typeof z!=="string"){V(70,{newFilter:z});return}let J=this.parseFilter(z);if(this.quickFilter!==J)this.quickFilter=J,this.setFilterParts(),this.dispatchLocalEvent({type:"quickFilterChanged"})}setParserAndMatcher(){let z=this.gos.get("quickFilterParser"),J=this.gos.get("quickFilterMatcher"),Q=z!==this.parser||J!==this.matcher;if(this.parser=z,this.matcher=J,Q)this.setFilterParts(),this.dispatchLocalEvent({type:"quickFilterChanged"})}onColumnConfigChanged(){if(this.refreshCols(),this.resetCache(),this.isFilterPresent())this.dispatchLocalEvent({type:"quickFilterChanged"})}doesRowPassNoCache(z,J){return this.colsToUse.some((Q)=>{let Z=this.getTextForColumn(Q,z);return P(Z)&&Z.includes(J)})}doesRowPassCache(z,J){return this.checkGenerateAggText(z),z.quickFilterAggregateText.includes(J)}doesRowPassMatcher(z,J){let Q;if(z)this.checkGenerateAggText(J),Q=J.quickFilterAggregateText;else Q=this.getAggText(J);let{quickFilterParts:Z,matcher:$}=this;return $(Z,Q)}checkGenerateAggText(z){if(!z.quickFilterAggregateText)z.quickFilterAggregateText=this.getAggText(z)}getTextForColumn(z,J){let Q=this.beans.filterValueSvc.getValue(z,J),Z=z.colDef;if(Z.getQuickFilterText){let $=C(this.gos,{value:Q,node:J,data:J.data,column:z,colDef:Z});Q=Z.getQuickFilterText($)}return P(Q)?Q.toString().toUpperCase():null}getAggText(z){let J=[];for(let Q of this.colsToUse){let Z=this.getTextForColumn(Q,z);if(P(Z))J.push(Z)}return J.join(` +`)}},pX={moduleName:"FilterCore",version:i,beans:[dD],apiFunctions:{isAnyFilterPresent:pD,onFilterChanged:nD},css:[jD]},nX={moduleName:"FilterValue",version:i,beans:[aD]},G1={moduleName:"ColumnFilter",version:i,beans:[iD,lD],dynamicBeans:{headerFilterCellCtrl:SD},icons:{filter:"filter",filterActive:"filter"},apiFunctions:{isColumnFilterPresent:OD,getColumnFilterInstance:PD,destroyFilter:TD,setFilterModel:vD,getFilterModel:ID,getColumnFilterModel:CD,setColumnFilterModel:yD,showColumnFilter:bD,hideColumnFilter:xD,getColumnFilterHandler:wD,doFilterAction:ND},dependsOn:[pX,q1,nX,K5]};var dX={moduleName:"TextFilter",version:i,dependsOn:[G1],userComponents:{agTextColumnFilter:{classImp:gM,params:{useForm:!0}},agTextColumnFloatingFilter:iM},dynamicBeans:{agTextColumnFilterHandler:cM}},rX={moduleName:"NumberFilter",version:i,dependsOn:[G1],userComponents:{agNumberColumnFilter:{classImp:yM,params:{useForm:!0}},agNumberColumnFloatingFilter:NM},dynamicBeans:{agNumberColumnFilterHandler:xM}};var tX={moduleName:"DateFilter",version:i,dependsOn:[G1],userComponents:{agDateColumnFilter:{classImp:XM,params:{useForm:!0}},agDateInput:CM,agDateColumnFloatingFilter:vM},dynamicBeans:{agDateColumnFilterHandler:GM}},tM={moduleName:"QuickFilterCore",version:i,rowModels:["clientSide"],beans:[rM],dependsOn:[pX,nX]},sX={moduleName:"QuickFilter",version:i,apiFunctions:{isQuickFilterPresent:pM,getQuickFilter:nM,resetQuickFilter:dM},dependsOn:[tM]};var sM=class extends S{constructor(){super(...arguments);this.beanName="apiEventSvc",this.syncListeners=new Map,this.asyncListeners=new Map,this.syncGlobalListeners=new Set,this.globalListenerPairs=new Map}postConstruct(){this.wrapSvc=this.beans.frameworkOverrides.createGlobalEventListenerWrapper?.()}addListener(z,J){let Q=this.wrapSvc?.wrap(z,J)??J,Z=!R6.has(z),$=Z?this.asyncListeners:this.syncListeners;if(!$.has(z))$.set(z,new Set);$.get(z).add(Q),this.eventSvc.addListener(z,Q,Z)}removeListener(z,J){let Q=this.wrapSvc?.unwrap(z,J)??J,$=!!this.asyncListeners.get(z)?.delete(Q);if(!$)this.syncListeners.get(z)?.delete(Q);this.eventSvc.removeListener(z,Q,$)}addGlobalListener(z){let J=this.wrapSvc?.wrapGlobal(z)??z,Q=(X,Y)=>{if(R6.has(X))J(X,Y)},Z=(X,Y)=>{if(!R6.has(X))J(X,Y)};this.globalListenerPairs.set(z,{syncListener:Q,asyncListener:Z});let $=this.eventSvc;$.addGlobalListener(Q,!1),$.addGlobalListener(Z,!0)}removeGlobalListener(z){let{eventSvc:J,wrapSvc:Q,globalListenerPairs:Z}=this,$=Q?.unwrapGlobal(z)??z;if(Z.has($)){let{syncListener:Y,asyncListener:q}=Z.get($);J.removeGlobalListener(Y,!1),J.removeGlobalListener(q,!0),Z.delete(z)}else this.syncGlobalListeners.delete($),J.removeGlobalListener($,!1)}destroyEventListeners(z,J){z.forEach((Q,Z)=>{Q.forEach(($)=>this.eventSvc.removeListener(Z,$,J)),Q.clear()}),z.clear()}destroyGlobalListeners(z,J){for(let Q of z)this.eventSvc.removeGlobalListener(Q,J);z.clear()}destroy(){super.destroy(),this.destroyEventListeners(this.syncListeners,!1),this.destroyEventListeners(this.asyncListeners,!0),this.destroyGlobalListeners(this.syncGlobalListeners,!1);let{globalListenerPairs:z,eventSvc:J}=this;z.forEach(({syncListener:Q,asyncListener:Z})=>{J.removeGlobalListener(Q,!1),J.removeGlobalListener(Z,!0)}),z.clear()}};function lM(z,J,Q){z.apiEventSvc?.addListener(J,Q)}function aM(z,J,Q){z.apiEventSvc?.removeListener(J,Q)}function oM(z,J){z.apiEventSvc?.addGlobalListener(J)}function eM(z,J){z.apiEventSvc?.removeGlobalListener(J)}var lX={moduleName:"EventApi",version:i,apiFunctions:{addEventListener:lM,addGlobalListener:oM,removeEventListener:aM,removeGlobalListener:eM},beans:[sM]};function P4(z,J){if(typeof z!=="number")return"";let Q=J(),Z=Q("thousandSeparator",","),$=Q("decimalSeparator",".");return z.toString().replace(".",$).replace(/(\d)(?=(\d{3})+(?!\d))/g,`$1${Z}`)}var zk="↑",Jk="↓",Qk={tag:"span",children:[{tag:"span",ref:"eDelta",cls:"ag-value-change-delta"},{tag:"span",ref:"eValue",cls:"ag-value-change-value"}]},Zk=class extends x{constructor(){super(Qk);this.eValue=j,this.eDelta=j,this.refreshCount=0}init(z){this.refresh(z,!0)}showDelta(z,J){let Q=Math.abs(J),Z=z.formatValue(Q),$=P(Z)?Z:Q,X=J>=0,Y=this.eDelta;if(X)Y.textContent=zk+$;else Y.textContent=Jk+$;Y.classList.toggle("ag-value-change-delta-up",X),Y.classList.toggle("ag-value-change-delta-down",!X)}setTimerToRemoveDelta(){this.refreshCount++;let z=this.refreshCount;this.beans.frameworkOverrides.wrapIncoming(()=>{window.setTimeout(()=>{if(z===this.refreshCount)this.hideDeltaValue()},2000)})}hideDeltaValue(){this.eValue.classList.remove("ag-value-change-value-highlight"),J0(this.eDelta)}refresh(z,J=!1){let{value:Q,valueFormatted:Z}=z,{eValue:$,lastValue:X,beans:Y}=this;if(Q===X)return!1;if(P(Z))$.textContent=Z;else if(P(Q))$.textContent=Q;else J0($);if(Y.filterManager?.isSuppressFlashingCellsBecauseFiltering())return!1;let q=Q&&typeof Q==="object"&&"toNumber"in Q?Q.toNumber():Q,G=X&&typeof X==="object"&&"toNumber"in X?X.toNumber():X;if(q===G)return!1;if(typeof q==="number"&&typeof G==="number"){let U=q-G;this.showDelta(z,U)}if(X)$.classList.add("ag-value-change-value-highlight");if(!J)this.setTimerToRemoveDelta();return this.lastValue=Q,!0}},$k=".ag-value-slide-out{opacity:1}:where(.ag-ltr) .ag-value-slide-out{margin-right:5px;transition:opacity 3s,margin-right 3s}:where(.ag-rtl) .ag-value-slide-out{margin-left:5px;transition:opacity 3s,margin-left 3s}:where(.ag-ltr,.ag-rtl) .ag-value-slide-out{transition-timing-function:linear}.ag-value-slide-out-end{opacity:0}:where(.ag-ltr) .ag-value-slide-out-end{margin-right:10px}:where(.ag-rtl) .ag-value-slide-out-end{margin-left:10px}",Xk={tag:"span",children:[{tag:"span",ref:"eCurrent",cls:"ag-value-slide-current"}]},Yk=class extends x{constructor(){super(Xk);this.eCurrent=j,this.refreshCount=0,this.registerCSS($k)}init(z){this.refresh(z,!0)}addSlideAnimation(){this.refreshCount++;let z=this.refreshCount;this.ePrevious?.remove();let{beans:J,eCurrent:Q}=this,Z=z0({tag:"span",cls:"ag-value-slide-previous ag-value-slide-out"});this.ePrevious=Z,Z.textContent=Q.textContent,this.getGui().insertBefore(Z,Q),J.frameworkOverrides.wrapIncoming(()=>{window.setTimeout(()=>{if(z!==this.refreshCount)return;this.ePrevious.classList.add("ag-value-slide-out-end")},50),window.setTimeout(()=>{if(z!==this.refreshCount)return;this.ePrevious?.remove(),this.ePrevious=null},3000)})}refresh(z,J=!1){let Q=z.value;if(d(Q))Q="";if(Q===this.lastValue)return!1;if(this.beans.filterManager?.isSuppressFlashingCellsBecauseFiltering())return!1;if(!J)this.addSlideAnimation();this.lastValue=Q;let Z=this.eCurrent;if(P(z.valueFormatted))Z.textContent=z.valueFormatted;else if(P(z.value))Z.textContent=Q;else J0(Z);return!0}},qk=class extends S{constructor(){super(...arguments);this.beanName="cellFlashSvc",this.nextAnimationTime=null,this.nextAnimationCycle=null,this.animations={highlight:new Map,"data-changed":new Map}}animateCell(z,J,Q=this.beans.gos.get("cellFlashDuration"),Z=this.beans.gos.get("cellFadeDuration")){let $=this.animations[J];$.delete(z);let X=Date.now(),Y=X+Q,q=X+Q+Z,G={phase:"flash",flashEndTime:Y,fadeEndTime:q};$.set(z,G);let U=`ag-cell-${J}`,_=`${U}-animation`,{comp:H,eGui:{style:W}}=z;if(H.toggleCss(U,!0),H.toggleCss(_,!1),W.removeProperty("transition"),W.removeProperty("transition-delay"),this.nextAnimationTime&&Y+15{this.nextAnimationCycle=setTimeout(this.advanceAnimations.bind(this),Q)}),this.nextAnimationTime=Y}advanceAnimations(){let z=Date.now(),J=null;for(let Q of Object.keys(this.animations)){let Z=this.animations[Q],$=`ag-cell-${Q}`,X=`${$}-animation`;for(let[Y,q]of Z){if(!Y.isAlive()||!Y.comp){Z.delete(Y);continue}let{phase:G,flashEndTime:U,fadeEndTime:_}=q,H=G==="flash"?U:_;if(!(z+15>=H)){J=Math.min(H,J??1/0);continue}let{comp:B,eGui:{style:E}}=Y;switch(G){case"flash":B.toggleCss($,!1),B.toggleCss(X,!0),E.transition=`background-color ${_-U}ms`,E.transitionDelay=`${U-z}ms`,J=Math.min(_,J??1/0),q.phase="fade";break;case"fade":B.toggleCss($,!1),B.toggleCss(X,!1),E.removeProperty("transition"),E.removeProperty("transition-delay"),Z.delete(Y);break}}}if(J==null)this.nextAnimationTime=null,this.nextAnimationCycle=null;else if(J)this.nextAnimationCycle=setTimeout(this.advanceAnimations.bind(this),J-z),this.nextAnimationTime=J}onFlashCells(z,J){if(!z.comp)return;let Q=n4(z.cellPosition);if(J.cells[Q])this.animateCell(z,"highlight")}flashCell(z,J){this.animateCell(z,"data-changed",J?.flashDuration,J?.fadeDuration)}destroy(){for(let z of Object.keys(this.animations))this.animations[z].clear()}};function Gk(z,J={}){let{cellFlashSvc:Q}=z;if(!Q)return;z.frameworkOverrides.wrapIncoming(()=>{for(let Z of z.rowRenderer.getCellCtrls(J.rowNodes,J.columns))Q.flashCell(Z,J)})}var aX={moduleName:"HighlightChanges",version:i,beans:[qk],userComponents:{agAnimateShowChangeCellRenderer:Zk,agAnimateSlideCellRenderer:Yk},apiFunctions:{flashCells:Gk}};var Uk=class extends S{constructor(){super(...arguments);this.beanName="selectionColSvc"}postConstruct(){this.addManagedPropertyListener("rowSelection",(z)=>{this.onSelectionOptionsChanged(z.currentValue,z.previousValue,Dz(z.source))}),this.addManagedPropertyListener("selectionColumnDef",this.updateColumns.bind(this))}addColumns(z){let J=this.columns;if(J==null)return;z.list=J.list.concat(z.list),z.tree=J.tree.concat(z.tree),g2(z)}createColumns(z,J){let Q=()=>{U4(this.beans,this.columns?.tree),this.columns=null},Z=z.treeDepth,X=(this.columns?.treeDepth??-1)==Z,Y=this.generateSelectionCols();if(N2(Y,this.columns?.list??[])&&X)return;Q();let{colGroupSvc:G}=this.beans,U=G?.findDepth(z.tree)??0,_=G?.balanceTreeForAutoCols(Y,U)??[];this.columns={list:Y,tree:_,treeDepth:U,map:{}},J((W)=>{if(!W)return null;let B=W.filter((E)=>!i4(E));return[...Y,...B]})}updateColumns(z){let J=Dz(z.source),{beans:Q}=this;for(let Z of this.columns?.list??[]){let $=this.createSelectionColDef(z.currentValue);Z.setColDef($,null,J),a0(Q,{state:[vZ($,Z.colId)]},J)}}getColumn(z){return this.columns?.list.find((J)=>h4(J,z))??null}getColumns(){return this.columns?.list??null}isSelectionColumnEnabled(){let{gos:z,beans:J}=this,Q=z.get("rowSelection");if(typeof Q!=="object"||!s4(z))return!1;let Z=(J.autoColSvc?.getColumns()?.length??0)>0;if(Q.checkboxLocation==="autoGroupColumn"&&Z)return!1;let $=!!Fz(Q),X=k6(Q);return $||X}createSelectionColDef(z){let{gos:J}=this,Q=z??J.get("selectionColumnDef"),Z=J.get("enableRtl"),{rowSpan:$,spanRows:X,...Y}=Q??{};return{width:50,resizable:!1,suppressHeaderMenuButton:!0,sortable:!1,suppressMovable:!0,lockPosition:Z?"right":"left",comparator(q,G,U,_){let H=U.isSelected(),W=_.isSelected();return H===W?0:H?1:-1},editable:!1,suppressFillHandle:!0,suppressAutoSize:!0,pinned:null,...Y,colId:T9,chartDataType:"excluded"}}generateSelectionCols(){if(!this.isSelectionColumnEnabled())return[];let z=this.createSelectionColDef(),J=z.colId;this.gos.validateColDef(z,J,!0);let Q=new B4(z,null,J,!1);return this.createBean(Q),[Q]}onSelectionOptionsChanged(z,J,Q){let Z=J&&typeof J!=="string"?Fz(J):void 0,$=z&&typeof z!=="string"?Fz(z):void 0,X=Z!==$,Y=J&&typeof J!=="string"?k6(J):void 0,q=z&&typeof z!=="string"?k6(z):void 0,G=Y!==q,U=b1(z),_=b1(J);if(X||G||U!==_)this.beans.colModel.refreshAll(Q)}destroy(){U4(this.beans,this.columns?.tree),super.destroy()}refreshVisibility(z,J,Q){if(!this.columns?.list.length)return;let Z=z.length+J.length+Q.length;if(Z===0)return;let $=this.columns.list[0];if(!$.isVisible())return;let X=()=>{let G;switch($.pinned){case"left":case!0:G=z;break;case"right":G=Q;break;default:G=J}if(G)X0(G,$)};if((this.beans.rowNumbersSvc?.getColumn(v9)?2:1)===Z)X()}},_k=':where(.ag-selection-checkbox) .ag-checkbox-input-wrapper:before{content:"";cursor:pointer;inset:-8px;position:absolute}';function Hk(z,J){if(!J.nodes.every((Y)=>{if(Y.rowPinned&&!MJ(Y))return V(59),!1;if(Y.id===void 0)return V(60),!1;return!0}))return;let{nodes:Z,source:$,newValue:X}=J;z.selectionSvc?.setNodesSelected({nodes:Z,source:$??"api",newValue:X})}function Wk(z,J,Q="apiSelectAll"){z.selectionSvc?.selectAllRowNodes({source:Q,selectAll:J})}function Bk(z,J,Q="apiSelectAll"){z.selectionSvc?.deselectAllRowNodes({source:Q,selectAll:J})}function Ek(z,J="apiSelectAllFiltered"){z.selectionSvc?.selectAllRowNodes({source:J,selectAll:"filtered"})}function Kk(z,J="apiSelectAllFiltered"){z.selectionSvc?.deselectAllRowNodes({source:J,selectAll:"filtered"})}function Fk(z,J="apiSelectAllCurrentPage"){z.selectionSvc?.selectAllRowNodes({source:J,selectAll:"currentPage"})}function Lk(z,J="apiSelectAllCurrentPage"){z.selectionSvc?.deselectAllRowNodes({source:J,selectAll:"currentPage"})}function Dk(z){return z.selectionSvc?.getSelectedNodes()??[]}function Mk(z){return z.selectionSvc?.getSelectedRows()??[]}var oX=(z,J)=>{for(let Q=0,Z=z.length;Q{if(Q!=null){let X=Q.getSortedRows();for(let Y=0,q=X.length;Y{if(l0(Z),this.eCheckbox.isDisabled())return;this.beans.selectionSvc?.handleSelectionEvent(Z,this.rowNode,"checkboxSelected")}}),this.addManagedListeners(this.rowNode,{rowSelected:this.onSelectionChanged.bind(this),dataChanged:this.onDataChanged.bind(this),selectableChanged:this.onSelectableChanged.bind(this)}),this.addManagedPropertyListener("rowSelection",({currentValue:Z,previousValue:$})=>{let X=typeof Z==="object"?zQ(Z):void 0,Y=typeof $==="object"?zQ($):void 0;if(X!==Y)this.onSelectableChanged()}),NQ(this.gos)||typeof this.getIsVisible()==="function"){let Z=this.showOrHideSelect.bind(this);this.addManagedEventListeners({displayedColumnsChanged:Z}),this.addManagedListeners(this.rowNode,{dataChanged:Z,cellChanged:Z}),this.showOrHideSelect()}this.eCheckbox.getInputElement().setAttribute("tabindex","-1")}showOrHideSelect(){let{column:z,rowNode:J,overrides:Q,gos:Z}=this,$=J.selectable,X=this.getIsVisible(),Y;if(typeof X==="function"){let H=Q?.callbackParams;if(!z)Y=X({...H,node:J,data:J.data});else{let W=z.createColumnFunctionCallbackParams(J);Y=X({...H,...W})}}else Y=X??!1;let q=$&&!Y||!$&&Y,G=$||Y,U=Z.get("rowSelection"),_=U&&typeof U!=="string"?!zQ(U):!!z?.colDef.showDisabledCheckboxes;if(this.setVisible(G&&(q?_:!0)),this.setDisplayed(G&&(q?_:!0)),G)this.eCheckbox.setDisabled(q);if(Q?.removeHidden)this.setDisplayed(G)}getIsVisible(){let z=this.overrides;if(z)return z.isVisible;let J=this.gos.get("rowSelection");if(J&&typeof J!=="string")return Fz(J);return this.column?.colDef?.checkboxSelection}},Sk=class{constructor(z,J){this.rowModel=z,this.pinnedRowModel=J,this.selectAll=!1,this.rootId=null,this.endId=null,this.cachedRange=[]}reset(){this.rootId=null,this.endId=null,this.cachedRange.length=0}setRoot(z){this.rootId=z.id,this.endId=null,this.cachedRange.length=0}setEndRange(z){this.endId=z.id,this.cachedRange.length=0}getRange(){if(this.cachedRange.length===0){let z=this.getRoot(),J=this.getEnd();if(z==null||J==null)return this.cachedRange;this.cachedRange=this.getNodesInRange(z,J)??[]}return this.cachedRange}isInRange(z){if(this.rootId===null)return!1;return this.getRange().some((J)=>J.id===z.id)}getRoot(z){if(this.rootId)return this.getRowNode(this.rootId);if(z)return this.setRoot(z),z}getEnd(){if(this.endId)return this.getRowNode(this.endId)}getRowNode(z){let J,{rowModel:Q,pinnedRowModel:Z}=this;if(J??(J=Q.getRowNode(z)),Z?.isManual())J??(J=Z.getPinnedRowById(z,"top")),J??(J=Z.getPinnedRowById(z,"bottom"));return J}truncate(z){let J=this.getRange();if(J.length===0)return{keep:[],discard:[]};let Q=J[0].id===this.rootId,Z=J.findIndex(($)=>$.id===z.id);if(Z>-1){let $=J.slice(0,Z),X=J.slice(Z+1);return this.setEndRange(z),Q?{keep:$,discard:X}:{keep:X,discard:$}}else return{keep:J,discard:[]}}extend(z,J=!1){let Q=this.getRoot();if(Q==null){let $=this.getRange().slice();if(J)z.depthFirstSearch((X)=>!X.group&&$.push(X));return $.push(z),this.setRoot(z),{keep:$,discard:[]}}let Z=this.getNodesInRange(Q,z);if(!Z)return this.setRoot(z),{keep:[z],discard:[]};if(Z.find(($)=>$.id===this.endId))return this.setEndRange(z),{keep:this.getRange(),discard:[]};else{let $=this.getRange().slice();return this.setEndRange(z),{keep:this.getRange(),discard:$}}}getNodesInRange(z,J){let{pinnedRowModel:Q,rowModel:Z}=this;if(!Q?.isManual())return Z.getNodesInRangeForSelection(z,J);if(z.rowPinned==="top"&&!J.rowPinned)return z4(Q,"top",z,void 0).concat(Z.getNodesInRangeForSelection(Z.getRow(0),J)??[]);if(z.rowPinned==="bottom"&&!J.rowPinned){let $=z4(Q,"bottom",void 0,z),X=Z.getRowCount(),Y=Z.getRow(X-1);return(Z.getNodesInRangeForSelection(J,Y)??[]).concat($)}if(!z.rowPinned&&!J.rowPinned)return Z.getNodesInRangeForSelection(z,J);if(z.rowPinned==="top"&&J.rowPinned==="top")return z4(Q,"top",z,J);if(z.rowPinned==="bottom"&&J.rowPinned==="top"){let $=z4(Q,"top",J,void 0),X=z4(Q,"bottom",void 0,z),Y=Z.getRow(0),q=Z.getRow(Z.getRowCount()-1);return $.concat(Z.getNodesInRangeForSelection(Y,q)??[]).concat(X)}if(!z.rowPinned&&J.rowPinned==="top")return z4(Q,"top",J,void 0).concat(Z.getNodesInRangeForSelection(Z.getRow(0),z)??[]);if(z.rowPinned==="top"&&J.rowPinned==="bottom"){let $=z4(Q,"top",z,void 0),X=z4(Q,"bottom",void 0,J),Y=Z.getRow(0),q=Z.getRow(Z.getRowCount()-1);return $.concat(Z.getNodesInRangeForSelection(Y,q)??[]).concat(X)}if(z.rowPinned==="bottom"&&J.rowPinned==="bottom")return z4(Q,"bottom",z,J);if(!z.rowPinned&&J.rowPinned==="bottom"){let $=z4(Q,"bottom",void 0,J),X=Z.getRow(Z.getRowCount());return(Z.getNodesInRangeForSelection(z,X)??[]).concat($)}return null}},Vk=class extends S{constructor(z){super();this.column=z,this.cbSelectAllVisible=!1,this.processingEventFromCheckbox=!1}onSpaceKeyDown(z){let J=this.cbSelectAll;if(J.isDisplayed()&&!J.getGui().contains(n(this.beans)))z.preventDefault(),J.setValue(!J.getValue())}getCheckboxGui(){return this.cbSelectAll.getGui()}setComp(z){this.headerCellCtrl=z;let J=this.createManagedBean(new FJ);this.cbSelectAll=J,J.addCss("ag-header-select-all"),U0(J.getGui(),"presentation"),this.showOrHideSelectAll();let Q=this.updateStateOfCheckbox.bind(this);this.addManagedEventListeners({newColumnsLoaded:()=>this.showOrHideSelectAll(),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),selectionChanged:Q,paginationChanged:Q,modelUpdated:Q}),this.addManagedPropertyListener("rowSelection",({currentValue:Z,previousValue:$})=>{let X=(Y)=>typeof Y==="string"||!Y||Y.mode==="singleRow"?void 0:Y.selectAll;if(X(Z)!==X($))this.showOrHideSelectAll();this.updateStateOfCheckbox()}),this.addManagedListeners(J,{fieldValueChanged:this.onCbSelectAll.bind(this)}),J.getInputElement().setAttribute("tabindex","-1"),this.refreshSelectAllLabel()}onDisplayedColumnsChanged(z){if(!this.isAlive())return;this.showOrHideSelectAll(z.source==="uiColumnMoved")}showOrHideSelectAll(z=!1){let J=this.isCheckboxSelection();if(this.cbSelectAllVisible=J,this.cbSelectAll.setDisplayed(J),J)this.checkRightRowModelType("selectAllCheckbox"),this.checkSelectionType("selectAllCheckbox"),this.updateStateOfCheckbox();this.refreshSelectAllLabel(z)}updateStateOfCheckbox(){if(!this.cbSelectAllVisible||this.processingEventFromCheckbox)return;this.processingEventFromCheckbox=!0;let z=this.getSelectAllMode(),J=this.beans.selectionSvc,Q=this.cbSelectAll,Z=J.getSelectAllState(z);Q.setValue(Z);let $=J.hasNodesToSelect(z);Q.setDisabled(!$),this.refreshSelectAllLabel(),this.processingEventFromCheckbox=!1}refreshSelectAllLabel(z=!1){let J=this.getLocaleTextFunc(),{headerCellCtrl:Q,cbSelectAll:Z,cbSelectAllVisible:$}=this,X=Z.getValue(),Y=BZ(J,X),q=J("ariaRowSelectAll","Press Space to toggle all rows selection");if(Q.setAriaDescriptionProperty("selectAll",$?`${q} (${Y})`:null),Z.setInputAriaLabel(J("ariaHeaderSelection","Column with Header Selection")),!z)Q.announceAriaDescription()}checkSelectionType(z){if(!S2(this.gos))return V(128,{feature:z}),!1;return!0}checkRightRowModelType(z){let{gos:J,rowModel:Q}=this.beans;if(!(o(J)||Az(J)))return V(129,{feature:z,rowModel:Q.getType()}),!1;return!0}onCbSelectAll(){if(this.processingEventFromCheckbox)return;if(!this.cbSelectAllVisible)return;let z=this.cbSelectAll.getValue(),J=this.getSelectAllMode(),Q="uiSelectAll";if(J==="currentPage")Q="uiSelectAllCurrentPage";else if(J==="filtered")Q="uiSelectAllFiltered";let Z={source:Q,selectAll:J},$=this.beans.selectionSvc;if(z)$.selectAllRowNodes(Z);else $.deselectAllRowNodes(Z)}isCheckboxSelection(){let{column:z,gos:J,beans:Q}=this,X=typeof J.get("rowSelection")==="object"?"headerCheckbox":"headerCheckboxSelection";return eX(Q,z)&&this.checkRightRowModelType(X)&&this.checkSelectionType(X)}getSelectAllMode(){let z=k9(this.gos,!1);if(z)return z;let{headerCheckboxSelectionCurrentPageOnly:J,headerCheckboxSelectionFilteredOnly:Q}=this.column.colDef;if(J)return"currentPage";if(Q)return"filtered";return"all"}destroy(){super.destroy(),this.cbSelectAll=void 0,this.headerCellCtrl=void 0}};function eX({gos:z,selectionColSvc:J},Q){let Z=z.get("rowSelection"),$=Q.colDef,{headerCheckboxSelection:X}=$,Y=!1;if(typeof Z==="object"){let G=i4(Q),U=Z1(Q);if(b1(Z)==="autoGroupColumn"&&U||G&&J?.isSelectionColumnEnabled())Y=k6(Z)}else if(typeof X==="function")Y=X(C(z,{column:Q,colDef:$}));else Y=!!X;return Y}var Rk=class extends S{postConstruct(){let{gos:z,beans:J}=this;this.selectionCtx=new Sk(J.rowModel,J.pinnedRowModel),this.addManagedPropertyListeners(["isRowSelectable","rowSelection"],()=>{let Q=NQ(z);if(Q!==this.isRowSelectable)this.isRowSelectable=Q,this.updateSelectable()}),this.isRowSelectable=NQ(z),this.addManagedEventListeners({cellValueChanged:(Q)=>this.updateRowSelectable(Q.node),rowNodeDataChanged:(Q)=>this.updateRowSelectable(Q.node)})}destroy(){super.destroy(),this.selectionCtx.reset()}createCheckboxSelectionComponent(){return new fk}createSelectAllFeature(z){if(eX(this.beans,z))return new Vk(z)}isMultiSelect(){return S2(this.gos)}onRowCtrlSelected(z,J,Q){let Z=!!z.rowNode.isSelected();z.forEachGui(Q,($)=>{$.rowComp.toggleCss("ag-row-selected",Z);let X=$.element;if(o6(X,Z),X.contains(n(this.beans)))J($)})}announceAriaRowSelection(z){if(this.isRowSelectionBlocked(z))return;let J=z.isSelected(),Q=this.beans.editSvc?.isEditing({rowNode:z});if(!z.selectable||Q)return;let $=this.getLocaleTextFunc()(J?"ariaRowDeselect":"ariaRowSelect",`Press SPACE to ${J?"deselect":"select"} this row`);this.beans.ariaAnnounce?.announceValue($,"rowSelection")}isRowSelectionBlocked(z){return!z.selectable||z.rowPinned&&!MJ(z)||!s4(this.gos)}updateRowSelectable(z,J){let Q=z.rowPinned&&z.pinnedSibling?z.pinnedSibling.selectable:this.isRowSelectable?.(z)??!0;return this.setRowSelectable(z,Q,J),Q}setRowSelectable(z,J,Q){if(z.selectable!==J){if(z.selectable=J,z.dispatchRowEvent("selectableChanged"),Q)return;if(V2(this.gos)){let $=this.calculateSelectedFromChildren(z);this.setNodesSelected({nodes:[z],newValue:$??!1,source:"selectableChanged"});return}if(z.isSelected()&&!z.selectable)this.setNodesSelected({nodes:[z],newValue:!1,source:"selectableChanged"})}}calculateSelectedFromChildren(z){let J=!1,Q=!1;if(!z.childrenAfterGroup?.length)return z.selectable?z.__selected:null;for(let Z=0;Z{let J=V2(z),Q=y6(z),Z=b6(z)==="filteredDescendants";if(this.masterSelectsDetail=f7(z)==="detail",J!==this.groupSelectsDescendants||Z!==this.groupSelectsFiltered||Q!==this.mode)this.deselectAllRowNodes({source:"api"}),this.groupSelectsDescendants=J,this.groupSelectsFiltered=Z,this.mode=Q}),this.addManagedEventListeners({rowSelected:this.onRowSelected.bind(this)})}destroy(){super.destroy(),this.resetNodes()}handleSelectionEvent(z,J,Q){if(this.isRowSelectionBlocked(J))return 0;let Z=this.inferNodeSelections(J,z.shiftKey,z.metaKey||z.ctrlKey,Q);if(Z==null)return 0;if(this.selectionCtx.selectAll=!1,"select"in Z){if(Z.reset)this.resetNodes();else this.selectRange(Z.deselect,!1,Q);return this.selectRange(Z.select,!0,Q)}else{let $=Z.checkFilteredNodes?JY(Z.node):Z.newValue;return this.setNodesSelected({nodes:[Z.node],newValue:$,clearSelection:Z.clearSelection,keepDescendants:Z.keepDescendants,event:z,source:Q})}}setNodesSelected({newValue:z,clearSelection:J,suppressFinishActions:Q,nodes:Z,event:$,source:X,keepDescendants:Y=!1}){if(Z.length===0)return 0;let{gos:q}=this;if(!s4(q)&&z)return V(132),0;if(Z.length>1&&!this.isMultiSelect())return V(130),0;let G=0;for(let U=0;U0)this.updateGroupsFromChildrenSelections(X),this.dispatchSelectionChanged(X)}return G}selectRange(z,J,Q){let Z=0;if(z.forEach(($)=>{let X=$.primaryRow;if(X.group&&this.groupSelectsDescendants)return;if(this.selectRowNode(X,J,void 0,Q))Z++}),Z>0)this.updateGroupsFromChildrenSelections(Q),this.dispatchSelectionChanged(Q);return Z}selectChildren(z,J,Q){let Z=this.groupSelectsFiltered?z.childrenAfterAggFilter:z.childrenAfterGroup;if(!Z)return 0;return this.setNodesSelected({newValue:J,clearSelection:!1,suppressFinishActions:!0,source:Q,nodes:Z})}getSelectedNodes(){return Array.from(this.selectedNodes.values())}getSelectedRows(){let z=[];return this.selectedNodes.forEach((J)=>J.data&&z.push(J.data)),z}getSelectionCount(){return this.selectedNodes.size}filterFromSelection(z){let J=new Map;this.selectedNodes.forEach((Q,Z)=>{if(z(Q))J.set(Z,Q)}),this.selectedNodes=J}updateGroupsFromChildrenSelections(z,J){if(!this.groupSelectsDescendants)return!1;let{gos:Q,rowModel:Z}=this.beans;if(!o(Q,Z))return!1;let $=Z.rootNode;if(!$)return!1;let X=!1,Y=(q)=>{if(q!==$){let G=this.calculateSelectedFromChildren(q);X=this.selectRowNode(q,G===null?!1:G,void 0,z)||X}};return r0($,this.beans.rowModel.hierarchical,J,Y),X}clearOtherNodes(z,J,Q){let Z=new Map,$=0;return this.selectedNodes.forEach((X)=>{let Y=X.id==z.id;if((J?!Ok(z,X):!0)&&!Y){let G=this.selectedNodes.get(X.id);if($+=this.setNodesSelected({nodes:[G],newValue:!1,clearSelection:!1,suppressFinishActions:!0,source:Q}),this.groupSelectsDescendants&&X.parent)Z.set(X.parent.id,X.parent)}}),Z.forEach((X)=>{let Y=this.calculateSelectedFromChildren(X);this.selectRowNode(X,Y===null?!1:Y,void 0,Q)}),$}onRowSelected(z){let J=z.node;if(this.groupSelectsDescendants&&J.group)return;if(J.isSelected())this.selectedNodes.set(J.id,J);else this.selectedNodes.delete(J.id)}syncInRowNode(z,J){this.syncInOldRowNode(z,J),this.syncInNewRowNode(z)}createDaemonNode(z){if(!z.id)return;let J=new Pz(this.beans);return J.id=z.id,J.data=z.data,J.__selected=z.__selected,J.level=z.level,J}syncInOldRowNode(z,J){if(J&&z.id!==J.id){if(this.selectedNodes.get(J.id)==z)this.selectedNodes.set(J.id,J)}}syncInNewRowNode(z){if(this.selectedNodes.has(z.id))z.__selected=!0,this.selectedNodes.set(z.id,z);else z.__selected=!1}reset(z){let J=this.getSelectionCount();if(this.resetNodes(),J)this.dispatchSelectionChanged(z)}resetNodes(){this.selectedNodes.forEach((z)=>{this.selectRowNode(z,!1)}),this.selectedNodes.clear()}getBestCostNodeSelection(){let{gos:z,rowModel:J}=this.beans;if(!o(z,J))return;let Q=J.getTopLevelNodes();if(Q===null)return;let Z=[];function $(X){for(let Y=0,q=X.length;Y{let Y=this.selectRowNode(X.primaryRow,!1,void 0,z);Z||(Z=Y)};if(J==="currentPage"||J==="filtered"){if(!Q){r(102);return}this.getNodesToSelect(J).forEach($)}else this.selectedNodes.forEach($),this.reset(z);if(this.selectionCtx.selectAll=!1,Q&&this.groupSelectsDescendants){let X=this.updateGroupsFromChildrenSelections(z);Z||(Z=X)}if(Z)this.dispatchSelectionChanged(z)}getSelectedCounts(z){let J=0,Q=0;return this.getNodesToSelect(z).forEach((Z)=>{if(this.groupSelectsDescendants&&Z.group)return;if(Z.isSelected())J++;else if(Z.selectable)Q++}),{selectedCount:J,notSelectedCount:Q}}getSelectAllState(z){let{selectedCount:J,notSelectedCount:Q}=this.getSelectedCounts(z);return zY(J,Q)??null}hasNodesToSelect(z){return this.getNodesToSelect(z).filter((J)=>J.selectable).length>0}getNodesToSelect(z){if(!this.canSelectAll())return[];let J=[],Q=($)=>J.push($);if(z==="currentPage")return this.forEachNodeOnPage(($)=>{if(!$.group){Q($);return}if(!$.footer&&!$.expanded){let X=(Y)=>{Q(Y);let q=Y.childrenAfterFilter;if(q)for(let G=0,U=q.length;G{let q=this.selectRowNode(Y.primaryRow,!0,void 0,Z);X||(X=q)}),Q.selectAll=!0,o(J)&&this.groupSelectsDescendants){let Y=this.updateGroupsFromChildrenSelections(Z);X||(X=Y)}if(X)this.dispatchSelectionChanged(Z)}getSelectionState(){return this.isEmpty()?null:Array.from(this.selectedNodes.keys())}setSelectionState(z,J,Q){if(!z)z=[];if(!Array.isArray(z)){r(103);return}let Z=new Set(z),$=[];if(this.beans.rowModel.forEachNode((X)=>{if(Z.has(X.id))$.push(X)}),Q)this.resetNodes();this.setNodesSelected({newValue:!0,nodes:$,source:J})}canSelectAll(){return o(this.beans.gos)}updateSelectable(z){let{gos:J,rowModel:Q}=this.beans;if(!s4(J))return;let Z="selectableChanged",$=o(J)&&this.groupSelectsDescendants,X=[];if($){let Y=Q.rootNode;if(Y)r0(Y,Q.hierarchical,z,(q)=>{let G=!1;for(let U of q.childrenAfterGroup)if(G||(G=U.selectable),!U.group&&!this.updateRowSelectable(U,!0)&&U.isSelected())X.push(U);this.setRowSelectable(q,G,!0)})}else Q.forEachNode((Y)=>{if(!this.updateRowSelectable(Y,!0)&&Y.isSelected())X.push(Y)});if(X.length)this.setNodesSelected({nodes:X,newValue:!1,source:Z});if(!z&&$)this.updateGroupsFromChildrenSelections?.(Z)}updateSelectableAfterGrouping(z){if(this.updateSelectable(z),this.groupSelectsDescendants){if(this.updateGroupsFromChildrenSelections?.("rowGroupChanged",z))this.dispatchSelectionChanged("rowGroupChanged")}}refreshMasterNodeState(z,J){if(!this.masterSelectsDetail)return;let Q=z.detailNode?.detailGridInfo?.api;if(!Q)return;let Z=jk(Q);if(z.isSelected()!==Z){if(this.selectRowNode(z,Z,J,"masterDetail"))this.dispatchSelectionChanged("masterDetail")}if(!Z)this.detailSelection.set(z.id,new Set(Q.getSelectedNodes().map((X)=>X.id)))}setDetailSelectionState(z,J,Q){if(!this.masterSelectsDetail)return;if(!S2(J)){V(269);return}switch(z.isSelected()){case!0:{Q.selectAll();break}case!1:{Q.deselectAll();break}case void 0:{let Z=this.detailSelection.get(z.id);if(Z){let $=[];for(let X of Z){let Y=Q.getRowNode(X);if(Y)$.push(Y)}Q.setNodesSelected({nodes:$,newValue:!0,source:"masterDetail"})}break}default:break}}dispatchSelectionChanged(z){this.eventSvc.dispatchEvent({type:"selectionChanged",source:z,selectedNodes:this.getSelectedNodes(),serverSideState:null})}};function jk(z){let J=0,Q=0;return z.forEachNode((Z)=>{if(Z.isSelected())J++;else if(Z.selectable)Q++}),zY(J,Q)}function zY(z,J){if(z===0&&J===0)return!1;if(z>0&&J>0)return;return z>0}function Ok(z,J){let Q=J.parent;while(Q){if(Q===z)return!0;Q=Q.parent}return!1}function JY(z){let J=z.isSelected()===!1,Q=z.childrenAfterFilter?.some(JY)??!1;return J||Q}var Pk={moduleName:"SharedRowSelection",version:i,beans:[Uk],css:[_k],apiFunctions:{setNodesSelected:Hk,selectAll:Wk,deselectAll:Bk,selectAllFiltered:Ek,deselectAllFiltered:Kk,selectAllOnCurrentPage:Fk,deselectAllOnCurrentPage:Lk,getSelectedNodes:Dk,getSelectedRows:Mk}},QY={moduleName:"RowSelection",version:i,rowModels:["clientSide","infinite","viewport"],beans:[Ak],dependsOn:[Pk]},Tk=class extends S{constructor(z,J){super();this.cellCtrl=z,this.staticClasses=[],this.beans=J,this.column=z.column}setComp(z){this.cellComp=z,this.applyUserStyles(),this.applyCellClassRules(),this.applyClassesFromColDef()}applyCellClassRules(){let{column:z,cellComp:J}=this,Q=z.colDef,Z=Q.cellClassRules,$=this.getCellClassParams(z,Q);ZX(this.beans.expressionSvc,Z===this.cellClassRules?void 0:this.cellClassRules,Z,$,(X)=>J.toggleCss(X,!0),(X)=>J.toggleCss(X,!1)),this.cellClassRules=Z}applyUserStyles(){let z=this.column,J=z.colDef,Q=J.cellStyle;if(!Q)return;let Z;if(typeof Q==="function"){let $=this.getCellClassParams(z,J);Z=Q($)}else Z=Q;if(Z)this.cellComp.setUserStyles(Z)}applyClassesFromColDef(){let{column:z,cellComp:J}=this,Q=z.colDef,Z=this.getCellClassParams(z,Q);for(let X of this.staticClasses)J.toggleCss(X,!1);let $=this.beans.cellStyles.getStaticCellClasses(Q,Z);this.staticClasses=$;for(let X of $)J.toggleCss(X,!0)}getCellClassParams(z,J){let{value:Q,rowNode:Z}=this.cellCtrl;return C(this.beans.gos,{value:Q,data:Z.data,node:Z,colDef:J,column:z,rowIndex:Z.rowIndex})}},vk=class extends S{constructor(){super(...arguments);this.beanName="cellStyles"}processAllCellClasses(z,J,Q,Z){ZX(this.beans.expressionSvc,void 0,z.cellClassRules,J,Q,Z),this.processStaticCellClasses(z,J,Q)}getStaticCellClasses(z,J){let{cellClass:Q}=z;if(!Q)return[];let Z;if(typeof Q==="function")Z=Q(J);else Z=Q;if(typeof Z==="string")Z=[Z];return Z||[]}createCellCustomStyleFeature(z){return new Tk(z,this.beans)}processStaticCellClasses(z,J,Q){this.getStaticCellClasses(z,J).forEach(($)=>{Q($)})}},ZY={moduleName:"CellStyle",version:i,beans:[vk]};var Ik={enableBrowserTooltips:!0,tooltipTrigger:!0,tooltipMouseTrack:!0,tooltipShowMode:!0,tooltipInteraction:!0,defaultColGroupDef:!0,suppressAutoSize:!0,skipHeaderOnAutoSize:!0,autoSizeStrategy:!0,components:!0,stopEditingWhenCellsLoseFocus:!0,undoRedoCellEditing:!0,undoRedoCellEditingLimit:!0,excelStyles:!0,cacheQuickFilter:!0,customChartThemes:!0,chartThemeOverrides:!0,chartToolPanelsDef:!0,loadingCellRendererSelector:!0,localeText:!0,keepDetailRows:!0,keepDetailRowsCount:!0,detailRowHeight:!0,detailRowAutoHeight:!0,tabIndex:!0,valueCache:!0,valueCacheNeverExpires:!0,enableCellExpressions:!0,suppressTouch:!0,suppressBrowserResizeObserver:!0,suppressPropertyNamesCheck:!0,debug:!0,dragAndDropImageComponent:!0,overlayComponent:!0,suppressOverlays:!0,loadingOverlayComponent:!0,suppressLoadingOverlay:!0,noRowsOverlayComponent:!0,paginateChildRows:!0,pivotPanelShow:!0,pivotSuppressAutoColumn:!0,suppressExpandablePivotGroups:!0,aggFuncs:!0,allowShowChangeAfterFilter:!0,ensureDomOrder:!0,enableRtl:!0,suppressColumnVirtualisation:!0,suppressMaxRenderedRowRestriction:!0,suppressRowVirtualisation:!0,rowDragText:!0,groupLockGroupColumns:!0,suppressGroupRowsSticky:!0,rowModelType:!0,cacheOverflowSize:!0,infiniteInitialRowCount:!0,serverSideInitialRowCount:!0,maxBlocksInCache:!0,maxConcurrentDatasourceRequests:!0,blockLoadDebounceMillis:!0,serverSideOnlyRefreshFilteredGroups:!0,serverSidePivotResultFieldSeparator:!0,viewportRowModelPageSize:!0,viewportRowModelBufferSize:!0,debounceVerticalScrollbar:!0,suppressAnimationFrame:!0,suppressPreventDefaultOnMouseWheel:!0,scrollbarWidth:!0,icons:!0,suppressRowTransform:!0,suppressContentVisibilityAuto:!0,gridId:!0,enableGroupEdit:!0,initialState:!0,processUnpinnedColumns:!0,createChartContainer:!0,getLocaleText:!0,getRowId:!0,reactiveCustomComponents:!0,renderingMode:!0,columnMenu:!0,suppressSetFilterByDefault:!0,getDataPath:!0,enableCellSpan:!0,enableFilterHandlers:!0,filterHandlers:!0},u0="clientSide",b0="serverSide",M1="infinite",Ck={onGroupExpandedOrCollapsed:[u0],refreshClientSideRowModel:[u0],isRowDataEmpty:[u0],forEachLeafNode:[u0],forEachNodeAfterFilter:[u0],forEachNodeAfterFilterAndSort:[u0],resetRowHeights:[u0,b0],applyTransaction:[u0],applyTransactionAsync:[u0],flushAsyncTransactions:[u0],getBestCostNodeSelection:[u0],getServerSideSelectionState:[b0],setServerSideSelectionState:[b0],applyServerSideTransaction:[b0],applyServerSideTransactionAsync:[b0],applyServerSideRowData:[b0],retryServerSideLoads:[b0],flushServerSideAsyncTransactions:[b0],refreshServerSide:[b0],getServerSideGroupLevelState:[b0],refreshInfiniteCache:[M1],purgeInfiniteCache:[M1],getInfiniteRowCount:[M1],isLastRowIndexKnown:[M1,b0],expandAll:[u0,b0],collapseAll:[u0,b0],onRowHeightChanged:[u0,b0],setRowCount:[M1,b0],getCacheBlockState:[M1,b0]},yk={showLoadingOverlay:{version:"v32",message:'`showLoadingOverlay` is deprecated. Use the grid option "loading"=true instead or setGridOption("loading", true).'},clearRangeSelection:{version:"v32.2",message:"Use `clearCellSelection` instead."},getInfiniteRowCount:{version:"v32.2",old:"getInfiniteRowCount()",new:"getDisplayedRowCount()"},selectAllFiltered:{version:"v33",old:"selectAllFiltered()",new:'selectAll("filtered")'},deselectAllFiltered:{version:"v33",old:"deselectAllFiltered()",new:'deselectAll("filtered")'},selectAllOnCurrentPage:{version:"v33",old:"selectAllOnCurrentPage()",new:'selectAll("currentPage")'},deselectAllOnCurrentPage:{version:"v33",old:"deselectAllOnCurrentPage()",new:'deselectAll("currentPage")'}};function bk(z,J,Q){let Z=yk[z];if(Z){let{version:X,new:Y,old:q,message:G}=Z,U=q??z;return(..._)=>{let H=Y?`Please use ${Y} instead. `:"";return y4(`Since ${X} api.${U} is deprecated. ${H}${G??""}`),J.apply(J,_)}}let $=Ck[z];if($)return(...X)=>{let Y=Q.rowModel.getType();if(!$.includes(Y)){O1(`api.${z} can only be called when gridOptions.rowModelType is ${$.join(" or ")}`);return}return J.apply(J,X)};return J}var xk={detailCellRendererCtrl:"SharedMasterDetail",dndSourceComp:"DragAndDrop",fillHandle:"CellSelection",groupCellRendererCtrl:"GroupCellRenderer",headerFilterCellCtrl:"ColumnFilter",headerGroupCellCtrl:"ColumnGroup",rangeHandle:"CellSelection",tooltipFeature:"Tooltip",highlightTooltipFeature:"Tooltip",tooltipStateManager:"Tooltip",groupStrategy:"RowGrouping",treeGroupStrategy:"TreeData",rowNumberRowResizer:"RowNumbers",singleCell:"EditCore",fullRow:"EditCore",agSetColumnFilterHandler:"SetFilter",agMultiColumnFilterHandler:"MultiFilter",agGroupColumnFilterHandler:"GroupFilter",agNumberColumnFilterHandler:"NumberFilter",agBigIntColumnFilterHandler:"BigIntFilter",agDateColumnFilterHandler:"DateFilter",agTextColumnFilterHandler:"TextFilter"},wk={expanded:1,contracted:1,"tree-closed":1,"tree-open":1,"tree-indeterminate":1,pin:1,"eye-slash":1,arrows:1,left:1,right:1,group:1,aggregation:1,pivot:1,"not-allowed":1,chart:1,cross:1,cancel:1,tick:1,first:1,previous:1,next:1,last:1,linked:1,unlinked:1,"color-picker":1,loading:1,menu:1,"menu-alt":1,filter:1,"filter-add":1,columns:1,maximize:1,minimize:1,copy:1,cut:1,paste:1,grip:1,save:1,csv:1,excel:1,"small-down":1,"small-left":1,"small-right":1,"small-up":1,asc:1,desc:1,aasc:1,adesc:1,none:1,up:1,down:1,plus:1,minus:1,settings:1,"checkbox-checked":1,"checkbox-indeterminate":1,"checkbox-unchecked":1,"radio-button-on":1,"radio-button-off":1,eye:1,"column-arrow":1,"un-pin":1,"pinned-top":1,"pinned-bottom":1,"chevron-up":1,"chevron-down":1,"chevron-left":1,"chevron-right":1,edit:1,search:1},Nk={chart:"MenuCore",cancel:"EnterpriseCore",first:"Pagination",previous:"Pagination",next:"Pagination",last:"Pagination",linked:"IntegratedCharts",loadingMenuItems:"MenuCore",unlinked:"IntegratedCharts",menu:"ColumnHeaderComp",legacyMenu:"ColumnMenu",filter:"ColumnFilter",filterActive:"ColumnFilter",filterAdd:"NewFiltersToolPanel",filterCardCollapse:"NewFiltersToolPanel",filterCardExpand:"NewFiltersToolPanel",filterCardEditing:"NewFiltersToolPanel",filterTab:"ColumnMenu",filtersToolPanel:"FiltersToolPanel",columns:["MenuCore"],columnsToolPanel:["ColumnsToolPanel"],maximize:"EnterpriseCore",minimize:"EnterpriseCore",save:"MenuCore",columnGroupOpened:"ColumnGroupHeaderComp",columnGroupClosed:"ColumnGroupHeaderComp",accordionOpen:"EnterpriseCore",accordionClosed:"EnterpriseCore",accordionIndeterminate:"EnterpriseCore",columnSelectClosed:["ColumnsToolPanel","ColumnMenu"],columnSelectOpen:["ColumnsToolPanel","ColumnMenu"],columnSelectIndeterminate:["ColumnsToolPanel","ColumnMenu"],columnMovePin:"SharedDragAndDrop",columnMoveHide:"SharedDragAndDrop",columnMoveMove:"SharedDragAndDrop",columnMoveLeft:"SharedDragAndDrop",columnMoveRight:"SharedDragAndDrop",columnMoveGroup:"SharedDragAndDrop",columnMoveValue:"SharedDragAndDrop",columnMovePivot:"SharedDragAndDrop",dropNotAllowed:"SharedDragAndDrop",ensureColumnVisible:["ColumnsToolPanel","ColumnMenu"],groupContracted:"GroupCellRenderer",groupExpanded:"GroupCellRenderer",setFilterGroupClosed:"SetFilter",setFilterGroupOpen:"SetFilter",setFilterGroupIndeterminate:"SetFilter",setFilterLoading:"SetFilter",close:"EnterpriseCore",check:"MenuItem",colorPicker:"CommunityCore",groupLoading:"LoadingCellRenderer",overlayLoading:"Overlay",overlayExporting:"Overlay",menuAlt:"ColumnHeaderComp",menuPin:"MenuCore",menuValue:"MenuCore",menuAddRowGroup:["MenuCore","ColumnsToolPanel"],menuRemoveRowGroup:["MenuCore","ColumnsToolPanel"],clipboardCopy:"MenuCore",clipboardCut:"MenuCore",clipboardPaste:"MenuCore",pivotPanel:["ColumnsToolPanel","RowGroupingPanel"],rowGroupPanel:["ColumnsToolPanel","RowGroupingPanel"],valuePanel:"ColumnsToolPanel",columnDrag:"EnterpriseCore",rowDrag:["RowDrag","DragAndDrop"],csvExport:"MenuCore",excelExport:"MenuCore",smallDown:"CommunityCore",selectOpen:"CommunityCore",richSelectOpen:"RichSelect",richSelectRemove:"RichSelect",richSelectLoading:"RichSelect",smallLeft:"CommunityCore",smallRight:"CommunityCore",subMenuOpen:"MenuItem",subMenuOpenRtl:"MenuItem",panelDelimiter:"RowGroupingPanel",panelDelimiterRtl:"RowGroupingPanel",smallUp:"CommunityCore",sortAscending:["MenuCore","Sort"],sortDescending:["MenuCore","Sort"],sortAbsoluteAscending:["MenuCore","Sort"],sortAbsoluteDescending:["MenuCore","Sort"],sortUnSort:["MenuCore","Sort"],advancedFilterBuilder:"AdvancedFilter",advancedFilterBuilderDrag:"AdvancedFilter",advancedFilterBuilderInvalid:"AdvancedFilter",advancedFilterBuilderMoveUp:"AdvancedFilter",advancedFilterBuilderMoveDown:"AdvancedFilter",advancedFilterBuilderAdd:"AdvancedFilter",advancedFilterBuilderRemove:"AdvancedFilter",advancedFilterBuilderSelectOpen:"AdvancedFilter",chartsMenu:"IntegratedCharts",chartsMenuEdit:"IntegratedCharts",chartsMenuAdvancedSettings:"IntegratedCharts",chartsMenuAdd:"IntegratedCharts",chartsColorPicker:"IntegratedCharts",chartsThemePrevious:"IntegratedCharts",chartsThemeNext:"IntegratedCharts",chartsDownload:"IntegratedCharts",checkboxChecked:"CommunityCore",checkboxIndeterminate:"CommunityCore",checkboxUnchecked:"CommunityCore",radioButtonOn:"CommunityCore",radioButtonOff:"CommunityCore",rowPin:"PinnedRow",rowUnpin:"PinnedRow",rowPinBottom:"PinnedRow",rowPinTop:"PinnedRow",search:"Find"},gk=new Set(["colorPicker","smallUp","checkboxChecked","checkboxIndeterminate","checkboxUnchecked","radioButtonOn","radioButtonOff","smallDown","smallLeft","smallRight"]),hk=class extends S{constructor(){super(...arguments);this.beanName="validation",this.propertyNameCache=new Map}wireBeans(z){this.gridOptions=z.gridOptions,eG(gF)}warnOnInitialPropertyUpdate(z,J){if(z==="api"&&Ik[J])V(22,{key:J})}processGridOptions(z){this.processOptions(z,b3())}validateApiFunction(z,J){return bk(z,J,this.beans)}missingUserComponent(z,J,Q,Z){let $=C1[J];if($)this.gos.assertModuleRegistered($,`AG Grid '${z}' component: ${J}`);else V(101,{propertyName:z,componentName:J,agGridDefaults:Q,jsComps:Z})}missingDynamicBean(z){let J=xk[z];return J?Y4(200,{...this.gos.getModuleErrorParams(),moduleName:J,reasonOrId:z}):void 0}checkRowEvents(z){if(uk.has(z))V(10,{eventType:z})}validateIcon(z){if(gk.has(z))V(43,{iconName:z});if(wk[z])return;let J=Nk[z];if(J){r(200,{reasonOrId:`icon '${z}'`,moduleName:J,gridScoped:SZ(),gridId:this.beans.context.getId(),rowModelType:this.gos.get("rowModelType"),additionalText:"Alternatively, use the CSS icon name directly."});return}V(134,{iconName:z})}isProvidedUserComp(z){return!!C1[z]}validateColDef(z){this.processOptions(z,V3())}processOptions(z,J){let{validations:Q,deprecations:Z,allProperties:$,allValidNames:X,objectName:Y,docsUrl:q}=J,G=Object.keys(z),U=this.propertyNameCache.get(Y);if(!U)U=new Map,this.propertyNameCache.set(Y,U);let _=this.gridOptions.suppressPropertyNamesCheck!==!0,H=!1;for(let B of G){if(U.has(B))continue;let E=Z[B];if(E){let{message:L,version:D}=E;y4(`As of v${D}, ${B} is deprecated. ${L??""}`)}let K=Q[B],F=this.gridOptions.rowModelType??"clientSide";if(K?.supportedRowModels&&!K.supportedRowModels.includes(F)){let L=z[B];if(L==null||L===!1)continue;y4(`${B} is not supported with the '${F}' row model. It is only valid with: ${K.supportedRowModels.join(", ")}.`),U.set(B,!1);continue}if(!X.has(B)){if(_){let L=oQ({inputValue:B,allSuggestions:$}).values,D=`invalid ${Y} property '${B}' did you mean any of these: ${L.slice(0,8).join(", ")}.`;if(X.has("context"))D+=` +If you are trying to annotate ${Y} with application data, use the '${Y}.context' property instead.`;y4(D)}H=!0,U.set(B,!1);continue}U.set(B,!0)}if(H&&q&&_){let B=this.beans.frameworkOverrides.getDocLink(q);y4(`to see all the valid ${Y} properties please check: ${B}`)}let W=new Set;if(G.forEach((B)=>{if(U.get(B)===!1)return;let E=z[B];if(E==null||E===!1)return;let K=Q[B];if(!K)return;let{dependencies:F,validate:L,expectedType:D}=K;if(D){let M=typeof E;if(M!==D){W.add(`${String(B)} should be of type '${D}' but received '${M}' (${E}).`);return}}if(F){let M=this.checkForRequiredDependencies(B,F,z);if(M){W.add(M);return}}if(L){let M=L(z,this.gridOptions,this.beans);if(M){W.add(M);return}}}),W.size>0)for(let B of W)y4(B)}checkForRequiredDependencies(z,J,Q){let $=Object.entries(J).filter(([X,Y])=>{let q=Q[X];return!Y.required.includes(q)});if($.length===0)return null;return $.map(([X,Y])=>`'${String(z)}' requires '${X}' to be one of [${Y.required.map((q)=>{if(q===null)return"null";else if(q===void 0)return"undefined";return q}).join(", ")}]. ${Y.reason??""}`).join(` + `)}},uk=new Set(["firstChildChanged","lastChildChanged","childIndexChanged"]),$Y={moduleName:"Validation",version:i,beans:[hk]};var a1=class extends S{constructor(){super(...arguments);this.dispatchColumnChangedEvent=v$,this.columns=[],this.columnIndexMap={},this.updateIndexMap=()=>{this.columnIndexMap={},this.columns.forEach((z,J)=>this.columnIndexMap[z.getId()]=J)}}wireBeans(z){this.colModel=z.colModel,this.aggFuncSvc=z.aggFuncSvc,this.visibleCols=z.visibleCols,this.groupHierarchCols=z.groupHierarchyColSvc}sortColumns(z){let{groupHierarchCols:J}=this;this.columns.sort((Q,Z)=>J?.compareVirtualColumns(Q,Z)??z(Q,Z)),this.updateIndexMap()}setColumns(z,J){this.setColList(z,this.columns,this.eventName,!0,!0,this.columnProcessors.set,J)}addColumns(z,J){this.updateColList(z,this.columns,!0,!0,this.columnProcessors.add,this.eventName,J)}removeColumns(z,J){this.updateColList(z,this.columns,!1,!0,this.columnProcessors.remove,this.eventName,J)}getColumnIndex(z){return this.columnIndexMap[z]}setColList(z=[],J,Q,Z,$,X,Y){let q=this.colModel.getCols();if(!q||q.length===0)return;let G=new Map;J.forEach((_,H)=>G.set(_,H)),J.length=0;for(let _ of z){let H=this.colModel.getColDefCol(_);if(H)J.push(H)}J.forEach((_,H)=>{let W=G.get(_);if(W===void 0){G.set(_,0);return}if(Z&&W!==H)return;G.delete(_)}),this.updateIndexMap();let U=this.colModel.getColDefCols();for(let _ of U??[]){let H=J.indexOf(_)>=0;X(_,H,Y)}if($)this.colModel.refreshCols(!1,Y);this.visibleCols.refresh(Y),this.dispatchColumnChangedEvent(this.eventSvc,Q,[...G.keys()],Y)}updateColList(z=[],J,Q,Z,$,X,Y){if(!z||z.length===0)return;let q=!1,G=new Set;for(let _ of z){if(!_)continue;let H=this.colModel.getColDefCol(_);if(!H)continue;if(G.add(H),Q){if(J.indexOf(H)>=0)continue;J.push(H)}else{let W=J.indexOf(H);if(W<0)continue;for(let B=W+1;B=0;else if(F)if(I)R=M;else if(b)R=A!=null&&A>=0;else R=!1;else R=Q.indexOf(K)>=0;if(R)if(F?f!=null||A!=null:f!=null)Z.push(K);else $.push(K)}let H=(K)=>{let F=K.colDef;return Y(F)??q(F)};Z.sort((K,F)=>H(K)-H(F));let W=[],B=this.groupHierarchCols,E=(K)=>{if(B)B.expandColumnInto(W,K);else W.push(K)};Z.forEach(E);for(let K of Q)if($.indexOf(K)>=0)E(K);for(let K of $)if(W.indexOf(K)<0)E(K);for(let K of Q)if(W.indexOf(K)<0)X(K,!1,z);for(let K of W)if(Q.indexOf(K)<0)X(K,!0,z);return this.columns=W,this.updateIndexMap(),this.columns}restoreColumnOrder(z,J){let Q=this.columns,Z=this.colModel.getColDefCols();if(!Q.length||!Z)return z;let $=Object.keys(J),X=new Set($),Y=new Set($),q=new Set(Q.map((M)=>{let f=M.colId;return Y.delete(f),f}).concat($)),G=[],U={},_=0;for(let M=0;M{let f=U[M];for(let A=B;A>>32-$,Q)}ff(z,J,Q,Z,$,X,Y){return this.cmn(J&Q|~J&Z,z,J,$,X,Y)}gg(z,J,Q,Z,$,X,Y){return this.cmn(J&Z|Q&~Z,z,J,$,X,Y)}hh(z,J,Q,Z,$,X,Y){return this.cmn(J^Q^Z,z,J,$,X,Y)}ii(z,J,Q,Z,$,X,Y){return this.cmn(Q^(J|~Z),z,J,$,X,Y)}md51(z){let J=z.length,Q=[1732584193,-271733879,-1732584194,271733878],Z;for(Z=64;Z<=z.length;Z+=64)this.md5cycle(Q,this.md5blk(z.substring(Z-64,Z)));z=z.substring(Z-64);let $=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(Z=0;Z>2]|=z.charCodeAt(Z)<<(Z%4<<3);if($[Z>>2]|=128<<(Z%4<<3),Z>55){this.md5cycle(Q,$);for(Z=0;Z<16;Z++)$[Z]=0}return $[14]=J*8,this.md5cycle(Q,$),Q}md5blk(z){let J=[];for(let Q=0;Q<64;Q+=4)J[Q>>2]=z.charCodeAt(Q)+(z.charCodeAt(Q+1)<<8)+(z.charCodeAt(Q+2)<<16)+(z.charCodeAt(Q+3)<<24);return J}rhex(z){let J="0123456789abcdef".split(""),Q="",Z=0;for(;Z<4;Z++)Q+=J[z>>Z*8+4&15]+J[z>>Z*8&15];return Q}hex(z){for(let J=0;J>16)+(J>>16)+(Q>>16)<<16|Q&65535}},OJ={"01":"GRID","02":"CHARTS","0102":"BOTH"};var dY=class z{constructor(J){this.watermarkMessage=void 0,this.totalMessageLength=124,this.document=J,this.md5=new ck,this.md5.init()}validateLicense(){let J=this.getLicenseDetails(z.licenseKey),Q=`AG Grid ${J.currentLicenseType==="BOTH"?"and AG Charts ":""}Enterprise`,Z=J.suppliedLicenseType===void 0?"":`AG ${J.suppliedLicenseType==="BOTH"?"Grid and AG Charts":J.suppliedLicenseType==="GRID"?"Grid":"Charts"} Enterprise`;if(J.missing){if(!this.isWebsiteUrl()||this.isForceWatermark())this.outputMissingLicenseKey(Q)}else if(J.expired){let $=z.getGridReleaseDate(),X=z.formatDate($);this.outputExpiredKey(J.expiry,X,Q,Z)}else if(!J.valid)this.outputInvalidLicenseKey(!!J.incorrectLicenseType,Q,Z);else if(J.isTrial&&J.trialExpired)this.outputExpiredTrialKey(J.expiry,Q,Z)}static extractExpiry(J){let Q=J.substring(J.lastIndexOf("_")+1,J.length);return new Date(parseInt(z.decode(Q),10))}static extractLicenseComponents(J){let Q=J.replace(/[\u200B-\u200D\uFEFF]/g,"");if(Q=Q.replace(/\r?\n|\r/g,""),J.length<=32)return{md5:null,license:J,version:null,isTrial:null};let Z=Q.length-32,$=Q.substring(Z),X=Q.substring(0,Z),[Y,q,G]=z.extractBracketedInformation(Q);return{md5:$,license:X,version:Y,isTrial:q,type:G}}getLicenseDetails(J){let Q=z.chartsLicenseManager?"BOTH":"GRID";if(!J?.length)return{licenseKey:J,valid:!1,missing:!0,currentLicenseType:Q};let Z=z.getGridReleaseDate(),{md5:$,license:X,version:Y,isTrial:q,type:G}=z.extractLicenseComponents(J),U=$===this.md5.md5(X)&&!J.includes("For_Trialing_ag-Grid_Only"),_=void 0,H=void 0,W=null,B=!1,E=void 0;function K(){_=WW,Y){case"legacy":case"2":{if(q)K();break}case"3":if(!G?.length)U=!1;else if(E=G,G!==OJ["01"]&&G!==OJ["0102"]||Q==="BOTH"&&E!=="BOTH")U=!1,B=!0;else if(q)K()}}if(!U)return{licenseKey:J,valid:U,incorrectLicenseType:B,currentLicenseType:Q,suppliedLicenseType:E};return{licenseKey:J,valid:U,expiry:z.formatDate(W),expired:H,version:Y,isTrial:q,trialExpired:_,incorrectLicenseType:B,currentLicenseType:Q,suppliedLicenseType:E}}isDisplayWatermark(){return this.isForceWatermark()||!this.isLocalhost()&&!this.isWebsiteUrl()&&!!this.watermarkMessage?.length}getWatermarkMessage(){return this.watermarkMessage||""}getHostname(){let Q=(this.document.defaultView||window).location,{hostname:Z=""}=Q;return Z}isForceWatermark(){let Q=(this.document.defaultView||window).location,{pathname:Z}=Q;return Z?Z.includes("forceWatermark"):!1}isWebsiteUrl(){return this.getHostname().match(/^(?:[\w-]+\.)?(ag-grid|bryntum)\.com$/)!==null}isLocalhost(){return this.getHostname().match(/^(?:127\.0\.0\.1|localhost)$/)!==null}static formatDate(J){let Q=["January","February","March","April","May","June","July","August","September","October","November","December"],Z=J.getDate(),$=J.getMonth(),X=J.getFullYear();return Z+" "+Q[$]+" "+X}static getGridReleaseDate(){return new Date(parseInt(z.decode(z.RELEASE_INFORMATION),10))}static decode(J){let Z="",$,X,Y,q,G,U,_,H=0,W=J.replace(/[^A-Za-z0-9+/=]/g,"");while(H>4,X=(G&15)<<4|U>>2,Y=(U&3)<<6|_,Z=Z+String.fromCharCode($),U!=64)Z=Z+String.fromCharCode(X);if(_!=64)Z=Z+String.fromCharCode(Y)}return Z=z.utf8_decode(Z),Z}static utf8_decode(J){J=J.replace(/rn/g,"n");let Q="";for(let Z=0;Z127&&$<2048)Q+=String.fromCharCode($>>6|192),Q+=String.fromCharCode($&63|128);else Q+=String.fromCharCode($>>12|224),Q+=String.fromCharCode($>>6&63|128),Q+=String.fromCharCode($&63|128)}return Q}static setChartsLicenseManager(J){this.chartsLicenseManager=J,this.chartsLicenseManager?.setLicenseKey(this.licenseKey,!0)}static setLicenseKey(J){if(P(this.licenseKey)&&this.licenseKey!==J)H9(291,void 0,"AG Grid: License Key being set multiple times with different values. This can result in an incorrect license key being used.");this.licenseKey=J,this.chartsLicenseManager?.setLicenseKey(J,!0)}static extractBracketedInformation(J){if(!J.includes("["))return["legacy",!1,void 0];let Q=J.match(/\[(.*?)\]/g).map((q)=>q.replace("[","").replace("]",""));if(!Q||Q.length===0)return["legacy",!1,void 0];let Z=Q.filter((q)=>q==="TRIAL").length===1,$=Q.filter((q)=>q.indexOf("v")===0)[0],X=$?$.replace("v",""):"legacy",Y=OJ[Q.filter((q)=>OJ[q])[0]];return[X,Z,Y]}centerPadAndOutput(J){let Q=this.totalMessageLength-J.length}padAndOutput(J,Q="*",Z=""){}outputInvalidLicenseKey(J,Q,Z){}outputExpiredTrialKey(J,Q,Z){}outputMissingLicenseKey(J){}outputExpiredKey(J,Q,Z,$){}};dY.RELEASE_INFORMATION="MTc3NDQyNTc0Nzc3NQ==";var YY=dY,ik='.ag-watermark{bottom:20px;color:#9b9b9b;opacity:.7;position:absolute;transition:opacity 1s ease-out 3s}:where(.ag-ltr) .ag-watermark{right:25px}:where(.ag-rtl) .ag-watermark{left:25px}.ag-watermark:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDkiIGhlaWdodD0iMzYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDkgMzYiPjxwYXRoIGZpbGw9IiM5YjliOWIiIGQ9Ik0xOTIuOTkzIDIzLjY1OHYtNy45NDZoLTEzLjU0MWwtNy45NDcgNy45NDZ6TTIwOC4yNSAzLjk1aC0xNi45NzRsLTguMDEgNy45NDdoMjQuOTg0ek0xNjMuNjIyIDMxLjYwNWw0LjA2OS00LjA2OWgxMy43MzJ2Ny45NDdoLTE3LjgwMXoiLz48cGF0aCBmaWxsPSIjOWI5YjliIiBkPSJNMTY2LjYxIDE5Ljc4aDguNzczbDguMDEtNy45NDZIMTY2LjYxek0xNTcuMDExIDMxLjYwNWg2LjYxMWw3Ljg4My03Ljk0N2gtMTQuNDk0ek0xOTEuMjc2IDMuOTVsLTQuMDY4IDQuMDdIMTYxLjI3Vi4wNzJoMzAuMDA2ek0yMC44NCAzMC4yMDZIOC4zNzhsLTIuMTYyIDUuMzRILjc1TDEyLjI1NyA4LjU5Mmg0Ljc2OEwyOC41MyAzNS41NDZoLTUuNTN6bS0xLjcxNy00LjI2TDE0LjYwOSAxNC45NWwtNC41MTQgMTAuOTk4ek0xMDQuNDM3IDE4LjUwOWMxLjU4OS0yLjM1MiA1LjU5NC0yLjYwNyA3LjI0Ny0yLjYwN3Y0LjU3OGMtMi4wMzQgMC00LjA2OS4wNjMtNS4yNzcuOTUzLTEuMjA3Ljg5LTEuODQzIDIuMDk4LTEuODQzIDMuNTZ2MTAuNTUzaC00Ljk1OVYxNS45MDJoNC43Njh6TTExOS4zNzYgMTUuOTAyaC00Ljk1OHYxOS42NDRoNC45NTh6TTExOS4zNzYgNy4xM2gtNC45NTh2NS44NDhoNC45NTh6TTE0My45NzkgNy4xM3YyOC40MTZoLTQuNzY4bC0uMTI3LTIuOTg4YTguMyA4LjMgMCAwIDEtMi42NyAyLjQ4Yy0xLjA4MS41NzItMi40MTYuODktMy45NDIuODktMS4zMzUgMC0yLjYwNi0uMjU1LTMuNjg3LS43LTEuMTQ0LS41MDgtMi4xNjItMS4xNDQtMi45ODgtMi4wMzRhOS42IDkuNiAwIDAgMS0xLjk3MS0zLjE3OWMtLjUwOC0xLjIwNy0uNjk5LTIuNjA2LS42OTktNC4xMzJzLjI1NC0yLjkyNC42OTktNC4xOTZjLjUwOS0xLjI3MSAxLjE0NS0yLjM1MiAxLjk3MS0zLjI0MnMxLjg0NC0xLjU4OSAyLjk4OC0yLjA5OCAyLjM1Mi0uNzYzIDMuNjg3LS43NjNjMS41MjYgMCAyLjc5Ny4yNTUgMy44NzguODI3czEuOTcxIDEuMzM1IDIuNjcgMi40MTZWNy4xOTNoNC45NTl6bS0xMC40MjYgMjQuNTM4YzEuNjUzIDAgMi45MjQtLjU3MiAzLjk0MS0xLjY1M3MxLjUyNi0yLjU0MyAxLjUyNi00LjMyMy0uNTA5LTMuMTc4LTEuNTI2LTQuMzIyYy0xLjAxNy0xLjA4MS0yLjI4OC0xLjY1My0zLjk0MS0xLjY1My0xLjU5IDAtMi45MjUuNTcyLTMuODc4IDEuNjUzLTEuMDE3IDEuMDgtMS41MjYgMi41NDMtMS41MjYgNC4zMjIgMCAxLjc4LjUwOSAzLjE4IDEuNTI2IDQuMjYgMS4wMTcgMS4xNDQgMi4yODggMS43MTYgMy44NzggMS43MTZNNTcuMjAyIDIwLjM1M0g0NC45MzN2NC4yNTloNi45OTNjLS4xOSAyLjE2MS0xLjAxNyAzLjgxNC0yLjQxNiA1LjE1LTEuMzk4IDEuMjctMy4xNzggMS45MDYtNS40NjcgMS45MDYtMS4yNzEgMC0yLjQ4LS4yNTQtMy40OTYtLjY5OWE3IDcgMCAwIDEtMi43MzQtMS45N2MtLjc2My0uODI3LTEuMzM1LTEuODQ0LTEuNzgtMy4wNTJzLS42MzYtMi40OC0uNjM2LTMuOTQyLjE5LTIuNzMzLjYzNi0zLjk0MWMuMzgxLTEuMjA4IDEuMDE3LTIuMTYyIDEuNzgtMy4wNTIuNzYzLS44MjYgMS42NTMtMS40NjIgMi43MzMtMS45N2E5LjEgOS4xIDAgMCAxIDMuNTYtLjdxNC4wMDUgMCA2LjEwMyAxLjkwN2wzLjMwNi0zLjMwNWMtMi40OC0xLjkwNy01LjY1OC0yLjkyNS05LjQwOS0yLjkyNS0yLjA5NyAwLTQuMDA0LjMxOC01LjcyMSAxLjAxOC0xLjcxNi42OTktMy4xNzkgMS41ODktNC4zODYgMi43OTdBMTIuMSAxMi4xIDAgMCAwIDMxLjIgMTYuMjJjLS42MzUgMS43MTctLjk1MyAzLjYyNC0uOTUzIDUuNjU4cy4zMTggMy45NDIgMS4wMTcgNS42NThjLjcgMS43MTcgMS41OSAzLjE3OSAyLjc5NyA0LjM4N2ExMi4xIDEyLjEgMCAwIDAgNC4zODcgMi43OTdjMS43MTYuNyAzLjYyMyAxLjAxNyA1LjY1NyAxLjAxNyAyLjAzNSAwIDMuODc4LS4zMTggNS41MzEtMS4wMTcgMS42NTMtLjcgMy4wNTItMS41OSA0LjE5Ni0yLjc5N3ExLjcxNi0xLjgxMiAyLjY3LTQuMzg3Yy42MzYtMS43MTYuOTU0LTMuNjIzLjk1NC01LjY1OHYtLjgyNmMtLjE5MS0uMTI3LS4yNTUtLjQ0NS0uMjU1LS43TTk1Ljk4MiAyMC4zNTNoLTEyLjI3djQuMjU5aDYuOTkzYy0uMTkgMi4xNjEtMS4wMTcgMy44MTQtMi40MTYgNS4xNS0xLjM5OCAxLjI3LTMuMTc4IDEuOTA2LTUuNDY3IDEuOTA2LTEuMjcxIDAtMi40OC0uMjU0LTMuNDk2LS42OTlhNyA3IDAgMCAxLTIuNzM0LTEuOTdjLS43NjMtLjgyNy0xLjMzNS0xLjg0NC0xLjc4LTMuMDUycy0uNjM2LTIuNDgtLjYzNi0zLjk0Mi4xOS0yLjczMy42MzYtMy45NDFjLjM4MS0xLjIwOCAxLjAxNy0yLjE2MiAxLjc4LTMuMDUyLjc2My0uODI2IDEuNjUzLTEuNDYyIDIuNzM0LTEuOTdhOS4xIDkuMSAwIDAgMSAzLjU2LS43cTQuMDA1IDAgNi4xMDMgMS45MDdsMy4zMDUtMy4zMDVjLTIuNDc5LTEuOTA3LTUuNjU4LTIuOTI1LTkuNDA4LTIuOTI1LTIuMDk4IDAtNC4wMDUuMzE4LTUuNzIyIDEuMDE4LTEuNzE2LjY5OS0zLjE3OCAxLjU4OS00LjM4NiAyLjc5N2ExMi4xIDEyLjEgMCAwIDAtMi43OTcgNC4zODZjLS42MzYgMS43MTctLjk1NCAzLjYyNC0uOTU0IDUuNjU4cy4zMTggMy45NDIgMS4wMTcgNS42NThjLjcgMS43MTcgMS41OSAzLjE3OSAyLjc5NyA0LjM4N2ExMi4xIDEyLjEgMCAwIDAgNC4zODcgMi43OTdjMS43MTYuNyAzLjYyMyAxLjAxNyA1LjY1OCAxLjAxNyAyLjAzNCAwIDMuODc4LS4zMTggNS41My0xLjAxNyAxLjY1My0uNyAzLjA1Mi0xLjU5IDQuMTk2LTIuNzk3cTEuNzE4LTEuODEyIDIuNjctNC4zODdjLjYzNi0xLjcxNi45NTQtMy42MjMuOTU0LTUuNjU4di0uODI2Yy0uMTktLjEyNy0uMjU1LS40NDUtLjI1NS0uNyIvPjwvc3ZnPg==");background-repeat:no-repeat;background-size:170px 40px;content:"";display:block;height:40px;width:170px}.ag-watermark-text{font-family:Impact,sans-serif;font-size:19px;font-weight:700;opacity:.5}:where(.ag-ltr) .ag-watermark-text{padding-left:.7rem}:where(.ag-rtl) .ag-watermark-text{padding-right:.7rem}',pk={tag:"div",cls:"ag-watermark",children:[{tag:"div",ref:"eLicenseTextRef",cls:"ag-watermark-text"}]},nk=class extends x{constructor(){super(pk);this.eLicenseTextRef=j,this.registerCSS(ik)}wireBeans(z){this.licenseManager=z.licenseManager}postConstruct(){let z=this.shouldDisplayWatermark();if(this.setDisplayed(z),z)this.eLicenseTextRef.textContent=this.licenseManager.getWatermarkMessage(),window.setTimeout(()=>this.addCss("ag-opacity-zero"),0),window.setTimeout(()=>this.setDisplayed(!1),5000)}shouldDisplayWatermark(){return this.licenseManager.isDisplayWatermark()}},dk={selector:"AG-WATERMARK",component:nk},qY=class extends S{constructor(){super(...arguments);this.beanName="licenseManager"}postConstruct(){this.validateLicense()}validateLicense(){let z=this.beans;if(z.withinStudio)this.licenseManager={isDisplayWatermark:()=>!1,getWatermarkMessage:()=>""};else{let J=new YY(Y0(z));this.licenseManager=J,J.validateLicense()}}static getLicenseDetails(z){return new YY(null).getLicenseDetails(z)}getWatermarkSelector(){return dk}isDisplayWatermark(){return this.licenseManager.isDisplayWatermark()}getWatermarkMessage(){return this.licenseManager.getWatermarkMessage()}static setLicenseKey(z){}static setChartsLicenseManager(z){}},rk=9525,GY={"0":1,"0.00":2,"#,##0":3,"#,##0.00":4,"0%":9,"0.00%":10,"0.00E+00":11,"# ?/?":12,"# ??/??":13,"mm-dd-yy":14,"d-mmm-yy":15,"d-mmm":16,"mmm-yy":17,"h:mm AM/PM":18,"h:mm:ss AM/PM":19,"h:mm":20,"h:mm:ss":21,"m/d/yy h:mm":22,"#,##0 ;(#,##0)":37,"#,##0 ;[Red](#,##0)":38,"#,##0.00;(#,##0.00)":39,"#,##0.00;[Red](#,##0.00)":40,"mm:ss":45,"[h]:mm:ss":46,"mmss.0":47,"##0.0E+0":48,"@":49},PJ=`\r +`;function UY(z,J,Q){if(!J&&J!==""&&J!==0)return"";let Z=J;if(typeof J==="boolean"){if(Q)Z=Q(J)}return` ${z}="${Z}"`}function tk(z={}){let Z=["version"];if(!z.version)z.version="1.0";if(z.encoding)Z.push("encoding");if(z.standalone)Z.push("standalone");return``${X}="${z[X]}"`).join(" ")} ?>`}function rY(z,J){let Q="";if(z.properties){if(z.properties.prefixedAttributes)z.properties.prefixedAttributes.forEach(($)=>{for(let X of Object.keys($.map))Q+=UY($.prefix+X,$.map[X],J)});if(z.properties.rawMap)for(let $ of Object.keys(z.properties.rawMap))Q+=UY($,z.properties.rawMap[$],J)}let Z="<"+z.name+Q;if(!z.children&&z.textNode==null)return Z+"/>"+PJ;if(z.textNode!=null)return Z+">"+z.textNode+""+PJ;if(Z+=">"+PJ,z.children)for(let $ of z.children)Z+=rY($,J);return Z+""+PJ}var sk=(z)=>{return Math.round(z*96/72)},o1=(z)=>{return Math.ceil(z*rk)},lk=(z)=>{if(z===void 0)return;let Q=["Automatic","Roman","Swiss","Modern","Script","Decorative"].indexOf(z||"Automatic");return Math.max(Q,0)},yJ=(z,J)=>{if(!J)return;let Q;if(typeof J==="number")Q=J;else Q=J({rowIndex:z});return Q},ak=(z,J)=>{let{colSpan:Q,column:Z}=z.position;if(!z.width)return;if(Q){let $=J.slice(Z-1,Z+Q-1),X=0;for(let Y=0;Y<$.length;Y++){let q=$[Y].getActualWidth();if(z.width{let{rowSpan:Q,row:Z}=z.position;if(!z.height)return;if(Q){let $=0,X=0;for(let Y=Z;Y{let Q=tk({encoding:"UTF-8",standalone:"yes"}),Z=rY(z);if(J)return Z;return`${Q}${Z}`},F1=(z)=>{let Z=String.fromCharCode,$=Math.floor(z/26),X=z%26;if(!$||z===26)return Z(65+z-1);if(!X)return F1($-1)+"Z";if($<26)return Z(65+$-1)+Z(65+X-1);return F1($)+Z(65+X-1)},ek=(z)=>{return z.replaceAll(` +`,"_x000a_")},gJ=(z)=>{if(z==null)return null;let J="";for(let Q=0;Q=0&&Z<=31&&Z!==10){let Y=`_x${Z.toString(16).toUpperCase().padStart(4,"0")}_`;J+=Y}else J+=z[Q]}return J},zf=(z)=>{let J=[];for(let Q of z.keys()){let Z=Q.toString(),$={name:"t",textNode:L0(gJ(Z))};if(Z.trim().length!==Z.length)$.properties={rawMap:{"xml:space":"preserve"}};J.push({name:"si",children:[$]})}return J},Jf=class extends E5{constructor(z){super(z);this.mixedStyles={},this.mixedStyleCounter=0,this.rows=[],this.frozenRowCount=0,this.skipFrozenRows=!1,this.frozenColumnCount=0,this.skipFrozenColumns=!1,this.formulaSvc=z.formulaSvc,this.config=Object.assign({},z),this.workbook=z.workbook,this.stylesByIds={};for(let Q of this.config.baseExcelStyles)this.stylesByIds[Q.id]=Q;let J={id:"_quotePrefix",quotePrefix:1};this.stylesByIds[J.id]=J,this.excelStyles=[...this.config.baseExcelStyles,J]}addCustomContent(z){for(let J of z){let Q=this.rows.length+1,Z;if(!this.config.suppressRowOutline&&J.outlineLevel!=null)Z=J.outlineLevel;let $={height:yJ(Q,J.height||this.config.rowHeight),cells:(J.cells||[]).map((X,Y)=>{let q=this.addImage(Q,this.columnsToExport[Y],X.data?.value),G=null;if(X.styleId)G=typeof X.styleId==="string"?[X.styleId]:X.styleId;let U=this.getStyleId(G);if(q)return this.createCell(U,this.getDataTypeForValue(q.value),q.value==null?"":q.value);let _=X.data?.value??"",H=this.getDataTypeForValue(_);if(X.mergeAcross)return this.createMergedCell(U,H,_,X.mergeAcross);return this.createCell(U,H,_)}),outlineLevel:Z};if(J.collapsed!=null)$.collapsed=J.collapsed;if(J.hidden!=null)$.hidden=J.hidden;this.rows.push($)}}onNewHeaderGroupingRow(){let z=[],{freezeRows:J,headerRowHeight:Q}=this.config;if(this.rows.push({cells:z,height:yJ(this.rows.length+1,Q)}),J)this.frozenRowCount++;return{onColumn:(Z,$,X,Y,q)=>{let G=this.config.styleLinker({rowType:"HEADER_GROUPING",rowIndex:1,value:`grouping-${$}`,columnGroup:Z});z.push({...this.createMergedCell(this.getStyleId(G),this.getDataTypeForValue("string"),$,Y),collapsibleRanges:q})}}}onNewHeaderRow(){let{freezeRows:z,headerRowHeight:J}=this.config;if(z)this.frozenRowCount++;return this.onNewRow(this.onNewHeaderColumn,J)}onNewBodyRow(z){let{freezeRows:J,rowHeight:Q}=this.config;if(!this.skipFrozenRows)if(J==="headersAndPinnedRows"&&z?.rowPinned==="top")this.frozenRowCount++;else if(typeof J==="function")if(J(C(this.gos,{node:z})))this.frozenRowCount++;else this.skipFrozenRows=!0;else this.skipFrozenRows=!0;let Z=this.onNewRow(this.onNewBodyColumn,Q);if(z)this.addRowOutlineIfNecessary(z);return Z}prepare(z){super.prepare(z),this.columnsToExport=[...z],this.cols=z.map((J,Q)=>this.convertColumnToExcel(J,Q))}parse(){let z=this.rows.reduce((Q,Z)=>Math.max(Q,Z.cells.length),0);while(this.cols.length{let Z=this.extractHeaderValue(Q),$=this.config.styleLinker({rowType:"HEADER",rowIndex:z,value:Z,column:Q});J.push(this.createCell(this.getStyleId($),this.getDataTypeForValue("string"),Z))}}onNewBodyColumn(z,J){let Q=0,{freezeColumns:Z,rightToLeft:$}=this.config;return(X,Y,q)=>{if(Q>0){Q-=1;return}if(!this.skipFrozenColumns){let F=X.getPinned();if(Z==="pinned"&&F&&(F===!0||F==="left")!==$)this.frozenColumnCount++;else if(typeof Z==="function"&&Z(C(this.gos,{column:X})))this.frozenColumnCount++;else this.skipFrozenColumns=!0}let{value:G,valueFormatted:U}=this.extractRowCellValue({column:X,node:q,currentColumnIndex:Y,accumulatedRowIndex:z,type:"excel",useRawFormula:!0}),_=G,H=typeof _==="bigint"?_.toString():_,W=this.config.styleLinker({rowType:"BODY",rowIndex:z,value:_,column:X,node:q}),B=this.getStyleId(W),E=X.getColSpan(q),K=this.addImage(z,X,H);if(K)J.push(this.createCell(B,this.getDataTypeForValue(K.value),K.value==null?"":K.value));else if(E>1)Q=E-1,J.push(this.createMergedCell(B,this.getDataTypeForValue(_),H,E-1));else{let F=X.isAllowFormula()&&this.formulaSvc?.isFormula(H),L=this.createCell(B,F?"f":this.getDataTypeForValue(_),F?this.formulaSvc?.updateFormulaByOffset({value:H,rowDelta:z-(q.formulaRowIndex+1),useRefFormat:!1}):H,U);J.push(L)}}}onNewRow(z,J){let Q=[];return this.rows.push({cells:Q,height:yJ(this.rows.length+1,J)}),{onColumn:z.bind(this,this.rows.length,Q)()}}addWorksheetToWorkbook(z){let{excelStyles:J,config:Q}=this;if(this.mapSharedStrings(z),this.frozenColumnCount)Q.frozenColumnCount=this.frozenColumnCount;if(this.frozenRowCount)Q.frozenRowCount=this.frozenRowCount;return this.workbook.addWorksheet(J,z,Q)}mapSharedStrings(z){let J;for(let Q of z.table.rows)for(let Z of Q.cells){let $=Z.data;if(!$||$.type!=="s")continue;let X=$.value;if(X==null)continue;if(X===""){J??(J=this.workbook.getStringPosition("").toString()),$.value=J;continue}$.value=this.workbook.getStringPosition(String(X)).toString()}}getDataTypeForValue(z){if(z===void 0)return"empty";let J="s";try{if(this.isNumerical(z))J="n"}catch(Q){}return J}getTypeFromStyle(z,J){if(this.isFormula(J))return"f";if(z?.dataType)switch(z.dataType.toLocaleLowerCase()){case"formula":return"f";case"string":return"s";case"number":return"n";case"datetime":return"d";case"error":return"e";case"boolean":return"b";default:V(162,{id:z.id,dataType:z.dataType})}return null}addImage(z,J,Q){if(!this.config.addImageToCell)return;let Z=this.config.addImageToCell(z,J,Q);if(!Z)return;return this.workbook.addBodyImageToMap(Z.image,z,J,this.columnsToExport,this.config.rowHeight),Z}createCell(z,J,Q,Z){let $=this.getStyleById(z);if(!$?.dataType&&J==="s"&&Z!=null)Q=Z;let X=this.getTypeFromStyle($,Q)||J,{value:Y,escaped:q}=this.getCellValue(X,Q),G=[];if($)G.push(z);if(q)G.push("_quotePrefix");return z=this.getStyleId(G)||void 0,{styleId:z,data:{type:X,value:Y}}}createMergedCell(z,J,Q,Z){let $=Q==null?"":Q;return{styleId:this.getStyleById(z)?z:void 0,data:{type:J,value:J==="s"?String($):Q},mergeAcross:Z}}getCellValue(z,J){let Q=!1;if(J==null||z==="s"&&J==="")return{value:"",escaped:!1};if(z==="s"){if(J=String(J),J[0]==="'")Q=!0,J=J.slice(1)}else if(z==="f")J=this.addXlfnPrefix(J).slice(1);else if(z==="n"){let Z=Number(J);if(isNaN(Z))J="";else if(J!=="")J=Z.toString()}return{value:J,escaped:Q}}addXlfnPrefix(z){if(!z)return z;let J=/(^|[^A-Z0-9._])(CONCAT)(\s*\()/gi;return z.replace(J,(Q,Z,$,X)=>`${Z}_xlfn.${$}${X}`)}getStyleId(z){if(!z?.length)return null;let J=z.filter((Z)=>this.stylesByIds[Z]!=null);if(!J.length)return null;if(J.length===1)return J[0];let Q=J.join("-");if(!this.mixedStyles[Q])this.addNewMixedStyle(J);return this.mixedStyles[Q].excelID}addNewMixedStyle(z){this.mixedStyleCounter+=1;let J=`mixedStyle${this.mixedStyleCounter}`,Q={};for(let $ of z){let X=this.stylesByIds[$];if(X)D0(Q,X,!0,!0)}Q.id=J;let Z=z.join("-");this.mixedStyles[Z]={excelID:J,key:Z,result:Q},this.excelStyles.push(Q),this.stylesByIds[J]=Q}isFormula(z){if(z==null)return!1;let J=String(z);return this.config.autoConvertFormulas&&GZ(J)}isNumerical(z){if(typeof z==="bigint")return!1;return isFinite(z)&&z!==""&&!isNaN(parseFloat(z))}getStyleById(z){if(z==null)return null;return this.stylesByIds[z]||null}},Qf={getTemplate(z){let{name:J,ContentType:Q,Extension:Z,PartName:$}=z;return{name:J,properties:{rawMap:{Extension:Z,PartName:$,ContentType:Q}}}}},Zf=Qf,dJ=(z)=>z==="jpg"?"jpeg":z,$f={getTemplate({sheetLen:z,hasCustomProperties:J}){let Q=Array(z).fill(void 0).map((H,W)=>({name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",PartName:`/xl/worksheets/sheet${W+1}.xml`})),Z=hz.size,$=Yz.size,X={};Q2.forEach((H)=>{X[dJ(H.type)]=!0});let Y=Array(Z).fill(void 0).map((H,W)=>({name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.drawing+xml",PartName:`/xl/drawings/drawing${W+1}.xml`})),q=[];r4.forEach(({name:H})=>{q.push({name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml",PartName:`/xl/tables/${H}.xml`})});let G=J?[{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.custom-properties+xml",PartName:"/docProps/custom.xml"}]:[],U=Object.keys(X).map((H)=>({name:"Default",ContentType:`image/${H}`,Extension:H}));if($)U.push({name:"Default",Extension:"vml",ContentType:"application/vnd.openxmlformats-officedocument.vmlDrawing"});let _=[...U,{name:"Default",Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"},{name:"Default",ContentType:"application/xml",Extension:"xml"},{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",PartName:"/xl/workbook.xml"},...Q,{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.theme+xml",PartName:"/xl/theme/theme1.xml"},{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",PartName:"/xl/styles.xml"},{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",PartName:"/xl/sharedStrings.xml"},...Y,...q,{name:"Override",ContentType:"application/vnd.openxmlformats-package.core-properties+xml",PartName:"/docProps/core.xml"},...G].map((H)=>Zf.getTemplate(H));return{name:"Types",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"}},children:_}}},Xf=$f,Yf={getTemplate(z){let Q=new Date().toJSON();return{name:"cp:coreProperties",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{cp:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",xsi:"http://www.w3.org/2001/XMLSchema-instance"}}]},children:[{name:"dc:creator",textNode:z},{name:"dc:title",textNode:"Workbook"},{name:"dcterms:created",properties:{rawMap:{"xsi:type":"dcterms:W3CDTF"}},textNode:Q},{name:"dcterms:modified",properties:{rawMap:{"xsi:type":"dcterms:W3CDTF"}},textNode:Q}]}}},qf=Yf,Gf="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",Uf=(z)=>{return Object.keys(z).filter((Q)=>Q&&z[Q]!=null).map((Q,Z)=>({name:"property",properties:{rawMap:{fmtid:Gf,pid:(Z+2).toString(),name:L0(Q)??""}},children:[{name:"vt:lpwstr",textNode:L0(gJ(String(z[Q])))??""}]}))},_f={getTemplate(z){return{name:"Properties",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties","xmlns:vt":"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"}},children:Uf(z)}}},Hf=_f,_Y=(z,J)=>({name:`xdr:${z}`,children:[{name:"xdr:col",textNode:J.col.toString()},{name:"xdr:colOff",textNode:J.offsetX.toString()},{name:"xdr:row",textNode:J.row.toString()},{name:"xdr:rowOff",textNode:J.offsetY.toString()}]}),Wf=(z)=>{let J=[{name:"a:ext",properties:{rawMap:{uri:"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"}},children:[{name:"a16:creationId",properties:{rawMap:{id:"{822E6D20-D7BC-2841-A643-D49A6EF008A2}","xmlns:a16":"http://schemas.microsoft.com/office/drawing/2014/main"}}}]}];switch(z.recolor?.toLowerCase()){case"grayscale":case"sepia":case"washout":J.push({name:"a:ext",properties:{rawMap:{uri:"{C183D7F6-B498-43B3-948B-1728B52AA6E4}"}},children:[{name:"adec:decorative",properties:{rawMap:{val:"0","xmlns:adec":"http://schemas.microsoft.com/office/drawing/2017/decorative"}}}]})}return{name:"a:extLst",children:J}},Bf=(z,J)=>({name:"xdr:nvPicPr",children:[{name:"xdr:cNvPr",properties:{rawMap:{id:J,name:z.id,descr:z.altText!=null?z.altText:void 0}},children:[Wf(z)]},{name:"xdr:cNvPicPr",properties:{rawMap:{preferRelativeResize:"0"}},children:[{name:"a:picLocks"}]}]}),HY=(z)=>{if(!z.saturation&&!z.tint)return;let J=[];if(z.saturation)J.push({name:"a:satMod",properties:{rawMap:{val:z.saturation*1000}}});if(z.tint)J.push({name:"a:tint",properties:{rawMap:{val:z.tint*1000}}});return J},Ef=(z,J)=>{return{name:"a:duotone",children:[{name:"a:prstClr",properties:{rawMap:{val:z.color}},children:HY(z)},{name:"a:srgbClr",properties:{rawMap:{val:J.color}},children:HY(J)}]}},Kf=(z,J)=>{let Q;if(z.transparency){let Z=Math.min(Math.max(z.transparency,0),100);Q=[{name:"a:alphaModFix",properties:{rawMap:{amt:1e5-Math.round(Z*1000)}}}]}if(z.recolor){if(!Q)Q=[];switch(z.recolor.toLocaleLowerCase()){case"grayscale":Q.push({name:"a:grayscl"});break;case"sepia":Q.push(Ef({color:"black"},{color:"D9C3A5",tint:50,saturation:180}));break;case"washout":Q.push({name:"a:lum",properties:{rawMap:{bright:"70000",contrast:"-70000"}}});break;default:}}return{name:"xdr:blipFill",children:[{name:"a:blip",properties:{rawMap:{cstate:"print","r:embed":`rId${J}`,"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships"}},children:Q},{name:"a:stretch",children:[{name:"a:fillRect"}]}]}},Ff=(z,J)=>{let Q={name:"a:xfrm",children:[{name:"a:off",properties:{rawMap:{x:0,y:0}}},{name:"a:ext",properties:{rawMap:{cx:J.width,cy:J.height}}}]};if(z.rotation){let X=z.rotation;Q.properties={rawMap:{rot:Math.min(Math.max(X,0),360)*60000}}}return{name:"xdr:spPr",children:[Q,{name:"a:prstGeom",properties:{rawMap:{prst:"rect"}},children:[{name:"a:avLst"}]}]}},Lf=(z)=>{z.fitCell=!!z.fitCell||!z.width||!z.height;let{position:J={},fitCell:Q,width:Z=0,height:$=0,totalHeight:X,totalWidth:Y}=z,{offsetX:q=0,offsetY:G=0,row:U=1,rowSpan:_=1,column:H=1,colSpan:W=1}=J;return{from:{row:U-1,col:H-1,offsetX:o1(q),offsetY:o1(G)},to:{row:U-1+(Q?1:_-1),col:H-1+(Q?1:W-1),offsetX:o1(Z+q),offsetY:o1($+G)},height:o1(X||$),width:o1(Y||Z)}},Df=(z,J,Q,Z)=>{return{name:"xdr:pic",children:[Bf(z,J+1),Kf(z,Q+1),Ff(z,Z)]}},Mf={getTemplate(z){let{sheetIndex:J}=z,Q=hz.get(J),Z=Z2.get(J),$=Q.map((X,Y)=>{let q=Lf(X);return{name:"xdr:twoCellAnchor",properties:{rawMap:{editAs:"absolute"}},children:[_Y("from",q.from),_Y("to",q.to),Df(X,Y,Z.get(X.id).index,q),{name:"xdr:clientData"}]}});return{name:"xdr:wsDr",properties:{rawMap:{"xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main","xmlns:xdr":"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"}},children:$}}},kf=Mf,ff={getTemplate(z){let{Id:J,Type:Q,Target:Z}=z;return{name:"Relationship",properties:{rawMap:{Id:J,Type:Q,Target:Z}}}}},Sf=ff,Vf={getTemplate(z){let J=z.map((Q)=>Sf.getTemplate(Q));return{name:"Relationships",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"}},children:J}}},$6=Vf,Rf={getTemplate(z){return{name:"sst",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",count:z.size,uniqueCount:z.size}},children:zf(z)}}},Af=Rf,jf=(z)=>{switch(z){case 1:return"thin";case 2:return"medium";case 3:return"thick";default:return"hair"}},Of={None:"None",Dot:"Dotted",Dash:"Dashed",Double:"Double",DashDot:"DashDot",DashDotDot:"DashDotDot",SlantDashDot:"SlantDashDot",Continuous:"Continuous"},Pf=["Dashed","DashDot","DashDotDot"],Tf={None:"none",Solid:"solid",Gray50:"mediumGray",Gray75:"darkGray",Gray25:"lightGray",HorzStripe:"darkHorizontal",VertStripe:"darkVertical",ReverseDiagStripe:"darkDown",DiagStripe:"darkUp",DiagCross:"darkGrid",ThickDiagCross:"darkTrellis",ThinHorzStripe:"lightHorizontal",ThinVertStripe:"lightVertical",ThinReverseDiagStripe:"lightDown",ThinDiagStripe:"lightUp",ThinHorzCross:"lightGrid",ThinDiagCross:"lightTrellis",Gray125:"gray125",Gray0625:"gray0625"},vf={Automatic:"general",Left:"left",Center:"center",Right:"right",Fill:"fill",Justify:"justify",CenterAcrossSelection:"centerContinuous",Distributed:"distributed",JustifyDistributed:"justify"},If={Automatic:void 0,Top:"top",Bottom:"bottom",Center:"center",Justify:"justify",Distributed:"distributed",JustifyDistributed:"justify"},Cf=(z)=>{if(!z)return"none";return Tf[z]||z},Nz=(z)=>{if(z==null)return z;if(z.charAt(0)==="#")z=z.substring(1);return z.length===6?"FF"+z:z},TJ=(z,J)=>{if(!z)return"thin";let Q=jf(J);if(z==="Continuous")return Q;let Z=Of[z];if(Q==="medium"&&Pf.some(($)=>$===Z))return`medium${Z}`;return`${Z.charAt(0).toLowerCase()}${Z.substring(1)}`},yf=(z)=>{return vf[z]||"general"},bf=(z)=>{return If[z]||void 0},r2=(z)=>{return{name:"color",properties:{rawMap:{rgb:Nz(z||"#000000")}}}},xf={getTemplate(z){let{left:J,right:Q,top:Z,bottom:$,diagonal:X}=z,Y=J?[r2(J.color)]:void 0,q=Q?[r2(Q.color)]:void 0,G=Z?[r2(Z.color)]:void 0,U=$?[r2($.color)]:void 0,_=X?[r2(X.color)]:void 0;return{name:"border",children:[{name:"left",properties:{rawMap:{style:J?.style}},children:Y},{name:"right",properties:{rawMap:{style:Q?.style}},children:q},{name:"top",properties:{rawMap:{style:Z?.style}},children:G},{name:"bottom",properties:{rawMap:{style:$?.style}},children:U},{name:"diagonal",properties:{rawMap:{style:X?.style}},children:_}]}}},wf=xf,Nf={getTemplate(z){return{name:"borders",properties:{rawMap:{count:z.length}},children:z.map((J)=>wf.getTemplate(J))}}},gf=Nf,hf=(z)=>{let Q=["Context","LeftToRight","RightToLeft"].indexOf(z);return Math.max(Q,0)},uf={getTemplate(z){let{horizontal:J,indent:Q,readingOrder:Z,rotate:$,shrinkToFit:X,vertical:Y,wrapText:q}=z;return{name:"alignment",properties:{rawMap:{horizontal:J&&yf(J),indent:Q,readingOrder:Z&&hf(Z),textRotation:$,shrinkToFit:X,vertical:Y&&bf(Y),wrapText:q}}}}},mf=uf,cf={getTemplate(z){let J=z.protected===!1?0:1;return{name:"protection",properties:{rawMap:{hidden:z.hideFormula===!0?1:0,locked:J}}}}},pf=cf,nf={getTemplate(z){let{alignment:J,borderId:Q,fillId:Z,fontId:$,numFmtId:X,protection:Y,quotePrefix:q,xfId:G}=z,U=[];if(J)U.push(mf.getTemplate(J));if(Y)U.push(pf.getTemplate(Y));return{name:"xf",properties:{rawMap:{applyAlignment:J?1:void 0,applyProtection:Y?1:void 0,applyBorder:Q?1:void 0,applyFill:Z?1:void 0,borderId:Q,fillId:Z,applyFont:$?1:void 0,fontId:$,applyNumberFormat:X?1:void 0,numFmtId:X,quotePrefix:q?1:void 0,xfId:G}},children:U.length?U:void 0}}},tY=nf,df={getTemplate(z){return{name:"cellStyleXfs",properties:{rawMap:{count:z.length}},children:z.map((J)=>tY.getTemplate(J))}}},rf=df,tf={getTemplate(z){let{builtinId:J,name:Q,xfId:Z}=z;return{name:"cellStyle",properties:{rawMap:{builtinId:J,name:Q,xfId:Z}}}}},sf=tf,lf={getTemplate(z){return{name:"cellStyles",properties:{rawMap:{count:z.length}},children:z.map((J)=>sf.getTemplate(J))}}},af=lf,of={getTemplate(z){return{name:"cellXfs",properties:{rawMap:{count:z.length}},children:z.map((J)=>tY.getTemplate(J))}}},ef=of,zS={getTemplate(z){let{patternType:J,fgTheme:Q,fgTint:Z,fgRgb:$,bgRgb:X,bgIndexed:Y}=z,q={name:"patternFill",properties:{rawMap:{patternType:J}}};if(Q||Z||$)q.children=[{name:"fgColor",properties:{rawMap:{theme:Q,tint:Z,rgb:$}}}];if(Y||X){if(!q.children)q.children=[];q.children.push({name:"bgColor",properties:{rawMap:{indexed:Y,rgb:X}}})}return{name:"fill",children:[q]}}},JS=zS,QS={getTemplate(z){return{name:"fills",properties:{rawMap:{count:z.length}},children:z.map((J)=>JS.getTemplate(J))}}},ZS=QS,$S={getTemplate(z){let{size:J,colorTheme:Q,color:Z="FF000000",fontName:$="Calibri",family:X,scheme:Y,italic:q,bold:G,strikeThrough:U,outline:_,shadow:H,underline:W,verticalAlign:B}=z,E=[{name:"sz",properties:{rawMap:{val:J}}},{name:"color",properties:{rawMap:{theme:Q,rgb:Z}}},{name:"name",properties:{rawMap:{val:$}}}];if(X)E.push({name:"family",properties:{rawMap:{val:X}}});if(Y)E.push({name:"scheme",properties:{rawMap:{val:Y}}});if(q)E.push({name:"i"});if(G)E.push({name:"b"});if(U)E.push({name:"strike"});if(_)E.push({name:"outline"});if(H)E.push({name:"shadow"});if(W)E.push({name:"u",properties:{rawMap:{val:W}}});if(B)E.push({name:"vertAlign",properties:{rawMap:{val:B}}});return{name:"font",children:E}}},XS=$S,YS={getTemplate(z){return{name:"fonts",properties:{rawMap:{count:z.length}},children:z.map((J)=>XS.getTemplate(J))}}},qS=YS;function GS(z){let J=z.split(/(\[[^\]]*\])/);for(let Q=0;Q_S.getTemplate(J))}}},WS=HS,hJ,e1,l2,a2,o2,sY,uJ,lY,l5,aY=(z,J)=>{if(z.includes("mixedStyle")&&J>1)z+=`_${J}`;return z},oY=()=>{hJ={base:0},e1=[],l2=[{fontName:"Calibri",colorTheme:"1",family:"2",scheme:"minor"}],a2=[{patternType:"none"},{patternType:"gray125"}],o2=[{left:void 0,right:void 0,top:void 0,bottom:void 0,diagonal:void 0}],sY=[{borderId:0,fillId:0,fontId:0,numFmtId:0}],uJ=[{borderId:0,fillId:0,fontId:0,numFmtId:0,xfId:0}],lY=[{builtinId:0,name:"Normal",xfId:0}]},BS=(z)=>{let J=Cf(z.pattern),Q=Nz(z.color),Z=Nz(z.patternColor),$=a2.findIndex((X)=>{let{patternType:Y,fgRgb:q,bgRgb:G}=X;return!(Y!=J||q!=Q||G!=Z)});if($===-1)$=a2.length,a2.push({patternType:J,fgRgb:Q,bgRgb:Z});return $},ES=(z)=>{if(GY[z])return GY[z];let J=e1.findIndex((Q)=>Q.formatCode===z);if(J===-1)J=e1.length+164,e1.push({formatCode:z,numFmtId:J});else J=e1[J].numFmtId;return J},KS=(z)=>{let{borderBottom:J,borderTop:Q,borderLeft:Z,borderRight:$}=z,X,Y,q,G,U,_,H,W;if(Z)q=TJ(Z.lineStyle,Z.weight),H=Nz(Z.color);if($)G=TJ($.lineStyle,$.weight),W=Nz($.color);if(J)X=TJ(J.lineStyle,J.weight),U=Nz(J.color);if(Q)Y=TJ(Q.lineStyle,Q.weight),_=Nz(Q.color);let B=o2.findIndex((E)=>{let{left:K,right:F,top:L,bottom:D}=E;if(!K&&(q||H))return!1;if(!F&&(G||W))return!1;if(!L&&(Y||_))return!1;if(!D&&(X||U))return!1;let{style:M,color:f}=K||{},{style:A,color:R}=F||{},{style:O,color:v}=L||{},{style:I,color:b}=D||{};if(M!=q||f!=H)return!1;if(A!=G||R!=W)return!1;if(O!=Y||v!=_)return!1;if(I!=X||b!=U)return!1;return!0});if(B===-1)B=o2.length,o2.push({left:{style:q,color:H},right:{style:G,color:W},top:{style:Y,color:_},bottom:{style:X,color:U},diagonal:{style:void 0,color:void 0}});return B},FS=(z)=>{let{fontName:J="Calibri",color:Q,size:Z,bold:$,italic:X,outline:Y,shadow:q,strikeThrough:G,underline:U,family:_,verticalAlign:H}=z,W=Nz(Q),B=lk(_),E=U?U.toLocaleLowerCase():void 0,K=H?H.toLocaleLowerCase():void 0,F=l2.findIndex((L)=>{return!(L.fontName!=J||L.color!=W||L.size!=Z||L.bold!=$||L.italic!=X||L.outline!=Y||L.shadow!=q||L.strikeThrough!=G||L.underline!=E||L.verticalAlign!=K||L.family!=B)});if(F===-1)F=l2.length,l2.push({fontName:J,color:W,size:Z,bold:$,italic:X,outline:Y,shadow:q,strikeThrough:G,underline:E,verticalAlign:K,family:B!=null?B.toString():void 0});return F},LS=(z)=>{let{alignment:J,borders:Q,font:Z,interior:$,numberFormat:X,protection:Y,quotePrefix:q}=z,{id:G}=z,U=0,_=0,H=0,W=0;if(!G)return;if(G=aY(G,l5),hJ[G]!=null)return;if($)U=BS($);if(Q)_=KS(Q);if(Z)H=FS(Z);if(X)W=ES(X.format);hJ[G]=uJ.length,uJ.push({alignment:J,borderId:_||0,fillId:U||0,fontId:H||0,numFmtId:W||0,protection:Y,quotePrefix:q,xfId:0})},DS={getTemplate(z){let J=WS.getTemplate(e1),Q=qS.getTemplate(l2.map((G)=>({...G,size:G.size!=null?G.size:z}))),Z=ZS.getTemplate(a2),$=gf.getTemplate(o2),X=rf.getTemplate(sY),Y=ef.getTemplate(uJ),q=af.getTemplate(lY);return oY(),{name:"styleSheet",properties:{rawMap:{"mc:Ignorable":"x14ac x16r2 xr",xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac","xmlns:x16r2":"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision"}},children:[J,Q,Z,$,X,Y,q,{name:"tableStyles",properties:{rawMap:{count:0,defaultPivotStyle:"PivotStyleLight16",defaultTableStyle:"TableStyleMedium2"}}}]}}},MS=(z,J)=>{return hJ[aY(z,J)]||0},kS=(z,J)=>{if(l5=J,l5===1)oY();z.forEach(LS)},fS=DS,SS={getTemplate(z,J){let{name:Q,columns:Z,rowRange:$,displayName:X,showRowStripes:Y,showColumnStripes:q,showFilterButtons:G,highlightFirstColumn:U,highlightLastColumn:_}=z||{},H=!$||$[0]-$[1]===0;if(!z||!Q||!Array.isArray(Z)||!Z.length||H)return{name:"table"};let W=Z.map((D,M)=>({name:"filterColumn",properties:{rawMap:{colId:M.toString(),hiddenButton:G[M]?0:1}}})),B=`A${$[0]}`,E=`${F1(Z.length)}${$[1]}`,K=`${B}:${E}`,F=`${J+1}`,L=J?`${X}_${F}`:X;return{name:"table",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"xr xr3","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision","xmlns:xr3":"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3",name:L,displayName:L,ref:K,totalsRowShown:0,id:F}},children:[{name:"autoFilter",properties:{rawMap:{ref:K}},children:W},{name:"tableColumns",properties:{rawMap:{count:Z.length}},children:Z.map((D,M)=>({name:"tableColumn",properties:{rawMap:{id:(M+1).toString(),name:L0(ek(D)),dataCellStyle:"Normal"}}}))},{name:"tableStyleInfo",properties:{rawMap:{name:"TableStyleLight1",showFirstColumn:U?1:0,showLastColumn:_?1:0,showRowStripes:Y?1:0,showColumnStripes:q?1:0}}}]}}},VS=SS,L4=(z)=>{let[J,Q,Z,$]=z;return{name:`a:${J}`,children:[{name:`a:${Q}`,properties:{rawMap:{val:Z,lastClr:$}}}]}},RS={getTemplate(){return{name:"a:clrScheme",properties:{rawMap:{name:"Office"}},children:[L4(["dk1","sysClr","windowText","000000"]),L4(["lt1","sysClr","window","FFFFFF"]),L4(["dk2","srgbClr","44546A"]),L4(["lt2","srgbClr","E7E6E6"]),L4(["accent1","srgbClr","4472C4"]),L4(["accent2","srgbClr","ED7D31"]),L4(["accent3","srgbClr","A5A5A5"]),L4(["accent4","srgbClr","FFC000"]),L4(["accent5","srgbClr","5B9BD5"]),L4(["accent6","srgbClr","70AD47"]),L4(["hlink","srgbClr","0563C1"]),L4(["folHlink","srgbClr","954F72"])]}}},AS=RS,T=(z)=>{let[J,Q,Z,$]=z;return{name:`a:${J}`,properties:{rawMap:{script:Z,typeface:Q,panose:$}}}},jS={getTemplate(){return{name:"a:fontScheme",properties:{rawMap:{name:"Office"}},children:[{name:"a:majorFont",children:[T(["latin","Calibri Light",void 0,"020F0302020204030204"]),T(["ea",""]),T(["cs",""]),T(["font","游ゴシック Light","Jpan"]),T(["font","맑은 고딕","Hang"]),T(["font","等线 Light","Hans"]),T(["font","新細明體","Hant"]),T(["font","Times New Roman","Arab"]),T(["font","Times New Roman","Hebr"]),T(["font","Tahoma","Thai"]),T(["font","Nyala","Ethi"]),T(["font","Vrinda","Beng"]),T(["font","Shruti","Gujr"]),T(["font","MoolBoran","Khmr"]),T(["font","Tunga","Knda"]),T(["font","Raavi","Guru"]),T(["font","Euphemia","Cans"]),T(["font","Plantagenet Cherokee","Cher"]),T(["font","Microsoft Yi Baiti","Yiii"]),T(["font","Microsoft Himalaya","Tibt"]),T(["font","MV Boli","Thaa"]),T(["font","Mangal","Deva"]),T(["font","Gautami","Telu"]),T(["font","Latha","Taml"]),T(["font","Estrangelo Edessa","Syrc"]),T(["font","Kalinga","Orya"]),T(["font","Kartika","Mlym"]),T(["font","DokChampa","Laoo"]),T(["font","Iskoola Pota","Sinh"]),T(["font","Mongolian Baiti","Mong"]),T(["font","Times New Roman","Viet"]),T(["font","Microsoft Uighur","Uigh"]),T(["font","Sylfaen","Geor"]),T(["font","Arial","Armn"]),T(["font","Leelawadee UI","Bugi"]),T(["font","Microsoft JhengHei","Bopo"]),T(["font","Javanese Text","Java"]),T(["font","Segoe UI","Lisu"]),T(["font","Myanmar Text","Mymr"]),T(["font","Ebrima","Nkoo"]),T(["font","Nirmala UI","Olck"]),T(["font","Ebrima","Osma"]),T(["font","Phagspa","Phag"]),T(["font","Estrangelo Edessa","Syrn"]),T(["font","Estrangelo Edessa","Syrj"]),T(["font","Estrangelo Edessa","Syre"]),T(["font","Nirmala UI","Sora"]),T(["font","Microsoft Tai Le","Tale"]),T(["font","Microsoft New Tai Lue","Talu"]),T(["font","Ebrima","Tfng"])]},{name:"a:minorFont",children:[T(["latin","Calibri",void 0,"020F0502020204030204"]),T(["ea",""]),T(["cs",""]),T(["font","游ゴシック","Jpan"]),T(["font","맑은 고딕","Hang"]),T(["font","等线","Hans"]),T(["font","新細明體","Hant"]),T(["font","Arial","Arab"]),T(["font","Arial","Hebr"]),T(["font","Tahoma","Thai"]),T(["font","Nyala","Ethi"]),T(["font","Vrinda","Beng"]),T(["font","Shruti","Gujr"]),T(["font","DaunPenh","Khmr"]),T(["font","Tunga","Knda"]),T(["font","Raavi","Guru"]),T(["font","Euphemia","Cans"]),T(["font","Plantagenet Cherokee","Cher"]),T(["font","Microsoft Yi Baiti","Yiii"]),T(["font","Microsoft Himalaya","Tibt"]),T(["font","MV Boli","Thaa"]),T(["font","Mangal","Deva"]),T(["font","Gautami","Telu"]),T(["font","Latha","Taml"]),T(["font","Estrangelo Edessa","Syrc"]),T(["font","Kalinga","Orya"]),T(["font","Kartika","Mlym"]),T(["font","DokChampa","Laoo"]),T(["font","Iskoola Pota","Sinh"]),T(["font","Mongolian Baiti","Mong"]),T(["font","Arial","Viet"]),T(["font","Microsoft Uighur","Uigh"]),T(["font","Sylfaen","Geor"]),T(["font","Arial","Armn"]),T(["font","Leelawadee UI","Bugi"]),T(["font","Microsoft JhengHei","Bopo"]),T(["font","Javanese Text","Java"]),T(["font","Segoe UI","Lisu"]),T(["font","Myanmar Text","Mymr"]),T(["font","Ebrima","Nkoo"]),T(["font","Nirmala UI","Olck"]),T(["font","Ebrima","Osma"]),T(["font","Phagspa","Phag"]),T(["font","Estrangelo Edessa","Syrn"]),T(["font","Estrangelo Edessa","Syrj"]),T(["font","Estrangelo Edessa","Syre"]),T(["font","Nirmala UI","Sora"]),T(["font","Microsoft Tai Le","Tale"]),T(["font","Microsoft New Tai Lue","Talu"]),T(["font","Ebrima","Tfng"])]}]}}},OS=jS,d4=(z,J,Q)=>({name:`a:${z}`,properties:{rawMap:{val:J}},children:Q}),N5=(z)=>{let[J,Q,Z,$,X,Y]=z,q=[];if(q.push(d4("satMod",Z)),$)q.push(d4("lumMod",$));if(X)q.push(d4("tint",X));if(Y)q.push(d4("shade",Y));return{name:"a:gs",properties:{rawMap:{pos:J}},children:[{name:"a:schemeClr",properties:{rawMap:{val:Q}},children:q}]}},mJ=(z,J)=>({name:"a:solidFill",children:[d4("schemeClr",z,J)]}),a5=(z)=>{let[J,Q,Z,$,X]=z,[Y,q]=X;return{name:"a:gradFill",properties:{rawMap:{rotWithShape:J}},children:[{name:"a:gsLst",children:[N5(Q),N5(Z),N5($)]},{name:"a:lin",properties:{rawMap:{ang:Y,scaled:q}}}]}},g5=(z)=>{let[J,Q,Z,$]=z;return{name:"a:ln",properties:{rawMap:{w:J,cap:Q,cmpd:Z,algn:$}},children:[mJ("phClr"),d4("prstDash","solid"),{name:"a:miter",properties:{rawMap:{lim:"800000"}}}]}},h5=(z)=>{let J=[];if(z){let[Q,Z,$,X,Y]=z;J.push({name:"a:outerShdw",properties:{rawMap:{blurRad:Q,dist:Z,dir:$,algn:X,rotWithShape:Y}},children:[d4("srgbClr","000000",[d4("alpha","63000")])]})}return{name:"a:effectStyle",children:[Object.assign({},{name:"a:effectLst"},J.length?{children:J}:{})]}},PS=()=>({name:"a:fillStyleLst",children:[mJ("phClr"),a5(["1",["0","phClr","105000","110000","67000"],["50000","phClr","103000","105000","73000"],["100000","phClr","109000","105000","81000"],["5400000","0"]]),a5(["1",["0","phClr","103000","102000","94000"],["50000","phClr","110000","100000",void 0,"100000"],["100000","phClr","120000","99000",void 0,"78000"],["5400000","0"]])]}),TS=()=>({name:"a:lnStyleLst",children:[g5(["6350","flat","sng","ctr"]),g5(["12700","flat","sng","ctr"]),g5(["19050","flat","sng","ctr"])]}),vS=()=>({name:"a:effectStyleLst",children:[h5(),h5(),h5(["57150","19050","5400000","ctr","0"])]}),IS=()=>({name:"a:bgFillStyleLst",children:[mJ("phClr"),mJ("phClr",[d4("tint","95000"),d4("satMod","170000")]),a5(["1",["0","phClr","150000","102000","93000","98000"],["50000","phClr","130000","103000","98000","90000"],["100000","phClr","120000",void 0,void 0,"63000"],["5400000","0"]])]}),CS={getTemplate(){return{name:"a:fmtScheme",properties:{rawMap:{name:"Office"}},children:[PS(),TS(),vS(),IS()]}}},yS=CS,bS={getTemplate(){return{name:"a:themeElements",children:[AS.getTemplate(),OS.getTemplate(),yS.getTemplate()]}}},xS=bS,wS={getTemplate(){return{name:"a:theme",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{a:"http://schemas.openxmlformats.org/drawingml/2006/main"}}],rawMap:{name:"Office Theme"}},children:[xS.getTemplate(),{name:"a:objectDefaults"},{name:"a:extraClrSchemeLst"}]}}},NS=wS,gS=()=>({name:"o:shapelayout",properties:{prefixedAttributes:[{prefix:"v:",map:{ext:"edit"}}]},children:[{name:"o:idmap",properties:{prefixedAttributes:[{prefix:"v:",map:{ext:"edit"}}],rawMap:{data:"1"}}}]}),hS=()=>({name:"v:stroke",properties:{rawMap:{joinstyle:"miter"}}}),uS=(z)=>({name:"v:formulas",children:z.map((J)=>({name:"v:f",properties:{rawMap:{eqn:J}}}))}),mS=()=>({name:"v:path",properties:{prefixedAttributes:[{prefix:"o:",map:{connecttype:"rect",extrusionok:"f"}}],rawMap:{gradientshapeok:"t"}}}),eY=(z)=>{let{aspectratio:J,rotation:Q}=z||{},Z={};if(J)Z.aspectratio="t";if(Q)Z.rotation="t";return{name:"o:lock",properties:{prefixedAttributes:[{prefix:"v:",map:{ext:"edit"}}],rawMap:Z}}};function cS(z,J,Q,Z,$){return(z-J)/(Q-J)*($-Z)+Z}var iS=(z,J)=>{let Q,{recolor:Z,brightness:$,contrast:X,id:Y}=z;if(Z){if(Q={},Z==="Washout"||Z==="Grayscale")Q.gain="19661f",Q.blacklevel="22938f";if(Z==="Black & White"||Z==="Grayscale"){if(Q.grayscale="t",Z==="Black & White")Q.bilevel="t"}}if(!Z||Z==="Grayscale"){if(!Q)Q={};if(X!=null&&X!==50){let q="1";if(X>=0){if(X<50)q=String(X/50);else if(X<100)q=String(50/(100-X));else if(X===100)q="2147483647f"}Q.gain=q}if($!=null&&$!==50)Q.blacklevel=cS($,0,100,-0.5,0.5).toString()}return{name:"v:imagedata",properties:{prefixedAttributes:[{prefix:"o:",map:{relid:`rId${J}`,title:Y}}],rawMap:Q}}},pS=()=>{let z=["if lineDrawn pixelLineWidth 0","sum @0 1 0","sum 0 0 @1","prod @2 1 2","prod @3 21600 pixelWidth","prod @3 21600 pixelHeight","sum @0 0 1","prod @6 1 2","prod @7 21600 pixelWidth","sum @8 21600 0","prod @7 21600 pixelHeight","sum @10 21600 0"];return{name:"v:shapetype",properties:{prefixedAttributes:[{prefix:"o:",map:{spt:"75",preferrelative:"t"}}],rawMap:{coordsize:"21600,21600",filled:"f",id:"_x0000_t75",path:"m@4@5l@4@11@9@11@9@5xe",stroked:"f"}},children:[hS(),uS(z),mS(),eY({aspectratio:!0})]}},WY=(z)=>Math.floor((z??0)*0.74999943307122),nS=(z,J)=>{let{width:Q=0,height:Z=0,altText:$}=z,X=WY(Q),Y=WY(Z);return{name:"v:shape",properties:{rawMap:{id:z.headerFooterPosition,"o:spid":"_x0000_s1025",style:`position: absolute; margin-left: 0; margin-top: 10in; margin-bottom: 0; margin-right: 0; width: ${X}pt; height: ${Y}pt; z-index: ${J+1}`,type:"#_x0000_t75",alt:$}},children:[iS(z,J+1),eY({rotation:!0})]}},dS={getTemplate(z){let J=Yz.get(z.sheetIndex)||[],Q=[gS(),pS(),...J.map((Z,$)=>nS(Z,$))];return{name:"xml",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{v:"urn:schemas-microsoft-com:vml",o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel"}}]},children:Q}}},rS=dS,tS={getTemplate(z,J){let Q=(J+1).toString();return{name:"sheet",properties:{rawMap:{name:z,sheetId:Q,"r:id":`rId${Q}`}}}}},sS=tS,lS={getTemplate(z){return{name:"sheets",children:z.map((J,Q)=>sS.getTemplate(J,Q))}}},aS=lS,oS={getTemplate(z,J){return{name:"workbook",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships"}}],rawMap:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},children:[{name:"bookViews",children:[{name:"workbookView",properties:{rawMap:{activeTab:J}}}]},aS.getTemplate(z)]}}},eS=oS,zV=(z)=>Math.ceil((z-12)/7+1),JV={getTemplate(z){let{min:J,max:Q,outlineLevel:Z,s:$,width:X,hidden:Y,bestFit:q}=z,G=1,U="0";if(X>1)G=zV(X),U="1";return{name:"col",properties:{rawMap:{min:J,max:Q,outlineLevel:Z!=null?Z:void 0,width:G,style:$,hidden:Y?"1":"0",bestFit:q?"1":"0",customWidth:U}}}}},QV=JV,ZV={getTemplate(z){return{name:"mergeCell",properties:{rawMap:{ref:z}}}}},$V=ZV,XV=(z)=>{let J=z.charAt(0).toLowerCase();return J==="s"?"inlineStr":J},YV={getTemplate(z,J,Q){let{ref:Z,data:$,styleId:X}=z,{type:Y,value:q}=$||{type:"empty",value:null},G=Y;if(Y==="f")G="str";else if(Y.charAt(0)===Y.charAt(0).toUpperCase())G=XV(Y);let U={name:"c",properties:{rawMap:{r:Z,t:G==="empty"?void 0:G,s:X?MS(X,Q):void 0}}};if(G==="empty")return U;let _;if(G==="str"&&Y==="f")_=[{name:"f",textNode:L0(gJ(q))}];else if(G==="inlineStr")_=[{name:"is",children:[{name:"t",textNode:L0(gJ(q))}]}];else _=[{name:"v",textNode:q}];return Object.assign({},U,{children:_})}},qV=YV,GV=(z,J)=>{let Q=[],Z=0;for(let $=0;$=0;$--){let X=[],Y=z[Q[$].pos];for(let q=1;q<=Y.mergeAcross;q++)X.push({ref:`${F1(Q[$].excelPos+1+q)}${J+1}`,styleId:Y.styleId,data:{type:"empty",value:null}});if(X.length)z.splice(Q[$].pos+1,0,...X)}},UV=(z)=>z.data?.value!==""||z.styleId!==void 0,_V={getTemplate(z,J,Q){let{collapsed:Z,hidden:$,height:X,outlineLevel:Y,cells:q=[]}=z;GV(q,J);let G=q.filter(UV).map((U,_)=>qV.getTemplate(U,_,Q));return{name:"row",properties:{rawMap:{r:J+1,collapsed:Z?"1":"0",hidden:$?"1":"0",ht:X,customHeight:X!=null?"1":"0",spans:"1:1",outlineLevel:Y||void 0}},children:G}}},HV=_V,WV=(z,J,Q)=>{let Z=[],$=[];z.forEach((q,G)=>{let U=q.cells,_=0,H;U.forEach((W,B)=>{let E=B+_+1,K=F1(E),F=G+1;if(W.mergeAcross){_+=W.mergeAcross;let D=F1(B+_+1);Z.push(`${K}${F}:${D}${F}`)}if(!J[E-1])J[E-1]={};let{collapsibleRanges:L}=W;if(L)L.forEach((D)=>{$.push([E+D[0],E+D[1]])});H=J[E-1],H.min=E,H.max=E,W.ref=`${K}${F}`})}),$.sort((q,G)=>{if(q[0]!==G[0])return q[0]-G[0];return G[1]-q[1]});let X=new Map,Y=new Map;return $.filter((q)=>{let G=q.toString();if(X.get(G))return!1;return X.set(G,!0),!0}).forEach((q)=>{let G=J.find((_)=>_.min==q[0]&&_.max==q[1]),U=Y.get(q[0]);J.push({min:q[0],max:q[1],outlineLevel:Q?void 0:U||1,width:(G||{width:100}).width}),Y.set(q[0],(U||0)+1)}),Z},BV=(z)=>{if(!z||z!=="Portrait"&&z!=="Landscape")return"portrait";return z.toLocaleLowerCase()},EV=(z)=>{if(z==null)return 1;let Q=["Letter","Letter Small","Tabloid","Ledger","Legal","Statement","Executive","A3","A4","A4 Small","A5","A6","B4","B5","Folio","Envelope","Envelope DL","Envelope C5","Envelope B5","Envelope C3","Envelope C4","Envelope C6","Envelope Monarch","Japanese Postcard","Japanese Double Postcard"].indexOf(z);return Q===-1?1:Q+1},KV=(z)=>{let J={"&[Page]":"&P","&[Pages]":"&N","&[Date]":"&D","&[Time]":"&T","&[Tab]":"&A","&[Path]":"&Z","&[File]":"&F","&[Picture]":"&G"};for(let Q of Object.keys(J))z=z.replace(Q,J[Q]);return z},FV=(z)=>{if(z==="Center")return"C";if(z==="Right")return"R";return"L"},LV=(z,J)=>{if(!J)return z;if(z+="&"",z+=J.fontName||"Calibri",J.bold!==J.italic)z+=J.bold?",Bold":",Italic";else if(J.bold)z+=",Bold Italic";else z+=",Regular";if(z+=""",J.size)z+=`&${J.size}`;if(J.strikeThrough)z+="&S";if(J.underline)z+=`&${J.underline==="Double"?"E":"U"}`;if(J.color)z+=`&K${J.color.replace("#","").toUpperCase()}`;return z},DV=(z,J,Q)=>z.reduce((Z,$,X)=>{let Y=FV($.position),q=LV(`${Z}&${Y}`,$.font),G=["Left","Center","Right"];if(!$.position)$.position=G[X];let{image:U}=$;if($.value==="&[Picture]"&&U){let _=`${Y}${J}${Q}`;zq(U,_)}return`${q}${L0(KV($.value))}`},""),MV=(z)=>{let J=["all","first","even"],Q=[];return J.forEach((Z)=>{let $=z[Z],X=Z==="all"?"odd":Z;if(!$)return;for(let Y of Object.keys($)){let q=$[Y],G=`${Y.charAt(0).toUpperCase()}${Y.slice(1)}`,U=Y[0].toUpperCase();if(q){let _=Z==="all"?"":Z.toUpperCase();Q.push({name:`${X}${G}`,properties:{rawMap:{"xml:space":"preserve"}},textNode:DV(q,U,_)})}}}),Q},kV=(z)=>{return(J)=>{if(z.length)J.children.push({name:"cols",children:z.map((Q)=>QV.getTemplate(Q))});return J}},fV=(z,J)=>{return(Q)=>{if(z.length)Q.children.push({name:"sheetData",children:z.map((Z,$)=>HV.getTemplate(Z,$,J))});return Q}},SV=(z)=>{let J=z.length;if(!J)return"";let Q=Array(J+1);Q[0]=J;for(let $=1;$<=J;$++)Q[$]=z.charCodeAt($-1)&255;let Z=0;for(let $=Q.length-1;$>=0;$--){let X=Q[$],Y=(Z&16384)===0?0:1,q=Z<<1&32767;Z=(Y|q)^X}return(Z^52811).toString(16).toUpperCase().padStart(4,"0")},VV=(z)=>{return(J)=>{if(!z)return J;let Q=typeof z==="boolean"?{}:z,Z={sheet:1},$=Q.password?SV(Q.password):"";if($)Z.password=$;let X={autoFilter:!1,deleteColumns:!1,deleteRows:!1,formatCells:!1,formatColumns:!1,formatRows:!1,insertColumns:!1,insertHyperlinks:!1,insertRows:!1,pivotTables:!1,selectLockedCells:!0,selectUnlockedCells:!0};return Object.keys(X).forEach((Y)=>{let q=Q[Y];if(q==null||q===X[Y])return;Z[Y]=q?0:1}),J.children.push({name:"sheetProtection",properties:{rawMap:Z}}),J}},RV=(z)=>{return(J)=>{if(z.length)J.children.push({name:"mergeCells",properties:{rawMap:{count:z.length}},children:z.map((Q)=>$V.getTemplate(Q))});return J}},AV=(z)=>{return(J)=>{let{top:Q=0.75,right:Z=0.7,bottom:$=0.75,left:X=0.7,header:Y=0.3,footer:q=0.3}=z;return J.children.push({name:"pageMargins",properties:{rawMap:{bottom:$,footer:q,header:Y,left:X,right:Z,top:Q}}}),J}},jV=(z)=>{return(J)=>{if(z)J.children.push({name:"pageSetup",properties:{rawMap:{horizontalDpi:0,verticalDpi:0,orientation:BV(z.orientation),paperSize:EV(z.pageSize)}}});return J}},OV=(z)=>{return(J)=>{if(!z)return J;let Q=z.first!=null?1:0,Z=z.even!=null?1:0;return J.children.push({name:"headerFooter",properties:{rawMap:{differentFirst:Q,differentOddEven:Z}},children:MV(z)}),J}},PV=(z)=>{return(J)=>{if(z)J.children.push({name:"tableParts",properties:{rawMap:{count:"1"}},children:[{name:"tablePart",properties:{rawMap:{"r:id":`rId${++J.rIdCounter}`}}}]});return J}},TV=(z)=>{return(J)=>{if(hz.get(z)?.length)J.children.push({name:"drawing",properties:{rawMap:{"r:id":`rId${++J.rIdCounter}`}}});return J}},vV=(z)=>{return(J)=>{if(Yz.get(z))J.children.push({name:"legacyDrawingHF",properties:{rawMap:{"r:id":`rId${++J.rIdCounter}`}}});return J}},IV=(z=0,J=0)=>{let Q=z>0||J>0;return Q?[{name:"pane",properties:{rawMap:{state:Q?"frozen":void 0,topLeftCell:Q?`${F1(z+1)}${J+1}`:void 0,xSplit:z===0?void 0:z,ySplit:J===0?void 0:J}}}]:void 0},CV=(z=!1,J,Q)=>{return(Z)=>{return Z.children.push({name:"sheetViews",children:[{name:"sheetView",properties:{rawMap:{rightToLeft:z===!0?"1":"0",workbookViewId:"0"}},children:IV(J,Q)}]}),Z}},yV=()=>{return(z)=>{return z.children.push({name:"sheetPr",children:[{name:"outlinePr",properties:{rawMap:{summaryBelow:0}}}]}),z}},bV=(z)=>{return(J)=>{let Q=z.reduce((Z,$)=>{if($.outlineLevel&&$.outlineLevel>Z)return $.outlineLevel;return Z},0);return J.children.push({name:"sheetFormatPr",properties:{rawMap:{baseColWidth:10,defaultRowHeight:16,outlineLevelRow:Q?Q:void 0}}}),J}},xV={getTemplate(z){let{worksheet:J,currentSheet:Q,config:Z}=z,{margins:$={},pageSetup:X,headerFooterConfig:Y,suppressColumnOutline:q,rightToLeft:G,frozenRowCount:U,frozenColumnCount:_,protectSheet:H}=Z,{table:W}=J,{rows:B,columns:E}=W,K=E?.length?WV(B,E,!!q):[],F=r4.get(Q),{children:L}=[yV(),CV(G,_,U),bV(B),kV(E),fV(B,Q+1),VV(H),RV(K),AV($),jV(X),OV(Y),TV(Q),vV(Q),PV(F)].reduce((D,M)=>M(D),{children:[],rIdCounter:0});return{name:"worksheet",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships"}}],rawMap:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},children:L}}},wV=xV,H1=new Map,e0=[],E1=[],K1=new Map,gz=new Map,hz=new Map,Yz=new Map,Q2=new Map,Z2=new Map,r4=new Map,NV="AG-GRID-TABLE",Z7="SINGLE_SHEET";function gV(){return Z7}function hV(z){Z7=z}function uV(z,J,Q){nV(J),kS(z,e0.length);let Z=Object.assign({},Q);if(Q.exportAsExcelTable&&Q.pivotModeActive)V(163,{featureName:"pivot mode"}),Z.exportAsExcelTable=!1;iV(J,Z);let $=UR(J,Z);return _R($),$}function mV(z){return z.replace(/^[^a-zA-Z_]+/,"_").replace(/\s/g,"_").replace(/[^a-zA-Z0-9_]/g,"_")}function cV(z,J){if(r4.has(z)){V(164);return}r4.set(z,J)}function iV(z,J){let{exportAsExcelTable:Q,prependContent:Z,appendContent:$,headerRowCount:X=0}=J;if(!Q)return;let Y=typeof Q==="boolean"?{}:Q,{name:q,showColumnStripes:G,showRowStripes:U,showFilterButton:_,highlightFirstColumn:H,highlightLastColumn:W}=Y,B=mV(q||NV),E=e0.length-1,{table:K}=z,{rows:F,columns:L}=K,D=Z?Z.length:0,M=$?$.length:0,f=F.length,A=L.length,R=[],O=[];for(let v=0;vX.id===z.id))$.push(z)}function pV(z,J,Q,Z,$){let X=e0.length,{row:Y,column:q}=z.position||{},G=z;if(Z){if(J!=null&&Q!=null&&(!Y||!q)){if(!z.position)z.position={};z.position=Object.assign({},z.position,{row:J,column:Z.indexOf(Q)+1})}ak(G,Z),ok(G,$)}Jq({imageToAdd:G,idx:X});let U=Z2.get(X);if(!U)U=new Map,Z2.set(X,U);let _=hz.get(X);if(!_)hz.set(X,[G]);else _.push(G);if(!U.get(z.id))U.set(z.id,{index:U.size,type:z.imageType})}function Jq(z){let{imageToAdd:J,idx:Q}=z,Z=gz.get(J.id);if(Z){let $=Z.find((X)=>X.sheetId===Q);if($)$.image.push(J);else Z.push({sheetId:Q,image:[J]})}else gz.set(J.id,[{sheetId:Q,image:[J]}]),Q2.set(J.id,{type:J.imageType,index:Q2.size})}function nV(z){let J=L0(z.name)||"",Q="";while(e0.indexOf(`${J}${Q}`)!==-1)if(Q==="")Q="_1";else Q=`_${parseInt(Q.slice(1),10)+1}`;z.name=`${J}${Q}`,e0.push(z.name)}function dV(z){if(H1.has(z))return H1.get(z);return H1.set(z,H1.size),H1.size-1}function rV(){H1.clear(),gz.clear(),hz.clear(),Yz.clear(),Q2.clear(),Z2.clear(),r4.clear(),e0=[],E1=[],K1=new Map,Z7="SINGLE_SHEET"}function tV(z){return N0(eS.getTemplate(e0,z))}function sV(z){return N0(fS.getTemplate(z))}function lV(){return N0(Af.getTemplate(H1))}function aV(z){return N0(qf.getTemplate(z))}function oV(z){return N0(Hf.getTemplate(z))}function eV(z,J){return N0(Xf.getTemplate({sheetLen:z,hasCustomProperties:J}))}function zR(z){let J=[{Id:"rId1",Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",Target:"xl/workbook.xml"},{Id:"rId2",Type:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",Target:"docProps/core.xml"}];if(z)J.push({Id:"rId3",Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",Target:"docProps/custom.xml"});let Q=$6.getTemplate(J);return N0(Q)}function JR(){return N0(NS.getTemplate())}function QR(z,J){return N0(VS.getTemplate(z,J))}function ZR(z){let J=Array(z).fill(void 0).map((Z,$)=>({Id:`rId${$+1}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",Target:`worksheets/sheet${$+1}.xml`})),Q=$6.getTemplate([...J,{Id:`rId${z+1}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",Target:"theme/theme1.xml"},{Id:`rId${z+2}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",Target:"styles.xml"},{Id:`rId${z+3}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",Target:"sharedStrings.xml"}]);return N0(Q)}function $R(z){return N0(kf.getTemplate({sheetIndex:z}))}function XR(z){let J=Z2.get(z)||[],Q=[];for(let[Z,$]of J){let{index:X,type:Y}=$;Q.push({Id:`rId${X+1}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:`../media/image${Q2.get(Z).index+1}.${dJ(Y)}`})}return N0($6.getTemplate(Q))}function YR(z){return N0(rS.getTemplate({sheetIndex:z}),!0)}function qR(z){let J=Yz.get(z)||[],Q=[];for(let Z=0;Z{if(!z.size)return;let Q=new Map;J.forEach((Z,$)=>{if(z.has(Z))Q.set($,z.get(Z))}),z.clear(),Q.forEach((Z,$)=>z.set($,Z))},_R=(z)=>{let J=K1.get(z)??[];J.push(e0.length-1),K1.set(z,J),E1.push(z)},HR=(z)=>{let J=new Map(K1),Q=[];for(let Z of z){let $=J.get(Z);if(!$?.length)return null;let X=$.shift();Q.push(X),J.set(Z,$)}return Q},WR=(z)=>{if(!z.length||E1.length===0)return null;let J=new Set,Q=[];for(let Z of z){let $=E1.findIndex((X,Y)=>!J.has(Y)&&X===Z);if($===-1)return null;J.add($),Q.push($)}return Q},BR=(z)=>{let J=new Map;z.forEach((Q,Z)=>J.set(Q,Z)),e0=z.map((Q)=>e0[Q]),E1=z.map((Q)=>E1[Q]),vJ(hz,z),vJ(Yz,z),vJ(r4,z),vJ(Z2,z),gz.forEach((Q)=>{Q.forEach((Z)=>{let $=J.get(Z.sheetId);if($!=null)Z.sheetId=$})}),K1=new Map,E1.forEach((Q,Z)=>{let $=K1.get(Q)??[];$.push(Z),K1.set(Q,$)})},ER=(z)=>{if(z.length<=1)return;let J=HR(z)??WR(z);if(!J)return;BR(J)},$7=class{getStringPosition(z){return dV(z)}addBodyImageToMap(z,J,Q,Z,$){pV(z,J,Q,Z,$)}addHeaderFooterImageToMap(z,J){zq(z,J)}addWorksheet(z,J,Q){return uV(z,J,Q)}syncOrderWithSheetData(z){ER(z)}reset(){rV()}setFactoryMode(z){hV(z)}getFactoryMode(){return gV()}getSheetNames(){return[...e0]}},KR=async(z)=>{let J=0,Q=[],Z=new WritableStream({write:(Y)=>{Q.push(Y),J+=Y.length}}),$=new ReadableStream({start:(Y)=>{let q=new FileReader;q.onload=(G)=>{if(G.target?.result)Y.enqueue(G.target.result);Y.close()},q.readAsArrayBuffer(z)}}),X=new window.CompressionStream("deflate-raw");return await $.pipeThrough(X).pipeTo(Z),{size:J,content:new Blob(Q)}},FR=async(z)=>{let J=new Blob([z]),{size:Q,content:Z}=await KR(J),$=new Uint8Array(await Z.arrayBuffer());return{size:Q,content:$}},LR=(z)=>{let J=z.getHours();return J<<=6,J=J|z.getMinutes(),J<<=5,J=J|z.getSeconds()/2,J},DR=(z)=>{let J=z.getFullYear()-1980;return J<<=4,J=J|z.getMonth()+1,J<<=5,J=J|z.getDate(),J};function w0(z,J){let Q="";for(let Z=0;Z>>=8;return Q}var BY=(z)=>{if(!z.length)return 0;let J=-1,Q=0,Z=0,$=0;for(let X=0;X>>8^$;return J^-1},EY=(z)=>{if(!z.length)return 0;if(typeof z==="string")return BY(new TextEncoder().encode(z));return BY(z)},MR=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918000,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function kR(z){let J=String.fromCharCode;function Q(H){let W=[];if(!H)return[];let B=H.length,E=0,K,F;while(E=55296&&K<=56319&&E=55296&&H<=57343)throw Error(Y4(255,{point:H}))}function $(H,W){return J(H>>W&63|128)}function X(H){if((H&4294967168)==0)return J(H);let W="";if((H&4294965248)==0)W=J(H>>6&31|192);else if((H&4294901760)==0)Z(H),W=J(H>>12&15|224),W+=$(H,6);else if((H&4292870144)==0)W=J(H>>18&7|240),W+=$(H,12),W+=$(H,6);return W+=J(H&63|128),W}let Y=Q(z),q=Y.length,G=-1,U,_="";while(++G{let{content:Y,path:q,created:G}=z,U=LR(G),_=DR(G),H=EY($),W=X!==void 0?X:Z,B=kR(q),E=B!==q,K="";if(E){let M=w0(1,1)+w0(EY(B),4)+B;K="up"+w0(M.length,2)+M}let F="\x14\x00"+(E?"\x00\b":"\x00\x00")+w0(J?8:0,2)+w0(U,2)+w0(_,2)+w0(W?H:0,4)+w0(X??Z,4)+w0(Z,4)+w0(B.length,2)+w0(K.length,2),L="PK\x03\x04"+F+B+K,D="PK\x01\x02\x14\x00"+F+"\x00\x00\x00\x00\x00\x00"+(Y?"\x00\x00\x00\x00":"\x10\x00\x00\x00")+w0(Q,4)+B+K;return{localFileHeader:Uint8Array.from(L,(M)=>M.charCodeAt(0)),centralDirectoryHeader:Uint8Array.from(D,(M)=>M.charCodeAt(0))}},Zq=(z)=>{let J;if(typeof z==="string"){let Q=atob(z.split(";base64,")[1]);J=Uint8Array.from(Q,(Z)=>Z.charCodeAt(0))}else J=z;return{size:J.length,content:J}},fR=async(z)=>{let{content:J}=z,{size:Q,content:Z}=!J?{size:0,content:Uint8Array.from([])}:Zq(J),$,X,Y=!1;if(z.type==="file"&&Z&&Q>0){let G=await FR(Z);$=G.content,X=G.size,Y=!0}return{rawContent:Z,rawSize:Q,deflatedContent:$,deflatedSize:X,isCompressed:Y}},SR=(z,J)=>{let{content:Q}=z,{content:Z}=!Q?{content:Uint8Array.from([])}:Zq(Q);return{...Qq(z,!1,J,Z.length,Z,void 0),content:Z,isCompressed:!1}},VR=(z,J,Q)=>{let Z="PK\x05\x06\x00\x00\x00\x00"+w0(z,2)+w0(z,2)+w0(J,4)+w0(Q,4)+"\x00\x00";return Uint8Array.from(Z,($)=>$.charCodeAt(0))},$q=class{constructor(){this.folders=[],this.files=[]}addFolders(z){z.forEach(this.addFolder.bind(this))}addFolder(z){this.folders.push({path:z,created:new Date,isBase64:!1,type:"folder"})}addFile(z,J,Q=!1){this.files.push({path:z,created:new Date,content:Q?J:new TextEncoder().encode(J),isBase64:Q,type:"file"})}async getZipFile(z="application/zip"){let J=await this.buildCompressedFileStream();return this.clearStream(),new Blob([J],{type:z})}getUncompressedZipFile(z="application/zip"){let J=this.buildFileStream();return this.clearStream(),new Blob([J],{type:z})}clearStream(){this.folders=[],this.files=[]}packageFiles(z){let J=0,Q=0;for(let U of z){let{localFileHeader:_,centralDirectoryHeader:H,content:W}=U;J+=_.length+W.length,Q+=H.length}let Z=new Uint8Array(J),$=new Uint8Array(Q),X=0,Y=0;for(let U of z){let{localFileHeader:_,centralDirectoryHeader:H,content:W}=U;Z.set(_,X),X+=_.length,Z.set(W,X),X+=W.length,$.set(H,Y),Y+=H.length}let q=VR(z.length,Q,J),G=new Uint8Array(Z.length+$.length+q.length);return G.set(Z),G.set($,Z.length),G.set(q,Z.length+$.length),G}async buildCompressedFileStream(){let z=[...this.folders,...this.files],J=await Promise.all(z.map(fR)),Q=[],Z=0;for(let $=0;${if(z.addFolders(["_rels/","docProps/","xl/","xl/theme/","xl/_rels/","xl/worksheets/"]),!gz.size)return;z.addFolders(["xl/worksheets/_rels","xl/drawings/","xl/drawings/_rels","xl/media/"]);let J=0;gz.forEach((Q)=>{let Z=Q[0].image[0],{base64:$,imageType:X}=Z;z.addFile(`xl/media/image${++J}.${dJ(X)}`,$,!0)})},AR=(z,J)=>{let Q=0,Z=0;for(let $=0;$0&&hz.has($),q=r4.size>0&&r4.get($),G=gz.size&&Yz.has($);if(!Y&&!q&&!G)continue;let U,_,H;if(Y)jR(z,$,Q),_=Q,Q++;if(G)OR(z,$,Z),H=Z,Z++;if(q)U=q.name;let W=`xl/worksheets/_rels/sheet${$+1}.xml.rels`;z.addFile(W,GR({tableName:U,drawingIndex:_,vmlDrawingIndex:H}))}},jR=(z,J,Q)=>{let $=`xl/drawings/drawing${Q+1}.xml`,X=`xl/drawings/_rels/drawing${Q+1}.xml.rels`;z.addFile(X,XR(J)),z.addFile($,$R(J))},OR=(z,J,Q)=>{let $=`xl/drawings/vmlDrawing${Q+1}.vml`,X=`xl/drawings/_rels/vmlDrawing${Q+1}.vml.rels`;z.addFile($,YR(J)),z.addFile(X,qR(J))},PR=(z)=>{let J=r4,Q=Array.from(J.keys());for(let Z=0;Z{let Y=!!X&&Object.keys(X).some((q)=>X[q]!=null);if(z.addFile("xl/workbook.xml",tV($)),z.addFile("xl/styles.xml",sV(J)),z.addFile("xl/sharedStrings.xml",lV()),z.addFile("xl/theme/theme1.xml",JR()),z.addFile("xl/_rels/workbook.xml.rels",ZR(Z)),z.addFile("docProps/core.xml",aV(Q)),Y)z.addFile("docProps/custom.xml",oV(X));z.addFile("[Content_Types].xml",eV(Z,Y)),z.addFile("_rels/.rels",zR(Y))},Xq=(z,J,Q={},Z)=>{if(!J||J.length===0)return V(159),Z.reset(),!1;Z.syncOrderWithSheetData(J);let{fontSize:$=11,author:X="AG Grid",activeTab:Y=0,customMetadata:q}=Q,G=J.length,U=Math.max(Math.min(Y,G-1),0);return RR(z),PR(z),AR(z,J),TR(z,$,X,G,U,q),Z.reset(),!0},KY=(z,J=new $7)=>{let{data:Q,fontSize:Z,author:$,activeSheetIndex:X,customMetadata:Y}=z,q=z.mimeType||"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",G=new $q;if(!Xq(G,Q,{author:$,fontSize:Z,activeTab:X,customMetadata:Y},J))return Promise.resolve(void 0);return G.getZipFile(q)},FY=(z,J=new $7)=>{let{data:Q,fontSize:Z,author:$,activeSheetIndex:X,customMetadata:Y}=z,q=z.mimeType||"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",G=new $q;if(!Xq(G,Q,{author:$,fontSize:Z,activeTab:X,customMetadata:Y},J))return;return G.getUncompressedZipFile(q)};var vR=class extends B5{constructor(){super(...arguments);this.beanName="excelCreator",this.workbook=new $7}getMergedParams(z){let J=this.gos.get("defaultExcelExportParams");return Object.assign({},J,z)}export(z){if(this.isExportSuppressed()){V(160);return}let J=()=>{let Z=this.getMergedParams(z),$=this.getData(Z),{fontSize:X,author:Y,mimeType:q,customMetadata:G}=Z,U={data:[$],fontSize:X,author:Y,mimeType:q,customMetadata:G};this.packageCompressedFile(U).then((_)=>{if(_){let{fileName:H}=Z,W=typeof H==="function"?H(C(this.gos,{})):H;SJ(this.getFileName(W),_)}})},{overlays:Q}=this.beans;if(Q)Q.showExportOverlay(J);else J()}exportDataAsExcel(z){this.export(z)}getDataAsExcel(z){let J=this.getMergedParams(z),Q=this.getData(J),{fontSize:Z,author:$,mimeType:X,customMetadata:Y}=J,q={data:[Q],fontSize:Z,author:$,mimeType:X,customMetadata:Y};return this.packageFile(q)}setFactoryMode(z){this.workbook.setFactoryMode(z)}getFactoryMode(){return this.workbook.getFactoryMode()}getSheetDataForExcel(z){let J=this.getMergedParams(z);return this.getData(J)}getMultipleSheetsAsExcel(z){return FY(z,this.workbook)}exportMultipleSheetsAsExcel(z){KY(z,this.workbook).then((J)=>{let{fileName:Q="export.xlsx"}=z;if(J){let Z=typeof Q==="function"?Q():Q;SJ(Z,J)}})}getDefaultFileExtension(){return"xlsx"}createSerializingSession(z){let{colModel:J,colNames:Q,rowGroupColsSvc:Z,valueSvc:$,formula:X,gos:Y}=this.beans,q=Y.get("excelStyles")||[],G=this.createStyleLinker(q),U={...z,colModel:J,colNames:Q,rowGroupColsSvc:Z,valueSvc:$,formulaSvc:X,gos:Y,suppressRowOutline:z.suppressRowOutline||z.skipRowGroups,headerRowHeight:z.headerRowHeight||z.rowHeight,baseExcelStyles:q,rightToLeft:z.rightToLeft??Y.get("enableRtl"),styleLinker:G,headerRowCount:J$(J),pivotModeActive:J.isPivotActive(),workbook:this.workbook};return new Jf(U)}createStyleLinker(z){let J=[],Q=new Set,Z=new Map;z.forEach((Y,q)=>{J.push(Y.id),Q.add(Y.id),Z.set(Y.id,q)});let{gos:$,cellStyles:X}=this.beans;return(Y)=>{let{rowType:q,rowIndex:G,value:U,column:_,columnGroup:H,node:W}=Y,B=q==="HEADER",E=q==="HEADER_GROUPING",K=B?_:H,F=[];if(B||E){if(F.push("header"),E)F.push("headerGroup");if(K)F=F.concat(WJ(K.getDefinition(),$,_||null,H||null));return F}let L=["cell"];if(!J.length)return L;let D=_.getDefinition();return X?.processAllCellClasses(D,C($,{value:U,data:W.data,node:W,colDef:D,column:_,rowIndex:G}),(M)=>{if(Q.has(M))L.push(M)}),L.sort((M,f)=>{let A=Z.get(M)??-1,R=Z.get(f)??-1;return A===R?0:Athis.onFocusIn(z),onFocusOut:(z)=>this.onFocusOut(z),focusInnerElement:(z)=>this.focusInnerElement(z),onTabKeyDown:(z)=>this.onTabKeyDown(z),handleKeyDown:(z)=>this.handleKeyDown(z)},this.stopPropagationCallbacks),this.refreshAriaProperties(),this.addManagedEventListeners({stylesChanged:this.onStylesChanged.bind(this)})}onStylesChanged(z){if(z.listItemHeightChanged)this.rowHeight=this.getItemHeight(),this.refresh()}refreshAriaProperties(){let J=this.getLocaleTextFunc()("ariaDefaultListName",this.listName||"List"),Q=this.eContainer;U0(Q,this.model?.getRowCount()>0?this.ariaRole:"presentation"),_0(Q,J)}addResizeObserver(){let z=()=>O4(this.beans,()=>this.drawVirtualRows()),J=j4(this.beans,this.getGui(),z);this.addDestroyFunc(J)}focusInnerElement(z){return this.focusRow(z?this.model.getRowCount()-1:0),!0}onFocusIn(z){let J=z.target;if(J.classList.contains("ag-virtual-list-item"))this.lastFocusedRowIndex=g8(J)-1}onFocusOut(z){if(!this.getFocusableElement().contains(z.relatedTarget))this.lastFocusedRowIndex=null}handleKeyDown(z){let{key:J,shiftKey:Q}=z;switch(J){case k.UP:case k.DOWN:{let Z=J===k.UP;if(z.preventDefault(),Q)this.moveItem(Z);else this.navigate(Z)}break;case k.PAGE_HOME:case k.PAGE_END:case k.PAGE_UP:case k.PAGE_DOWN:if(this.navigateToPage(J)!==null)z.preventDefault();break}}onTabKeyDown(z){this.stopPropagationCallbacks?.stopPropagation(z),this.forceFocusOutOfContainer(z.shiftKey)}getNextRow(z){if(this.lastFocusedRowIndex==null)return;let J=this.lastFocusedRowIndex+(z?-1:1);if(J<0||J>=this.model.getRowCount())return;return J}moveItem(z){if(!this.moveItemCallback)return;let J=this.getComponentAt(this.lastFocusedRowIndex);if(!J)return;this.moveItemCallback(J,z)}navigate(z){let J=this.getNextRow(z);if(J===void 0)return;this.focusRow(J)}navigateToPage(z,J="focused"){let Q=!1;if(J==="focused")J=this.getLastFocusedRow(),Q=!0;let Z=this.model.getRowCount()-1,$=-1;if(z===k.PAGE_HOME)$=0;else if(z===k.PAGE_END)$=Z;else if(z===k.PAGE_DOWN)$=Math.min(J+this.pageSize,Z);else if(z===k.PAGE_UP)$=Math.max(J-this.pageSize,0);if($===-1)return null;if(Q)this.focusRow($);else this.ensureIndexVisible($);return $}getLastFocusedRow(){return this.lastFocusedRowIndex}focusRow(z){if(this.isScrolling)return;this.isScrolling=!0,this.ensureIndexVisible(z),O4(this.beans,()=>{if(this.isScrolling=!1,!this.isAlive())return;let J=this.renderedRows.get(z);if(J)J.eDiv.focus()})}getComponentAt(z){let J=this.renderedRows.get(z);return J&&J.rowComponent}forEachRenderedRow(z){this.renderedRows.forEach((J,Q)=>z(J.rowComponent,Q))}getItemHeight(){if(!this.isHeightFromTheme)return this.rowHeight;return this.beans.environment.getDefaultListItemHeight()}ensureIndexVisible(z,J=!0){let Q=this.model.getRowCount();if(typeof z!=="number"||z<0||z>=Q)return!1;let Z=z*this.rowHeight,$=Z+this.rowHeight,X=this.getGui(),Y=X.scrollTop,q=X.offsetHeight,G=Y+q,U=J?0:this.rowHeight,_=Y>Z+U,H=G<$-U;if(_)return X.scrollTop=Z,!0;if(H){let W=$-q;return X.scrollTop=W,!0}return!1}setComponentCreator(z){this.componentCreator=z}setComponentUpdater(z){this.componentUpdater=z}getRowHeight(){return this.rowHeight}getScrollTop(){return this.getGui().scrollTop}setRowHeight(z){this.isHeightFromTheme=!1,this.rowHeight=z,this.refresh()}refresh(z){if(this.model==null||!this.isAlive())return;let J=this.model.getRowCount();this.eContainer.style.height=`${J*this.rowHeight}px`,this.refreshAriaProperties(),this.awaitStable(()=>{if(!this.isAlive())return;if(this.canSoftRefresh(z))this.drawVirtualRows(!0);else this.clearVirtualRows(),this.drawVirtualRows()})}awaitStable(z){if(this.awaitStableCallbacks.push(z),this.awaitStableCallbacks.length>1)return;let J=this.model.getRowCount();MZ(this,()=>this.eContainer.clientHeight>=J*this.rowHeight,()=>{if(!this.isAlive())return;let Q=this.awaitStableCallbacks;this.awaitStableCallbacks=[];for(let Z of Q)Z()})}canSoftRefresh(z){return!!(z&&this.renderedRows.size&&typeof this.model.areRowsEqual==="function"&&this.componentUpdater)}clearVirtualRows(){this.renderedRows.forEach((z,J)=>this.removeRow(J))}drawVirtualRows(z){if(!this.isAlive()||!this.model)return;let J=this.getGui(),Q=J.scrollTop,Z=Q+J.offsetHeight;if(Q===Z)this.clearVirtualRows();else{let $=Math.floor(Q/this.rowHeight),X=Math.floor(Z/this.rowHeight);this.pageSize=Math.floor((Z-Q)/this.rowHeight),this.ensureRowsRendered($,X,z)}}ensureRowsRendered(z,J,Q){if(this.renderedRows.forEach((Z,$)=>{if(($J)&&$!==this.lastFocusedRowIndex)this.removeRow($)}),Q)this.refreshRows();for(let Z=z;Z<=J;Z++){if(this.renderedRows.has(Z))continue;if(Z=J.getRowCount())return;let{cssIdentifier:Q,ariaRole:Z,renderedRows:$,eContainer:X}=this,Y=J.getRow(z),q=Z==="tree"?"treeitem":"option",G=H0({tag:"div",cls:`ag-virtual-list-item ag-${Q}-virtual-list-item`,role:q,attrs:{tabindex:"-1"}});v2(G,J.getRowCount()),I2(G,z+1);let U=this.rowHeight;G.style.height=`${U}px`,G.style.top=`${U*z}px`;let _=this.componentCreator(Y,G);if(_.addGuiEventListener("focusin",()=>this.lastFocusedRowIndex=z),G.appendChild(_.getGui()),$.has(z-1))$.get(z-1).eDiv.insertAdjacentElement("afterend",G);else if($.has(z+1))$.get(z+1).eDiv.insertAdjacentElement("beforebegin",G);else X.appendChild(G);$.set(z,{rowComponent:_,eDiv:G,value:Y})}removeRow(z){let J=this.renderedRows.get(z);J.eDiv.remove(),this.destroyBean(J.rowComponent),this.renderedRows.delete(z)}refreshRows(){let z=this.model.getRowCount();this.renderedRows.forEach((J,Q)=>{if(Q>=z)this.removeRow(Q);else{let Z=this.model.getRow(Q);if(this.model.areRowsEqual?.(J.value,Z))this.componentUpdater(Z,J.rowComponent);else this.removeRow(Q)}})}addScrollListener(){this.addGuiEventListener("scroll",()=>this.drawVirtualRows(),{passive:!0})}setModel(z){this.model=z}getAriaElement(){return this.eContainer}destroy(){if(!this.isAlive())return;this.clearVirtualRows(),this.awaitStableCallbacks.length=0,super.destroy()}},bR='.ag-list-item-hovered:after{background-color:var(--ag-accent-color);content:"";height:1px;left:0;position:absolute;right:0}.ag-item-highlight-top:after{top:0}.ag-item-highlight-bottom:after{bottom:0}',u5="ag-list-item-hovered",xR=class extends k0{constructor(z,J,Q){super();this.comp=z,this.virtualList=J,this.params=Q,this.currentDragValue=null,this.lastHoveredListItem=null}postConstruct(){this.beans.environment.addGlobalCSS(bR,"component-AgVirtualListDragFeature"),this.params.addListeners(this,this.listItemDragStart.bind(this),this.listItemDragEnd.bind(this)),this.createDropTarget(),this.createAutoScrollService()}listItemDragStart(z){this.currentDragValue=this.params.getCurrentDragValue(z),this.moveBlocked=this.params.isMoveBlocked(this.currentDragValue)}listItemDragEnd(){window.setTimeout(()=>{this.currentDragValue=null,this.moveBlocked=!1},10)}createDropTarget(){let z={isInterestedIn:(J)=>J===this.params.dragSourceType,getIconName:()=>this.moveBlocked?"pinned":"move",getContainer:()=>this.comp.getGui(),onDragging:(J)=>this.onDragging(J),onDragStop:()=>this.onDragStop(),onDragLeave:()=>this.onDragLeave(),onDragCancel:()=>this.onDragCancel()};this.beans.dragAndDrop?.addDropTarget(z)}createAutoScrollService(){let z=this.virtualList.getGui();this.autoScrollService=new EJ({scrollContainer:z,scrollAxis:"y",getVerticalPosition:()=>z.scrollTop,setVerticalPosition:(J)=>z.scrollTop=J})}onDragging(z){if(!this.currentDragValue||this.moveBlocked)return;let J=this.getListDragItem(z),Q=this.virtualList.getComponentAt(J.rowIndex);if(!Q)return;let Z=Q.getGui().parentElement;if(this.lastHoveredListItem&&this.lastHoveredListItem.rowIndex===J.rowIndex&&this.lastHoveredListItem.position===J.position)return;this.autoScrollService.check(z.event),this.clearHoveredItems(),this.lastHoveredListItem=J,EZ(Z,u5),EZ(Z,`ag-item-highlight-${J.position}`)}getListDragItem(z){let J=this.virtualList.getGui(),Q=Number.parseFloat(window.getComputedStyle(J).paddingTop),Z=this.virtualList.getRowHeight(),$=this.virtualList.getScrollTop(),X=Math.max(0,(z.y-Q+$)/Z),Y=this.params.getNumRows(this.comp)-1,q=Math.min(Y,X)|0;return{rowIndex:q,position:Math.round(X)>X||X>Y?"bottom":"top",component:this.virtualList.getComponentAt(q)}}onDragStop(){if(this.moveBlocked)return;this.params.moveItem(this.currentDragValue,this.lastHoveredListItem),this.clearDragProperties()}onDragCancel(){this.clearDragProperties()}onDragLeave(){this.clearDragProperties()}clearDragProperties(){this.clearHoveredItems(),this.autoScrollService.ensureCleared()}clearHoveredItems(){let z=this.virtualList.getGui();for(let J of z.querySelectorAll(`.${u5}`))for(let Q of[u5,"ag-item-highlight-top","ag-item-highlight-bottom"])J.classList.remove(Q);this.lastHoveredListItem=null}};var wR=".ag-panel{background-color:var(--ag-panel-background-color);display:flex;flex-direction:column;overflow:hidden;position:relative}.ag-dialog{border:var(--ag-dialog-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dialog-shadow);position:absolute}.ag-panel-title-bar{align-items:center;background-color:var(--ag-panel-title-bar-background-color);border-bottom:var(--ag-panel-title-bar-border);color:var(--ag-panel-title-bar-text-color);cursor:default;display:flex;flex:none;font-family:var(--ag-panel-title-bar-font-family);font-size:var(--ag-panel-title-bar-font-size);font-weight:var(--ag-panel-title-bar-font-weight);height:var(--ag-panel-title-bar-height);padding:var(--ag-spacing) var(--ag-cell-horizontal-padding)}.ag-panel-title-bar-button{cursor:pointer;:where(.ag-icon){color:var(--ag-panel-title-bar-icon-color)}}:where(.ag-ltr) .ag-panel-title-bar-button{margin-left:calc(var(--ag-spacing)*2);margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-panel-title-bar-button{margin-left:var(--ag-spacing);margin-right:calc(var(--ag-spacing)*2)}.ag-panel-title-bar-title{flex:1 1 auto}.ag-panel-title-bar-buttons{display:flex}.ag-panel-content-wrapper{display:flex;flex:1 1 auto;overflow:hidden;position:relative}:where(.ag-dragging-fill-handle) .ag-dialog,:where(.ag-dragging-range-handle) .ag-dialog{opacity:.7;pointer-events:none}";function NR(z){return z??(z=z||"default"),{tag:"div",cls:`ag-panel ag-${z}-panel`,attrs:{tabindex:"-1"},children:[{tag:"div",ref:"eTitleBar",cls:`ag-panel-title-bar ag-${z}-panel-title-bar ag-unselectable`,children:[{tag:"span",ref:"eTitle",cls:`ag-panel-title-bar-title ag-${z}-panel-title-bar-title`},{tag:"div",ref:"eTitleBarButtons",cls:`ag-panel-title-bar-buttons ag-${z}-panel-title-bar-buttons`}]},{tag:"div",ref:"eContentWrapper",cls:`ag-panel-content-wrapper ag-${z}-panel-content-wrapper`}]}}var gR=class extends I0{constructor(z){super(NR(z.cssIdentifier));this.config=z,this.closable=!0,this.eContentWrapper=j,this.eTitleBar=j,this.eTitleBarButtons=j,this.eTitle=j,this.registerCSS(wR)}postConstruct(){let{component:z,closable:J,hideTitleBar:Q,title:Z,minWidth:$=250,width:X,minHeight:Y=250,height:q,centered:G,popup:U,x:_,y:H,postProcessPopupParams:W}=this.config,B=this.beans,E=this.createManagedBean(new xZ(this.getGui(),{minWidth:$,width:X,minHeight:Y,height:q,centered:G,x:_,y:H,popup:U,calculateTopBuffer:()=>this.positionableFeature.getHeight()-this.getBodyHeight()}));this.positionableFeature=E;let K=this.getGui();if(z)this.setBodyComponent(z);if(!Q){if(Z)this.setTitle(Z);this.setClosable(J!=null?J:this.closable)}else w(this.eTitleBar,!1);if(this.addManagedElementListeners(this.eTitleBar,{mousedown:(L)=>{if(K.contains(L.relatedTarget)||K.contains(n(B))||this.eTitleBarButtons.contains(L.target)){L.preventDefault();return}let D=this.eContentWrapper.querySelector("button, [href], input, select, textarea, [tabindex]");if(D)D.focus()}}),U&&E.isPositioned())return;if(this.renderComponent)this.renderComponent();let F;if(W){let{type:L,eventSource:D,mouseEvent:M}=W;F=()=>B.popupSvc?.callPostProcessPopup(W,L,K,D,M)}E.initialisePosition(F),this.eContentWrapper.style.height="0"}renderComponent(){let z=this.getGui();z.focus(),this.close=()=>{z.remove(),this.destroy()}}getHeight(){return this.positionableFeature.getHeight()}setHeight(z){this.positionableFeature.setHeight(z)}getWidth(){return this.positionableFeature.getWidth()}setWidth(z){this.positionableFeature.setWidth(z)}setClosable(z){if(z!==this.closable)this.closable=z;if(z){let J=this.closeButtonComp=new I0({tag:"div",cls:"ag-button"});this.createBean(J);let Q=J.getGui(),Z=this.beans.iconSvc.createIconNoSpan("close",this.beans);Z.classList.add("ag-panel-title-bar-button-icon"),Q.appendChild(Z),this.addTitleBarButton(J),J.addManagedElementListeners(Q,{click:this.onBtClose.bind(this)})}else if(this.closeButtonComp)this.closeButtonComp.getGui().remove(),this.closeButtonComp=this.destroyBean(this.closeButtonComp)}setBodyComponent(z){z.setParentComponent(this),this.eContentWrapper.appendChild(z.getGui())}addTitleBarButton(z,J){let Q=this.eTitleBarButtons,Z=Q.children,$=Z.length;if(J==null)J=$;J=Math.max(0,Math.min(J,$)),z.addCss("ag-panel-title-bar-button");let X=z.getGui();if(J===0)Q.prepend(X);else if(J===$)Q.append(X);else Z[J-1].after(X);z.setParentComponent(this)}getBodyHeight(){return C2(this.eContentWrapper)}getBodyWidth(){return lz(this.eContentWrapper)}setTitle(z){this.eTitle.innerText=z}onBtClose(){this.close()}destroy(){if(this.closeButtonComp)this.closeButtonComp=this.destroyBean(this.closeButtonComp);let z=this.getGui();if(z&&B0(z))this.close();super.destroy()}},hR=class extends gR{constructor(z,J){super({...z,popup:!0});this.callbacks=J,this.isMaximizable=!1,this.isMaximized=!1,this.maximizeListeners=[],this.resizeListenerDestroy=null,this.lastPosition={x:0,y:0,width:0,height:0}}wireBeans(z){this.popupSvc=z.popupSvc}postConstruct(){let z=this.getGui(),{movable:J,resizable:Q,maximizable:Z,modal:$}=this.config;if(this.addCss("ag-dialog"),super.postConstruct(),this.tabGuardFeature=this.createManagedBean(new oZ(this,this.callbacks?.stopPropagationCallbacks)),this.tabGuardFeature.initialiseTabGuard({isFocusableContainer:!0,onFocusIn:()=>{this.popupSvc?.bringPopupToFront(z)},onTabKeyDown:(X)=>{if($)return;let Y=X.shiftKey,q=O0(this.beans,z,!1,Y);if(!q||this.tabGuardFeature.getTabGuardCtrl().isTabGuard(q)){if(this.callbacks?.focusNextContainer(this.beans,Y))X.preventDefault()}}}),J)this.setMovable(J);if(Z)this.setMaximizable(Z);if(Q)this.setResizable(Q);if(!this.config.modal)this.callbacks?.configureFocusableContainer(this.beans,this)}setAllowFocus(z){this.tabGuardFeature.getTabGuardCtrl().setAllowFocus(z)}renderComponent(){let z=this.getGui(),{alwaysOnTop:J,modal:Q,title:Z,afterGuiAttached:$}=this.config,X=this.getLocaleTextFunc(),Y=this.popupSvc?.addPopup({modal:Q,eChild:z,closeOnEsc:!0,closedCallback:this.onClosed.bind(this),alwaysOnTop:J,ariaLabel:Z||X("ariaLabelDialog","Dialog"),afterGuiAttached:$});if(Y)this.close=Y.hideFunc}onClosed(z){this.destroy(),this.config.closedCallback?.(z)}setMaximized(z){if(this.isMaximizable&&z!==this.isMaximized)this.toggleMaximize()}toggleMaximize(){let z=this.positionableFeature.getPosition();if(this.isMaximized){let{x:J,y:Q,width:Z,height:$}=this.lastPosition;this.setWidth(Z),this.setHeight($),this.positionableFeature.offsetElement(J,Q)}else this.lastPosition.width=this.getWidth(),this.lastPosition.height=this.getHeight(),this.lastPosition.x=z.x,this.lastPosition.y=z.y,this.positionableFeature.offsetElement(0,0),this.setHeight("100%"),this.setWidth("100%");this.isMaximized=!this.isMaximized,this.refreshMaximizeIcon()}refreshMaximizeIcon(){w(this.maximizeIcon,!this.isMaximized),w(this.minimizeIcon,this.isMaximized)}clearMaximizebleListeners(){if(this.maximizeListeners.length){for(let z of this.maximizeListeners)z();this.maximizeListeners.length=0}if(this.resizeListenerDestroy)this.resizeListenerDestroy(),this.resizeListenerDestroy=null}destroy(){this.maximizeButtonComp=this.destroyBean(this.maximizeButtonComp),this.clearMaximizebleListeners(),super.destroy()}setResizable(z){this.positionableFeature.setResizable(z)}setMovable(z){this.positionableFeature.setMovable(z,this.eTitleBar)}setMaximizable(z){if(!z){if(this.clearMaximizebleListeners(),this.maximizeButtonComp)this.destroyBean(this.maximizeButtonComp),this.maximizeButtonComp=this.maximizeIcon=this.minimizeIcon=void 0;return}let J=this.eTitleBar;if(!J||z===this.isMaximizable)return;this.isMaximizable=z;let Q=this.buildMaximizeAndMinimizeElements();this.refreshMaximizeIcon(),Q.addManagedElementListeners(Q.getGui(),{click:this.toggleMaximize.bind(this)}),this.addTitleBarButton(Q,0),this.maximizeListeners.push(...this.addManagedElementListeners(J,{dblclick:this.toggleMaximize.bind(this)})),[this.resizeListenerDestroy]=this.addManagedListeners(this.positionableFeature,{resize:()=>{this.isMaximized=!1,this.refreshMaximizeIcon()}})}buildMaximizeAndMinimizeElements(){let z=this.maximizeButtonComp=this.createBean(new I0({tag:"div",cls:"ag-dialog-button"})),J=z.getGui(),Q=this.beans.iconSvc;return this.maximizeIcon=Q.createIconNoSpan("maximize"),J.appendChild(this.maximizeIcon),this.maximizeIcon.classList.add("ag-panel-title-bar-button-icon"),this.minimizeIcon=Q.createIconNoSpan("minimize"),J.appendChild(this.minimizeIcon),this.minimizeIcon.classList.add("ag-panel-title-bar-button-icon"),z}};var uR=class extends Qz{constructor(z){super();this.setTemplateFromElement(z.getGui(),void 0,void 0,!0)}postConstruct(){this.initialiseTabGuard({onTabKeyDown:(z)=>this.onTabKeyDown(z),handleKeyDown:(z)=>this.handleKeyDown(z)})}handleKeyDown(z){if(z.key===k.ESCAPE)this.closePanel()}onTabKeyDown(z){if(z.defaultPrevented)return;this.closePanel(),z.preventDefault()}closePanel(){let z=this.parentComponent;z.closeSubMenu(),setTimeout(()=>z.getGui().focus(),0)}},o5=class extends k0{constructor(z){super();this.callbacks=z,this.ACTIVATION_DELAY=80,this.isActive=!1,this.subMenuIsOpen=!1,this.subMenuIsOpening=!1,this.suppressRootStyles=!0,this.suppressAria=!0,this.suppressFocus=!0}init(z){let{menuItemDef:J,isAnotherSubMenuOpen:Q,level:Z,childComponent:$,contextParams:X}=z;return this.params=z.menuItemDef,this.level=Z,this.isAnotherSubMenuOpen=Q,this.childComponent=$,this.contextParams=X,this.cssClassPrefix=this.params.menuItemParams?.cssClassPrefix??"ag-menu-option",this.callbacks.getMenuItemComp(this.beans,this.params,{...J,level:Z,isAnotherSubMenuOpen:Q,openSubMenu:(Y)=>this.openSubMenu(Y),closeSubMenu:()=>this.closeSubMenu(),closeMenu:(Y)=>this.closeMenu(Y),updateTooltip:(Y,q)=>this.refreshTooltip(Y,q),onItemActivated:()=>this.onItemActivated()}).then((Y)=>{if(!Y)return;this.menuItemComp=Y;let q=Y.configureDefaults?.();if(q)this.configureDefaults(q===!0?void 0:q)})}addListeners(z,J){if(!J?.suppressClick)this.addManagedElementListeners(z,{click:(Q)=>this.onItemSelected(Q)});if(!J?.suppressKeyboardSelect)this.addManagedElementListeners(z,{keydown:(Q)=>{if(Q.key===k.ENTER||Q.key===k.SPACE)Q.preventDefault(),this.onItemSelected(Q)}});if(!J?.suppressMouseDown)this.addManagedElementListeners(z,{mousedown:(Q)=>{Q.stopPropagation(),Q.preventDefault()}});if(!J?.suppressMouseOver)this.addManagedElementListeners(z,{mouseenter:()=>this.onMouseEnter(),mouseleave:()=>this.onMouseLeave()})}isDisabled(){return!!this.params.disabled}openSubMenu(z=!1,J){if(this.closeSubMenu(),!this.params.subMenu)return;this.subMenuIsOpening=!0;let Q=z0({tag:"div",cls:"ag-menu",role:"presentation"});this.eSubMenuGui=Q;let Z,$=()=>{this.subMenuIsOpening=!1};if(this.childComponent){let U=this.createBean(new uR(this.childComponent));U.setParentComponent(this);let _=U.getGui(),H="mouseenter",W=()=>this.cancelDeactivate();if(_.addEventListener(H,W),Z=()=>{_.removeEventListener(H,W),this.destroyBean(U)},Q.appendChild(_),this.childComponent.afterGuiAttached)$=()=>{this.childComponent.afterGuiAttached(),this.subMenuIsOpening=!1}}else if(this.params.subMenu){let U=this.createBean(new X7(this.level+1,this.contextParams,this.callbacks));if(U.setParentComponent(this),U.addMenuItems(this.params.subMenu),Q.appendChild(U.getGui()),this.addManagedListeners(U,{closeMenu:(_)=>this.dispatchLocalEvent(_)}),U.addGuiEventListener("mouseenter",()=>this.cancelDeactivate()),Z=()=>this.destroyBean(U),z)$=()=>{U.activateFirstItem(),this.subMenuIsOpening=!1}}let X=this.beans.popupSvc,Y=()=>{let U=this.eGui;X?.positionPopupForMenu({eventSource:U,ePopup:Q,event:J instanceof MouseEvent?J:void 0,additionalParams:this.callbacks.getPostProcessPopupParams(this.contextParams)})},q=this.getLocaleTextFunc(),G=X?.addPopup({modal:!0,eChild:Q,positionCallback:Y,anchorToElement:this.eGui,ariaLabel:q("ariaLabelSubMenu","SubMenu"),afterGuiAttached:$});this.subMenuIsOpen=!0,this.setAriaExpanded(!0),this.hideSubMenu=()=>{if(G)G.hideFunc();this.subMenuIsOpen=!1,this.setAriaExpanded(!1),Z(),this.menuItemComp.setExpanded?.(!1),this.eSubMenuGui=void 0},this.menuItemComp.setExpanded?.(!0)}setAriaExpanded(z){if(!this.suppressAria)j0(this.eGui,z)}closeSubMenu(){if(!this.hideSubMenu)return;this.hideSubMenu(),this.hideSubMenu=null,this.setAriaExpanded(!1)}isSubMenuOpen(){return this.subMenuIsOpen}isSubMenuOpening(){return this.subMenuIsOpening}activate(z,J){if(this.cancelActivate(),this.params.disabled&&!J)return;if(this.isActive=!0,!this.suppressRootStyles)this.eGui.classList.add(`${this.cssClassPrefix}-active`);if(this.menuItemComp.setActive?.(!0),!this.suppressFocus)this.callbacks.preserveRangesWhile(this.beans,()=>this.eGui.focus({preventScroll:!J}));if(z&&this.params.subMenu)window.setTimeout(()=>{if(this.isAlive()&&this.isActive)this.openSubMenu()},300);this.onItemActivated()}deactivate(){if(this.cancelDeactivate(),!this.suppressRootStyles)this.eGui.classList.remove(`${this.cssClassPrefix}-active`);if(this.menuItemComp.setActive?.(!1),this.isActive=!1,this.subMenuIsOpen)this.closeSubMenu()}getGui(){return this.menuItemComp.getGui()}getParentComponent(){return this.parentComponent}setParentComponent(z){this.parentComponent=z}getSubMenuGui(){return this.eSubMenuGui}onItemSelected(z){if(this.menuItemComp.select?.(),this.params.action)this.beans.frameworkOverrides.wrapOutgoing(()=>this.params.action(this.gos.addCommon({...this.contextParams})));else this.openSubMenu(z&&z.type==="keydown",z);if(this.params.subMenu&&!this.params.action||this.params.suppressCloseOnSelect)return;this.closeMenu(z)}closeMenu(z){let J={type:"closeMenu"};if(z)if(z instanceof MouseEvent)J.mouseEvent=z;else J.keyboardEvent=z;this.dispatchLocalEvent(J)}onItemActivated(){let z={type:"menuItemActivated",menuItem:this};this.dispatchLocalEvent(z)}cancelActivate(){if(this.activateTimeoutId)window.clearTimeout(this.activateTimeoutId),this.activateTimeoutId=0}cancelDeactivate(){if(this.deactivateTimeoutId)window.clearTimeout(this.deactivateTimeoutId),this.deactivateTimeoutId=0}onMouseEnter(){if(this.cancelDeactivate(),this.isAnotherSubMenuOpen())this.activateTimeoutId=window.setTimeout(()=>this.activate(!0),this.ACTIVATION_DELAY);else this.activate(!0)}onMouseLeave(){if(this.cancelActivate(),this.isSubMenuOpen())this.deactivateTimeoutId=window.setTimeout(()=>this.deactivate(),this.ACTIVATION_DELAY);else this.deactivate()}refreshRootElementGui(z){let J=this.menuItemComp.getGui(),{cssClassPrefix:Q,params:{cssClasses:Z,disabled:$}}=this,X=this.menuItemComp.getRootElement?.();if(X){if(!z)J.classList.add("ag-menu-option-custom");J=X}if(this.suppressRootStyles=!!z,!this.suppressRootStyles){J.classList.add(Q);for(let Y of Z??[])J.classList.add(Y);if($)J.classList.add(`${Q}-disabled`)}return J}applyAriaProperties(z){let{params:{checked:J,subMenu:Q,subMenuRole:Z,disabled:$}}=this,X=J!=null;if(U0(z,X?"menuitemcheckbox":"menuitem"),Q)i8(z,Z??"menu");if($)u8(z,!0)}configureDefaults(z){if(!this.menuItemComp){setTimeout(()=>this.configureDefaults(z));return}let{suppressRootStyles:J,suppressTooltip:Q,suppressAria:Z,suppressTabIndex:$,suppressFocus:X}=z||{},{params:{tooltip:Y,disabled:q}}=this,G=this.eGui=this.refreshRootElementGui(!!J);if(this.suppressAria=!!Z,!Z)this.applyAriaProperties(G);if(!$)G.setAttribute("tabindex","-1");if(!Q)this.refreshTooltip(Y);if(!q)this.addListeners(G,z);this.suppressFocus=!!X}refreshTooltip(z,J){if(this.tooltip=z,this.tooltipFeature=this.destroyBean(this.tooltipFeature),!z||!this.menuItemComp)return;let Q=this.beans.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.getGui(),getTooltipValue:()=>this.tooltip,getLocation:()=>"menu",shouldDisplayTooltip:J});if(Q)this.tooltipFeature=this.createBean(Q)}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),this.menuItemComp?.destroy?.(),super.destroy()}},X7=class extends Qz{constructor(z=0,J,Q){super({tag:"div",cls:"ag-menu-list",role:"menu"});this.level=z,this.menuActionParams=J,this.callbacks=Q,this.menuItems=[]}postConstruct(){this.initialiseTabGuard({onTabKeyDown:(z)=>this.onTabKeyDown(z),handleKeyDown:(z)=>this.callbacks.preserveRangesWhile(this.beans,()=>this.handleKeyDown(z)),onFocusIn:(z)=>this.handleFocusIn(z),onFocusOut:(z)=>this.handleFocusOut(z)})}onTabKeyDown(z){if(!this.getParentComponent()?.getGui()?.classList.contains("ag-focus-managed"))z.preventDefault();if(z.shiftKey)this.closeIfIsChild(z)}handleKeyDown(z){switch(z.key){case k.UP:case k.RIGHT:case k.DOWN:case k.LEFT:z.preventDefault(),this.handleNavKey(z.key);break;case k.ESCAPE:if(this.closeIfIsChild())this.callbacks.stopPropagationCallbacks.stopPropagation(z);break}}handleFocusIn(z){let J=z.relatedTarget;if(!this.tabGuardFeature.getTabGuardCtrl().isTabGuard(J)&&(this.getGui().contains(J)||this.activeMenuItem?.getSubMenuGui()?.contains(J)))return;if(this.activeMenuItem)this.activeMenuItem.activate();else this.activateFirstItem()}handleFocusOut(z){let J=z.relatedTarget;if(!this.activeMenuItem||this.getGui().contains(J)||this.activeMenuItem.getSubMenuGui()?.contains(J))return;if(!this.activeMenuItem.isSubMenuOpening())this.activeMenuItem.deactivate()}clearActiveItem(){if(this.activeMenuItem)this.activeMenuItem.deactivate(),this.activeMenuItem=null}addMenuItems(z){if(z==null)return;N.all(z.map((J)=>{if(J==="separator")return N.resolve({eGui:this.createSeparator()});else if(typeof J==="string")return this.callbacks.warnNoItem?.(J),N.resolve({eGui:null});else return this.addItem(J)})).then((J)=>{for(let Q of J??[])if(Q?.eGui){if(this.appendChild(Q.eGui),Q.comp)this.menuItems.push(Q.comp)}})}addItem(z){let J=this.createManagedBean(new o5(this.callbacks));return J.init({menuItemDef:z,isAnotherSubMenuOpen:()=>this.menuItems.some((Q)=>Q.isSubMenuOpen()),level:this.level,contextParams:this.menuActionParams}).then(()=>{return J.setParentComponent(this),this.addManagedListeners(J,{closeMenu:(Q)=>{this.dispatchLocalEvent(Q)},menuItemActivated:(Q)=>{if(this.activeMenuItem&&this.activeMenuItem!==Q.menuItem)this.activeMenuItem.deactivate();this.activeMenuItem=Q.menuItem}}),{comp:J,eGui:J.getGui()}})}activateFirstItem(){let z=this.menuItems.filter((J)=>!J.isDisabled())[0];if(!z)return;z.activate()}createSeparator(){let z={tag:"div",cls:"ag-menu-separator-part"};return H0({tag:"div",cls:"ag-menu-separator",attrs:{"aria-hidden":"true"},children:[z,z,z,z]})}handleNavKey(z){switch(z){case k.UP:case k.DOWN:{let Q=this.findNextItem(z===k.UP);if(Q&&Q!==this.activeMenuItem)Q.activate(!1,!0);return}}let J=this.gos.get("enableRtl")?k.RIGHT:k.LEFT;if(z===J)this.closeIfIsChild();else this.openChild()}closeIfIsChild(z){let J=this.getParentComponent();if(J&&J instanceof o5){if(z)z.preventDefault();return J.closeSubMenu(),J.getGui().focus(),!0}return!1}openChild(){if(this.activeMenuItem)this.activeMenuItem.openSubMenu(!0)}findNextItem(z){let J=[...this.menuItems];if(!J.length)return;if(!this.activeMenuItem)return z?y(J):J[0];if(z)J.reverse();let Q,Z=!1;for(let $ of J){if(!Z){if($===this.activeMenuItem)Z=!0;continue}Q=$;break}if(Z&&!Q)return J[0];return Q||this.activeMenuItem}destroy(){this.clearActiveItem(),super.destroy()}},mR="ag-menu",cR="ag-context-menu-loading-icon",iR=class extends k0{constructor(z){super();this.params=z,this.destroyLoadingSpinner=null,this.lastPromise=0}hideActiveMenu(){this.destroyBean(this.activeMenu)}showMenu(z,J,Q){let{getMenuItems:Z,shouldBlockMenuOpen:$}=this.params,X=Z(z,J);if(x9(X)){let Y=this.lastPromise+1;if(this.lastPromise=Y,!this.destroyLoadingSpinner)this.createLoadingIcon(J);return X.then((q)=>{if(this.lastPromise!==Y)return;let{target:G}=J,U=!G;if(q?.length&&(U||B0(G))&&!$?.())this.createContextMenu({menuItems:q,menuActionParams:z,mouseEvent:J,anchorToElement:Q});this.destroyLoadingSpinner?.()}),!0}if(!X?.length)return!1;return this.createContextMenu({menuItems:X,menuActionParams:z,mouseEvent:J,anchorToElement:Q}),!0}createLoadingIcon(z){let{beans:J}=this,Q=this.getLocaleTextFunc(),Z=J.iconSvc.createIconNoSpan("loadingMenuItems"),$=H0({tag:"div",cls:cR});$.appendChild(Z);let X=m0(J),Y=Rz(J);if(!Y)return;Y.appendChild($),J.ariaAnnounce?.announceValue(Q("ariaLabelLoadingContextMenu","Loading Context Menu"),"contextmenu"),J.environment.applyThemeClasses($),JJ($,z,J);let q=(G)=>{JJ($,G,J)};X.addEventListener("mousemove",q),this.destroyLoadingSpinner=()=>{X.removeEventListener("mousemove",q),$.remove(),this.destroyLoadingSpinner=null}}createContextMenu(z){let{mapMenuItems:J,menuItemCallbacks:Q,beforeMenuOpen:Z,onMenuClose:$,afterMenuDestroyed:X,onVisibleChanged:Y,onMenuOpen:q}=this.params,{menuItems:G,menuActionParams:U,mouseEvent:_,anchorToElement:H}=z,W=this.beans.popupSvc,E=new pR(J?(f)=>J(G,U,f):()=>G,U,Q);this.createBean(E);let K=E.getGui();Z?.(U);let F={additionalParams:Q.getPostProcessPopupParams(U),type:"contextMenu",mouseEvent:_,ePopup:K,nudgeY:1},L=this.getLocaleTextFunc(),D=W?.addPopup({modal:!0,eChild:K,closeOnEsc:!0,closedCallback:(f)=>{Q.preserveRangesWhile(this.beans,()=>{$?.(),this.destroyBean(E),X?.(),Y?.(!1,f===void 0?"api":"ui")})},click:_,positionCallback:()=>{let f=this.gos.get("enableRtl");W?.positionPopupUnderMouseEvent({...F,nudgeX:f?(K.offsetWidth+1)*-1:1})},anchorToElement:H,ariaLabel:L("ariaLabelContextMenu","Context Menu")});if(D)q?.(),E.afterGuiAttached({container:"contextMenu",hidePopup:D.hideFunc});if(this.activeMenu)this.hideActiveMenu();if(this.activeMenu=E,E.addEventListener("destroyed",()=>{if(this.activeMenu===E)this.activeMenu=null}),D)E.addEventListener("closeMenu",(f)=>D.hideFunc({mouseEvent:f.mouseEvent??void 0,keyboardEvent:f.keyboardEvent??void 0,forceHide:!0}));let M=_&&_ instanceof MouseEvent&&_.type==="mousedown";Y?.(!0,M?"api":"ui")}destroy(){this.destroyLoadingSpinner?.(),super.destroy()}},pR=class extends I0{constructor(z,J,Q){super({tag:"div",cls:mR,role:"presentation"});this.getMenuItems=z,this.menuActionParams=J,this.callbacks=Q,this.menuList=null}postConstruct(){let z=this.createManagedBean(new X7(0,this.menuActionParams,this.callbacks)),J=this.getMenuItems(()=>this.getGui());z.addMenuItems(J),this.appendChild(z),this.menuList=z,z.addEventListener("closeMenu",(Q)=>this.dispatchLocalEvent(Q))}afterGuiAttached({hidePopup:z}){if(z)this.addDestroyFunc(z);let J=this.menuList;if(J)this.callbacks.preserveRangesWhile(this.beans,()=>E0(J.getGui()))}},nR=class extends I0{constructor(z){super({tag:"div"});this.callbacks=z}init(z){this.params=z,this.cssClassPrefix=this.params.cssClassPrefix??"ag-menu-option",this.addAriaAttributes(),this.addIcon(),this.addName(),this.addShortcut(),this.addSubMenu()}configureDefaults(){return!0}addAriaAttributes(){let{checked:z,subMenu:J}=this.params,Q=this.getGui();if(z)e6(Q,z);if(J)j0(Q,!1)}addIcon(){if(this.params.isCompact)return;let z=H0({tag:"span",ref:"eIcon",cls:`${this.getClassName("part")} ${this.getClassName("icon")}`,role:"presentation"}),{checked:J,icon:Q}=this.params;if(J)z.appendChild(this.beans.iconSvc.createIconNoSpan("check"));else if(Q)if(b2(Q))z.appendChild(Q);else if(typeof Q==="string")z.innerHTML=Q;else this.callbacks?.warnNoIcon?.();this.getGui().appendChild(z)}addName(){let z=H0({tag:"span",ref:"eName",cls:`${this.getClassName("part")} ${this.getClassName("text")}`,children:this.params.name||""});this.getGui().appendChild(z)}addShortcut(){if(this.params.isCompact)return;let z=H0({tag:"span",ref:"eShortcut",cls:`${this.getClassName("part")} ${this.getClassName("shortcut")}`,children:this.params.shortcut||""});this.getGui().appendChild(z)}addSubMenu(){let z=H0({tag:"span",ref:"ePopupPointer",cls:`${this.getClassName("part")} ${this.getClassName("popup-pointer")}`}),J=this.getGui();if(this.params.subMenu){let Q=this.gos.get("enableRtl")?"subMenuOpenRtl":"subMenuOpen";z.appendChild(this.beans.iconSvc.createIconNoSpan(Q))}J.appendChild(z)}getClassName(z){return`${this.cssClassPrefix}-${z}`}};function e5(z,J){if(!J)return null;let Q=V4(z),Z=Q.indexOf(J);if(Z===-1)return null;let $=-1;for(let X=Z-1;X>=0;X--)if(Q[X].classList.contains(W2.TAB_GUARD_TOP)){$=X;break}if($<=0)return null;return Q[$-1]}function Yq(z,J){if(!J)return!1;let Q=z.querySelectorAll(`.${NZ}`);if(!Q.length)return!1;for(let Z=0;Zthis.activeItem?.tabbedItem?.afterDetachedCallback?.())}setupHeader(){let{enableCloseButton:z,cssClass:J}=this.params,Q=(Z,$)=>{if(Z.classList.add(`ag-tabs-${$}`),J)Z.classList.add(`${J}-${$}`)};if(z)this.setupCloseButton(Q),this.eTabHeader=H0({tag:"div",role:"presentation"}),Q(this.eHeader,"header-wrapper"),this.eHeader.appendChild(this.eTabHeader);else this.eTabHeader=this.eHeader;U0(this.eTabHeader,"tablist"),Q(this.eTabHeader,"header")}setupCloseButton(z){let J=H0({tag:"button"});z(J,"close-button");let Q=this.beans.iconSvc.createIconNoSpan("close");_0(J,this.params.closeButtonAriaLabel),J.appendChild(Q),this.addManagedElementListeners(J,{click:()=>this.params.onCloseClicked?.()});let Z=H0({tag:"div",role:"presentation"});z(Z,"close-button-wrapper"),Z.appendChild(J),this.eHeader.appendChild(Z),this.eCloseButton=J}handleKeyDown(z){switch(z.key){case k.RIGHT:case k.LEFT:{if(!this.eTabHeader.contains(n(this.beans)))return;let J=z.key===k.RIGHT,Q=this.gos.get("enableRtl"),Z=this.items.indexOf(this.activeItem),$=J!==Q?Math.min(Z+1,this.items.length-1):Math.max(Z-1,0);if(Z===$)return;z.preventDefault();let X=this.items[$];this.showItemWrapper(X),X.eHeaderButton.focus();break}case k.UP:case k.DOWN:z.stopPropagation();break}}onTabKeyDown(z){if(z.defaultPrevented)return;let{beans:J,eHeader:Q,eBody:Z,activeItem:$,params:X}=this,{suppressTrapFocus:Y,enableCloseButton:q}=X,G=n(J),U=z.target,_=z.shiftKey;if(Q.contains(G)){if(z.preventDefault(),q&&_&&!this.eCloseButton?.contains(G))this.eCloseButton?.focus();else if(Y&&_)e5(Y0(J).body,U)?.focus();else this.focusBody(z.shiftKey);return}let H=null;if(Yq(Z,U)){if(_)H=e5(Z,U);if(!H&&!Y)H=$.eHeaderButton}if(!H&&Z.contains(G)){if(H=O0(J,Z,!1,_),!H){if(Y&&!_)this.forceFocusOutOfContainer(_);else if(q&&!_)z.preventDefault(),this.eCloseButton?.focus();else z.preventDefault(),this.focusHeader();return}}if(H)z.preventDefault(),H.focus()}focusInnerElement(z){if(z)return this.focusBody(!0);else return this.focusHeader(),!0}focusHeader(z){this.activeItem.eHeaderButton.focus({preventScroll:z})}focusBody(z){return E0(this.eBody,z)}setAfterAttachedParams(z){this.afterAttachedParams=z}showFirstItem(){if(this.items.length>0)this.showItemWrapper(this.items[0])}addItem(z){let J=H0({tag:"span",cls:"ag-tab",role:"tab",attrs:{tabindex:"-1"}});J.appendChild(z.title),this.eTabHeader.appendChild(J),_0(J,z.titleLabel);let Q={tabbedItem:z,eHeaderButton:J};this.items.push(Q),J.addEventListener("click",this.showItemWrapper.bind(this,Q))}showItem(z){let J=this.items.find((Q)=>Q.tabbedItem===z);if(J)this.showItemWrapper(J)}showItemWrapper(z){let{tabbedItem:J,eHeaderButton:Q}=z;if(this.params.onItemClicked?.({item:J}),this.activeItem===z){this.params.onActiveItemClicked?.();return}if(this.lastScrollListener)this.lastScrollListener=this.lastScrollListener();if(J0(this.eBody),J.bodyPromise.then((Z)=>{this.eBody.appendChild(Z);let $=!n1();if(!this.params.suppressFocusBodyOnOpen)E0(this.eBody,!1,$);if(J.afterAttachedCallback)J.afterAttachedCallback(this.afterAttachedParams);if(this.params.keepScrollPosition){let X=J.getScrollableContainer?.()||Z;[this.lastScrollListener]=this.addManagedElementListeners(X,{scroll:()=>{this.tabbedItemScrollMap.set(J.name,X.scrollTop)}});let Y=this.tabbedItemScrollMap.get(J.name);if(Y!==void 0)setTimeout(()=>{X.scrollTop=Y},0)}}),this.activeItem)this.activeItem.eHeaderButton.classList.remove("ag-tab-selected"),this.activeItem.tabbedItem.afterDetachedCallback?.();Q.classList.add("ag-tab-selected"),this.activeItem=z}},tR=".ag-group{position:relative;width:100%}.ag-group-title-bar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-title{display:inline;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.ag-group-title-bar) .ag-group-title{cursor:default}.ag-group-toolbar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-container{display:flex}.ag-disabled .ag-group-container{pointer-events:none}.ag-disabled-group-container,.ag-disabled-group-title-bar{opacity:.5}.ag-group-container-horizontal{flex-flow:row wrap}.ag-group-container-vertical{flex-direction:column}.ag-group-title-bar-icon{cursor:pointer;flex:none}:where(.ag-ltr) .ag-group-title-bar-icon{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-group-title-bar-icon{margin-left:var(--ag-spacing)}:where(.ag-group-item-alignment-stretch) .ag-group-item{align-items:stretch}:where(.ag-group-item-alignment-start) .ag-group-item{align-items:flex-start}:where(.ag-group-item-alignment-end) .ag-group-item{align-items:flex-end}";function sR(z){let J=z.cssIdentifier||"default",Q=z.direction||"vertical";return{tag:"div",cls:`ag-group ag-${J}-group`,role:"presentation",children:[{tag:"div",ref:"eToolbar",cls:`ag-group-toolbar ag-${J}-group-toolbar`,children:[{tag:"ag-checkbox",ref:"cbGroupEnabled"}]},{tag:"div",ref:"eContainer",cls:`ag-group-container ag-group-container-${Q} ag-${J}-group-container`}]}}var lR=class extends I0{constructor(z={}){super(sR(z),[K4]);this.params=z,this.suppressEnabledCheckbox=!0,this.suppressToggleExpandOnEnableChange=!1,this.eToolbar=j,this.cbGroupEnabled=j,this.eContainer=j,this.registerCSS(tR);let{enabled:J,items:Q,suppressEnabledCheckbox:Z,expanded:$,suppressToggleExpandOnEnableChange:X,useToggle:Y}=z;if(this.cssIdentifier=z.cssIdentifier||"default",this.enabled=J!=null?J:!0,this.items=Q||[],this.useToggle=Y??!1,this.alignItems=z.alignItems||"center",this.expanded=$==null?!0:$,Z!=null)this.suppressEnabledCheckbox=Z;if(X!=null)this.suppressToggleExpandOnEnableChange=X}postConstruct(){if(this.setupTitleBar(),this.items.length){let $=this.items;this.items=[],this.addItems($)}let z=this.getLocaleTextFunc();if(this.cbGroupEnabled.setLabel(z("enabled","Enabled")),this.enabled)this.setEnabled(this.enabled,void 0,!0);this.setAlignItems(this.alignItems);let{onEnableChange:J,onExpandedChange:Q,suppressOpenCloseIcons:Z}=this.params;if(this.hideEnabledCheckbox(this.suppressEnabledCheckbox),this.hideOpenCloseIcons(Z??!1),this.refreshChildDisplay(),w(this.eContainer,this.expanded),this.cbGroupEnabled.onValueChange(($)=>{this.setEnabled($,!0,this.suppressToggleExpandOnEnableChange),this.dispatchEnableChangeEvent($)}),J!=null)this.onEnableChange(J);if(Q!=null)this.onExpandedChange(Q)}refreshChildDisplay(){w(this.eToolbar,this.expanded&&!this.suppressEnabledCheckbox),this.eTitleBar?.refreshOnExpand(this.expanded)}isExpanded(){return this.expanded}setAlignItems(z){if(this.alignItems!==z)this.removeCss(`ag-group-item-alignment-${this.alignItems}`);this.alignItems=z;let J=`ag-group-item-alignment-${this.alignItems}`;return this.addCss(J),this}toggleGroupExpand(z,J){if(this.eTitleBar?.isSuppressCollapse()&&!this.useToggle)z=!0,J=!0;else if(z=z!=null?z:!this.expanded,this.expanded===z)return this;if(this.expanded=z,this.refreshChildDisplay(),w(this.eContainer,z),!J)this.dispatchLocalEvent({type:z?"expanded":"collapsed"});return this}addItems(z){for(let J of z)this.addItem(J)}prependItem(z){this.insertItem(z,!0)}addItem(z){this.insertItem(z,!1)}updateItems(z){let J=this.items,Q=0;for(let Z=0;Zz(J.enabled)}),this}onExpandedChange(z){return this.addManagedListeners(this,{expanded:()=>z(!0),collapsed:()=>z(!1)}),this}hideEnabledCheckbox(z){return this.suppressEnabledCheckbox=z,this.refreshChildDisplay(),this.refreshDisabledStyles(),this}hideOpenCloseIcons(z){return this.eTitleBar?.hideOpenCloseIcons(z),this}refreshDisabledStyles(){let z=!this.enabled;this.eContainer.classList.toggle("ag-disabled",z),this.eTitleBar?.refreshDisabledStyles(this.suppressEnabledCheckbox&&z),this.eContainer.classList.toggle("ag-disabled-group-container",z)}setupTitleBar(){let z=this.useToggle?this.createToggleTitleBar():this.createDefaultTitleBar();this.eToolbar.insertAdjacentElement("beforebegin",z.getGui())}createDefaultTitleBar(){let z=this.createManagedBean(new oR(this.params));return this.eTitleBar=z,z.refreshOnExpand(this.expanded),this.addManagedListeners(z,{expandedChanged:(J)=>this.toggleGroupExpand(J.expanded)}),z}createToggleTitleBar(){let z=this.createManagedBean(new w5({value:this.enabled,label:this.params.title,labelAlignment:"left",labelWidth:"flex",onValueChange:(J)=>{this.setEnabled(J,!0),this.dispatchEnableChangeEvent(J)}}));return z.addCss("ag-group-title-bar"),z.addCss(`ag-${this.params.cssIdentifier??"default"}-group-title-bar ag-unselectable`),this.eToggle=z,this.toggleGroupExpand(this.enabled),z}},m5="ag-disabled-group-title-bar";function aR(z){let J=z.cssIdentifier??"default";return{tag:"div",cls:`ag-group-title-bar ag-${J}-group-title-bar ag-unselectable`,role:z.suppressKeyboardNavigation?"presentation":"group",children:[{tag:"span",ref:"eGroupOpenedIcon",cls:`ag-group-title-bar-icon ag-${J}-group-title-bar-icon`,role:"presentation"},{tag:"span",ref:"eGroupClosedIcon",cls:`ag-group-title-bar-icon ag-${J}-group-title-bar-icon`,role:"presentation"},{tag:"span",ref:"eTitle",cls:`ag-group-title ag-${J}-group-title`}]}}var oR=class extends I0{constructor(z={}){super(aR(z));this.suppressOpenCloseIcons=!1,this.suppressKeyboardNavigation=!1,this.eGroupOpenedIcon=j,this.eGroupClosedIcon=j,this.eTitle=j;let{title:J,suppressOpenCloseIcons:Q,suppressKeyboardNavigation:Z}=z;if(!!J&&J.length>0)this.title=J;if(Q!=null)this.suppressOpenCloseIcons=Q;this.suppressKeyboardNavigation=Z??!1}postConstruct(){this.setTitle(this.title),this.hideOpenCloseIcons(this.suppressOpenCloseIcons),this.setupExpandContract()}setupExpandContract(){let z=this.beans.iconSvc;this.eGroupClosedIcon.appendChild(z.createIconNoSpan("accordionClosed")),this.eGroupOpenedIcon.appendChild(z.createIconNoSpan("accordionOpen")),this.addManagedElementListeners(this.getGui(),{click:()=>this.dispatchExpandChanged(),keydown:(J)=>{switch(J.key){case k.ENTER:case k.SPACE:J.preventDefault(),this.dispatchExpandChanged();break;case k.RIGHT:case k.LEFT:J.preventDefault(),this.dispatchExpandChanged(J.key===k.RIGHT);break}}})}refreshOnExpand(z){this.refreshAriaStatus(z),this.refreshOpenCloseIcons(z)}refreshAriaStatus(z){if(!this.suppressOpenCloseIcons)j0(this.getGui(),z)}refreshOpenCloseIcons(z){let J=!this.suppressOpenCloseIcons;w(this.eGroupOpenedIcon,J&&z),w(this.eGroupClosedIcon,J&&!z)}isSuppressCollapse(){return this.suppressOpenCloseIcons}dispatchExpandChanged(z){let J={type:"expandedChanged",expanded:z};this.dispatchLocalEvent(J)}setTitle(z){let J=this.getGui(),Q=!!z&&z.length>0;if(z=Q?z:void 0,this.eTitle.textContent=z??"",w(J,Q),z!==this.title)this.title=z;let Z=J.classList.contains(m5);return this.refreshDisabledStyles(Z),this}addWidget(z){return this.getGui().appendChild(z),this}hideOpenCloseIcons(z){if(this.suppressOpenCloseIcons=z,z)this.dispatchExpandChanged(!0);return this}refreshDisabledStyles(z){let J=this.getGui();if(z)J.classList.add(m5),J.removeAttribute("tabindex"),U0(J,"presentation");else if(J.classList.remove(m5),typeof this.title==="string"&&!this.suppressKeyboardNavigation)this.activateTabIndex([J]),U0(J,"group");else J.removeAttribute("tabindex"),U0(J,"presentation")}};var $0="35.2.0",C0={moduleName:"EnterpriseCore",version:$0,beans:[qY],icons:{accordionOpen:"tree-open",accordionClosed:"tree-closed",accordionIndeterminate:"tree-indeterminate",close:"cross",cancel:"cancel",maximize:"maximize",minimize:"minimize",columnDrag:"grip"},dependsOn:[],setLicenseKey:qY.setLicenseKey};var eR={stopPropagationCallbacks:Oz,focusNextContainer:(z,J)=>{return _4(z,J)},configureFocusableContainer:(z,J)=>{let Q=z.ctrlsSvc.get("gridCtrl");Q.addFocusableContainer(J),J.addDestroyFunc(()=>Q.removeFocusableContainer(J))}},zA=class extends hR{constructor(z){super(z,eR)}getFocusableContainerName(){return"dialog"}};var Y7=class extends yR{constructor(z){super(Oz,z)}};var JA=class extends xR{};function QA(z){return z.sideBar?.comp.isDisplayed()??!1}function ZA(z,J){z.sideBar?.comp.setDisplayed(J)}function $A(z,J){z.sideBar?.comp.setSideBarPosition(J)}function XA(z,J,Q){z.sideBar?.comp.openToolPanel(J,"api",Q)}function YA(z){z.sideBar?.comp.close("api")}function qA(z){return z.sideBar?.comp.openedItem()??null}function GA(z){z.sideBar?.comp.refresh()}function UA(z){return z.sideBar?.comp.isToolPanelShowing()??!1}function _A(z,J){let Q=z.sideBar?.comp.getToolPanelInstance(J);return zz(Q)}function HA(z){return z.sideBar?.comp.getDef()}var WA=`.ag-tool-panel-wrapper{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--ag-horizontal-size,var(--ag-side-bar-panel-width))}.ag-tool-panel-content{display:flex;height:100%;overflow:hidden auto}.ag-tool-panel-wrapper.ag-tool-panel-animating{ + /* !important required to override .ag-hidden to tool panel remains visible while animating */display:block!important;transition:width var(--ag-side-bar-panel-animation-duration) ease-in-out}@media (prefers-reduced-motion:reduce){.ag-tool-panel-wrapper.ag-tool-panel-animating{transition:none}}.ag-tool-panel-external{display:flex;flex-direction:row}:where(.ag-tool-panel-external) .ag-tool-panel-wrapper{flex-grow:1}.ag-select-agg-func-item{align-items:center;display:flex;flex:1 1 auto;flex-flow:row nowrap;height:100%;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap}.ag-tool-panel-horizontal-resize{cursor:ew-resize;height:100%;position:absolute;top:0;width:5px;z-index:1}.ag-side-bar{background-color:var(--ag-side-bar-background-color);display:flex;flex-direction:row-reverse;position:relative}:where(.ag-ltr) :where(.ag-side-bar-left) .ag-tool-panel-horizontal-resize{right:-3px}:where(.ag-rtl) :where(.ag-side-bar-left) .ag-tool-panel-horizontal-resize{left:-3px}:where(.ag-ltr) :where(.ag-side-bar-right) .ag-tool-panel-horizontal-resize{left:-3px}:where(.ag-rtl) :where(.ag-side-bar-right) .ag-tool-panel-horizontal-resize{right:-3px}.ag-side-bar-left{flex-direction:row;order:-1}.ag-side-buttons{background-color:var(--ag-side-button-bar-background-color);padding-top:var(--ag-side-button-bar-top-padding);position:relative}.ag-side-button{background-color:var(--ag-side-button-background-color);border-bottom:var(--ag-side-button-border);border-top:var(--ag-side-button-border);color:var(--ag-side-button-text-color);margin-top:-1px;position:relative}.ag-side-button:before{background-color:transparent;bottom:0;content:"";display:block;position:absolute;top:0;transition:background-color var(--ag-side-button-selected-underline-transition-duration);width:var(--ag-side-button-selected-underline-width)}:where(.ag-ltr) .ag-side-button:before{left:0}:where(.ag-rtl) .ag-side-button:before{right:0}.ag-side-button:hover{background-color:var(--ag-side-button-hover-background-color);color:var(--ag-side-button-hover-text-color)}.ag-side-button.ag-selected{background-color:var(--ag-side-button-selected-background-color);border-bottom:var(--ag-side-button-selected-border);border-top:var(--ag-side-button-selected-border);color:var(--ag-side-button-selected-text-color)}.ag-side-button.ag-selected:before{background-color:var(--ag-side-button-selected-underline-color)}.ag-side-button-button{align-items:center;display:flex;flex-direction:column;gap:var(--ag-spacing);position:relative;white-space:nowrap;width:100%;&:focus{box-shadow:none}}:where(.ag-ltr) .ag-side-button-button{padding:var(--ag-side-button-vertical-padding) var(--ag-side-button-right-padding) var(--ag-side-button-vertical-padding) var(--ag-side-button-left-padding)}:where(.ag-rtl) .ag-side-button-button{padding:var(--ag-side-button-vertical-padding) var(--ag-side-button-left-padding) var(--ag-side-button-vertical-padding) var(--ag-side-button-right-padding)}.ag-side-button-button:focus-visible{box-shadow:inset var(--ag-focus-shadow)}.ag-side-button-label{writing-mode:vertical-lr}@media (resolution <= 1.5x){.ag-side-button-label{font-family:"Segoe UI",var(--ag-font-family)}:where(.ag-ltr) .ag-side-button-label{transform:rotate(.05deg)}:where(.ag-rtl) .ag-side-button-label{transform:rotate(-.05deg)}}:where(.ag-ltr) .ag-side-bar-left,:where(.ag-rtl) .ag-side-bar-right{border-right:var(--ag-side-panel-border);:where(.ag-tool-panel-wrapper){border-left:var(--ag-side-panel-border)}}:where(.ag-ltr) .ag-side-bar-right,:where(.ag-rtl) .ag-side-bar-left{border-left:var(--ag-side-panel-border);:where(.ag-tool-panel-wrapper){border-right:var(--ag-side-panel-border)}}`,BA={tag:"div",cls:"ag-side-button",role:"presentation",children:[{tag:"button",ref:"eToggleButton",cls:"ag-button ag-side-button-button",role:"tab",attrs:{type:"button",tabindex:"-1","aria-expanded":"false"},children:[{tag:"div",ref:"eIconWrapper",cls:"ag-side-button-icon-wrapper",attrs:{"aria-hidden":"true"}},{tag:"span",ref:"eLabel",cls:"ag-side-button-label"}]}]},EA=class extends x{constructor(z){super();this.toolPanelDef=z,this.eToggleButton=j,this.eIconWrapper=j,this.eLabel=j}getToolPanelId(){return this.toolPanelDef.id}postConstruct(){this.setTemplate(BA,[]),this.setLabel(),this.setIcon(),this.addManagedElementListeners(this.eToggleButton,{click:this.onButtonPressed.bind(this)}),this.eToggleButton.setAttribute("id",`ag-${this.getCompId()}-button`)}setLabel(){let z=this.toolPanelDef,J=this.getLocaleTextFunc()(z.labelKey,z.labelDefault);this.eLabel.textContent=J}setIcon(){this.eIconWrapper.insertAdjacentElement("afterbegin",h(this.toolPanelDef.iconKey,this.beans))}onButtonPressed(){this.dispatchLocalEvent({type:"toggleButtonClicked"})}setSelected(z){this.toggleCss("ag-selected",z),j0(this.eToggleButton,z)}},KA={tag:"div",cls:"ag-side-buttons",role:"tablist"},FA=class extends x{constructor(){super(KA);this.buttonComps=[]}postConstruct(){this.addManagedElementListeners(this.getFocusableElement(),{keydown:this.handleKeyDown.bind(this)})}handleKeyDown(z){if(z.key!==k.TAB||!z.shiftKey)return;if(_4(this.beans,!0)){z.preventDefault();return}l0(z)}setActiveButton(z){for(let J of this.buttonComps)J.setSelected(z===J.getToolPanelId())}addButtonComp(z){let J=this.createBean(new EA(z));return this.buttonComps.push(J),this.appendChild(J),J.addEventListener("toggleButtonClicked",()=>{this.dispatchLocalEvent({type:"sideBarButtonClicked",toolPanelId:z.id})}),J}clearButtons(){this.buttonComps=this.destroyBeans(this.buttonComps),J0(this.getGui())}destroy(){this.clearButtons(),super.destroy()}},LA={selector:"AG-SIDE-BAR-BUTTONS",component:FA},qq={id:"columns",labelDefault:"Columns",labelKey:"columns",iconKey:"columnsToolPanel",toolPanel:"agColumnsToolPanel"},Gq={id:"filters",labelDefault:"Filters",labelKey:"filters",iconKey:"filtersToolPanel",toolPanel:"agFiltersToolPanel"},DA={id:"filters-new",labelDefault:"Filters",labelKey:"filters",iconKey:"filtersToolPanel",toolPanel:"agNewFiltersToolPanel"},e2={columns:qq,filters:Gq,"filters-new":DA};function z7(z){if(!z)return;if(z===!0)return{toolPanels:[qq,Gq],defaultToolPanel:"columns"};if(typeof z==="string")return z7([z]);if(Array.isArray(z)){let J=[];for(let Q of z){let Z=e2[Q];if(!Z){V(215,{key:Q,defaultByKey:e2});continue}J.push(Z)}if(J.length===0)return;return{toolPanels:J,defaultToolPanel:J[0].id}}return{toolPanels:MA(z.toolPanels),defaultToolPanel:z.defaultToolPanel,hiddenByDefault:z.hiddenByDefault,position:z.position,hideButtons:z.hideButtons}}function MA(z){let J=[];if(!z)return J;return z.forEach((Q)=>{let Z=kA(Q);if(!Z)return;J.push(Z)}),J}function kA(z){if(typeof z!=="string")return z;if(e2[z])return e2[z];return V(215,{key:z,defaultByKey:e2}),null}var fA=class extends x{constructor(){super({tag:"div",cls:"ag-tool-panel-horizontal-resize"});this.minWidth=100,this.maxWidth=null}postConstruct(){let z=this.beans.horizontalResizeSvc.addResizeBar({eResizeBar:this.getGui(),dragStartPixels:1,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this),onResizeEnd:this.onResizeEnd.bind(this)});this.addDestroyFunc(z),this.inverted=this.gos.get("enableRtl")}dispatchResizeEvent(z,J,Q){this.eventSvc.dispatchEvent({type:"toolPanelSizeChanged",width:Q,started:z,ended:J})}onResizeStart(){this.startingWidth=this.elementToResize.offsetWidth,this.dispatchResizeEvent(!0,!1,this.startingWidth)}onResizeEnd(z){return this.onResizing(z,!0)}onResizing(z,J=!1){let Q=this.inverted?-1:1,Z=Math.max(this.minWidth,Math.floor(this.startingWidth-z*Q));if(this.maxWidth!=null)Z=Math.min(this.maxWidth,Z);this.elementToResize.style.setProperty("--ag-horizontal-size",`${Z}px`),this.dispatchResizeEvent(!1,J,Z)}};function SA(z,J,Q){return z.getCompDetails(J,VA,void 0,Q,!0)}var VA={name:"toolPanel",optionalMethods:["refresh","getState"]},RA={tag:"div",cls:"ag-tool-panel-wrapper",role:"tabpanel",children:[{tag:"div",cls:"ag-tool-panel-content",ref:"eContent"}]},AA=class extends x{constructor(){super(RA);this.eContent=j,this.animationId=0,this.defParent=null}postConstruct(){let z=this.getGui(),J=this.resizeBar=this.createManagedBean(new fA);z.setAttribute("id",`ag-${this.getCompId()}`),J.elementToResize=z,this.appendChild(J)}getToolPanelId(){return this.toolPanelId}getDefParent(){return this.defParent}setDefParent(z){this.defParent=z}setToolPanelDef(z,J){let{id:Q,minWidth:Z,maxWidth:$,width:X,parent:Y}=z;if(this.toolPanelId=Q,this.defParent=Y??null,X)this.getGui().style.setProperty("--ag-side-bar-panel-width",`${X}px`);let q=SA(this.beans.userCompFactory,z,J);if(q==null)return!1;let G=q.newAgStackInstance();this.params=q.params,G.then(this.setToolPanelComponent.bind(this));let U=this.resizeBar;if(Z!=null)U.minWidth=Z;if($!=null)U.maxWidth=$;return!0}setToolPanelComponent(z){this.toolPanelCompInstance=z;let{eContent:J}=this;J.appendChild(z.getGui()),this.addDestroyFunc(()=>{this.destroyBean(z)})}getToolPanelInstance(){return this.toolPanelCompInstance}setResizerSizerSide(z){let J=this.gos.get("enableRtl"),Q=z==="left",Z=J?Q:!Q;this.resizeBar.inverted=Z}refresh(){this.toolPanelCompInstance?.refresh(this.params)}animateDisplayed(z){if(this.isDisplayed()===z)return;let J=++this.animationId,{eContent:Q}=this,Z=()=>{if(this.animationId===J)$.classList.remove("ag-tool-panel-animating"),Q.style.width="",$.style.width=""},$=this.getGui(),X=$.offsetWidth;this.setDisplayed(z),$.classList.add("ag-tool-panel-animating");let Y=getComputedStyle($).transitionDuration;if(!parseFloat(Y)){Z();return}$.style.transition="none",$.style.width="",Q.style.width=`${Q.offsetWidth}px`,$.style.width=`${X}px`;let q=$.offsetWidth;$.style.transition="",$.style.width=z?"":"0";let G=setTimeout(Z,100);$.addEventListener("transitionstart",()=>clearTimeout(G),{once:!0}),$.addEventListener("transitionend",Z,{once:!0})}},jA={tag:"div",cls:"ag-side-bar ag-unselectable",children:[{tag:"ag-side-bar-buttons",ref:"sideBarButtons"}]},OA=class extends x{constructor(){super(jA,[LA]);this.sideBarButtons=j,this.toolPanelWrappers=[],this.registerCSS(WA)}postConstruct(){this.sideBarButtons.addEventListener("sideBarButtonClicked",this.onToolPanelButtonClicked.bind(this));let{beans:z,gos:J}=this,{sideBar:Q}=J.get("initialState")??{};this.setSideBarDef({sideBarDef:z7(J.get("sideBar")),sideBarState:Q}),this.addManagedPropertyListener("sideBar",()=>this.setState()),z.sideBar.comp=this;let Z=this.getFocusableElement();this.createManagedBean(new Jz(Z,{onTabKeyDown:this.onTabKeyDown.bind(this),handleKeyDown:this.handleKeyDown.bind(this)})),Tz(z,this,Z),this.addManagedPropertyListener("enableAdvancedFilter",this.onAdvancedFilterChanged.bind(this))}getFocusableContainerName(){return"sideBar"}onTabKeyDown(z){if(z.defaultPrevented)return;let{beans:J,sideBarButtons:Q}=this,Z=this.getGui(),$=Q.getGui(),X=n(J),Y=Z.querySelector(".ag-tool-panel-wrapper:not(.ag-hidden)"),q=z.target,G=z.shiftKey;if(!Y){if(_4(J,G,!0))return z.preventDefault(),!0;return z$(z),!1}if($.contains(X)){if(E0(Y,G))z.preventDefault();return}if(!G)return;let U=null;if(Y.contains(X))U=O0(J,Y,void 0,!0);else if(Yq(Y,q))U=e5(Y,q);if(!U)U=$.querySelector(".ag-selected button"),U=B0(U)?U:null;if(U&&U!==z.target)z.preventDefault(),U.focus()}handleKeyDown(z){let J=n(this.beans),Q=this.sideBarButtons;if(!Q.getGui().contains(J))return;let Z=Q.getGui(),$=Array.prototype.slice.call(Z.querySelectorAll(".ag-side-button")),X=$.findIndex((G)=>G.contains(J)),Y=null;switch(z.key){case k.LEFT:case k.UP:Y=Math.max(0,X-1);break;case k.RIGHT:case k.DOWN:Y=Math.min(X+1,$.length-1);break}if(Y===null)return;let q=$[Y].querySelector("button");if(q)q.focus(),z.preventDefault()}onToolPanelButtonClicked(z){let J=z.toolPanelId;if(this.openedItem()===J)this.openToolPanel(void 0,"sideBarButtonClicked");else this.openToolPanel(J,"sideBarButtonClicked")}clearDownUi(){this.sideBarButtons.clearButtons(),this.destroyToolPanelWrappers()}setSideBarDef({sideBarDef:z,sideBarState:J,existingToolPanelWrappers:Q}){if(this.setDisplayed(!1),this.sideBar=z,z)this.sideBarButtons.setDisplayed(!z.hideButtons);if(z?.toolPanels){let Z=z.toolPanels;if(this.createToolPanelsAndSideButtons(Z,J,Q),!this.toolPanelWrappers.length)return;let $=J?J.visible:!z.hiddenByDefault;if(this.setDisplayed($),this.setSideBarPosition(J?J.position:z.position),$)if(J){let{openToolPanel:X}=J;if(X)this.openToolPanel(X,"sideBarInitializing")}else this.openToolPanel(z.defaultToolPanel,"sideBarInitializing")}}getDef(){return this.sideBar}setSideBarPosition(z){if(!z)z="right";this.position=z;let J=z==="left",Q=J?"right":"left";this.toggleCss("ag-side-bar-left",J),this.toggleCss("ag-side-bar-right",!J);for(let Z of this.toolPanelWrappers)Z.setResizerSizerSide(Q);return this.dispatchSideBarUpdated(),this}setDisplayed(z,J){super.setDisplayed(z,J),this.dispatchSideBarUpdated()}getState(){let z={};for(let J of this.toolPanelWrappers)z[J.getToolPanelId()]=J.getToolPanelInstance()?.getState?.();return{visible:this.isDisplayed(),position:this.position,openToolPanel:this.openedItem(),toolPanels:z}}createToolPanelsAndSideButtons(z,J,Q){for(let Z of z)this.createToolPanelAndSideButton(Z,J?.toolPanels?.[Z.id],Q?.[Z.id])}validateDef(z){let{id:J,toolPanel:Q}=z;if(J==null)return V(212),!1;if(LY(Q)){if(this.beans.filterManager?.isAdvFilterEnabled())return V(213),!1}return!0}createToolPanelAndSideButton(z,J,Q){if(!this.validateDef(z)){this.destroyBean(Q);return}let Z;if(Q)Z=Q,Z.setDefParent(z.parent??null);else if(Z=this.createBean(new AA),!Z.setToolPanelDef(z,C(this.gos,{initialState:J,onStateUpdated:()=>this.dispatchSideBarUpdated()})))return;Z.setDisplayed(!1),this.renderToolPanelUnderParent(Z,z.parent),this.toolPanelWrappers.push(Z);let $=this.sideBarButtons.addButtonComp(z);WZ($.eToggleButton,Z.getGui())}refresh(){for(let z of this.toolPanelWrappers)z.refresh()}renderToolPanelUnderParent(z,J){let Q=z.getGui();if(J)this.beans.environment.applyThemeClasses(J,["ag-external","ag-tool-panel-external"]),Q.classList.add(this.gos.get("enableRtl")?"ag-rtl":"ag-ltr");let Z=J??z.getDefParent()??this.getGui();if(Q.parentElement!==Z)Z.appendChild(Q)}getWrapper(z){return this.toolPanelWrappers.find((J)=>J.getToolPanelId()===z)}openToolPanel(z,J="api",Q){let Z=this.openedItem(),X=!!z&&!!Z||J==="sideBarInitializing";for(let G of this.toolPanelWrappers){let U=z===G.getToolPanelId();if(U)this.renderToolPanelUnderParent(G,Q??null);if(X)G.setDisplayed(U);else G.animateDisplayed(U)}let Y=this.openedItem();if(Z!==Y)this.sideBarButtons.setActiveButton(z),this.raiseToolPanelVisibleEvent(z,Z??void 0,J)}getToolPanelInstance(z){let J=this.getWrapper(z);if(!J){V(214,{key:z});return}return J.getToolPanelInstance()}raiseToolPanelVisibleEvent(z,J,Q){let Z=!!z&&!!J,$=this.eventSvc;if(J)$.dispatchEvent({type:"toolPanelVisibleChanged",source:Q,key:J,visible:!1,switchingToolPanel:Z});if(z)$.dispatchEvent({type:"toolPanelVisibleChanged",source:Q,key:z,visible:!0,switchingToolPanel:Z})}close(z="api"){this.openToolPanel(void 0,z)}isToolPanelShowing(){return!!this.openedItem()}openedItem(){let z=null;for(let J of this.toolPanelWrappers)if(J.isDisplayed())z=J.getToolPanelId();return z}setState(z){let J=z7(this.gos.get("sideBar")),Q={};if(J&&this.sideBar)J.toolPanels?.forEach((Z)=>{let{id:$}=Z;if(!$)return;let X=this.sideBar.toolPanels?.find((U)=>U.id===$);if(!X||Z.toolPanel!==X.toolPanel)return;let Y=this.getWrapper($);if(!Y)return;let q=C(this.gos,{...Z.toolPanelParams??{},initialState:z?.toolPanels?.[$],onStateUpdated:()=>this.dispatchSideBarUpdated()});if(Y.getToolPanelInstance()?.refresh(q)!==!0)return;this.toolPanelWrappers=this.toolPanelWrappers.filter((U)=>U!==Y),R0(Y.getGui()),Q[$]=Y});this.clearDownUi(),this.setSideBarDef({sideBarDef:J,sideBarState:z,existingToolPanelWrappers:Q})}dispatchSideBarUpdated(){this.eventSvc.dispatchEvent({type:"sideBarUpdated"})}destroyToolPanelWrappers(){for(let z of this.toolPanelWrappers)R0(z.getGui()),this.destroyBean(z);this.toolPanelWrappers.length=0}onAdvancedFilterChanged(){if(this.sideBar?.toolPanels?.some((J)=>LY(typeof J==="string"?J:J.toolPanel)))this.setState()}destroy(){this.destroyToolPanelWrappers(),super.destroy()}};function LY(z){return z==="agFiltersToolPanel"||z==="agNewFiltersToolPanel"}var PA={selector:"AG-SIDE-BAR",component:OA},TA=class extends S{constructor(){super(...arguments);this.beanName="sideBar"}getSelector(){return PA}},q7={moduleName:"SideBar",version:$0,beans:[TA],apiFunctions:{isSideBarVisible:QA,setSideBarVisible:ZA,setSideBarPosition:$A,openToolPanel:XA,closeToolPanel:YA,getOpenedToolPanel:qA,refreshToolPanel:GA,isToolPanelShowing:UA,getToolPanelInstance:_A,getSideBar:HA},dependsOn:[C0,Q5]},vA='.ag-menu-list{cursor:default;display:table;padding:var(--ag-spacing) 0;width:100%}.ag-menu-option,.ag-menu-separator{display:table-row}.ag-menu-option-part,.ag-menu-separator-part{display:table-cell;vertical-align:middle}.ag-menu-option{cursor:pointer;font-weight:500}:where(.ag-ltr) :where(.ag-menu-option-popup-pointer) .ag-icon{text-align:right}:where(.ag-rtl) :where(.ag-menu-option-popup-pointer) .ag-icon{text-align:left}.ag-menu-option-text{white-space:nowrap}.ag-menu-option-custom{display:contents}.ag-compact-menu-option{display:flex;flex-wrap:nowrap;width:100%}.ag-compact-menu-option-text{flex:1 1 auto;white-space:nowrap}.ag-menu-separator{height:calc(var(--ag-spacing)*2 + 1px)}.ag-menu-separator-part:after{border-top:solid var(--ag-border-width) var(--ag-menu-separator-color);content:"";display:block}.ag-compact-menu-option-active,.ag-menu-option-active{background-color:var(--ag-row-hover-color)}.ag-compact-menu-option-part,.ag-menu-option-part{line-height:var(--ag-icon-size);padding:calc(var(--ag-spacing) + 2px) 0}.ag-compact-menu-option-disabled,.ag-menu-option-disabled{cursor:not-allowed;opacity:.5}.ag-compact-menu-option-icon,.ag-menu-option-icon{width:var(--ag-icon-size)}:where(.ag-ltr) .ag-compact-menu-option-icon,:where(.ag-ltr) .ag-menu-option-icon{padding-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-compact-menu-option-icon,:where(.ag-rtl) .ag-menu-option-icon{padding-right:calc(var(--ag-spacing)*2)}.ag-compact-menu-option-text,.ag-menu-option-text{padding-left:calc(var(--ag-spacing)*2);padding-right:calc(var(--ag-spacing)*2)}:where(.ag-ltr) .ag-compact-menu-option-shortcut,:where(.ag-ltr) .ag-menu-option-shortcut{padding-right:var(--ag-spacing)}:where(.ag-rtl) .ag-compact-menu-option-shortcut,:where(.ag-rtl) .ag-menu-option-shortcut{padding-left:var(--ag-spacing)}:where(.ag-ltr) .ag-compact-menu-option-popup-pointer,:where(.ag-ltr) .ag-menu-option-popup-pointer{padding-right:var(--ag-spacing)}:where(.ag-rtl) .ag-compact-menu-option-popup-pointer,:where(.ag-rtl) .ag-menu-option-popup-pointer{padding-left:var(--ag-spacing)}.ag-menu-column-select-wrapper{height:265px;overflow:auto;:where(.ag-column-select){height:100%}}.ag-menu:where(.ag-tabs){min-width:290px}.ag-context-menu-loading-icon{pointer-events:none;position:absolute}',Uq=class extends nR{constructor(){super({warnNoIcon:()=>V(227)})}},G7={moduleName:"MenuItem",version:$0,userComponents:{agMenuItem:Uq},icons:{check:"tick",subMenuOpen:"small-right",subMenuOpenRtl:"small-left"},css:[vA]},IA=".ag-column-select{display:flex;flex:3 1 0px;flex-direction:column;overflow:hidden;position:relative}.ag-column-select-header{flex:none;height:var(--ag-header-height);padding-left:var(--ag-widget-container-horizontal-padding);padding-right:var(--ag-widget-container-horizontal-padding)}.ag-column-select-column,.ag-column-select-column-group,.ag-column-select-header{align-items:center;display:flex;gap:var(--ag-widget-horizontal-spacing);position:relative}.ag-column-select-column,.ag-column-select-column-group{height:100%}:where(.ag-ltr) .ag-column-select-column,:where(.ag-ltr) .ag-column-select-column-group{padding-left:calc(var(--ag-indentation-level)*var(--ag-column-select-indent-size))}:where(.ag-rtl) .ag-column-select-column,:where(.ag-rtl) .ag-column-select-column-group{padding-right:calc(var(--ag-indentation-level)*var(--ag-column-select-indent-size))}.ag-column-select-column-group:where(:not(:last-child)),.ag-column-select-column:where(:not(:last-child)){margin-bottom:var(--ag-widget-vertical-spacing)}.ag-column-select-header-icon{border-radius:var(--ag-border-radius);cursor:pointer;height:var(--ag-icon-size);position:relative;width:var(--ag-icon-size);&:focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-column-select-header-filter-wrapper{flex:1 1 auto}.ag-column-select-header-filter{width:100%}.ag-column-select-list{flex:1 1 0px;overflow:hidden}:where(.ag-ltr) .ag-column-select-add-group-indent{margin-left:calc(var(--ag-icon-size) + var(--ag-spacing)*1.5)}:where(.ag-rtl) .ag-column-select-add-group-indent{margin-right:calc(var(--ag-icon-size) + var(--ag-spacing)*1.5)}.ag-column-select-column-group-readonly,.ag-column-select-column-readonly{opacity:.5;pointer-events:none;.ag-icon{opacity:.5}&.ag-icon-grip{opacity:.35}}.ag-column-select-column-readonly{&.ag-icon-grip,.ag-icon-grip{opacity:.35}}.ag-column-select-virtual-list-viewport{padding:calc(var(--ag-widget-container-vertical-padding)*.5) 0}.ag-column-select-virtual-list-item{padding:0 var(--ag-widget-container-horizontal-padding)}.ag-column-select-column-label{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-column-select-checkbox{display:flex}",CA=300,yA={tag:"div",cls:"ag-column-select-header",role:"presentation",children:[{tag:"div",ref:"eExpand",cls:"ag-column-select-header-icon"},{tag:"ag-checkbox",ref:"eSelect",cls:"ag-column-select-header-checkbox"},{tag:"ag-input-text-field",ref:"eFilterTextField",cls:"ag-column-select-header-filter-wrapper"}]},bA=class extends x{constructor(){super(yA,[K4,Zz]);this.eExpand=j,this.eSelect=j,this.eFilterTextField=j}postConstruct(){this.createExpandIcons(),this.addManagedListeners(this.eExpand,{click:this.onExpandClicked.bind(this),keydown:(J)=>{if(J.key===k.SPACE)J.preventDefault(),this.onExpandClicked()}}),this.addManagedElementListeners(this.eSelect.getInputElement(),{click:this.onSelectClicked.bind(this)}),this.addManagedPropertyListener("functionsReadOnly",()=>this.onFunctionsReadOnlyPropChanged()),this.eFilterTextField.setAutoComplete(!1).onValueChange(()=>this.onFilterTextChanged()),this.addManagedEventListeners({newColumnsLoaded:this.showOrHideOptions.bind(this)});let z=this.getLocaleTextFunc();this.eSelect.setInputAriaLabel(z("ariaColumnSelectAll","Toggle All Columns Visibility")),this.eFilterTextField.setInputAriaLabel(z("ariaFilterColumnsInput","Filter Columns Input")),this.activateTabIndex([this.eExpand])}onFunctionsReadOnlyPropChanged(){let z=this.gos.get("functionsReadOnly");this.eSelect.setReadOnly(z),this.eSelect.toggleCss("ag-column-select-column-readonly",z)}init(z){this.params=z;let J=this.gos.get("functionsReadOnly");if(this.eSelect.setReadOnly(J),this.eSelect.toggleCss("ag-column-select-column-readonly",J),this.beans.colModel.ready)this.showOrHideOptions()}createExpandIcons(){let z=this.beans;this.eExpand.appendChild(this.eExpandChecked=h("columnSelectOpen",z)),this.eExpand.appendChild(this.eExpandUnchecked=h("columnSelectClosed",z)),this.eExpand.appendChild(this.eExpandIndeterminate=h("columnSelectIndeterminate",z)),this.setExpandState(0)}showOrHideOptions(){let z=this.params,J=!z.suppressColumnFilter,Q=!z.suppressColumnSelectAll,Z=!z.suppressColumnExpandAll,$=!!this.beans.colModel.colDefCols?.treeDepth,X=this.getLocaleTextFunc();this.eFilterTextField.setInputPlaceholder(X("searchOoo","Search...")),w(this.eFilterTextField.getGui(),J),w(this.eSelect.getGui(),Q),w(this.eExpand,Z&&$)}onFilterTextChanged(){if(!this.onFilterTextChangedDebounced)this.onFilterTextChangedDebounced=i0(this,()=>{let z=this.eFilterTextField.getValue();this.dispatchLocalEvent({type:"filterChanged",filterText:z})},CA);this.onFilterTextChangedDebounced()}onSelectClicked(){this.dispatchLocalEvent({type:this.selectState?"unselectAll":"selectAll"})}onExpandClicked(){this.dispatchLocalEvent({type:this.expandState===0?"collapseAll":"expandAll"})}setExpandState(z){this.expandState=z,w(this.eExpandChecked,z===0),w(this.eExpandUnchecked,z===1),w(this.eExpandIndeterminate,z===2)}setSelectionState(z){this.selectState=z,this.eSelect.setValue(this.selectState)}},xA={selector:"AG-PRIMARY-COLS-HEADER",component:bA};function J2(z){return!!z&&typeof z.children<"u"}function bz(z){return J2(z)?z.groupId:z.colId}function _q(z,J,Q){let Z=(Y,q)=>{let U=Y.children.map(bz).includes(bz(q)),_=y(Y.children),H=_&&bz(_)!==bz(q);return U&&H};if(!J2(z))return!0;let $=z,X=Q;if(Z($,X))return $.children.push(X),!0;if($.groupId===J){if(!$.children.map(bz).includes(bz(X)))return $.children.push(X),!0}for(let Y=$.children.length-1;Y>=0;Y--)if(_q($.children[Y],J,Q))break;return!1}function Hq(z){let J=($,X)=>{return J2($)&&J2(X)&&bz($)===bz(X)},Q=($,X)=>{if(!J2(X))return $;let Y=$,q=X;if(q.children&&q.groupId){if(_q(Y,q.groupId,q.children[0]))return Y}for(let G of q.children)Q(Y,G);return Y},Z=[];for(let $=1;$<=z.length;$++){let X=z[$-1],Y=z[$];if(J(X,Y))z[$]=Q(X,Y);else Z.push(X)}return Z}function wA(z,J){let Q=[],Z=(X,Y)=>{if(J2(X)){let q=X,G=typeof q.groupId<"u"?q.groupId:q.headerName,U=new rz(q,G,!1,Y),_=[];for(let H of q.children){let W=Z(H,Y+1);if(W)_.push(W)}return U.setChildren(_),U}else{let q=X,G=q.colId?q.colId:q.field,U=z.getColDefCol(G);if(!U)Q.push(q);return U}},$=[];for(let X of J){let Y=Z(X,0);if(Y)$.push(Y)}if(Q.length>0)V(217,{invalidColIds:Q});return $}function NA(z,J){let Q=Wq(hA(z)),Z=Hq(Q);J(Z)}function gA(z,J){let Q=Wq(z),Z=Hq(Q);J(Z)}function Wq(z){let J=(Q,Z)=>{let $;if(G0(Q))if(Q.isPadding())$=Z;else{let Y=Object.assign({},Q.getColGroupDef());Y.groupId=Q.getGroupId(),Y.children=[Z],$=Y}else{let Y=Object.assign({},Q.getColDef());Y.colId=Q.getColId(),$=Y}let X=Q.getOriginalParent();if(X)return J(X,$);else return $};return z.map((Q)=>J(Q,Q.getColDef()))}function hA(z){return z.getCols().filter((J)=>{let Q=J.getColDef();return J.isPrimary()&&!Q.showRowGroup})}var DY=class{constructor(z,J,Q,Z=!1,$){if(this.displayName=z,this.depth=Q,this.group=Z,this.localEventService=new R4,Z)this.columnGroup=J,this._expanded=$,this.children=[];else this.column=J}get expanded(){return!!this._expanded}set expanded(z){if(z===this._expanded)return;this._expanded=z,this.localEventService.dispatchEvent({type:"expandedChanged"})}addEventListener(z,J){this.localEventService.addEventListener(z,J)}removeEventListener(z,J){this.localEventService.removeEventListener(z,J)}};function p(z){return!!z?.buttons?.includes("apply")}function h0(z,J){if(!p(J))return;let Q=z.sideBar?.comp.openedItem();if(!Q)return;z.sideBar?.comp.getToolPanelInstance(Q)?.refreshDeferredUi()}function Bq(z,J,Q,Z,$){let X=uA(J);Eq(z,X,Q,Z,$)}function Eq(z,J,Q,Z,$){if(z.columnStateUpdateStrategy.getPivotMode(p($)))cA(z,J,Q,Z,$);else mA(z,J,Q,Z,$)}function uA(z){let J=[],Q=(Z)=>{for(let $ of Z){if(!$.passesFilter)continue;if($.group)Q($.children);else J.push($.column)}};return Q(z),J}function mA(z,J,Q,Z,$){let X=z.columnStateUpdateStrategy,Y=[];for(let q of J){if(q.getColDef().lockVisible)continue;if(X.isColumnVisibleInToolPanel(p($),q)!==Q)Y.push({colId:q.getId(),hide:!Q})}X.applyColumnState(p($),Y,Z),h0(z,$)}function cA(z,J,Q,Z,$){iA(z,J,Q,Z,$)}function iA(z,J,Q,Z,$){let X=z.columnStateUpdateStrategy,Y=[],U=Q?(_)=>{if(X.isColumnSelectedInPivotModeToolPanel(p($),_))return;if(_.isAllowValue()){let H=typeof _.getAggFunc()==="string"?_.getAggFunc():z.aggFuncSvc?.getDefaultAggFunc(_);Y.push({colId:_.getId(),aggFunc:H})}else if(_.isAllowRowGroup())Y.push({colId:_.getId(),rowGroup:!0});else if(_.isAllowPivot())Y.push({colId:_.getId(),pivot:!0})}:(_)=>{if(X.isColumnSelectedInPivotModeToolPanel(p($),_))Y.push({colId:_.getId(),pivot:!1,rowGroup:!1,aggFunc:null})};J.forEach(U),X.applyColumnState(p($),Y,Z),h0(z,$)}function Kq(z,J){let{columns:Q,visibleState:Z,pivotState:$,eventType:X}=J,Y=z.columnStateUpdateStrategy,q=Y.getPivotMode(p(J)),G=Q.map((U)=>{let _=U.getColId();if(q){let H=$?.[_];return{colId:_,pivot:H?.pivot,rowGroup:H?.rowGroup,aggFunc:H?.aggFunc}}else return{colId:_,hide:!Z?.[_]}});Y.applyColumnState(p(J),G,X),h0(z,J)}function pA(z){return{pivot:z.isPivotActive(),rowGroup:z.isRowGroupActive(),aggFunc:z.isValueActive()?z.getAggFunc():void 0}}function Fq(z,J,Q){if(!Q)return pA(z);let Z=J.getRowGroupColumns(Q).includes(z),$=J.getPivotColumns(Q).includes(z),X=J.getValueColumns(Q).includes(z);return{pivot:$,rowGroup:Z,aggFunc:X?J.getColumnAggFunc(Q,z):void 0}}var Lq=(z,J)=>{if(!J)return[];let Q=z;for(let Z=0,$=J.length;Z<$&&Q;++Z)Q=Q[J[Z]];return Array.isArray(Q)?Q:[]},z2=(z,J,Q)=>{let Z=z.aggData;if(Z===J)return;if(z.aggData=J,z.__localEventService)nA(z,Z,J,Q)},MY=(z,J,Q)=>{z2(z,J,Q);let Z=z.pinnedSibling;if(Z)z2(Z,J,Q);let $=z.sibling;if($){z2($,J,Q);let X=$.pinnedSibling;if(X)z2(X,J,Q)}},nA=(z,J,Q,Z)=>{if(!Q){if(!J)return;let Y=Object.keys(J);for(let q=0,G=Y.length;q{if(!z)return;let Z=z.group;if(Z===Q)return;if(z.group=Q,z.updateHasChildren(),Z&&!Q)z2(z,null,J.colModel),z.setAllChildrenCount(null);J.selectionSvc?.updateRowSelectable(z),z.dispatchRowEvent("groupChanged")},Dq=(z,J,Q)=>{kY(z,J,Q),kY(z.pinnedSibling,J,Q)},Q6=(z,J)=>{let{gos:Q,rowGroupColsSvc:Z}=J;if(!Z||!z)return!1;let $=Q.get("groupLockGroupColumns");if(!z.isRowGroupActive()||$===0)return!1;if($===-1)return!0;let X=Z.columns.findIndex((Y)=>Y.getColId()===z.getColId());return $>X},z6=(z,J,Q)=>{let $=z(J,`${J==="groupBy"?"Group by":"Un-Group by"} ${Q}`,[Q]);if($.indexOf(Q)>=0)return $;else return`${$} ${Q}`};function dA(z){let J=m0(z),Q="getSelection"in J?J.getSelection():null,Z=[];for(let $=0;$<(Q?.rangeCount??0);$++){let X=Q?.getRangeAt($);if(X)Z.push(X)}return{selection:Q,ranges:Z}}function rA(z,J){if(!z.gos.get("enableCellTextSelection"))return J();if(!oz()&&!jz())return J();let{selection:Z,ranges:$}=dA(z);J(),Z?.removeAllRanges();for(let X of $)Z?.addRange(X)}var tA={name:"menuItem",optionalMethods:["setActive","select","setExpanded","configureDefaults"]},U7={getMenuItemComp:(z,J,Q)=>{return z.userCompFactory.getCompDetails(J,tA,"agMenuItem",C(z.gos,Q),!0)?.newAgStackInstance()??N.resolve()},getPostProcessPopupParams:({column:z,node:J})=>({column:z,rowNode:J}),preserveRangesWhile:rA,stopPropagationCallbacks:Oz,warnNoItem:(z)=>{V(228,{menuItemOrString:z})}},sA=class extends o5{constructor(){super(U7)}},Mq=class extends X7{constructor(z,J={column:null,node:null,value:null}){super(z,J,U7)}},kq=class extends x{constructor(z,J,Q,Z={}){super({tag:"div",cls:"ag-menu"});this.column=z,this.mouseEventOrTouch=J,this.parentEl=Q,this.params=Z,this.displayName=null}postConstruct(){let{column:z,beans:{colNames:J}}=this;this.initializeProperties(z);let Q;if(G4(z))Q=J.getDisplayNameForColumn(z,"columnToolPanel");else Q=J.getDisplayNameForProvidedColumnGroup(null,z,"columnToolPanel");if(this.displayName=Q,this.buildMenuItemMap(),this.isActive()){let Z=this.mouseEventOrTouch;if("preventDefault"in Z)Z.preventDefault();let $=this.getMappedMenuItems();if($.length===0)return;this.displayContextMenu($)}}initializeProperties(z){let J=this.beans.columnStateUpdateStrategy,Q;if(G0(z))Q=z.getLeafColumns();else Q=[z];this.columns=Q;let Z=J.getPivotMode(p(this.params));this.allowScrollIntoView=!Z&&Q.some(this.isColumnValidForScrollIntoView),this.allowGrouping=Q.some(($)=>$.isPrimary()&&$.isAllowRowGroup()),this.allowValues=Q.some(($)=>$.isPrimary()&&$.isAllowValue()),this.allowPivoting=Z&&Q.some(($)=>$.isPrimary()&&$.isAllowPivot())}buildMenuItemMap(){let z=this.getLocaleTextFunc(),{beans:J,displayName:Q}=this,Z=this.beans.columnStateUpdateStrategy,$=new Map;this.menuItemMap=$;let X=p(this.params),Y=Z.getPivotMode(X),q=new Set(Z.getRowGroupColumns(X).map((B)=>B.getColId())),G=new Set(Z.getValueColumns(X).map((B)=>B.getColId())),U=new Set(Z.getPivotColumns(X).map((B)=>B.getColId()));$.set("scrollIntoView",{allowedFunction:(B)=>!B.isPinned()&&!Y&&this.isColumnValidForScrollIntoView(B),activeFunction:()=>!1,activateLabel:()=>z("scrollColumnIntoView",`Scroll ${Q} into View`,[Q]),activateFunction:()=>{let B=this.columns.find(this.isColumnValidForScrollIntoView);if(B)this.beans.ctrlsSvc.getScrollFeature().ensureColumnVisible(B)},deActivateFunction:()=>{},addIcon:"ensureColumnVisible"});let _=(B)=>B.isPrimary()&&B.isAllowRowGroup()&&!Q6(B,J);$.set("rowGroup",{allowedFunction:_,activeFunction:(B)=>q.has(B.getColId()),activateLabel:()=>z6(z,"groupBy",Q),deactivateLabel:()=>z6(z,"ungroupBy",Q),activateFunction:()=>{let B=this.addColumnsToList(Z.getRowGroupColumns(X),_);Z.setRowGroupColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},deActivateFunction:()=>{let B=this.removeColumnsFromList(Z.getRowGroupColumns(X),_);Z.setRowGroupColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},addIcon:"menuAddRowGroup",removeIcon:"menuRemoveRowGroup"});let H=(B)=>B.isPrimary()&&B.isAllowValue();$.set("value",{allowedFunction:H,activeFunction:(B)=>G.has(B.getColId()),activateLabel:()=>z("addToValues",`Add ${Q} to values`,[Q]),deactivateLabel:()=>z("removeFromValues",`Remove ${Q} from values`,[Q]),activateFunction:()=>{let B=this.addColumnsToList(Z.getValueColumns(X),H);Z.setValueColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},deActivateFunction:()=>{let B=this.removeColumnsFromList(Z.getValueColumns(X),H);Z.setValueColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},addIcon:"valuePanel",removeIcon:"valuePanel"});let W=(B)=>Y&&B.isPrimary()&&B.isAllowPivot();$.set("pivot",{allowedFunction:W,activeFunction:(B)=>U.has(B.getColId()),activateLabel:()=>z("addToLabels",`Add ${Q} to labels`,[Q]),deactivateLabel:()=>z("removeFromLabels",`Remove ${Q} from labels`,[Q]),activateFunction:()=>{let B=this.addColumnsToList(Z.getPivotColumns(X),W);Z.setPivotColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},deActivateFunction:()=>{let B=this.removeColumnsFromList(Z.getPivotColumns(X),W);Z.setPivotColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},addIcon:"pivotPanel",removeIcon:"pivotPanel"})}isColumnValidForScrollIntoView(z){if(!z.isVisible())return!1;let Q=z.getParent();if(!Q)return!0;return Q.getDisplayedChildren()?.includes(z)??!0}addColumnsToList(z,J){return[...z].concat(this.columns.filter((Q)=>J(Q)&&!z.includes(Q)))}removeColumnsFromList(z,J){return z.filter((Q)=>!J(Q)||!this.columns.includes(Q))}displayContextMenu(z){let J=this.getGui(),Q=this.createBean(new Mq),Z=this.getLocaleTextFunc(),$=()=>{};J.appendChild(Q.getGui()),Q.addMenuItems(z),Q.addManagedListeners(Q,{closeMenu:()=>{this.parentEl.focus(),$()}});let X=this.beans.popupSvc,Y=X.addPopup({modal:!0,eChild:J,closeOnEsc:!0,afterGuiAttached:()=>E0(Q.getGui()),ariaLabel:Z("ariaLabelContextMenu","Context Menu"),closedCallback:(q)=>{if(q instanceof KeyboardEvent)this.parentEl.focus();this.destroyBean(Q)}});if(Y)$=Y.hideFunc;X.positionPopupUnderMouseEvent({type:"columnContextMenu",mouseEvent:this.mouseEventOrTouch,ePopup:J})}isActive(){return this.allowScrollIntoView||this.allowGrouping||this.allowValues||this.allowPivoting}getMappedMenuItems(){let z=[],{menuItemMap:J,columns:Q,displayName:Z,beans:$}=this;for(let X of J.values()){let Y=Q.some((G)=>X.allowedFunction(G)&&!X.activeFunction(G)),q=Q.some((G)=>X.allowedFunction(G)&&X.activeFunction(G));if(Y)z.push({name:X.activateLabel(Z),icon:h(X.addIcon,$,null),action:()=>X.activateFunction()});if(q&&X.removeIcon&&X.deactivateLabel)z.push({name:X.deactivateLabel(Z),icon:h(X.removeIcon,$,null),action:()=>X.deActivateFunction?.()})}return z}},lA={tag:"div",cls:"ag-column-select-column-group",children:[{tag:"span",ref:"eColumnGroupIcons",cls:"ag-column-group-icons",children:[{tag:"span",ref:"eGroupClosedIcon",cls:"ag-column-group-closed-icon"},{tag:"span",ref:"eGroupOpenedIcon",cls:"ag-column-group-opened-icon"}]},{tag:"ag-checkbox",ref:"cbSelect",cls:"ag-column-select-checkbox"},{tag:"span",ref:"eLabel",cls:"ag-column-select-column-label"}]},fq=class extends x{constructor(z,J,Q,Z,$){super();this.modelItem=z,this.allowDragging=J,this.eventType=Q,this.focusWrapper=Z,this.params=$,this.cbSelect=j,this.eLabel=j,this.eGroupOpenedIcon=j,this.eGroupClosedIcon=j,this.eColumnGroupIcons=j,this.processingColumnStateChange=!1;let{columnGroup:X,depth:Y,displayName:q}=z;this.columnGroup=X,this.columnDepth=Y,this.displayName=q}postConstruct(){this.setTemplate(lA,[K4]);let{beans:z,cbSelect:J,eLabel:Q,displayName:Z,columnDepth:$,modelItem:X,focusWrapper:Y,columnGroup:q}=this,{registry:G,gos:U}=z,_=h("columnDrag",z);this.eDragHandle=_,_.classList.add("ag-drag-handle","ag-column-select-column-group-drag-handle");let H=J.getGui(),W=J.getInputElement();H.after(_),W.setAttribute("tabindex","-1"),Q.textContent=Z??"",this.setupExpandContract(),this.addCss("ag-column-select-indent-"+$),this.getGui().style.setProperty("--ag-indentation-level",String($)),this.tooltipFeature=this.createOptionalManagedBean(G.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.focusWrapper,getLocation:()=>"columnToolPanelColumnGroup",shouldDisplayTooltip:t1(U,()=>Q)})),this.addManagedEventListeners({columnPivotModeChanged:this.onColumnStateChanged.bind(this)}),this.addManagedElementListeners(Q,{click:this.onLabelClicked.bind(this)}),this.addManagedListeners(J,{fieldValueChanged:this.onCheckboxChanged.bind(this)}),this.addManagedListeners(X,{expandedChanged:this.onExpandChanged.bind(this)});let B=new c0(this.getGui(),!1);this.addManagedListeners(B,{longTap:(K)=>this.onContextMenu(K.touchStart)}),this.addDestroyFunc(B.destroy.bind(B)),this.addManagedListeners(Y,{keydown:this.handleKeyDown.bind(this),contextmenu:this.onContextMenu.bind(this)}),this.setOpenClosedIcons(),this.setupDragging(),this.onColumnStateChanged(),this.addVisibilityListenersToAllChildren(),this.refreshAriaExpanded(),this.refreshAriaLabel(),this.setupTooltip();let E=BJ(q.getColGroupDef(),U,null,q);for(let K of E)this.toggleCss(K,!0)}getColumns(){return this.columnGroup.getLeafColumns()}setupTooltip(){let z=this.columnGroup.getColGroupDef();if(!z)return;let J=()=>this.tooltipFeature?.setTooltipAndRefresh(z.headerTooltip);J(),this.addManagedEventListeners({newColumnsLoaded:J})}handleKeyDown(z){switch(z.key){case k.LEFT:z.preventDefault(),this.modelItem.expanded=!1;break;case k.RIGHT:z.preventDefault(),this.modelItem.expanded=!0;break;case k.SPACE:if(z.preventDefault(),this.isSelectable())this.onSelectAllChanged(!this.isSelected());break}}onContextMenu(z){let{columnGroup:J,gos:Q}=this;if(Q.get("functionsReadOnly"))return;let Z=this.createBean(new kq(J,z,this.focusWrapper,this.params));this.addDestroyFunc(()=>{if(Z.isAlive())this.destroyBean(Z)})}addVisibilityListenersToAllChildren(){let z=this.onColumnStateChanged.bind(this);for(let J of this.columnGroup.getLeafColumns())this.addManagedListeners(J,{visibleChanged:z,columnValueChanged:z,columnPivotChanged:z,columnRowGroupChanged:z})}setupDragging(){if(!this.allowDragging){w(this.eDragHandle,!1);return}let z=this.beans,{gos:J,eventSvc:Q,dragAndDrop:Z}=z,$=!J.get("suppressDragLeaveHidesColumns"),X={type:E4.ToolPanel,eElement:this.eDragHandle,dragItemName:this.displayName,getDefaultIconName:()=>$?"hide":"notAllowed",getDragItem:()=>this.createDragItem(),onDragStarted:()=>{$=!J.get("suppressDragLeaveHidesColumns"),Q.dispatchEvent({type:"columnPanelItemDragStart",column:this.columnGroup})},onDragStopped:()=>{Q.dispatchEvent({type:"columnPanelItemDragEnd"})},onGridEnter:(Y)=>{if($)Kq(z,{columns:this.columnGroup.getLeafColumns(),visibleState:Y?.visibleState,pivotState:Y?.pivotState,eventType:this.eventType,buttons:this.params.buttons})},onGridExit:()=>{if($)this.onChangeCommon(!1)}};Z.addDragSource(X,!0),this.addDestroyFunc(()=>Z.removeDragSource(X))}createDragItem(){let z=this.columnGroup.getLeafColumns(),J={},Q={},Z=this.beans.columnStateUpdateStrategy,$=p(this.params);for(let X of z){let Y=X.getId();J[Y]=X.isVisible(),Q[Y]=Fq(X,Z,$)}return{columns:z,visibleState:J,pivotState:Q}}setupExpandContract(){let{beans:z,eGroupClosedIcon:J,eGroupOpenedIcon:Q,eColumnGroupIcons:Z}=this;J.appendChild(vz("columnSelectClosed",z,null)),Q.appendChild(vz("columnSelectOpen",z,null));let $=this.onExpandOrContractClicked.bind(this);this.addManagedElementListeners(J,{click:$}),this.addManagedElementListeners(Q,{click:$});let X=new c0(Z,!0);this.addManagedListeners(X,{tap:$}),this.addDestroyFunc(X.destroy.bind(X))}onLabelClicked(){let z=!this.cbSelect.getValue();this.onChangeCommon(z)}onCheckboxChanged(z){this.onChangeCommon(z.selected)}getVisibleLeafColumns(){let z=[],J=(Q)=>{for(let Z of Q)if(Z.passesFilter)if(Z.group)J(Z.children);else z.push(Z.column)};return J(this.modelItem.children),z}onChangeCommon(z){if(this.refreshAriaLabel(),this.processingColumnStateChange)return;Bq(this.beans,this.modelItem.children,z,this.eventType,this.params)}refreshAriaLabel(){let{cbSelect:z,focusWrapper:J,displayName:Q}=this,Z=this.getLocaleTextFunc(),$=Z("ariaColumnGroup","Column Group"),X=z.getValue(),Y=X===void 0?Z("ariaIndeterminate","indeterminate"):X?Z("ariaVisible","visible"):Z("ariaHidden","hidden"),q=Z("ariaToggleVisibility","Press SPACE to toggle visibility");_0(J,`${Q} ${$}`),z.setInputAriaLabel(`${q} (${Y})`),c1(J,z.getInputElement().id)}onColumnStateChanged(){let z=this.workOutSelectedValue(),J=this.workOutReadOnlyValue();this.processingColumnStateChange=!0;let Q=this.cbSelect;Q.setValue(z),Q.setReadOnly(J),this.toggleCss("ag-column-select-column-group-readonly",J),this.processingColumnStateChange=!1}workOutSelectedValue(){let J=this.beans.columnStateUpdateStrategy.getPivotMode(p(this.params)),Q=this.getVisibleLeafColumns(),Z=0,$=0;for(let X of Q)if(J||!X.getColDef().lockVisible)if(this.isColumnChecked(X))Z++;else $++;if(Z>0&&$>0)return;return Z>0}workOutReadOnlyValue(){let z=this.beans.columnStateUpdateStrategy.getPivotMode(p(this.params)),J=0;for(let Q of this.columnGroup.getLeafColumns())if(z){if(Q.isAnyFunctionAllowed())J++}else if(!Q.getColDef().lockVisible)J++;return J===0}isColumnChecked(z){let J=this.beans.columnStateUpdateStrategy;if(J.getPivotMode(p(this.params)))return J.isColumnSelectedInPivotModeToolPanel(p(this.params),z);return J.isColumnVisibleInToolPanel(p(this.params),z)}onExpandOrContractClicked(){let z=this.modelItem,J=z.expanded;z.expanded=!J}onExpandChanged(){this.setOpenClosedIcons(),this.refreshAriaExpanded()}setOpenClosedIcons(){let z=this.modelItem.expanded;w(this.eGroupClosedIcon,!z),w(this.eGroupOpenedIcon,z)}refreshAriaExpanded(){j0(this.focusWrapper,this.modelItem.expanded)}getDisplayName(){return this.displayName}onSelectAllChanged(z){let J=this.cbSelect,Q=J.getValue();if(!J.isReadOnly()&&(z&&!Q||!z&&Q))J.toggle()}isSelected(){return this.cbSelect.getValue()}isSelectable(){return!this.cbSelect.isReadOnly()}setSelected(z){this.cbSelect.setValue(z,!0)}},c5=(z)=>{if(G0(z))return z.getLeafColumns();return z?[z]:[]},aA=(z,J,Q,Z)=>{if(!J||!z)return null;let $=Z.indexOf(J),X=Q?$:$+1,Y=oA(Z,z,X);return X-Y},oA=(z,J,Q)=>{if(!J)return 0;let Z=J[0],$=J.length;if(z.indexOf(Z){let $=p(Z);if(z.get("suppressMovableColumns")||J.columnStateUpdateStrategy.getPivotMode($))return!0;return!!Q.find(({colDef:q})=>!!q.suppressMovable||!!q.lockPosition)},SY=(z,J,Q,Z)=>{if(!Q)return;let{component:$}=Q,X=null,Y=Q.position==="top";if($ instanceof fq)X=$.getColumns()[0],Y=!0;else if($)X=$.column;if(!X)return;let q=p(Z),G=q?z.columnStateUpdateStrategy.getPrimaryColumns(q):z.colModel.getCols(),U=aA(J,X,Y,G);if(U!=null)z.columnStateUpdateStrategy.moveColumns(q,J,U,"toolPanelUi"),h0(z,Z)},eA=(z)=>{return z.column},zj={tag:"div",cls:"ag-column-select-column",children:[{tag:"ag-checkbox",ref:"cbSelect",cls:"ag-column-select-checkbox"},{tag:"span",ref:"eLabel",cls:"ag-column-select-column-label"}]},Jj=class extends x{constructor(z,J,Q,Z,$){super();this.modelItem=z,this.allowDragging=J,this.groupsExist=Q,this.focusWrapper=Z,this.params=$,this.eLabel=j,this.cbSelect=j,this.processingColumnStateChange=!1;let{column:X,depth:Y,displayName:q}=z;this.column=X,this.columnDepth=Y,this.displayName=q}postConstruct(){this.setTemplate(zj,[K4]);let{beans:z,cbSelect:J,displayName:Q,eLabel:Z,columnDepth:$,groupsExist:X,column:Y,gos:q,focusWrapper:G}=this,U=h("columnDrag",z);this.eDragHandle=U,U.classList.add("ag-drag-handle","ag-column-select-column-drag-handle");let _=J.getGui(),H=J.getInputElement();if(_.after(U),H.setAttribute("tabindex","-1"),Z.textContent=Q,X)this.addCss("ag-column-select-add-group-indent");this.addCss(`ag-column-select-indent-${$}`),this.getGui().style.setProperty("--ag-indentation-level",String($)),this.tooltipFeature=this.createOptionalManagedBean(z.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.focusWrapper,getLocation:()=>"columnToolPanelColumn",shouldDisplayTooltip:t1(q,()=>Z),getAdditionalParams:()=>({colDef:Y.getColDef()})})),this.setupDragging();let W=this.onColumnStateChanged.bind(this);this.addManagedEventListeners({columnPivotModeChanged:W}),this.addManagedListeners(Y,{columnValueChanged:W,columnPivotChanged:W,columnRowGroupChanged:W,visibleChanged:W}),this.addManagedListeners(G,{keydown:this.handleKeyDown.bind(this),contextmenu:this.onContextMenu.bind(this)});let B=new c0(G);this.addManagedListeners(B,{longTap:(K)=>this.onContextMenu(K.touchStart)}),this.addDestroyFunc(B.destroy.bind(B)),this.addManagedPropertyListener("functionsReadOnly",this.onColumnStateChanged.bind(this)),this.addManagedListeners(J,{fieldValueChanged:this.onCheckboxChanged.bind(this)}),this.addManagedElementListeners(Z,{click:this.onLabelClicked.bind(this)}),this.onColumnStateChanged(),this.refreshAriaLabel(),this.setupTooltip();let E=BJ(Y.getColDef(),q,Y,null);for(let K of E)this.toggleCss(K,!0)}getColumn(){return this.column}setupTooltip(){let z=()=>this.tooltipFeature?.setTooltipAndRefresh(this.column.getColDef().headerTooltip);z(),this.addManagedEventListeners({newColumnsLoaded:z})}onContextMenu(z){let{column:J,gos:Q}=this;if(Q.get("functionsReadOnly"))return;let Z=this.createBean(new kq(J,z,this.focusWrapper,this.params));this.addDestroyFunc(()=>{if(Z.isAlive())this.destroyBean(Z)})}handleKeyDown(z){if(z.key===k.SPACE){if(z.preventDefault(),this.isSelectable())this.onSelectAllChanged(!this.isSelected())}}onLabelClicked(){if(this.gos.get("functionsReadOnly"))return;let z=!this.cbSelect.getValue();this.onChangeCommon(z)}onCheckboxChanged(z){this.onChangeCommon(z.selected)}onChangeCommon(z){if(this.cbSelect.isReadOnly())return;if(this.refreshAriaLabel(),this.processingColumnStateChange)return;Eq(this.beans,[this.column],z,"toolPanelUi",this.params)}refreshAriaLabel(){let{cbSelect:z,focusWrapper:J,displayName:Q}=this,Z=this.getLocaleTextFunc(),$=Z("ariaColumn","Column"),X=z.getValue()?Z("ariaVisible","visible"):Z("ariaHidden","hidden"),Y=Z("ariaToggleVisibility","Press SPACE to toggle visibility");_0(J,`${Q} ${$}`),this.cbSelect.setInputAriaLabel(`${Y} (${X})`),c1(J,z.getInputElement().id)}setupDragging(){let z=this.eDragHandle;if(!this.allowDragging){w(z,!1);return}let J=this.beans,{gos:Q,eventSvc:Z,dragAndDrop:$}=J;if(p(this.params))z.setAttribute("data-column-tool-panel-deferred","");let X=!Q.get("suppressDragLeaveHidesColumns"),Y={type:E4.ToolPanel,eElement:z,dragItemName:this.displayName,getDefaultIconName:()=>X&&!p(this.params)?"hide":"notAllowed",getDragItem:()=>this.createDragItem(),onDragStarted:()=>{X=!Q.get("suppressDragLeaveHidesColumns"),Z.dispatchEvent({type:"columnPanelItemDragStart",column:this.column})},onDragStopped:()=>{Z.dispatchEvent({type:"columnPanelItemDragEnd"})},onGridEnter:(q)=>{if(X&&!p(this.params))Kq(J,{columns:[this.column],visibleState:q?.visibleState,pivotState:q?.pivotState,eventType:"toolPanelUi",buttons:this.params.buttons})},onGridExit:()=>{if(X&&!p(this.params))this.onChangeCommon(!1)}};$.addDragSource(Y,!0),this.addDestroyFunc(()=>$.removeDragSource(Y))}createDragItem(){let z=this.column.getColId(),J={[z]:this.column.isVisible()},Q=this.beans.columnStateUpdateStrategy,Z={[z]:Fq(this.column,Q,p(this.params))};return{columns:[this.column],visibleState:J,pivotState:Z}}onColumnStateChanged(){this.processingColumnStateChange=!0;let z=this.beans.columnStateUpdateStrategy,J=z.getPivotMode(p(this.params));if(J){let $=z.isColumnSelectedInPivotModeToolPanel(p(this.params),this.column);this.cbSelect.setValue($)}else this.cbSelect.setValue(z.isColumnVisibleInToolPanel(p(this.params),this.column));let Q=!0,Z=!0;if(J){let $=this.gos.get("functionsReadOnly"),X=!this.column.isAnyFunctionAllowed();Q=!$&&!X,Z=Q}else{let{enableRowGroup:$,enableValue:X,lockPosition:Y,suppressMovable:q,lockVisible:G}=this.column.getColDef(),U=!!$||!!X,_=!!Y||!!q;Q=!G,Z=U||!_}this.cbSelect.setReadOnly(!Q),this.eDragHandle.classList.toggle("ag-column-select-column-readonly",!Z),this.toggleCss("ag-column-select-column-readonly",!Z&&!Q),this.cbSelect.setPassive(!1),this.processingColumnStateChange=!1}getDisplayName(){return this.displayName}onSelectAllChanged(z){let J=this.cbSelect;if(z!==J.getValue()){if(!J.isReadOnly())J.toggle()}}isSelected(){return this.cbSelect.getValue()}isSelectable(){return!this.cbSelect.isReadOnly()}isExpandable(){return!1}setExpanded(z){V(158)}},Qj=class{constructor(z){this.items=z}getRowCount(){return this.items.length}getRow(z){return this.items[z]}},Zj="ag-column-select-list",$j=class extends x{constructor(){super({tag:"div",cls:Zj,role:"presentation"});this.destroyColumnItemFuncs=[],this.hasLoadedInitialState=!1,this.isInitialState=!1,this.skipRefocus=!1}wireBeans(z){this.colModel=z.colModel}destroy(){this.destroyColumnTree(),super.destroy()}destroyColumnTree(){this.allColsTree=[];for(let z of this.destroyColumnItemFuncs)z();this.destroyColumnItemFuncs=[]}init(z,J,Q){this.params=z;let{suppressSyncLayoutWithGrid:Z,contractColumnSelection:$,suppressColumnMove:X}=z;if(this.allowDragging=J,this.eventType=Q,!Z)this.addManagedEventListeners({columnMoved:this.onColumnsChanged.bind(this)});this.addManagedEventListeners({newColumnsLoaded:this.onColumnsChanged.bind(this)});let Y=this.fireSelectionChangedEvent.bind(this);this.addManagedEventListeners({columnPivotChanged:Y,columnPivotModeChanged:Y,columnRowGroupChanged:Y,columnValueChanged:Y,columnVisible:Y,newColumnsLoaded:Y}),this.expandGroupsByDefault=!$;let q=X||Z,G=this.createManagedBean(new Y7({cssIdentifier:"column-select",ariaRole:"tree",moveItemCallback:(U,_)=>{if(q)return;this.moveItems(U,_)}}));if(this.virtualList=G,this.appendChild(G.getGui()),G.setComponentCreator((U,_)=>{return l6(_,U.depth+1),this.createComponentFromItem(U,_)}),this.colModel.ready)this.onColumnsChanged();if(q)return;this.createItemDragFeature()}createItemDragFeature(){let{gos:z,beans:J,virtualList:Q}=this;this.createManagedBean(new JA(this,Q,{dragSourceType:E4.ToolPanel,addListeners:(Z,$,X)=>{Z.addManagedEventListeners({columnPanelItemDragStart:$,columnPanelItemDragEnd:X})},getCurrentDragValue:(Z)=>eA(Z),isMoveBlocked:(Z)=>fY(z,J,c5(Z),this.params),getNumRows:(Z)=>Z.getDisplayedColsList().length,moveItem:(Z,$)=>SY(J,c5(Z),$,this.params)}))}moveItems(z,J){let{gos:Q,beans:Z}=this,{modelItem:$}=z,{group:X,columnGroup:Y,column:q,expanded:G}=$,U=c5(X?Y:q);if(fY(Q,Z,U,this.params))return;let _=this.displayedColsList.indexOf($),H=J?-1:1,W=0;if(J){let E=z.columnDepth>0?q.getParent()?.getChildren():null;if(E?.length&&q===E[0])W=-1}else if(X)W=G?$.children.length:0;let B=Math.min(Math.max(_+W+H,0),this.displayedColsList.length-1);this.skipRefocus=!0,SY(Z,U,{rowIndex:B,position:J?"top":"bottom",component:this.virtualList.getComponentAt(B)},this.params),this.focusRowIfAlive(B-W).then(()=>{this.skipRefocus=!1})}createComponentFromItem(z,J){let Q=this.allowDragging;if(z.group){let $=new fq(z,Q,this.eventType,J,this.params);return this.createBean($),$}let Z=new Jj(z,Q,this.groupsExist,J,this.params);return this.createBean(Z),Z}onColumnsChanged(){let z=this.params;if(!this.hasLoadedInitialState)this.hasLoadedInitialState=!0,this.isInitialState=!!z.initialState;let J=this.getExpandedStates(),Q=this.colModel.isPivotMode(),Z=p(z),$=Z&&this.beans.columnStateUpdateStrategy.hasDeferredColumnOrder(Z);if((!z.suppressSyncLayoutWithGrid||Z)&&!Q||$)this.buildTreeFromWhatGridIsDisplaying();else this.buildTreeFromProvidedColumnDefs();this.setExpandedStates(J),this.markFilteredColumns(),this.flattenAndFilterModel(),this.isInitialState=!1}getDisplayedColsList(){return this.displayedColsList}getExpandedStates(){let z={};if(this.isInitialState){let{expandedGroupIds:J}=this.params.initialState;for(let Q of J)z[Q]=!0;return z}if(!this.allColsTree)return{};return this.forEachItem((J)=>{if(!J.group)return;let Q=J.columnGroup;if(Q)z[Q.getId()]=J.expanded}),z}setExpandedStates(z){if(!this.allColsTree)return;let{isInitialState:J}=this;this.forEachItem((Q)=>{if(!Q.group)return;let Z=Q.columnGroup;if(Z){let $=z[Z.getId()];if($!=null||J)Q.expanded=!!$}})}buildTreeFromWhatGridIsDisplaying(){let z=p(this.params);if(z&&this.beans.columnStateUpdateStrategy.hasDeferredColumnOrder(z)){let J=this.beans.columnStateUpdateStrategy.getPrimaryColumns(z);if(J.length>0){gA(J,this.setColumnLayout.bind(this));return}}if(this.params.suppressSyncLayoutWithGrid){this.buildTreeFromProvidedColumnDefs();return}NA(this.colModel,this.setColumnLayout.bind(this))}setColumnLayout(z){let J=wA(this.colModel,z);this.buildListModel(J),this.groupsExist=z.some((Q)=>{return Q&&typeof Q.children<"u"}),this.markFilteredColumns(),this.flattenAndFilterModel()}buildTreeFromProvidedColumnDefs(){let z=this.colModel;this.buildListModel(z.getColDefColTree()),this.groupsExist=!!z.colDefCols?.treeDepth}buildListModel(z){let J=this.onColumnExpanded.bind(this),Q=(q)=>{q.addEventListener("expandedChanged",J);let G=q.removeEventListener.bind(q,"expandedChanged",J);this.destroyColumnItemFuncs.push(G)},Z=this.beans.colNames,$=(q,G,U)=>{for(let _ of q)if(G0(_))X(_,G,U);else Y(_,G,U)},X=(q,G,U)=>{if(q.getColGroupDef()?.suppressColumnsToolPanel)return;if(q.isPadding()){$(q.getChildren(),G,U);return}let W=Z.getDisplayNameForProvidedColumnGroup(null,q,"columnToolPanel"),B=new DY(W,q,G,!0,this.expandGroupsByDefault);U.push(B),Q(B),$(q.getChildren(),G+1,B.children)},Y=(q,G,U)=>{if(q.getColDef()?.suppressColumnsToolPanel)return;let H=Z.getDisplayNameForColumn(q,"columnToolPanel");U.push(new DY(H,q,G))};this.destroyColumnTree(),$(z,0,this.allColsTree)}onColumnExpanded(){this.flattenAndFilterModel()}flattenAndFilterModel(){this.displayedColsList=[];let z=(Z)=>{if(!Z.passesFilter)return;if(this.displayedColsList.push(Z),Z.group&&Z.expanded)Z.children.forEach(z)},J=this.virtualList;this.allColsTree.forEach(z),J.setModel(new Qj(this.displayedColsList));let Q=null;if(!this.skipRefocus)Q=J.getLastFocusedRow();if(J.refresh(),Q!=null)this.focusRowIfAlive(Q);this.notifyListeners(),this.refreshAriaLabel()}refreshAriaLabel(){let z=this.getLocaleTextFunc(),J=z("ariaColumnPanelList","Column List"),Q=z("columns","Columns"),Z=this.displayedColsList.length;_0(this.virtualList.getAriaElement(),`${J} ${Z} ${Q}`)}focusRowIfAlive(z){if(z===-1)return Promise.resolve();return new Promise((J)=>{window.setTimeout(()=>{if(this.isAlive())this.virtualList.focusRow(z);J()},0)})}forEachItem(z){let J=(Z)=>{for(let $ of Z)if(z($),$.group)J($.children)},Q=this.allColsTree;if(!Q)return;J(Q)}doSetExpandedAll(z){this.forEachItem((J)=>{if(J.group)J.expanded=z})}setGroupsExpanded(z,J){if(!J){this.doSetExpandedAll(z);return}let Q=[];this.forEachItem(($)=>{if(!$.group)return;let X=$.columnGroup.getId();if(J.indexOf(X)>=0)$.expanded=z,Q.push(X)});let Z=J.filter(($)=>!Q.includes($));if(Z.length>0)V(157,{unrecognisedGroupIds:Z})}getExpandState(){let z=0,J=0;if(this.forEachItem((Q)=>{if(!Q.group)return;if(Q.expanded)z++;else J++}),z>0&&J>0)return 2;if(J>0)return 1;return 0}doSetSelectedAll(z){Bq(this.beans,this.allColsTree,z,this.eventType,this.params),this.syncVisibleSelectionState(),this.fireSelectionChangedEvent()}syncVisibleSelectionState(){for(let z=0;z{if($.group)return;if(!$.passesFilter)return;let X=$.column,Y=X.getColDef(),q;if(Z){if(!X.isAllowPivot()&&!X.isAllowRowGroup()&&!X.isAllowValue())return;q=Q.isColumnSelectedInPivotModeToolPanel(p(this.params),X)??!1}else{if(Y.lockVisible)return;q=Q.isColumnVisibleInToolPanel(p(this.params),X)??!1}if(q)z++;else J++}),z>0&&J>0)return;return!(z===0||J>0)}setFilterText(z){this.filterText=P(z)?z.toLowerCase():null,this.markFilteredColumns(),this.flattenAndFilterModel()}markFilteredColumns(){let z=(Q)=>{if(!P(this.filterText))return!0;let Z=Q.displayName;return Z==null||Z.toLowerCase().indexOf(this.filterText)!==-1},J=(Q,Z)=>{let $=!1;if(Q.group){let Y=z(Q);for(let q of Q.children){let G=J(q,Y||Z);if(G)$=G}}let X=Z||$?!0:z(Q);return Q.passesFilter=X,X};for(let Q of this.allColsTree)J(Q,!1)}notifyListeners(){this.fireGroupExpandedEvent(),this.fireSelectionChangedEvent()}fireGroupExpandedEvent(){let z=this.getExpandState();this.dispatchLocalEvent({type:"groupExpanded",state:z})}fireSelectionChangedEvent(){if(!this.allColsTree)return;let z=this.getSelectionState();this.dispatchLocalEvent({type:"selectionChanged",state:z})}getExpandedGroups(){let z=[];if(!this.allColsTree)return z;return this.forEachItem((J)=>{if(J.group&&J.expanded)z.push(J.columnGroup.getId())}),z}},Xj={selector:"AG-PRIMARY-COLS-LIST",component:$j},Yj={tag:"div",cls:"ag-column-select",children:[{tag:"ag-primary-cols-header",ref:"primaryColsHeaderPanel"},{tag:"ag-primary-cols-list",ref:"primaryColsListPanel"}]},Sq=class extends x{constructor(){super(Yj,[xA,Xj]);this.primaryColsHeaderPanel=j,this.primaryColsListPanel=j,this.registerCSS(IA)}init(z,J,Q){let{primaryColsHeaderPanel:Z,primaryColsListPanel:$}=this;Z.init(J);let{suppressColumnFilter:X,suppressColumnSelectAll:Y}=J;if(J.suppressColumnExpandAll&&X&&Y)Z.setDisplayed(!1);this.addManagedListeners($,{groupExpanded:(G)=>{Z.setExpandState(G.state),J.onStateUpdated()},selectionChanged:(G)=>Z.setSelectionState(G.state)}),$.init(J,z,Q),this.addManagedListeners(Z,{expandAll:$.doSetExpandedAll.bind($,!0),collapseAll:$.doSetExpandedAll.bind($,!1),selectAll:$.doSetSelectedAll.bind($,!0),unselectAll:$.doSetSelectedAll.bind($,!1),filterChanged:(G)=>$.setFilterText(G.filterText)}),this.positionableFeature=this.createManagedBean(new u2(this.getGui(),{minHeight:100}))}toggleResizable(z){this.positionableFeature.setResizable(z?{bottom:!0}:!1)}expandGroups(z){this.primaryColsListPanel.setGroupsExpanded(!0,z)}collapseGroups(z){this.primaryColsListPanel.setGroupsExpanded(!1,z)}setColumnLayout(z){this.primaryColsListPanel.setColumnLayout(z)}syncLayoutWithGrid(){this.primaryColsListPanel.onColumnsChanged()}getExpandedGroups(){return this.primaryColsListPanel.getExpandedGroups()}},qj=".ag-column-panel{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.ag-pivot-mode-panel{display:flex;height:var(--ag-header-height)}.ag-pivot-mode-select{align-items:center;display:flex}:where(.ag-ltr) .ag-pivot-mode-select{margin-left:var(--ag-widget-container-horizontal-padding)}:where(.ag-rtl) .ag-pivot-mode-select{margin-right:var(--ag-widget-container-horizontal-padding)}.ag-column-panel-column-select:where(:not(.ag-last-visible-child)){border-bottom:var(--ag-tool-panel-separator-border)}.ag-column-panel-column-select:where(:nth-child(n+2 of :not(.ag-hidden))){border-top:var(--ag-tool-panel-separator-border)}:where(.ag-column-panel) .ag-column-drop-vertical{flex:1 1 0px;min-height:50px}:where(.ag-column-panel) .ag-column-drop-vertical:where(:not(.ag-last-column-drop)){border-bottom:var(--ag-tool-panel-separator-border)}.ag-column-panel-buttons{display:flex;flex-wrap:wrap;gap:var(--ag-widget-vertical-spacing) var(--ag-widget-horizontal-spacing);justify-content:flex-end;overflow:hidden;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding) 0;:where(.ag-standard-button){transition:background-color .25s ease-in-out,color .25s ease-in-out}}.ag-column-panel-buttons:where(:last-child){padding-bottom:var(--ag-widget-container-vertical-padding)}.ag-column-panel-buttons-button{line-height:1.5}:where(.ag-column-panel) .ag-column-panel-buttons-apply-button:not(:disabled){background-color:var(--ag-column-panel-apply-button-background-color);color:var(--ag-column-panel-apply-button-color)}",Gj="ag-column-panel-deferred",Uj=class extends x{constructor(){super({tag:"div",cls:"ag-column-panel"});this.initialised=!1,this.childDestroyFuncs=[],this.isDeferModeEnabled=!1,this.isCommitting=!1,this.onDeferredApply=()=>{this.isCommitting=!0;try{this.beans.columnStateUpdateStrategy.commit(this.isDeferModeEnabled)}finally{this.isCommitting=!1}this.deferredButtonsComp?.updateValidity(!1),this.lastKnownGridState=this.captureGridState()},this.onDeferredCancel=()=>{this.beans.columnStateUpdateStrategy.reset(this.isDeferModeEnabled),this.deferredButtonsComp?.updateValidity(!1),this.refreshToolPanelLayouts(),this.pivotModePanel?.refreshEditStrategy(),this.lastKnownGridState=this.captureGridState()},this.onPivotModePanelValueChanged=()=>{this.refreshToolPanelLayouts(),this.setLastVisible(),this.deferredButtonsComp?.updateValidity(this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled))},this.onColumnEverythingChanged=()=>{if(!this.isDeferModeEnabled||this.isCommitting)return;let z=this.captureGridState();if(!this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled)){this.lastKnownGridState=z;return}let J=this.lastKnownGridState&&this.isGridStateEqual(this.lastKnownGridState,z);if(this.lastKnownGridState=z,!J)return;this.resetDeferredState()},this.onExternalGridChange=()=>{if(!this.isDeferModeEnabled||this.isCommitting)return;if(!this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled))return;this.resetDeferredState(),this.lastKnownGridState=this.captureGridState()},this.registerCSS(qj)}wireBeans(z){this.colToolPanelFactory=z.colToolPanelFactory}setVisible(z){if(super.setDisplayed(z),z&&!this.initialised)this.init(this.params)}init(z){let Q={...C(this.gos,{suppressColumnMove:!1,suppressColumnSelectAll:!1,suppressColumnFilter:!1,suppressColumnExpandAll:!1,contractColumnSelection:!1,suppressPivotMode:!1,suppressRowGroups:!1,suppressValues:!1,suppressPivots:!1,suppressSyncLayoutWithGrid:!1}),...z};this.params=Q;let{childDestroyFuncs:Z,colToolPanelFactory:$,gos:X}=this,Y=X.isModuleRegistered("SharedPivot"),q=Y||X.isModuleRegistered("SharedRowGrouping");if(this.isDeferModeEnabled=p(Q),this.toggleCss(Gj,this.isDeferModeEnabled),!Q.suppressPivotMode&&$&&Y)this.pivotModePanel=$.createPivotModePanel(this,Z,Q,this.onPivotModePanelValueChanged);let G=this.createBean(new Sq);if(this.primaryColsPanel=G,Z.push(()=>this.destroyBean(this.primaryColsPanel)),G.init(!0,Q,"toolPanelUi"),G.addCss("ag-column-panel-column-select"),this.appendChild(G),$){if(!Q.suppressRowGroups&&q)this.rowGroupDropZonePanel=$.createRowGroupPanel(this,Z,Q);if(!Q.suppressValues&&q)this.valuesDropZonePanel=$.createValuesPanel(this,Z,Q);if(!Q.suppressPivots&&Y)this.pivotDropZonePanel=$.createPivotPanel(this,Z,Q);this.setLastVisible();let[U]=this.addManagedEventListeners({columnPivotModeChanged:()=>{this.resetChildrenHeight(),this.setLastVisible()}});Z.push(()=>U())}if(this.isDeferModeEnabled){let U=this.onExternalGridChange;Z.push(...this.addManagedEventListeners({columnEverythingChanged:this.onColumnEverythingChanged,sortChanged:U,columnVisible:U,columnRowGroupChanged:U,columnValueChanged:U,columnPivotChanged:U,columnPivotModeChanged:U,newColumnsLoaded:U,...Q.suppressSyncLayoutWithGrid?{}:{columnMoved:U}}))}if(Q.buttons){if(!Q.buttons.includes("apply"))V(298);if(Q.buttons.length)this.initDeferredButtons(Q.buttons)}this.initialised=!0}initDeferredButtons(z){let J=this.createBean(new M5({className:"ag-column-panel-buttons"}));this.deferredButtonsComp=J,this.childDestroyFuncs.push(()=>{this.deferredButtonsComp=this.destroyBean(this.deferredButtonsComp)});let Q=this.getLocaleTextFunc(),Z=z.map(($)=>({type:$,label:Q($==="apply"?"applyColumnToolPanel":"cancelColumnToolPanel",$==="apply"?"Apply":"Cancel")}));J.updateButtons(Z),J.updateValidity(!1),J.addManagedListeners(J,{apply:this.onDeferredApply,cancel:this.onDeferredCancel}),this.appendChild(J)}resetDeferredState(){this.beans.columnStateUpdateStrategy.reset(this.isDeferModeEnabled),this.deferredButtonsComp?.updateValidity(!1),this.refreshToolPanelLayouts(),this.pivotModePanel?.refreshEditStrategy()}captureGridState(){let{beans:z}=this,J=(Q)=>(Q??[]).map((Z)=>Z.getColId());return{rowGroupColIds:J(z.rowGroupColsSvc?.columns),valueColIds:J(z.valueColsSvc?.columns),pivotColIds:J(z.pivotColsSvc?.columns),pivotMode:z.colModel.isPivotMode(),columnOrder:z.colModel.getCols().map((Q)=>Q.getColId()),visibleColIds:z.colModel.getCols().filter((Q)=>Q.isVisible()).map((Q)=>Q.getColId()),sortState:z.colModel.getCols().filter((Q)=>Q.getSort()).map((Q)=>`${Q.getColId()}:${Q.getSort()}:${Q.getSortIndex()}`),aggFuncState:(z.valueColsSvc?.columns??[]).map((Q)=>Q.getAggFunc()),widthState:z.colModel.getCols().map((Q)=>`${Q.getColId()}:${Q.getActualWidth()}`)}}isGridStateEqual(z,J){return Z0(z.rowGroupColIds,J.rowGroupColIds)&&Z0(z.valueColIds,J.valueColIds)&&Z0(z.pivotColIds,J.pivotColIds)&&z.pivotMode===J.pivotMode&&Z0(z.columnOrder,J.columnOrder)&&Z0(z.visibleColIds,J.visibleColIds)&&Z0(z.sortState,J.sortState)&&Z0(z.aggFuncState,J.aggFuncState)&&Z0(z.widthState,J.widthState)}refreshDeferredUi(){this.refreshToolPanelLayouts(),this.setLastVisible(),this.pivotModePanel?.refreshEditStrategy(),this.deferredButtonsComp?.updateValidity(this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled))}refreshToolPanelLayouts(){this.primaryColsPanel.syncLayoutWithGrid(),this.rowGroupDropZonePanel?.refreshGui(),this.valuesDropZonePanel?.refreshGui(),this.pivotDropZonePanel?.refresh()}setPivotModeSectionVisible(z){let J=this.colToolPanelFactory;if(!J)return;this.pivotModePanel=J.setPanelVisible(this.pivotModePanel,z,J.createPivotModePanel.bind(J,this,this.childDestroyFuncs,this.params,this.onPivotModePanelValueChanged,!0)),this.setLastVisible()}setRowGroupsSectionVisible(z){let J=this.colToolPanelFactory;if(!J)return;this.rowGroupDropZonePanel=J.setPanelVisible(this.rowGroupDropZonePanel,z,J.createRowGroupPanel.bind(J,this,this.childDestroyFuncs,this.params)),this.setLastVisible()}setValuesSectionVisible(z){let J=this.colToolPanelFactory;if(!J)return;this.valuesDropZonePanel=J.setPanelVisible(this.valuesDropZonePanel,z,J.createValuesPanel.bind(J,this,this.childDestroyFuncs,this.params)),this.setLastVisible()}setPivotSectionVisible(z){let J=this.colToolPanelFactory;if(!J)return;this.pivotDropZonePanel=J.setPanelVisible(this.pivotDropZonePanel,z,J.createPivotPanel.bind(J,this,this.childDestroyFuncs,this.params)),this.pivotDropZonePanel?.setDisplayed(z),this.setLastVisible()}setResizers(){for(let z of[this.primaryColsPanel,this.rowGroupDropZonePanel,this.valuesDropZonePanel,this.pivotDropZonePanel]){if(!z)continue;let J=z.getGui();z.toggleResizable(!J.classList.contains("ag-last-column-drop")&&!J.classList.contains("ag-hidden")&&!J.classList.contains("ag-last-visible-child"))}}setLastVisible(){let z=this.getGui(),J=Array.prototype.slice.call(z.querySelectorAll(".ag-column-drop"));for(let $ of J)$.classList.remove("ag-last-column-drop");let Q=z.querySelectorAll(".ag-column-drop:not(.ag-hidden)"),Z=y(Q);if(Z)Z.classList.add("ag-last-column-drop");this.primaryColsPanel.getGui().classList.toggle("ag-last-visible-child",!Z),this.setResizers()}resetChildrenHeight(){let J=this.getGui().children;for(let Q=0;QX.getGui().getBoundingClientRect()),$=Z.findIndex((X)=>this.horizontal?X.right>Q&&X.leftQ);if($===-1){let X=this.gos.get("enableRtl");if(Z.every((G)=>Q>(this.horizontal?G.right:G.bottom)))return X&&this.horizontal?0:this.childPillComponents.length;if(Z.every((G)=>Q<(this.horizontal?G.left:G.top)))return X&&this.horizontal?this.childPillComponents.length:0;return this.insertIndex}if(this.insertIndex<=$)return $+1;return $}checkDragStartedBySelf(z){if(this.state!=="notDragging")return;this.state="rearrangeItems",this.potentialDndItems=this.getItems(z.dragSource.getDragItem()),this.refreshGui(),this.checkInsertIndex(z),this.refreshGui()}onDragging(z){if(this.checkDragStartedBySelf(z),this.checkInsertIndex(z))this.refreshGui()}handleDragEnterEnd(z){}onDragEnter(z){let J=this.getItems(z.dragSource.getDragItem());this.state="newItemsIn";let Q=J.filter(($)=>this.isItemDroppable($,z)),Z=Q.every(($)=>this.childPillComponents.map((X)=>X.getItem()).indexOf($)!==-1);if(Q.length===0)return;if(this.potentialDndItems=Q,Z){this.state="notDragging";return}this.handleDragEnterEnd(z),this.checkInsertIndex(z),this.refreshGui()}isPotentialDndItems(){return!!this.potentialDndItems?.length}handleDragLeaveEnd(z){}onDragLeave(z){if(this.state==="rearrangeItems"){let J=this.getItems(z.dragSource.getDragItem());this.removeItems(J)}if(this.isPotentialDndItems())this.handleDragLeaveEnd(z),this.potentialDndItems=[],this.refreshGui();this.state="notDragging"}onDragCancel(z){if(this.isPotentialDndItems()){if(this.state==="newItemsIn")this.handleDragLeaveEnd(z);this.potentialDndItems=[],this.refreshGui()}this.state="notDragging"}onDragStop(){if(this.isPotentialDndItems()){if(this.state==="newItemsIn")this.addItems(this.potentialDndItems);else this.rearrangeItems(this.potentialDndItems);this.potentialDndItems=[],this.refreshGui()}this.state="notDragging"}removeItems(z){let J=this.getExistingItems().filter((Q)=>!z.includes(Q));this.updateItems(J),this.refreshGui()}addItems(z){if(!z)return;let J=this.getExistingItems().slice(),Q=z.filter((Z)=>J.indexOf(Z)<0);VY(J,Q,this.insertIndex),this.updateItems(J),this.refreshGui()}addItem(z){this.insertIndex=this.getExistingItems().length,this.addItems([z])}rearrangeItems(z,J){let Q;if(!J)Q=this.getNonGhostItems().slice();else Q=this.getExistingItems().filter((Z)=>z.indexOf(Z)===-1);if(VY(Q,z,this.insertIndex),Z0(Q,this.getExistingItems()))return!1;return this.updateItems(Q),this.refreshGui(),!0}refreshGui(){let z=0;if(!this.horizontal)z=this.ePillDropList.scrollTop;let J=this.resizeEnabled,Q=this.getFocusedItem(),{eGridDiv:Z}=this.beans,$=n1(),X=null;if($)X=O0(this.beans,Z)??O0(this.beans,Z,!1,!0);if(this.toggleResizable(!1),this.destroyGui(),this.addIconAndTitleToGui(),this.addEmptyMessageToGui(),this.addItemsToGui(),z!==0)this.ePillDropList.scrollTop=z;if(J)this.toggleResizable(J);if($)this.restoreFocus(Q,X)}getFocusedItem(){let z=this.getGui(),J=n(this.beans);if(!z.contains(J))return-1;return Array.from(z.querySelectorAll(".ag-column-drop-cell")).indexOf(J)}focusItemAtIndex(z){let J=this.getGui(),Z=Array.from(J.querySelectorAll(".ag-column-drop-cell"))[z];if(!Z)return;Z.focus({preventScroll:!0})}restoreFocus(z,J){let Q=this.getGui(),Z=Array.from(Q.querySelectorAll(".ag-column-drop-cell"));if(z===-1)return;if(Z.length===0)J.focus();let $=Math.min(Z.length-1,z),X=Z[$];if(X)X.focus()}focusList(z){let J=z?this.childPillComponents.length-1:0;this.restoreFocus(J,this.getFocusableElement())}getNonGhostItems(){let z=this.getExistingItems();if(this.isPotentialDndItems())return z.filter((J)=>!this.potentialDndItems.includes(J));return z}addItemsToGui(){let J=this.getNonGhostItems().map((Q)=>this.createItemComponent(Q,!1));if(this.isPotentialDndItems()){let Q=this.potentialDndItems.map((Z)=>this.createItemComponent(Z,!0));if(this.insertIndex>=J.length)J.push(...Q);else J.splice(this.insertIndex,0,...Q)}this.appendChild(this.ePillDropList),J.forEach((Q,Z)=>{if(Z>0)this.addArrow(this.ePillDropList);this.ePillDropList.appendChild(Q.getGui())}),this.addAriaLabelsToComponents()}addAriaLabelsToComponents(){let{childPillComponents:z,ePillDropList:J}=this,Q=z.length;U0(J,Q===0?"presentation":"listbox");for(let Z=0;Zthis.destroyBean(Q)),!J)this.childPillComponents.push(Q);return Q}addIconAndTitleToGui(){let{title:z,icon:J}=this.params;if(!z||!J)return;let Q=z0({tag:"div"});if(a6(Q,!0),this.addElementClasses(Q,"title-bar"),this.addElementClasses(J,"icon"),this.toggleCss("ag-column-drop-empty",this.isExistingItemsEmpty()),Q.appendChild(J),!this.horizontal){let Z=z0({tag:"span"});this.addElementClasses(Z,"title"),Z.textContent=z,Q.appendChild(Z)}this.appendChild(Q)}isExistingItemsEmpty(){return this.getExistingItems().length===0}addEmptyMessageToGui(){let{emptyMessage:z}=this.params;if(!z||!this.isExistingItemsEmpty()||this.isPotentialDndItems())return;let J=z0({tag:"span"});J.textContent=z,this.addElementClasses(J,"empty-message"),this.ePillDropList.appendChild(J)}addArrow(z){if(this.horizontal){let J=this.gos.get("enableRtl"),Q=h(J?"panelDelimiterRtl":"panelDelimiter",this.beans);this.addElementClasses(Q,"cell-separator"),z.appendChild(Q)}}},Bj={tag:"span",role:"option",children:[{tag:"span",ref:"eDragHandle",cls:"ag-drag-handle ag-column-drop-cell-drag-handle",role:"presentation"},{tag:"span",ref:"eText",cls:"ag-column-drop-cell-text",attrs:{"aria-hidden":"true"}},{tag:"span",ref:"eButton",cls:"ag-column-drop-cell-button",role:"presentation"}]},Ej=class extends x{constructor(z,J,Q,Z,$){super();this.dragSourceDropTarget=z,this.ghost=J,this.horizontal=Q,this.template=Z,this.agComponents=$,this.eText=j,this.eDragHandle=j,this.eButton=j}postConstruct(){this.setTemplate(this.template??Bj,this.agComponents);let z=this.getGui(),{beans:J,eDragHandle:Q,eText:Z,eButton:$}=this;if(this.addElementClasses(z),this.addElementClasses(Q,"drag-handle"),this.addElementClasses(Z,"text"),this.addElementClasses($,"button"),Q.appendChild(h("columnDrag",J)),$.appendChild(h("cancel",J)),this.tooltipFeature=this.createOptionalManagedBean(J.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.getGui()})),this.setupComponents(),!this.ghost&&this.isDraggable())this.addDragSource();this.setupAria(),this.setupTooltip(),this.activateTabIndex(),this.refreshDraggable()}isDraggable(){return!0}refreshDraggable(){this.eDragHandle.classList.toggle("ag-column-select-column-readonly",!this.isDraggable())}setupAria(){let z=this.getLocaleTextFunc(),J=[this.getAriaDisplayName()];this.addAdditionalAriaInstructions(J,z),_0(this.getGui(),J.join(". "))}addAdditionalAriaInstructions(z,J){if(this.isRemovable()){let Q=J("ariaDropZoneColumnComponentDescription","Press DELETE to remove");z.push(Q)}}setupTooltip(){let z=()=>this.tooltipFeature?.setTooltipAndRefresh(this.getTooltip());z(),this.addManagedEventListeners({newColumnsLoaded:z})}getDragSourceId(){return}getDefaultIconName(){return"notAllowed"}addDragSource(){let{beans:{dragAndDrop:z},eDragHandle:J}=this,Q=this.createGetDragItem(),Z=this.getDefaultIconName(),$={type:this.getDragSourceType(),sourceId:this.getDragSourceId(),eElement:J,getDefaultIconName:()=>Z,getDragItem:Q,dragItemName:this.getDisplayName()};z?.addDragSource($,!0),this.addDestroyFunc(()=>z?.removeDragSource($))}setupComponents(){if(this.eText.textContent=this.getDisplayValue(),this.setupRemove(),this.ghost)this.addCss("ag-column-drop-cell-ghost")}isRemovable(){return!0}refreshRemove(){w(this.eButton,this.isRemovable())}setupRemove(){this.refreshRemove();let z={type:"columnRemove"};this.addGuiEventListener("keydown",(Q)=>this.onKeyDown(Q)),this.addManagedElementListeners(this.eButton,{click:(Q)=>{this.dispatchLocalEvent(z),Q.stopPropagation()}});let J=new c0(this.eButton);this.addManagedListeners(J,{tap:()=>this.dispatchLocalEvent(z)}),this.addDestroyFunc(J.destroy.bind(J))}onKeyDown(z){if(z.key===k.DELETE){if(this.isRemovable())z.preventDefault(),this.dispatchLocalEvent({type:"columnRemove"})}}getDisplayValue(){return this.getDisplayName()}addElementClasses(z,J){J=J?`-${J}`:"";let Q=this.horizontal?"horizontal":"vertical";z.classList.add(`ag-column-drop-cell${J}`,`ag-column-drop-${Q}-cell${J}`)}destroy(){super.destroy(),this.dragSourceDropTarget=null}},Kj=class extends Ej{constructor(z,J,Q,Z,$,X){super(J,Q,$);this.column=z,this.dropZonePurpose=Z,this.updateParams=X,this.eSortIndicator=j,this.popupShowing=!1,this.deferApply=p(X)}postConstruct(){let{sortSvc:z,colNames:J}=this.beans;if(this.template={tag:"span",role:"option",children:[{tag:"span",ref:"eDragHandle",cls:"ag-drag-handle ag-column-drop-cell-drag-handle",role:"presentation"},{tag:"span",ref:"eText",cls:"ag-column-drop-cell-text",attrs:{"aria-hidden":"true"}},z?{tag:"ag-sort-indicator",ref:"eSortIndicator"}:void 0,{tag:"span",ref:"eButton",cls:"ag-column-drop-cell-button",role:"presentation"}]},z)this.agComponents=[z.getSortIndicatorSelector()];if(this.displayName=J.getDisplayNameForColumn(this.column,"columnDrop"),super.postConstruct(),this.deferApply)this.eDragHandle.setAttribute("data-column-tool-panel-deferred","");if(z)this.setupSort(),this.addManagedEventListeners({sortChanged:()=>{this.setupAria()}});if(this.isGroupingZone())this.addManagedPropertyListener("groupLockGroupColumns",()=>{this.refreshRemove(),this.refreshDraggable(),this.setupAria()})}getItem(){return this.column}getDisplayName(){return this.displayName}getTooltip(){return this.column.getColDef().headerTooltip}addAdditionalAriaInstructions(z,J){let Q=this.gos.get("rowGroupPanelSuppressSort"),Z=this.gos.get("functionsReadOnly");if(this.isAggregationZone()&&!Z){let $=J("ariaDropZoneColumnValueItemDescription","Press ENTER to change the aggregation type");z.push($)}if(this.isGroupingZone()&&this.column.isSortable()&&!Q){let $=J("ariaDropZoneColumnGroupItemDescription","Press ENTER to sort");z.push($)}super.addAdditionalAriaInstructions(z,J)}isMovable(){return this.isDraggable()}isDraggable(){return this.isReadOnly()}isRemovable(){return this.isReadOnly()}isReadOnly(){return!this.isGroupingAndLocked()&&!this.gos.get("functionsReadOnly")}getAriaDisplayName(){let z=this.getLocaleTextFunc(),{name:J,aggFuncName:Q}=this.getColumnAndAggFuncName(),Z=z("ariaDropZoneColumnComponentAggFuncSeparator"," of "),$={asc:z("ariaDropZoneColumnComponentSortAscending","ascending"),desc:z("ariaDropZoneColumnComponentSortDescending","descending")},X=this.getCurrentSortDirection(this.column),Y=this.gos.get("rowGroupPanelSuppressSort");return[Q&&`${Q}${Z}`,J,this.isGroupingZone()&&!Y&&X&&`, ${$[X]}`].filter((q)=>!!q).join("")}getColumnAndAggFuncName(){let z=this.displayName,J="";if(this.isAggregationZone()){let Q=this.beans.columnStateUpdateStrategy.getColumnAggFunc(this.deferApply,this.column),Z=typeof Q==="string"?Q:"agg";J=this.getLocaleTextFunc()(Z,Z)}return{name:z,aggFuncName:J}}setupSort(){if(!this.column.isSortable()||!this.isGroupingZone())return;let{gos:z,column:J,eSortIndicator:Q}=this;if(!z.get("rowGroupPanelSuppressSort")){Q.setupSort(J,!0,this.getSortDefOverride.bind(this));let Z=($)=>{$.preventDefault(),this.beans.columnStateUpdateStrategy.progressSortFromEvent(this.deferApply,J,$),Q.refresh(),this.setupAria(),h0(this.beans,this.updateParams)};this.addGuiEventListener("click",Z),this.addGuiEventListener("keydown",($)=>{if($.key===k.ENTER&&this.isGroupingZone())Z($)})}}getCurrentSortDirection(z){return this.beans.columnStateUpdateStrategy.getSortDef(this.deferApply,z)?.direction??null}getSortDefOverride(){if(!this.deferApply)return;return this.beans.columnStateUpdateStrategy.getSortDef(this.deferApply,this.column)}getDefaultIconName(){return"hide"}createGetDragItem(){let{column:z}=this;return()=>{let J={};return J[z.getId()]=z.isVisible(),{columns:[z],visibleState:J}}}setupComponents(){if(super.setupComponents(),this.isAggregationZone()&&!this.gos.get("functionsReadOnly"))this.addGuiEventListener("click",this.onShowAggFuncSelection.bind(this))}onKeyDown(z){if(super.onKeyDown(z),z.key===k.ENTER&&this.isAggregationZone()&&!this.gos.get("functionsReadOnly"))z.preventDefault(),this.onShowAggFuncSelection()}getDisplayValue(){let{name:z,aggFuncName:J}=this.getColumnAndAggFuncName();return this.isAggregationZone()?`${J}(${z})`:z}onShowAggFuncSelection(){if(this.popupShowing)return;this.popupShowing=!0;let{aggFuncSvc:z,popupSvc:J}=this.beans,Q=new Y7({cssIdentifier:"select-agg-func"}),Z=z.getFuncNames(this.column),$=this.getGui(),X=Q.getGui();Q.setModel({getRow:function(B){return Z[B]},getRowCount:function(){return Z.length}}),this.createBean(Q);let Y=z0({tag:"div",cls:"ag-select-agg-func-popup"});Y.style.top="0px",Y.style.left="0px",Y.appendChild(X),Y.style.width=`${$.clientWidth}px`;let[q]=this.addManagedElementListeners(Y,{focusout:(B)=>{if(!Y.contains(B.relatedTarget)&&_)_.hideFunc()}}),G=(B)=>{if(this.destroyBean(Q),this.popupShowing=!1,B?.key==="Escape")$.focus();if(q)q()},U=this.getLocaleTextFunc(),_=J.addPopup({modal:!0,eChild:Y,closeOnEsc:!0,closedCallback:G,ariaLabel:U("ariaLabelAggregationFunction","Aggregation Function")});if(_)Q.setComponentCreator(this.createAggSelect.bind(this,_.hideFunc));Q.addGuiEventListener("keydown",(B)=>{if(B.key===k.ENTER||B.key===k.SPACE){let E=Q.getLastFocusedRow();if(E==null)return;let K=Q.getComponentAt(E);if(K)K.selectItem()}}),J.positionPopupByComponent({type:"aggFuncSelect",eventSource:$,ePopup:Y,keepWithinBounds:!0,additionalParams:{column:this.column},position:"under"}),Q.refresh();let H=this.beans.columnStateUpdateStrategy.getColumnAggFunc(this.deferApply,this.column),W=Z.findIndex((B)=>B===H);if(W===-1)W=0;Q.focusRow(W)}createAggSelect(z,J){let Q=()=>{if(z(),this.getGui().focus(),this.beans.columnStateUpdateStrategy.setColumnAggFunc(this.deferApply,this.column,J,"toolPanelDragAndDrop"),this.column){let q=this.getGui().querySelector(".ag-column-drop-cell-text");if(q)q.textContent=this.getDisplayValue();this.setupAria()}h0(this.beans,this.updateParams)},Z=this.getLocaleTextFunc(),$=(J||"").toString(),X=Z($,$);return new Fj(Q,X)}isGroupingAndLocked(){return this.isGroupingZone()&&Q6(this.column,this.beans)}isAggregationZone(){return this.dropZonePurpose==="aggregation"}isGroupingZone(){return this.dropZonePurpose==="rowGroup"}getDragSourceType(){return E4.ToolPanel}destroy(){super.destroy(),this.column=null}},Fj=class extends x{constructor(z,J){super({tag:"div",cls:"ag-select-agg-func-item",children:J});this.selectItem=z,this.addGuiEventListener("click",this.selectItem)}},_7=class extends Wj{constructor(z,J,Q){super(z);this.dropZonePurpose=J,this.updateParams=Q,this.addElementClasses(this.getGui(),this.dropZonePurpose.toLowerCase())}init(z){super.init(z),this.addManagedEventListeners({newColumnsLoaded:this.refreshGui.bind(this)}),this.addManagedPropertyListeners(["functionsReadOnly","rowGroupPanelSuppressSort","groupLockGroupColumns"],this.refreshGui.bind(this))}getItems(z){return z.columns??[]}isInterestedIn(z,J){if(z===E4.HeaderCell)return!0;if(z!==E4.ToolPanel)return!1;if(!this.horizontal)return!0;return!J.hasAttribute("data-column-tool-panel-deferred")}minimumAllowedNewInsertIndex(){let{gos:z,rowGroupColsSvc:J}=this.beans,Q=z.get("groupLockGroupColumns"),Z=J?.columns.length??0;if(Q===-1)return Z;return Math.min(Q,Z)}showOrHideColumnOnExit(z){return this.isRowGroupPanel()&&YJ(this.gos,!0)&&!z.fromNudge}handleDragEnterEnd(z){if(this.showOrHideColumnOnExit(z)){let Z=z.dragSource.getDragItem().columns;this.setColumnsVisible(Z,!1,"uiColumnDragged")}}handleDragLeaveEnd(z){if(this.showOrHideColumnOnExit(z)){let Q=z.dragSource.getDragItem();this.setColumnsVisible(Q.columns,!0,"uiColumnDragged")}}setColumnsVisible(z,J,Q){if(!z)return;if(p(this.updateParams))return;let Z=z.filter(($)=>!$.getColDef().lockVisible);this.beans.columnStateUpdateStrategy.setColumnsVisible(!1,Z,J,Q)}isRowGroupPanel(){return this.dropZonePurpose==="rowGroup"}createPillComponent(z,J,Q,Z){return new Kj(z,J,Q,this.dropZonePurpose,Z,this.updateParams)}},Lj=class extends _7{constructor(z,J){super(z,"pivot",J)}postConstruct(){let z=this.getLocaleTextFunc(),J=z("pivotColumnsEmptyMessage","Drag here to set column labels"),Q=z("pivots","Column Labels");if(super.init({icon:h("pivotPanel",this.beans,null),emptyMessage:J,title:Q}),this.horizontal)Tz(this.beans,this,this.getGui());this.addManagedEventListeners({newColumnsLoaded:this.refresh.bind(this),columnPivotChanged:this.refresh.bind(this),columnPivotModeChanged:this.checkVisibility.bind(this)}),this.refresh()}getAriaLabel(){return this.getLocaleTextFunc()("ariaPivotDropZonePanelLabel","Column Labels")}refresh(){this.checkVisibility(),this.refreshGui()}checkVisibility(){let z=this.beans.colModel,J=z.isPivotMode();if(this.horizontal)switch(this.gos.get("pivotPanelShow")){case"always":this.setDisplayed(J);break;case"onlyWhenPivoting":{let Q=z.isPivotActive();this.setDisplayed(J&&Q);break}default:this.setDisplayed(!1);break}else this.setDisplayed(this.beans.columnStateUpdateStrategy.getPivotMode(p(this.updateParams)))}isItemDroppable(z,J){if(this.gos.get("functionsReadOnly")||!z.isPrimary())return!1;let Q=this.beans.columnStateUpdateStrategy.getPivotColumns(p(this.updateParams)).includes(z);return z.isAllowPivot()&&(!Q||this.isSourceEventFromTarget(J))}updateItems(z){this.beans.columnStateUpdateStrategy.setPivotColumns(p(this.updateParams),z,"toolPanelUi"),h0(this.beans,this.updateParams)}getIconName(){return this.isPotentialDndItems()?"pivot":"notAllowed"}getExistingItems(){return this.beans.columnStateUpdateStrategy.getPivotColumns(p(this.updateParams))}getFocusableContainerName(){return"pivotToolbar"}},Dj=class extends _7{constructor(z,J){super(z,"rowGroup",J)}postConstruct(){let z=this.getLocaleTextFunc(),J=z("rowGroupColumnsEmptyMessage","Drag here to set row groups"),Q=z("groups","Row Groups");if(super.init({icon:h("rowGroupPanel",this.beans,null),emptyMessage:J,title:Q}),this.horizontal)Tz(this.beans,this,this.getGui());this.addManagedEventListeners({columnRowGroupChanged:this.refreshGui.bind(this)})}getAriaLabel(){return this.getLocaleTextFunc()("ariaRowGroupDropZonePanelLabel","Row Groups")}isItemDroppable(z,J){if(this.gos.get("functionsReadOnly")||!z.isPrimary()||z.colDef.showRowGroup)return!1;let Q=this.beans.columnStateUpdateStrategy.getRowGroupColumns(p(this.updateParams)).includes(z);return z.isAllowRowGroup()&&(!Q||this.isSourceEventFromTarget(J))}updateItems(z){this.beans.columnStateUpdateStrategy.setRowGroupColumns(p(this.updateParams),z,"toolPanelUi"),h0(this.beans,this.updateParams)}getIconName(){return this.isPotentialDndItems()?"group":"notAllowed"}getExistingItems(){return this.beans.columnStateUpdateStrategy.getRowGroupColumns(p(this.updateParams))}getFocusableContainerName(){return"rowGroupToolbar"}},Mj=class extends _7{constructor(z,J){super(z,"aggregation",J)}postConstruct(){let z=this.getLocaleTextFunc(),J=z("valueColumnsEmptyMessage","Drag here to aggregate"),Q=z("values","Values");super.init({icon:h("valuePanel",this.beans,null),emptyMessage:J,title:Q}),this.addManagedEventListeners({columnValueChanged:this.refreshGui.bind(this)})}getAriaLabel(){return this.getLocaleTextFunc()("ariaValuesDropZonePanelLabel","Values")}getIconName(){return this.isPotentialDndItems()?"aggregate":"notAllowed"}isItemDroppable(z,J){if(this.gos.get("functionsReadOnly")||!z.isPrimary())return!1;let Q=this.beans.columnStateUpdateStrategy.getValueColumns(p(this.updateParams)).includes(z);return z.isAllowValue()&&(!Q||this.isSourceEventFromTarget(J))}updateItems(z){this.beans.columnStateUpdateStrategy.setValueColumns(p(this.updateParams),z,"toolPanelUi"),h0(this.beans,this.updateParams)}getExistingItems(){return this.beans.columnStateUpdateStrategy.getValueColumns(p(this.updateParams))}},kj={tag:"div",cls:"ag-pivot-mode-panel",children:[{tag:"ag-toggle-button",ref:"cbPivotMode",cls:"ag-pivot-mode-select"}]},fj=class extends x{constructor(z,J){super();this.params=z,this.onPivotModeValueChanged=J,this.cbPivotMode=j}getCurrentPivotMode(){return this.beans.columnStateUpdateStrategy.getPivotMode(p(this.params))}syncFromGrid(){this.cbPivotMode.setValue(this.getCurrentPivotMode())}refreshEditStrategy(){this.syncFromGrid()}postConstruct(){this.setTemplate(kj,[XY]);let z=this.cbPivotMode;z.setValue(this.getCurrentPivotMode());let J=this.getLocaleTextFunc();z.setLabel(J("pivotMode","Pivot Mode"));let Q=()=>{let $=!!z.getValue();this.beans.columnStateUpdateStrategy.setPivotMode(p(this.params),$,"toolPanelUi"),this.onPivotModeValueChanged?.()},Z=()=>{z.setValue(this.getCurrentPivotMode())};this.addManagedListeners(z,{fieldValueChanged:Q}),this.addManagedEventListeners({newColumnsLoaded:Z,columnPivotModeChanged:Z})}},Sj=class extends S{constructor(){super(...arguments);this.beanName="colToolPanelFactory"}setPanelVisible(z,J,Q){if(z)z.setDisplayed(J);else if(J)z=Q();return z}createRowGroupPanel(z,J,Q){return this.createPanel(z,J,new Dj(!1,Q))}createValuesPanel(z,J,Q){return this.createPanel(z,J,new Mj(!1,Q))}createPivotPanel(z,J,Q){return this.createPanel(z,J,new Lj(!1,Q))}createPivotModePanel(z,J,Q,Z,$){return this.createPanel(z,J,new fj(Q,Z),$)}createPanel(z,J,Q,Z){if(Q=z.createBean(Q),J.push(()=>z.destroyBean(Q)),Z)z.prependChild(Q);else z.appendChild(Q);return Q}},RY=()=>{},Vj=class extends S{constructor(){super(...arguments);this.beanName="columnStateUpdateExecutionStrategy"}applyColumnState(z,J,Q){this.getUpdateStrategy(z).applyColumnState(J,Q)}commit(z){this.getUpdateStrategy(z).commit()}hasPendingChanges(z){return this.getUpdateStrategy(z).hasPendingChanges()}moveColumns(z,J,Q,Z){this.getUpdateStrategy(z).moveColumns(J,Q,Z)}reset(z){this.getUpdateStrategy(z).reset()}setColumnsVisible(z,J,Q,Z){this.getUpdateStrategy(z).setColumnsVisible(J,Q,Z)}isColumnVisibleInToolPanel(z,J){return this.getUpdateStrategy(z).isColumnVisibleInToolPanel(J)}setRowGroupColumns(z,J,Q){this.getUpdateStrategy(z).setRowGroupColumns(J,Q)}getRowGroupColumns(z){return this.getUpdateStrategy(z).getRowGroupColumns()}getPrimaryColumns(z){return this.getUpdateStrategy(z).getPrimaryColumns()}hasDeferredColumnOrder(z){return this.getUpdateStrategy(z).hasDeferredColumnOrder()}setValueColumns(z,J,Q){this.getUpdateStrategy(z).setValueColumns(J,Q)}getValueColumns(z){return this.getUpdateStrategy(z).getValueColumns()}setColumnAggFunc(z,J,Q,Z){this.getUpdateStrategy(z).setColumnAggFunc(J,Q,Z)}getColumnAggFunc(z,J){return this.getUpdateStrategy(z).getColumnAggFunc(J)}setPivotColumns(z,J,Q){this.getUpdateStrategy(z).setPivotColumns(J,Q)}getPivotColumns(z){return this.getUpdateStrategy(z).getPivotColumns()}setPivotMode(z,J,Q){this.getUpdateStrategy(z).setPivotMode(J,Q)}getPivotMode(z){return this.getUpdateStrategy(z).getPivotMode()}isColumnSelectedInPivotModeToolPanel(z,J){return this.getUpdateStrategy(z).isColumnSelectedInPivotModeToolPanel(J)}progressSortFromEvent(z,J,Q){this.getUpdateStrategy(z).progressSortFromEvent(J,Q)}getSortDef(z,J){return this.getUpdateStrategy(z).getSortDef(J)}getUpdateStrategy(z){return z?this.getDeferredUpdateStrategy():this.getSyncUpdateStrategy()}getSyncUpdateStrategy(){return this.syncUpdateStrategy??(this.syncUpdateStrategy=new Rj(this.beans))}getDeferredUpdateStrategy(){return this.deferredUpdateStrategy??(this.deferredUpdateStrategy=new Aj(this.beans))}},Rj=class{constructor(z){this.beans=z,this.lastPivotColIds=[],this.reset=RY,this.commit=RY,this.hasPendingChanges=()=>!1,this.hasDeferredColumnOrder=()=>!1}applyColumnState(z,J){if(z.length===0)return;a0(this.beans,{state:z},J)}moveColumns(z,J,Q){this.beans.colMoves?.moveColumns(z,J,Q),jj(this.beans)}setColumnsVisible(z,J,Q){let Z=z.filter(($)=>!$.getColDef().lockVisible);this.beans.colModel.setColsVisible(Z,J,Q)}setRowGroupColumns(z,J){this.beans.rowGroupColsSvc?.setColumns(z,J)}getRowGroupColumns(){return this.beans.rowGroupColsSvc?.columns??[]}getPrimaryColumns(){return H7(this.beans)}setValueColumns(z,J){this.beans.valueColsSvc?.setColumns(z,J)}getValueColumns(){return this.beans.valueColsSvc?.columns??[]}setColumnAggFunc(z,J,Q){this.beans.valueColsSvc?.setColumnAggFunc?.(z,J,Q)}getColumnAggFunc(z){return z.getAggFunc()}setPivotColumns(z,J){this.lastPivotColIds=z.map((Q)=>Q.getColId()),this.beans.pivotColsSvc?.setColumns(z,J)}getPivotColumns(){return this.beans.pivotColsSvc?.columns??[]}setPivotMode(z,J){let{colModel:Q,gos:Z,ctrlsSvc:$}=this.beans;if(z===Q.isPivotMode())return;let X=this.beans.pivotColsSvc?.columns.map((Y)=>Y.getColId())??[];if(X.length>0)this.lastPivotColIds=X;if(!z){let Y=this.beans.colModel.getColDefCols()??[];a0(this.beans,{state:Y.map((q)=>({colId:q.getColId(),pivot:!1,pivotIndex:null}))},J)}if(Z.updateGridOptions({options:{pivotMode:z},source:J}),z&&this.lastPivotColIds.length>0)this.beans.pivotColsSvc?.setColumns(this.lastPivotColIds,J);for(let Y of $.getHeaderRowContainerCtrls())Y.refresh()}progressSortFromEvent(z,J){this.beans.sortSvc?.progressSortFromEvent(z,J)}isColumnVisibleInToolPanel(z){return z.isVisible()}isColumnSelectedInPivotModeToolPanel(z){return z.isAnyFunctionActive()}getPivotMode(){return this.beans.colModel.isPivotMode()}getSortDef(z){return z.getSortDef()}},Aj=class{constructor(z){this.beans=z,this.state={},this.sequence=0,this.lastPivotColIds=[]}reset(){this.sequence=0,this.state={}}hasPendingChanges(){let{state:z,beans:J}=this,{columnState:Q,columnOrder:Z,rowGroup:$,aggregation:X,pivot:Y,pivotMode:q,sort:G,aggFuncs:U}=z,_=(H)=>(H??[]).map((W)=>W.getColId());if(Q)for(let[H,W]of Q.patches){let B=J.colModel.getColDefCol(H);if(!B)continue;if(W.hide!==void 0&&W.hide!==!B.isVisible()||W.rowGroup!==void 0&&!!W.rowGroup!==B.isRowGroupActive()||W.pivot!==void 0&&!!W.pivot!==B.isPivotActive()||W.aggFunc!==void 0&&(W.aggFunc??null)!==(B.getAggFunc()??null))return!0}if(Z&&!Z0(Z.colIds,p5(J)))return!0;if($&&!Z0($.colIds,_(J.rowGroupColsSvc?.columns)))return!0;if(X&&!Z0(X.colIds,_(J.valueColsSvc?.columns)))return!0;if(Y&&!Z0(Y.colIds,_(J.pivotColsSvc?.columns)))return!0;if(q&&q.pivotMode!==J.colModel.isPivotMode())return!0;if(G){for(let[H,W]of G.sortDefsByColId){let B=J.colModel.getColDefCol(H);if(!B)continue;if((W?.direction??null)!==(B.getSortDef()?.direction??null))return!0}if(G.baselineCleared){let H=H7(J);for(let W of H)if(!G.sortDefsByColId.has(W.getColId())&&W.getSortDef()!==null)return!0}}if(U)for(let[H,W]of U.values){let B=J.colModel.getColDefCol(H);if(!B)continue;if(W!==B.getAggFunc())return!0}return!1}commit(){let{beans:z,state:J}=this,Q=[];for(let $ of Object.keys(J)){let X=J[$];if(X)Q.push({type:$,...X})}let Z=Q.sort(($,X)=>$.seq-X.seq);for(let $ of Z)switch($.type){case"columnState":{a0(z,{state:[...$.patches.values()]},$.eventType);break}case"columnOrder":{let X=$.colIds.map((Y)=>z.colModel.getColDefCol(Y)).filter((Y)=>!!Y&&Z6(Y));if(!z.colModel.isPivotMode())for(let Y=0;YZ6(H)),_=(U>=0?U:0)+Y;if(G[_]!==q)z.colMoves?.moveColumns([q],_,$.eventType,!0)}Vq(z,X);break}case"rowGroup":{z.rowGroupColsSvc?.setColumns($.colIds,$.eventType);break}case"aggregation":{z.valueColsSvc?.setColumns($.colIds,$.eventType);break}case"pivot":{this.lastPivotColIds=$.colIds,z.pivotColsSvc?.setColumns($.colIds,$.eventType);break}case"pivotMode":{let{colModel:X,ctrlsSvc:Y,gos:q,stateSvc:G}=z;if($.pivotMode!==X.isPivotMode()){let U=z.pivotColsSvc?.columns.map((W)=>W.getColId())??[];if(U.length>0)this.lastPivotColIds=U;let _=G?.getState().pivot?.pivotColIds??U,H=$.pivotMode?this.state.pivot?.colIds??this.lastPivotColIds:_;if(G?.setState({...G.getState(),pivot:{pivotMode:$.pivotMode,pivotColIds:H}},["pivot"]),!$.pivotMode){let W=z.colModel.getColDefCols()??[];a0(z,{state:W.map((B)=>({colId:B.getColId(),pivot:!1,pivotIndex:null}))},$.eventType)}if(q.updateGridOptions({options:{pivotMode:$.pivotMode},source:$.eventType}),$.pivotMode&&H.length>0)z.pivotColsSvc?.setColumns(H,$.eventType);for(let W of Y.getHeaderRowContainerCtrls())W.refresh()}break}case"sort":{let X=[],Y=0;for(let[q,G]of $.sortDefsByColId)X.push({colId:q,sort:G?.direction??null,sortIndex:G?.direction?Y++:null,sortType:G?.type??void 0});a0(z,{state:X,defaultState:$.baselineCleared?{sort:null,sortIndex:null,sortType:void 0}:void 0},$.eventType);break}case"aggFuncs":{for(let[X,Y]of $.values){let q=z.colModel.getColDefCol(X);if(!q)continue;z.valueColsSvc?.setColumnAggFunc?.(q,Y,$.eventType)}break}}this.reset()}applyColumnState(z,J){for(let Z of z)n5(this.state,Z);let Q=bJ(this.state);Q.seq=$z(this.sequence),this.sequence=Q.seq,Q.eventType=J}moveColumns(z,J,Q){let Z=new Set(z.map((G)=>G.getColId())),X=(this.state.columnOrder?.colIds??p5(this.beans)).filter((G)=>!Z.has(G)),Y=z.map((G)=>G.getColId()),q=$z(this.sequence);this.sequence=q,this.state.columnOrder={colIds:[...X.slice(0,J),...Y,...X.slice(J)],eventType:Q,seq:q}}setColumnsVisible(z,J,Q){for(let $ of z){if($.getColDef().lockVisible)continue;n5(this.state,{colId:$.getColId(),hide:!J})}let Z=bJ(this.state);Z.seq=$z(this.sequence),this.sequence=Z.seq,Z.eventType=Q}setRowGroupColumns(z,J){d5(this.state,"rowGroup");let Q=$z(this.sequence);this.sequence=Q,this.state.rowGroup={colIds:z.map((Z)=>Z.getColId()),eventType:J,seq:Q}}setValueColumns(z,J){d5(this.state,"aggFunc");let Q=new Set((this.beans.valueColsSvc?.columns??[]).map((X)=>X.getColId())),Z=AY(this.state);for(let X of z)if(!Q.has(X.getColId())&&!Z.values.has(X.getColId())){let Y=X.getAggFunc(),q=Y!=null?Y:this.beans.aggFuncSvc?.getDefaultAggFunc(X);if(q!=null)Z.values.set(X.getColId(),q)}let $=$z(this.sequence);this.sequence=$,Z.seq=$,Z.eventType=J,this.state.aggregation={colIds:z.map((X)=>X.getColId()),eventType:J,seq:$}}setColumnAggFunc(z,J,Q){n5(this.state,{colId:z.getColId(),aggFunc:J});let Z=bJ(this.state);Z.seq=$z(this.sequence),this.sequence=Z.seq,Z.eventType=Q;let $=AY(this.state);$.seq=Z.seq,$.eventType=Q,$.values.set(z.getColId(),J)}getColumnAggFunc(z){let J=z.getColId();if(this.state.aggFuncs?.values.has(J))return this.state.aggFuncs.values.get(J);return z.getAggFunc()}isColumnVisibleInToolPanel(z){let J=this.state.columnState?.patches.get(z.getColId());if(J?.hide!==void 0)return!J.hide;return z.isVisible()}isColumnSelectedInPivotModeToolPanel(z){let J=z.getColId(),Q=this.state.columnState?.patches.get(J),Z;if(Q?.rowGroup!==void 0)Z=!!Q.rowGroup;else if(this.state.rowGroup)Z=this.state.rowGroup.colIds.includes(J);else Z=z.isRowGroupActive();let $;if(Q?.pivot!==void 0)$=!!Q.pivot;else if(this.state.pivot)$=this.state.pivot.colIds.includes(J);else $=z.isPivotActive();let X;if(Q?.aggFunc!==void 0)X=Q.aggFunc!=null;else if(this.state.aggregation)X=this.state.aggregation.colIds.includes(J);else X=z.isValueActive();return Z||$||X}setPivotColumns(z,J){d5(this.state,"pivot");let Q=$z(this.sequence);this.sequence=Q,this.state.pivot={colIds:z.map((Z)=>Z.getColId()),eventType:J,seq:Q}}setPivotMode(z,J){let Q=$z(this.sequence);this.sequence=Q,this.state.pivotMode={pivotMode:z,eventType:J,seq:Q}}getRowGroupColumns(){return t2(this.beans,i5(this.state.rowGroup?.colIds,this.beans.rowGroupColsSvc?.columns,this.state.columnState?.patches,(z)=>z.rowGroup==null?void 0:!!z.rowGroup))}getPrimaryColumns(){return t2(this.beans,this.state.columnOrder?.colIds??p5(this.beans))}hasDeferredColumnOrder(){return!!this.state.columnOrder}getValueColumns(){return t2(this.beans,i5(this.state.aggregation?.colIds,this.beans.valueColsSvc?.columns,this.state.columnState?.patches,(z)=>z.aggFunc===void 0?void 0:z.aggFunc!=null))}getPivotColumns(){if(!this.getPivotMode())return[];let z=this.beans.pivotColsSvc?.columns,J=z?.length?z:t2(this.beans,this.lastPivotColIds);return t2(this.beans,i5(this.state.pivot?.colIds,J,this.state.columnState?.patches,(Q)=>Q.pivot==null?void 0:!!Q.pivot))}getPivotMode(){return this.state.pivotMode?.pivotMode??this.beans.colModel.isPivotMode()}getSortDef(z){let J=this.state.sort,Q=z.getColId(),Z=J?.sortDefsByColId;if(Z?.has(Q))return Z.get(Q)??null;if(J?.baselineCleared)return null;return z.getSortDef()}progressSortFromEvent(z,J){let Q=this.state.sort??{sortDefsByColId:new Map,baselineCleared:!1,seq:0,eventType:"toolPanelUi"},{sortSvc:Z}=this.beans,$=z.getColId(),X;if(Q.sortDefsByColId.has($))X=Q.sortDefsByColId.get($);else if(Q.baselineCleared)X=null;else X=z.getSortDef();let Y=Z?.getNextSortDirection(z,X);if(!Y)return;let{gos:q}=this.beans;if(!(((q.get("multiSortKey")==="ctrl"?J.ctrlKey||J.metaKey:J.shiftKey)||q.get("alwaysMultiSort"))&&!q.get("suppressMultiSort")))Q.sortDefsByColId.clear(),Q.baselineCleared=!0;Q.sortDefsByColId.set($,Y.direction?Y:null),Q.seq=$z(this.sequence),this.sequence=Q.seq,this.state.sort=Q}};function t2(z,J){if(!J)return[];return J.map((Q)=>z.colModel.getColDefCol(Q)).filter((Q)=>!!Q)}function i5(z,J,Q,Z){let $=[...z??J?.map((Y)=>Y.getColId())??[]];if(!Q?.size)return $;let X=new Set($);for(let[Y,q]of Q){let G=Z(q);if(G===void 0)continue;if(G){if(!X.has(Y))$.push(Y),X.add(Y);continue}if(!X.has(Y))continue;X.delete(Y);let U=$.indexOf(Y);if(U>=0)$.splice(U,1)}return $}function jj(z){let J=z.colModel.getCols().filter((Q)=>Z6(Q)).map((Q)=>z.colModel.getColDefCol(Q.getColId())).filter((Q)=>!!Q);Vq(z,J)}function Vq(z,J){let Q=Oj(z);if(!Q)return;let Z=new Set(J);Q.list=[...J,...Q.list.filter(($)=>Z6($)&&!Z.has($))]}function p5(z){return H7(z).map((J)=>J.getColId())}function H7(z){return(z.colModel.getColDefCols()??z.colModel.getCols()).filter((J)=>Z6(J))}function Oj(z){let J=z.colModel.colDefCols,Q=J?.list;if(!Array.isArray(Q))return;return J}function Z6(z){if(!z.isPrimary())return!1;return!Z1(z)&&!w2(z)}function $z(z){return z+1}function n5(z,J){let Q=bJ(z),Z=Q.patches.get(J.colId);Q.patches.set(J.colId,Z?{...Z,...J}:J)}function d5(z,J){let Q=z.columnState?.patches;if(!Q?.size)return;for(let[Z,$]of Q){if(!(J in $))continue;let X={...$};if(delete X[J],Object.keys(X).length===1){Q.delete(Z);continue}Q.set(Z,X)}}function bJ(z){let{columnState:J}=z;if(!J)J={patches:new Map,seq:0,eventType:"toolPanelUi"},z.columnState=J;return J}function AY(z){let{aggFuncs:J}=z;if(!J)J={values:new Map,seq:0,eventType:"toolPanelUi"},z.aggFuncs=J;return J}var Pj=class extends S{constructor(){super(...arguments);this.beanName="columnStateUpdateStrategy"}applyColumnState(z,J,Q){this.delegate("applyColumnState",z,J,Q)}commit(z){this.delegate("commit",z)}hasPendingChanges(z){return this.delegate("hasPendingChanges",z)}moveColumns(z,J,Q,Z){this.delegate("moveColumns",z,J,Q,Z)}reset(z){this.delegate("reset",z)}setColumnsVisible(z,J,Q,Z){this.delegate("setColumnsVisible",z,J,Q,Z)}isColumnVisibleInToolPanel(z,J){return this.delegate("isColumnVisibleInToolPanel",z,J)}setRowGroupColumns(z,J,Q){this.delegate("setRowGroupColumns",z,J,Q)}getRowGroupColumns(z){return this.delegate("getRowGroupColumns",z)}getPrimaryColumns(z){return this.delegate("getPrimaryColumns",z)}hasDeferredColumnOrder(z){return this.delegate("hasDeferredColumnOrder",z)}setValueColumns(z,J,Q){this.delegate("setValueColumns",z,J,Q)}getValueColumns(z){return this.delegate("getValueColumns",z)}setColumnAggFunc(z,J,Q,Z){this.delegate("setColumnAggFunc",z,J,Q,Z)}getColumnAggFunc(z,J){return this.delegate("getColumnAggFunc",z,J)}setPivotColumns(z,J,Q){this.delegate("setPivotColumns",z,J,Q)}getPivotColumns(z){return this.delegate("getPivotColumns",z)}setPivotMode(z,J,Q){this.delegate("setPivotMode",z,J,Q)}getPivotMode(z){return this.delegate("getPivotMode",z)}isColumnSelectedInPivotModeToolPanel(z,J){return this.delegate("isColumnSelectedInPivotModeToolPanel",z,J)}progressSortFromEvent(z,J,Q){this.delegate("progressSortFromEvent",z,J,Q)}getSortDef(z,J){return this.delegate("getSortDef",z,J)}getUpdateStrategy(){return this.executionStrategy??(this.executionStrategy=this.createManagedBean(new Vj))}delegate(z,...J){let Q=this.getUpdateStrategy();return Q[z].bind(Q)(...J)}},Tj={moduleName:"SharedColumnStateUpdateStrategy",version:$0,beans:[Pj],dependsOn:[C0]},Rq={moduleName:"ColumnsToolPanel",version:$0,beans:[Sj],userComponents:{agColumnsToolPanel:Uj},icons:{ensureColumnVisible:"column-arrow",columnsToolPanel:"columns",menuAddRowGroup:"group",menuRemoveRowGroup:"group",pivotPanel:"pivot",rowGroupPanel:"group",valuePanel:"aggregation",columnSelectClosed:"tree-closed",columnSelectOpen:"tree-open",columnSelectIndeterminate:"tree-indeterminate"},dependsOn:[C0,Tj,q7,n2,p2,q1,G7]},vj=class extends S{constructor(){super(...arguments);this.beanName="chartMenuItemMapper"}getChartItems(z){let J=this.beans,Q=J.chartSvc,Z=z==="pivotChart";if(!Q)return null;let $=this.getLocaleTextFunc.bind(this),X=Z?new Ij(J,Q,$):new Cj(J,Q,$),Y=Q.isEnterprise(),q=X.getMenuItem();if(q?.subMenu&&!Y){let U=(_)=>({..._,subMenu:_.subMenu?.filter((H)=>!H._enterprise).map((H)=>U(H))});q=U(q)}let G=this.gos.get("chartToolPanelsDef")?.settingsPanel?.chartGroupsDef;if(G)q=this.filterAndOrderChartMenu(q,G,X.getConfigLookup());return this.cleanInternals(q)}cleanInternals(z){if(!z)return z;let J=(Q)=>{delete Q?._key,delete Q?._enterprise;for(let Z of Q?.subMenu??[])J(Z);return Q};return J(z)}buildLookup(z){let J={},Q=(Z)=>{if(J[Z._key]=Z,Z.subMenu)for(let $ of Z.subMenu)Q($)};return Q(z),J}filterAndOrderChartMenu(z,J,Q){let Z=this.buildLookup(z),$={...z,subMenu:[]};for(let X of Object.keys(J)){let Y=J[X],q=Q[X];if(q===null)continue;if(q==null){V(173,{group:X});continue}let G=Z[q._key];if(G)if(G.subMenu){let U=Y.map((_)=>{let H=q[_];if(H==null){V(174,{group:X,chartType:_});return}return Z[H]}).filter((_)=>_!==void 0);if(U.length>0)G.subMenu=U,$.subMenu?.push(G)}else $.subMenu?.push(G)}if($.subMenu?.length==0)return null;return $}},Ij=class{constructor(z,J,Q){this.beans=z,this.chartSvc=J,this.getLocaleTextFunc=Q}getMenuItem(){let z=this.getLocaleTextFunc(),J=(Q,Z,$,X,Y=!1)=>{return{name:z(Q,Z+"‎"),action:()=>this.chartSvc.createPivotChart({chartType:$}),_key:X,_enterprise:Y}};return{name:z("pivotChart","Pivot Chart"),_key:"pivotChart",subMenu:[{_key:"pivotColumnChart",name:z("columnChart","Column"),subMenu:[J("groupedColumn","Grouped","groupedColumn","pivotGroupedColumn"),J("stackedColumn","Stacked","stackedColumn","pivotStackedColumn"),J("normalizedColumn","100% Stacked","normalizedColumn","pivotNormalizedColumn")]},{_key:"pivotBarChart",name:z("barChart","Bar"),subMenu:[J("groupedBar","Grouped","groupedBar","pivotGroupedBar"),J("stackedBar","Stacked","stackedBar","pivotStackedBar"),J("normalizedBar","100% Stacked","normalizedBar","pivotNormalizedBar")]},{_key:"pivotPieChart",name:z("pieChart","Pie"),subMenu:[J("pie","Pie","pie","pivotPie"),J("donut","Donut","donut","pivotDonut")]},{_key:"pivotLineChart",name:z("lineChart","Line"),subMenu:[J("lineChart","Line","line","pivotLineChart"),J("stackedLine","Stacked","stackedLine","pivotStackedLine"),J("normalizedLine","100% Stacked","normalizedLine","pivotNormalizedLine")]},{_key:"pivotAreaChart",name:z("areaChart","Area"),subMenu:[J("areaChart","Area","area","pivotArea"),J("stackedArea","Stacked","stackedArea","pivotStackedArea"),J("normalizedArea","100% Stacked","normalizedArea","pivotNormalizedArea")]},{_key:"pivotXYChart",name:z("xyChart","X Y (Scatter)"),subMenu:[J("scatter","Scatter","scatter","pivotScatter"),J("bubble","Bubble","bubble","pivotBubble")]},{_key:"pivotStatisticalChart",_enterprise:!1,name:z("statisticalChart","Statistical"),subMenu:[J("histogramChart","Histogram","histogram","pivotHistogram",!1)]},{_key:"pivotHierarchicalChart",_enterprise:!0,name:z("hierarchicalChart","Hierarchical"),subMenu:[J("treemapChart","Treemap","treemap","pivotTreemap",!0),J("sunburstChart","Sunburst","sunburst","pivotSunburst",!0)]},{_key:"pivotFunnel",name:z("funnel","Funnel"),subMenu:[J("funnel","Funnel","funnel","pivotFunnel"),J("coneFunnel","Cone Funnel","coneFunnel","pivotConeFunnel"),J("pyramid","Pyramid","pyramid","pivotPyramid")]},{_key:"pivotCombinationChart",name:z("combinationChart","Combination"),subMenu:[J("columnLineCombo","Column & Line","columnLineCombo","pivotColumnLineCombo"),J("AreaColumnCombo","Area & Column","areaColumnCombo","pivotAreaColumnCombo")]}],icon:h("chart",this.beans,void 0)}}getConfigLookup(){return{columnGroup:{_key:"pivotColumnChart",column:"pivotGroupedColumn",stackedColumn:"pivotStackedColumn",normalizedColumn:"pivotNormalizedColumn"},barGroup:{_key:"pivotBarChart",bar:"pivotGroupedBar",stackedBar:"pivotStackedBar",normalizedBar:"pivotNormalizedBar"},pieGroup:{_key:"pivotPieChart",pie:"pivotPie",donut:"pivotDonut",doughnut:"pivotDonut"},lineGroup:{_key:"pivotLineChart",line:"pivotLineChart",stackedLine:"pivotStackedLine",normalizedLine:"pivotNormalizedLine"},areaGroup:{_key:"pivotAreaChart",area:"pivotArea",stackedArea:"pivotStackedArea",normalizedArea:"pivotNormalizedArea"},scatterGroup:{_key:"pivotXYChart",bubble:"pivotBubble",scatter:"pivotScatter"},combinationGroup:{_key:"pivotCombinationChart",columnLineCombo:"pivotColumnLineCombo",areaColumnCombo:"pivotAreaColumnCombo",customCombo:null},hierarchicalGroup:{_key:"pivotHierarchicalChart",treemap:"pivotTreemap",sunburst:"pivotSunburst"},statisticalGroup:{_key:"pivotStatisticalChart",histogram:"pivotHistogram",rangeBar:null,rangeArea:null,boxPlot:null},funnelGroup:{_key:"pivotFunnel",funnel:"pivotFunnel",coneFunnel:"pivotConeFunnel",pyramid:"pivotPyramid"},polarGroup:null,specializedGroup:null}}},Cj=class{constructor(z,J,Q){this.beans=z,this.chartSvc=J,this.getLocaleTextFunc=Q}getMenuItem(){let z=this.getLocaleTextFunc(),J=(Q,Z,$,X,Y=!1)=>{return{name:z(Q,Z),action:()=>this.chartSvc.createChartFromCurrentRange($),_key:X,_enterprise:Y}};return{name:z("chartRange","Chart Range"),_key:"chartRange",subMenu:[{name:z("columnChart","Column"),subMenu:[J("groupedColumn","Grouped","groupedColumn","rangeGroupedColumn"),J("stackedColumn","Stacked","stackedColumn","rangeStackedColumn"),J("normalizedColumn","100% Stacked","normalizedColumn","rangeNormalizedColumn")],_key:"rangeColumnChart"},{name:z("barChart","Bar"),subMenu:[J("groupedBar","Grouped","groupedBar","rangeGroupedBar"),J("stackedBar","Stacked","stackedBar","rangeStackedBar"),J("normalizedBar","100% Stacked","normalizedBar","rangeNormalizedBar")],_key:"rangeBarChart"},{name:z("pieChart","Pie"),subMenu:[J("pie","Pie","pie","rangePie"),J("donut","Donut","donut","rangeDonut")],_key:"rangePieChart"},{name:z("lineChart","Line"),subMenu:[J("lineChart","Line","line","rangeLineChart"),J("stackedLine","Stacked","stackedLine","rangeStackedLine"),J("normalizedLine","100% Stacked","normalizedLine","rangeNormalizedLine")],_key:"rangeLineChart"},{name:z("areaChart","Area"),subMenu:[J("areaChart","Area","area","rangeArea"),J("stackedArea","Stacked","stackedArea","rangeStackedArea"),J("normalizedArea","100% Stacked","normalizedArea","rangeNormalizedArea")],_key:"rangeAreaChart"},{name:z("xyChart","X Y (Scatter)"),subMenu:[J("scatter","Scatter","scatter","rangeScatter"),J("bubble","Bubble","bubble","rangeBubble")],_key:"rangeXYChart"},{name:z("polarChart","Polar"),subMenu:[J("radarLine","Radar Line","radarLine","rangeRadarLine"),J("radarArea","Radar Area","radarArea","rangeRadarArea"),J("nightingale","Nightingale","nightingale","rangeNightingale"),J("radialColumn","Radial Column","radialColumn","rangeRadialColumn"),J("radialBar","Radial Bar","radialBar","rangeRadialBar")],_key:"rangePolarChart",_enterprise:!0},{name:z("statisticalChart","Statistical"),subMenu:[J("boxPlot","Box Plot","boxPlot","rangeBoxPlot",!0),J("histogramChart","Histogram","histogram","rangeHistogram",!1),J("rangeBar","Range Bar","rangeBar","rangeRangeBar",!0),J("rangeArea","Range Area","rangeArea","rangeRangeArea",!0)],_key:"rangeStatisticalChart",_enterprise:!1},{name:z("hierarchicalChart","Hierarchical"),subMenu:[J("treemap","Treemap","treemap","rangeTreemap"),J("sunburst","Sunburst","sunburst","rangeSunburst")],_key:"rangeHierarchicalChart",_enterprise:!0},{name:z("specializedChart","Specialized"),subMenu:[J("heatmap","Heatmap","heatmap","rangeHeatmap"),J("waterfall","Waterfall","waterfall","rangeWaterfall")],_key:"rangeSpecializedChart",_enterprise:!0},{name:z("funnel","Funnel"),subMenu:[J("funnel","Funnel","funnel","rangeFunnel"),J("coneFunnel","Cone Funnel","coneFunnel","rangeConeFunnel"),J("pyramid","Pyramid","pyramid","rangePyramid")],_key:"rangeFunnel",_enterprise:!0},{name:z("combinationChart","Combination"),subMenu:[J("columnLineCombo","Column & Line","columnLineCombo","rangeColumnLineCombo"),J("AreaColumnCombo","Area & Column","areaColumnCombo","rangeAreaColumnCombo")],_key:"rangeCombinationChart"}],icon:h("chart",this.beans,void 0)}}getConfigLookup(){return{columnGroup:{_key:"rangeColumnChart",column:"rangeGroupedColumn",stackedColumn:"rangeStackedColumn",normalizedColumn:"rangeNormalizedColumn"},barGroup:{_key:"rangeBarChart",bar:"rangeGroupedBar",stackedBar:"rangeStackedBar",normalizedBar:"rangeNormalizedBar"},pieGroup:{_key:"rangePieChart",pie:"rangePie",donut:"rangeDonut",doughnut:"rangeDonut"},lineGroup:{_key:"rangeLineChart",line:"rangeLineChart",stackedLine:"rangeStackedLine",normalizedLine:"rangeNormalizedLine"},areaGroup:{_key:"rangeAreaChart",area:"rangeArea",stackedArea:"rangeStackedArea",normalizedArea:"rangeNormalizedArea"},scatterGroup:{_key:"rangeXYChart",bubble:"rangeBubble",scatter:"rangeScatter"},polarGroup:{_key:"rangePolarChart",radarLine:"rangeRadarLine",radarArea:"rangeRadarArea",nightingale:"rangeNightingale",radialColumn:"rangeRadialColumn",radialBar:"rangeRadialBar"},statisticalGroup:{_key:"rangeStatisticalChart",boxPlot:"rangeBoxPlot",histogram:"rangeHistogram",rangeBar:"rangeRangeBar",rangeArea:"rangeRangeArea"},hierarchicalGroup:{_key:"rangeHierarchicalChart",treemap:"rangeTreemap",sunburst:"rangeSunburst"},specializedGroup:{_key:"rangeSpecializedChart",heatmap:"rangeHeatmap",waterfall:"rangeWaterfall"},funnelGroup:{_key:"rangeFunnel",funnel:"rangeFunnel",coneFunnel:"rangeConeFunnel",pyramid:"rangePyramid"},combinationGroup:{_key:"rangeCombinationChart",columnLineCombo:"rangeColumnLineCombo",areaColumnCombo:"rangeAreaColumnCombo",customCombo:null}}}},yj=class extends S{constructor(){super(...arguments);this.beanName="colChooserFactory"}createColumnSelectPanel(z,J,Q,Z){let $=z.createManagedBean(new Sq),X=Z??J?.getColDef().columnChooserParams??{},{contractColumnSelection:Y,suppressColumnExpandAll:q,suppressColumnFilter:G,suppressColumnSelectAll:U,suppressSyncLayoutWithGrid:_,columnLayout:H}=X;if($.init(!!Q,C(this.gos,{suppressColumnMove:!1,suppressValues:!1,suppressPivots:!1,suppressRowGroups:!1,suppressPivotMode:!1,contractColumnSelection:!!Y,suppressColumnExpandAll:!!q,suppressColumnFilter:!!G,suppressColumnSelectAll:!!U,suppressSyncLayoutWithGrid:!!H||!!_,onStateUpdated:()=>{}}),"columnMenu"),H)$.setColumnLayout(H);return $}showColumnChooser({column:z,chooserParams:J,eventSource:Q,headerPosition:Z}){this.hideActiveColumnChooser();let $=this.createColumnSelectPanel(this,z,!0,J),X=this.getLocaleTextFunc(),Y=this.beans,{visibleCols:q,focusSvc:G,menuUtils:U}=Y,_=q.allCols.indexOf(z),H=z?G.focusedHeader??Z??null:null;this.activeColumnChooserDialog=this.createBean(new zA({title:X("chooseColumns","Choose Columns"),component:$,width:300,height:300,resizable:!0,movable:!0,centered:!0,closable:!0,afterGuiAttached:()=>{O0(Y,$.getGui())?.focus({preventScroll:!0}),this.dispatchVisibleChangedEvent(!0,z)},closedCallback:(W)=>{let B=this.activeColumnChooser.getGui();if(this.destroyBean(this.activeColumnChooser),this.activeColumnChooser=void 0,this.activeColumnChooserDialog=void 0,this.dispatchVisibleChangedEvent(!1,z),z)U.restoreFocusOnClose({column:z,headerPosition:H,columnIndex:_,eventSource:Q},B,W,!0)},postProcessPopupParams:{type:"columnChooser",column:z,eventSource:Q}})),this.activeColumnChooser=$}hideActiveColumnChooser(){this.destroyBean(this.activeColumnChooserDialog)}dispatchVisibleChangedEvent(z,J){this.eventSvc.dispatchEvent({type:"columnMenuVisibleChanged",visible:z,switchingTab:!1,key:"columnChooser",column:J??null})}},bj={pinSubMenu:"PinnedColumn",pinLeft:"PinnedColumn",pinRight:"PinnedColumn",clearPinned:"PinnedColumn",pinRowSubMenu:"PinnedRow",pinBottom:"PinnedRow",pinTop:"PinnedRow",unpinRow:"PinnedRow",valueAggSubMenu:"SharedAggregation",autoSizeThis:"ColumnAutoSize",autoSizeAll:"ColumnAutoSize",rowGroup:"SharedRowGrouping",rowUnGroup:"SharedRowGrouping",resetColumns:"CommunityCore",expandAll:["ClientSideRowModelHierarchy","ServerSideRowModel"],contractAll:["ClientSideRowModelHierarchy","ServerSideRowModel"],copy:"Clipboard",copyWithHeaders:"Clipboard",copyWithGroupHeaders:"Clipboard",cut:"Clipboard",paste:"Clipboard",export:["CsvExport","ExcelExport"],csvExport:"CsvExport",excelExport:"ExcelExport",separator:"CommunityCore",pivotChart:"IntegratedCharts",chartRange:"IntegratedCharts",columnFilter:"ColumnFilter",columnChooser:"ColumnMenu",sortAscending:"Sort",sortDescending:"Sort",sortAbsoluteAscending:"Sort",sortAbsoluteDescending:"Sort",sortUnSort:"Sort"};function xj(z,J){let Q=bj[J];if(Q)z.assertModuleRegistered(Q,`menu item '${J}'`)}var U1="separator";function Aq(z,J){if(!z)return;for(let Q=z.length-2;Q>=0;Q--){let Z=z[Q]===J,$=z[Q+1]===J;if(Z&&$)z.splice(Q+1,1)}}var wj={sortAscending:{fallback:"Sort Ascending",getSortDef:()=>({type:"default",direction:"asc"})},sortDescending:{fallback:"Sort Descending",getSortDef:()=>({type:"default",direction:"desc"})},sortAbsoluteAscending:{fallback:"Sort Absolute Ascending",getSortDef:()=>({type:"absolute",direction:"asc"})},sortAbsoluteDescending:{fallback:"Sort Absolute Descending",getSortDef:()=>({type:"absolute",direction:"desc"})},sortUnSort:{fallback:"Clear Sort",getSortDef:(z)=>({type:A4(z.getSortDef()?.type),direction:null})}},Nj=class extends S{constructor(){super(...arguments);this.beanName="menuItemMapper"}mapWithStockItems(z,J,Q,Z,$){if(!z)return[];let X=[],Y=this.getLocaleTextFunc(),{beans:q,gos:G}=this,{pinnedCols:U,colAutosize:_,aggFuncSvc:H,rowGroupColsSvc:W,colNames:B,colModel:E,clipboardSvc:K,expansionSvc:F,focusSvc:L,csvCreator:D,excelCreator:M,menuSvc:f,colChooserFactory:A,sortSvc:R,chartMenuItemMapper:O,valueColsSvc:v,pinnedRowModel:I}=q,b=(m,g,e,t)=>{switch(xj(G,m),m){case"pinSubMenu":return U&&g?{name:Y("pinColumn","Pin Column"),icon:h("menuPin",q,null),subMenu:["clearPinned","pinLeft","pinRight"]}:null;case"pinLeft":return U&&g?{name:Y("pinLeft","Pin Left"),action:()=>U.setColsPinned([g],"left",t),checked:!!g&&g.isPinnedLeft()}:null;case"pinRight":return U&&g?{name:Y("pinRight","Pin Right"),action:()=>U.setColsPinned([g],"right",t),checked:!!g&&g.isPinnedRight()}:null;case"clearPinned":return U&&g?{name:Y("noPin","No Pin"),action:()=>U.setColsPinned([g],null,t),checked:!!g&&!g.isPinned()}:null;case"pinRowSubMenu":{let u=G.get("enableRowPinning"),Q0=[],s=Q?.rowPinned??Q?.pinnedSibling?.rowPinned;if(s)Q0.push("unpinRow");if(u&&u!=="bottom"&&s!="top")Q0.push("pinTop");if(u&&u!=="top"&&s!="bottom")Q0.push("pinBottom");return I?.isManual()?{name:Y("pinRow","Pin Row"),icon:h("rowPin",q,g),subMenu:Q0}:null}case"pinTop":return I?.isManual()?{name:Y("pinTop","Pin to Top"),icon:h("rowPinTop",q,g),action:({node:u,column:Q0})=>u&&I.pinRow(u,"top",Q0)}:null;case"pinBottom":return I?.isManual()?{name:Y("pinBottom","Pin to Bottom"),icon:h("rowPinBottom",q,g),action:({node:u,column:Q0})=>u&&I.pinRow(u,"bottom",Q0)}:null;case"unpinRow":return I?.isManual()?{name:Y("unpinRow","Unpin Row"),icon:h("rowUnpin",q,g),action:({node:u,column:Q0})=>u&&I.pinRow(u,null,Q0)}:null;case"valueAggSubMenu":if(H&&v&&(g?.isPrimary()||g?.getColDef().pivotValueColumn))return{name:Y("valueAggregation","Value Aggregation"),icon:h("menuValue",q,null),subMenu:gj(g,H,v,Y),disabled:G.get("functionsReadOnly")};else return null;case"autoSizeThis":return _?{name:Y("autosizeThisColumn","Autosize This Column"),action:()=>g&&_.autoSizeColumn(g,t,G.get("skipHeaderOnAutoSize"))}:null;case"autoSizeAll":return _?{name:Y("autosizeAllColumns","Autosize All Columns"),action:()=>_.autoSizeAllColumns({source:t,skipHeader:G.get("skipHeaderOnAutoSize")})}:null;case"rowGroup":return W?{name:z6(Y,"groupBy",B.getDisplayNameForColumn(g,"header")),disabled:G.get("functionsReadOnly")||g?.isRowGroupActive()||!g?.getColDef().enableRowGroup,action:()=>W.addColumns([g],t),icon:h("menuAddRowGroup",q,null)}:null;case"rowUnGroup":if(W&&G.isModuleRegistered("SharedRowGrouping")){let u=g?.getColDef().showRowGroup,Q0=G.get("groupLockGroupColumns"),s,P0,T0;if(u===!0)s=Y("ungroupAll","Un-Group All"),P0=G.get("functionsReadOnly")||Q0===-1||Q0>=(W.columns.length??0),T0=()=>W.setColumns(W.columns.slice(0,Q0),t);else if(typeof u==="string"){let V0=E.getColDefCol(u),uz=V0!=null?B.getDisplayNameForColumn(V0,"header"):u;s=z6(Y,"ungroupBy",uz),P0=G.get("functionsReadOnly")||Q6(V0,q),T0=()=>{W.removeColumns([u],t)}}else s=z6(Y,"ungroupBy",B.getDisplayNameForColumn(g,"header")),P0=G.get("functionsReadOnly")||!g?.isRowGroupActive()||!g?.getColDef().enableRowGroup||Q6(g,q),T0=()=>W.removeColumns([g],t);return{name:s,disabled:P0,action:T0,icon:h("menuRemoveRowGroup",q,null)}}else return null;case"resetColumns":return{name:Y("resetColumns","Reset Columns"),action:()=>C$(q,t)};case"expandAll":return F?{name:Y("expandAll","Expand All Row Groups"),action:()=>F.expandAll(!0)}:null;case"contractAll":return F?{name:Y("collapseAll","Collapse All Row Groups"),action:()=>F.expandAll(!1)}:null;case"copy":return K?{name:Y("copy","Copy"),shortcut:Y("ctrlC","Ctrl+C"),icon:h("clipboardCopy",q,null),action:()=>K.copyToClipboard()}:null;case"copyWithHeaders":return K?{name:Y("copyWithHeaders","Copy with Headers"),icon:h("clipboardCopy",q,null),action:()=>K.copyToClipboard({includeHeaders:!0})}:null;case"copyWithGroupHeaders":return K?{name:Y("copyWithGroupHeaders","Copy with Group Headers"),icon:h("clipboardCopy",q,null),action:()=>K.copyToClipboard({includeHeaders:!0,includeGroupHeaders:!0})}:null;case"cut":if(K){let u=L.getFocusedCell(),Q0=u?S0(q,u):null,s=Q0?u?.column.isCellEditable(Q0):!1;return{name:Y("cut","Cut"),shortcut:Y("ctrlX","Ctrl+X"),icon:h("clipboardCut",q,null),disabled:!s||G.get("suppressCutToClipboard"),action:()=>K.cutToClipboard(void 0,"contextMenu")}}else return null;case"paste":if(K){let u=G.get("suppressClipboardApi")||G.get("suppressClipboardPaste")||!g||!Q||!g.isCellEditable(Q)||g.isSuppressPaste(Q);return{name:Y("paste","Paste"),shortcut:Y("ctrlV","Ctrl+V"),icon:h("clipboardPaste",q,null),disabled:u,action:()=>K.pasteFromClipboard()}}else return null;case"export":{let u=[];if(!G.get("suppressCsvExport")&&D)u.push("csvExport");if(!G.get("suppressExcelExport")&&M)u.push("excelExport");return u.length?{name:Y("export","Export"),subMenu:u,icon:h("save",q,null)}:null}case"csvExport":return D?{name:Y("csvExport","CSV Export"),icon:h("csvExport",q,null),action:()=>D.exportDataAsCsv()}:null;case"excelExport":return M?{name:Y("excelExport","Excel Export"),icon:h("excelExport",q,null),action:()=>M.exportDataAsExcel()}:null;case"separator":return m;case"pivotChart":case"chartRange":return O.getChartItems(m);case"columnFilter":return f&&g?{name:Y("columnFilter","Column Filter"),icon:h("filter",q,null),action:()=>f.showFilterMenu({column:g,buttonElement:e(),containerType:"columnFilter",positionBy:"button"})}:null;case"columnChooser":{let u=L.focusedHeader;return A?{name:Y("columnChooser","Choose Columns"),icon:h("columns",q,null),action:()=>A.showColumnChooser({column:g,eventSource:e(),headerPosition:u})}:null}case"sortUnSort":case"sortAscending":case"sortDescending":case"sortAbsoluteAscending":case"sortAbsoluteDescending":{if(!R||!g)return null;let{fallback:u,getSortDef:Q0}=wj[m];return{name:Y(m,u),icon:h(m,q,null),action:()=>R.setSortForColumn(g,Q0(g),!1,t)}}default:return V(176,{key:m}),null}};for(let m of z){let g;if(typeof m==="string")g=b(m,J,Z,$);else g={...m};if(!g)continue;let e=g,{subMenu:t}=e;if(t&&t instanceof Array)e.subMenu=this.mapWithStockItems(t,J,Q,Z,$);if(g!=null)X.push(g)}return Aq(X,U1),X}};function gj(z,J,Q,Z){let $;if(z.isPrimary())$=z;else{let Y=z.getColDef().pivotValueColumn;$=P(Y)?Y:void 0}let X=[];if($){let Y=$.isValueActive(),q=J.getFuncNames($);X.push({name:Z("noAggregation","None"),action:()=>{Q.removeColumns([$],"contextMenu"),Q.setColumnAggFunc($,void 0,"contextMenu")},checked:!Y});for(let G of q)X.push({name:Z(G,J.getDefaultFuncLabel(G)),action:()=>{Q.setColumnAggFunc($,G,"contextMenu"),Q.addColumns([$],"contextMenu")},checked:Y&&$.getAggFunc()===G})}return X}var hj=class extends S{constructor(){super(...arguments);this.beanName="colMenuFactory"}createMenu(z,J,Q,Z){let $=z.createManagedBean(new Mq(0,{column:Q??null,node:null,value:null})),X=this.beans.menuItemMapper.mapWithStockItems(J,Q??null,null,Z,"columnMenu");return $.addMenuItems(X),$}getMenuItems(z=null,J=null){let Q=this.getDefaultMenuOptions(z),Z,$=(z?.getColDef()??J?.getColGroupDef())?.mainMenuItems;if(Array.isArray($))Z=$;else if(typeof $==="function")Z=$(C(this.gos,{column:z,columnGroup:J,defaultItems:Q}));else{let X=this.gos.getCallback("getMainMenuItems");if(X)Z=X({column:z,columnGroup:J,defaultItems:Q});else Z=Q}return Aq(Z,U1),Z}getDefaultMenuOptions(z){let J=[],{beans:Q,gos:Z}=this,{colChooserFactory:$,rowGroupColsSvc:X,colModel:Y,expansionSvc:q,sortSvc:G,menuSvc:U,pinnedCols:_,aggFuncSvc:H,colAutosize:W}=Q,B=F0(Z),E=()=>{if(!B&&$)J.push("columnChooser");J.push("resetColumns")};if(!z)return E(),J;let{colDef:K}=z,F=_&&!K.lockPinned,L=X?.columns.length??0,D=L>0,M=c4(Z),f=Z.get("treeData"),A=z.isPrimary(),R=!A||H&&z.isAllowValue()&&(D||M||f);if(G&&!B&&z.isSortable()){let{isDefaultSortAllowed:O,isAbsoluteSortAllowed:v,isAbsoluteSort:I,isDefaultSort:b,isAscending:m,isDescending:g,direction:e}=PZ(z,Q);if(O&&!(m&&b))J.push("sortAscending");if(O&&!(g&&b))J.push("sortDescending");if(v&&!(m&&I))J.push("sortAbsoluteAscending");if(v&&!(g&&I))J.push("sortAbsoluteDescending");if(e)J.push("sortUnSort");J.push(U1)}if(U?.isFilterMenuItemEnabled(z))J.push("columnFilter"),J.push(U1);if(F)J.push("pinSubMenu");if(R)J.push("valueAggSubMenu");if(F||R)J.push(U1);if(W){if(!K.suppressAutoSize)J.push("autoSizeThis");J.push("autoSizeAll"),J.push(U1)}if(X&&Z.isModuleRegistered("SharedRowGrouping")){let O=J.length;if(K.showRowGroup)J.push("rowUnGroup");else if(z.isAllowRowGroup()&&A)if(z.isRowGroupActive()){if(!Q6(z,Q))J.push("rowUnGroup")}else J.push("rowGroup");if(J.length>O)J.push(U1)}if(E(),q&&(o(Z)||Z.get("ssrmExpandAllAffectsAllRows"))&&(f||L>(Y.isPivotMode()?1:0)))J.push("expandAll"),J.push("contractAll");return J}},jY="ag-context-menu-open",uj=class extends S{constructor(){super(...arguments);this.beanName="contextMenuSvc",this.focusedCell=null}postConstruct(){this.menu=this.createManagedBean(new iR({menuItemCallbacks:U7,getMenuItems:this.getMenuItems.bind(this),mapMenuItems:this.mapWithStockItems.bind(this),beforeMenuOpen:this.beforeMenuOpen.bind(this),onMenuOpen:this.onMenuOpen.bind(this),onMenuClose:this.onMenuClose.bind(this),afterMenuDestroyed:this.afterMenuDestroyed.bind(this),onVisibleChanged:this.dispatchVisibleChangedEvent.bind(this),shouldBlockMenuOpen:()=>!!this.beans.overlays?.exclusive}))}hideActiveMenu(){this.menu.hideActiveMenu()}getMenuItems(z,J){let{column:Q,node:Z,value:$}=z,X=[],{clipboardSvc:Y,chartSvc:q,csvCreator:G,excelCreator:U,colModel:_,rangeSvc:H,gos:W}=this.beans;if(P(Z)&&Y){if(Q){if(!W.get("suppressCutToClipboard"))X.push("cut");X.push("copy","copyWithHeaders","copyWithGroupHeaders","paste","separator")}}if(W.get("enableCharts")&&q){if(_.isPivotMode())X.push("pivotChart");if(H&&!H.isEmpty())X.push("chartRange")}if(P(Z)){let F=W.get("enableRowPinning"),L=W.get("isRowPinnable");if(F){let R=Z.level>-1&&Z.footer,O=Z.level===-1&&Z.footer,v=c4(W);if(O&&!(v==="pinnedBottom"||v==="pinnedTop")||!O&&!R){if(L?.(Z)??!0)X.push("pinRowSubMenu")}}let D=W.get("suppressExcelExport")||!U,M=W.get("suppressCsvExport")||!G;if(!a4()&&(!D||!M))X.push("export")}let B=X.length?X:void 0,E=Q?.getColDef().contextMenuItems;if(Array.isArray(E))return E;if(typeof E==="function")return E(C(W,{column:Q,node:Z,value:$,defaultItems:B,event:J}));return W.getCallback("getContextMenuItems")?.({column:Q,node:Z,value:$,defaultItems:B,event:J})??X}getContextMenuPosition(z,J){let Q=this.getRowCtrl(z),Z=this.getCellGui(Q,J);if(!Z)return{x:0,y:Q?.getRowYPosition()??0};let $=Z.getBoundingClientRect();return{x:$.x+$.width/2,y:$.y+$.height/2}}showContextMenu(z){let J=z.rowNode??null,Q=z.column??null,{anchorToElement:Z,value:$,source:X}=z;if(J&&Q&&$==null)$=this.beans.valueSvc.getValueForDisplay({column:Q,node:J,from:"edit"}).value;if(Z==null)Z=this.getContextMenuAnchorElement(J,Q);this.beans.menuUtils.onContextMenu({mouseEvent:z.mouseEvent??null,touchEvent:z.touchEvent??null,showMenuCallback:(Y)=>this.menu.showMenu({node:J,column:Q,value:$},Y,Z),source:X})}handleContextMenuMouseEvent(z,J,Q,Z){let $=Z?.rowNode??Q?.rowNode??null,X=Z?.column??Q?.findFullWidthInfoForEvent(z||J)?.column??null,{valueSvc:Y,ctrlsSvc:q}=this.beans,G=X?Y.getValue(X,$,"edit"):null,U=q.getGridBodyCtrl(),_=Z?Z.eGui:U.eGridBody;this.showContextMenu({mouseEvent:z,touchEvent:J,rowNode:$,column:X,value:G,anchorToElement:_,source:"ui"})}beforeMenuOpen(z){if(!z.column)this.beans.focusSvc.clearFocusedCell()}onMenuOpen(){let{ctrlsSvc:z,focusSvc:J}=this.beans;z.getGridBodyCtrl().eGridBody.classList.add(jY),this.focusedCell=J.getFocusedCell()}onMenuClose(){this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody.classList.remove(jY)}afterMenuDestroyed(){let{beans:z,focusedCell:J}=this;iZ(z,J)}dispatchVisibleChangedEvent(z,J){this.eventSvc.dispatchEvent({type:"contextMenuVisibleChanged",visible:z,source:J})}getRowCtrl(z){let{rowIndex:J,rowPinned:Q}=z||{};if(J==null)return;return this.beans.rowRenderer.getRowByPosition({rowIndex:J,rowPinned:Q})||void 0}getCellGui(z,J){if(!z||!J)return;return z.getCellCtrl(J)?.eGui||void 0}getContextMenuAnchorElement(z,J){let Q=this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody,Z=this.getRowCtrl(z);if(!Z)return Q;let $=this.getCellGui(Z,J);if($)return $;if(Z.isFullWidth())return Z.getFullWidthElement();return Q}mapWithStockItems(z,J,Q){let{column:Z,node:$}=J;return this.beans.menuItemMapper.mapWithStockItems(z,Z,$,Q,"contextMenu")}},xz="filterMenuTab",wz="generalMenuTab",_1="columnsMenuTab",xJ=[wz,xz,_1],mj=class extends S{constructor(){super(...arguments);this.beanName="enterpriseMenuFactory"}hideActiveMenu(){this.destroyBean(this.activeMenu)}showMenuAfterMouseEvent(z,J,Q,Z,$){let{column:X,columnGroup:Y}=this.splitColumnOrGroup(z),q=$?"filterMenuTab":void 0;this.showMenu(X,Y,(G)=>{let U=G.getGui();if(this.beans.popupSvc.positionPopupUnderMouseEvent({type:Q,additionalParams:{column:X},mouseEvent:J,ePopup:U}),q)G.showTab?.(q);this.dispatchVisibleChangedEvent(!0,!1,X,Y,q)},Q,q,void 0,J.target,Z)}splitColumnOrGroup(z){let J=z&&G4(z);return{column:J?z:void 0,columnGroup:J?void 0:z}}showMenuAfterButtonClick(z,J,Q,Z,$){let X=-1,Y="left";if(this.gos.get("enableRtl"))X=1,Y="right";let q=$?"filterMenuTab":void 0,G=q?[q]:void 0,U=F0(this.gos),_=(U?9:4)*X,H=U?-23:4,{column:W,columnGroup:B}=this.splitColumnOrGroup(z);this.showMenu(W,B,(E)=>{let K=E.getGui();if(this.beans.popupSvc.positionPopupByComponent({type:Q,additionalParams:{column:W},eventSource:J,ePopup:K,alignSide:Y,nudgeX:_,nudgeY:H,position:"under",keepWithinBounds:!0}),q)E.showTab?.(q);this.dispatchVisibleChangedEvent(!0,!1,W,B,q)},Q,q,G,J,Z)}showMenu(z,J,Q,Z,$,X,Y,q){let G=this.getMenuParams(z,J,X,Y);if(!G)return;let{menu:U,eMenuGui:_,anchorToElement:H,restoreFocusParams:W}=G,B=[],{menuUtils:E,popupSvc:K}=this.beans;B.push((L)=>{let D=U.getGui();if(this.destroyBean(U),z)O2(z,!1,"contextMenu"),E.restoreFocusOnClose(W,D,L);q?.()});let F=this.getLocaleTextFunc();if(K.addPopup({modal:!0,eChild:_,closeOnEsc:!0,closedCallback:(L)=>{for(let D of B)D(L);this.dispatchVisibleChangedEvent(!1,!1,z,J,$)},afterGuiAttached:(L)=>U.afterGuiAttached(Object.assign({},{container:Z},L)),positionCallback:$?()=>Q(U):void 0,ariaLabel:F("ariaLabelColumnMenu","Column Menu")}),!$)U.showTabBasedOnPreviousSelection?.(),Q(U);if(AZ(this.gos)){let L=K.setPopupPositionRelatedToElement(_,H);if(L&&z)this.addStopAnchoring(L,z,B)}if(U.addEventListener("tabSelected",(L)=>{this.dispatchVisibleChangedEvent(!1,!0,z),this.lastSelectedTab=L.key,this.dispatchVisibleChangedEvent(!0,!0,z)}),z)O2(z,!0,"contextMenu");this.activeMenu=U,U.addEventListener("destroyed",()=>{if(this.activeMenu===U)this.activeMenu=null})}addStopAnchoring(z,J,Q){z.then((Z)=>{J.__addEventListener("leftChanged",Z),J.__addEventListener("visibleChanged",Z),Q.push(()=>{J.__removeEventListener("leftChanged",Z),J.__removeEventListener("visibleChanged",Z)})})}getMenuParams(z,J,Q,Z){let{focusSvc:$,visibleCols:X,ctrlsSvc:Y}=this.beans,q={column:z,headerPosition:$.focusedHeader,columnIndex:X.allCols.indexOf(z),eventSource:Z},G=this.createMenu(z,J,q,Q,Z);return G?{menu:G,eMenuGui:G.getGui(),anchorToElement:Z||Y.getGridBodyCtrl().eGridBody,restoreFocusParams:q}:void 0}createMenu(z,J,Q,Z,$){if(F0(this.gos))return this.createBean(new cj(z,Q,this.lastSelectedTab,Z,$));else{let X=this.beans.colMenuFactory.getMenuItems(z,J);return X.length?this.createBean(new ij(X,z,Q,$)):void 0}}dispatchVisibleChangedEvent(z,J,Q,Z,$){this.eventSvc.dispatchEvent({type:"columnMenuVisibleChanged",visible:z,switchingTab:J,key:this.lastSelectedTab??$??(F0(this.gos)?wz:"columnMenu"),column:Q??null,columnGroup:Z??null})}isMenuEnabled(z){if(!F0(this.gos))return!0;let J=!this.beans.filterManager?.isFilterAllowed(z),Q=z.getColDef().menuTabs??xJ;return(J&&Q.includes(xz)?Q.length-1:Q.length)>0}showMenuAfterContextMenuEvent(z,J,Q){this.beans.menuUtils.onContextMenu({mouseEvent:J,touchEvent:Q,source:"ui",showMenuCallback:(Z)=>{return this.showMenuAfterMouseEvent(z,Z,"columnMenu"),!0}})}},cj=class extends S{constructor(z,J,Q,Z,$){super();this.column=z,this.restoreFocusParams=J,this.initialSelection=Q,this.restrictTo=Z,this.sourceElement=$,this.tabFactories={},this.includeChecks={};let{tabFactories:X,includeChecks:Y}=this;X[wz]=this.createMainPanel.bind(this),X[xz]=this.createFilterPanel.bind(this),X[_1]=this.createColumnsPanel.bind(this),Y[wz]=()=>!0,Y[xz]=()=>z?!!this.beans.filterManager?.isFilterAllowed(z):!1,Y[_1]=()=>!0}postConstruct(){let z=this.getTabsToCreate().map((Q)=>this.createTab(Q)),J=new rR({items:z,cssClass:"ag-menu",onActiveItemClicked:this.onHidePopup.bind(this),onItemClicked:this.onTabItemClicked.bind(this)});this.tabbedLayout=this.createBean(J),this.mainMenuList?.setParentComponent(J),this.addDestroyFunc(()=>this.destroyBean(J))}getTabsToCreate(){if(this.restrictTo)return this.restrictTo;return(this.column?.getColDef().menuTabs??xJ).filter((z)=>this.isValidMenuTabItem(z)&&this.isNotSuppressed(z))}isValidMenuTabItem(z){let J=!0,Q=xJ;if(this.restrictTo!=null)J=this.restrictTo.indexOf(z)>-1,Q=this.restrictTo;if(J=J&&xJ.indexOf(z)>-1,!J)V(175,{menuTabName:z,itemsToConsider:Q});return J}isNotSuppressed(z){return this.includeChecks[z]()}createTab(z){return this.tabFactories[z]()}showTabBasedOnPreviousSelection(){this.showTab(this.initialSelection)}showTab(z){let{tabItemColumns:J,tabbedLayout:Q,tabItemFilter:Z,tabItemGeneral:$}=this;if(J&&z===_1)Q.showItem(J);else if(Z&&z===xz)Q.showItem(Z);else if($&&z===wz)Q.showItem($);else Q.showFirstItem()}onTabItemClicked(z){let J=null;switch(z.item){case this.tabItemColumns:J=_1;break;case this.tabItemFilter:J=xz;break;case this.tabItemGeneral:J=wz;break}if(J)this.activateTab(J)}activateTab(z){let J={type:"tabSelected",key:z};this.dispatchLocalEvent(J)}createMainPanel(){let{beans:z,column:J}=this,Q=z.colMenuFactory,Z=Q.createMenu(this,Q.getMenuItems(J),this.column,()=>this.sourceElement??this.getGui());this.mainMenuList=Z,Z.addEventListener("closeMenu",this.onHidePopup.bind(this));let $={title:h("legacyMenu",z,J),titleLabel:wz.replace("MenuTab",""),bodyPromise:N.resolve(Z.getGui()),name:wz};return this.tabItemGeneral=$,$}onHidePopup(z){this.beans.menuUtils.closePopupAndRestoreFocusOnSelect(this.hidePopupFunc,this.restoreFocusParams,z)}createFilterPanel(){let z=this.column?this.createBean(new f5(this.column,"COLUMN_MENU")):null;if(this.filterComp=z,!z?.hasFilter())r(119);let J=(Z)=>z?.afterGuiAttached(Z),Q=()=>z?.afterGuiDetached();return this.tabItemFilter={title:h("filterTab",this.beans,this.column),titleLabel:xz.replace("MenuTab",""),bodyPromise:N.resolve(z?.getGui()),afterAttachedCallback:J,afterDetachedCallback:Q,name:xz},this.tabItemFilter}createColumnsPanel(){let z=z0({tag:"div",cls:"ag-menu-column-select-wrapper"}),{beans:J,column:Q}=this,$=J.colChooserFactory.createColumnSelectPanel(this,Q).getGui();$.classList.add("ag-menu-column-select"),z.appendChild($);let X={title:h("columns",J,Q),titleLabel:_1.replace("MenuTab",""),bodyPromise:N.resolve(z),name:_1};return this.tabItemColumns=X,X}afterGuiAttached(z){let{container:J,hidePopup:Q}=z;if(this.tabbedLayout.setAfterAttachedParams({container:J,hidePopup:Q}),Q)this.hidePopupFunc=Q,this.addDestroyFunc(Q)}getGui(){return this.tabbedLayout.getGui()}destroy(){super.destroy(),this.destroyBean(this.filterComp)}},ij=class extends x{constructor(z,J,Q,Z){super({tag:"div",ref:"eColumnMenu",cls:"ag-menu ag-column-menu",role:"presentation"});this.menuItems=z,this.column=J,this.restoreFocusParams=Q,this.sourceElement=Z,this.eColumnMenu=j}postConstruct(){let z=this.beans.colMenuFactory.createMenu(this,this.menuItems,this.column,()=>this.sourceElement??this.getGui());this.mainMenuList=z,z.addEventListener("closeMenu",this.onHidePopup.bind(this)),this.eColumnMenu.appendChild(z.getGui())}onHidePopup(z){this.beans.menuUtils.closePopupAndRestoreFocusOnSelect(this.hidePopupFunc,this.restoreFocusParams,z)}afterGuiAttached({hidePopup:z}){if(z)this.hidePopupFunc=z,this.addDestroyFunc(z);E0(this.mainMenuList.getGui())}};function pj(z,J){let{contextMenuSvc:Q}=z;if(!Q)return;let{rowNode:Z,column:$,value:X,x:Y,y:q}=J||{},{x:G,y:U}=Q.getContextMenuPosition(Z,$);if(Y!=null)G=Y;if(q!=null)U=q;Q.showContextMenu({mouseEvent:new MouseEvent("mousedown",{clientX:G,clientY:U}),rowNode:Z,column:$,value:X,source:"api"})}function nj(z,J){z.colChooserFactory?.showColumnChooser({chooserParams:J})}function dj(z){z.colChooserFactory?.hideActiveColumnChooser()}var rj=class extends S{constructor(){super(...arguments);this.beanName="menuUtils"}restoreFocusOnClose(z,J,Q,Z){let{eventSource:$}=z,X=Q instanceof KeyboardEvent;if(!Z&&!X||!$)return;let Y=n(this.beans);if(!J.contains(Y)&&!Vz(this.beans))return;this.focusHeaderCell(z)}closePopupAndRestoreFocusOnSelect(z,J,Q){let Z;if(Q?.keyboardEvent)Z=Q.keyboardEvent;z(Z&&{keyboardEvent:Z});let $=this.beans,X=$.focusSvc,Y=X.getFocusedCell();if(Vz($))if(Y){let{rowIndex:q,rowPinned:G,column:U}=Y;X.setFocusedCell({rowIndex:q,column:U,rowPinned:G,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0})}else this.focusHeaderCell(J)}onContextMenu(z){let{mouseEvent:J,touchEvent:Q,showMenuCallback:Z,source:$}=z;if(!this.gos.get("allowContextMenuWithControlKey")){if(J&&(J.ctrlKey||J.metaKey))return}if(J)this.blockMiddleClickScrollsIfNeeded(J);if($==="ui"&&this.gos.get("suppressContextMenu"))return;let X=J??Q.touches[0];if(Z(X)){let Y=J??Q;if(Y?.cancelable)Y.preventDefault()}}async focusHeaderCell(z){let{column:J,columnIndex:Q,headerPosition:Z,eventSource:$}=z,{visibleCols:X,headerNavigation:Y,focusSvc:q}=this.beans,G=await X.allCols.some((U)=>U===J);if(!this.isAlive())return;if(J?.isAlive()&&G&&$&&B0($)){let U=_J($);if(U)Y?.scrollToColumn(J),U.focus()}else if(Z&&Q!==-1){let U=X.allCols,_=U[Q]||y(U);if(_)q.focusHeaderPosition({headerPosition:{headerRowIndex:Z.headerRowIndex,column:_}})}}blockMiddleClickScrollsIfNeeded(z){if(this.gos.get("suppressMiddleClickScrolls")&&z.which===2)z.preventDefault()}},jq={moduleName:"MenuCore",version:$0,beans:[Nj,vj,rj],icons:{chart:"chart",columns:"columns",loadingMenuItems:"loading",menuPin:"pin",menuValue:"aggregation",menuAddRowGroup:"group",menuRemoveRowGroup:"group",clipboardCopy:"copy",clipboardCut:"cut",clipboardPaste:"paste",save:"save",csvExport:"csv",excelExport:"excel",sortAscending:"asc",sortDescending:"desc",sortAbsoluteAscending:"aasc",sortAbsoluteDescending:"adesc",sortUnSort:"none"},dependsOn:[C0,q1,K5,G7]},Oq={moduleName:"ColumnMenu",version:$0,beans:[mj,hj,yj],icons:{ensureColumnVisible:"column-arrow",legacyMenu:"menu",filterTab:"filter",columnSelectClosed:"tree-closed",columnSelectOpen:"tree-open",columnSelectIndeterminate:"tree-indeterminate"},apiFunctions:{showColumnChooser:nj,hideColumnChooser:dj},dependsOn:[jq,p2,n2]},Pq={moduleName:"ContextMenu",version:$0,beans:[uj],apiFunctions:{showContextMenu:pj},dependsOn:[jq]};var W1="__AG_SELECT_ALL__",B1="__AG_ADD_SELECTION_TO_FILTER__",tj=class{constructor(z,J,Q,Z){this.valueSvc=z,this.getValueFormatter=J,this.formatter=Q,this.column=Z,this.displayedKeys=[]}updateDisplayedValuesToAllAvailable(z,J,Q){this.displayedKeys=Array.from(Q)}updateDisplayedValuesToMatchMiniFilter(z,J,Q,Z,$){this.displayedKeys=[];let X=this.getValueFormatter();for(let Y of Q)if(Y==null){if($)this.displayedKeys.push(Y)}else{let q=z(Y),G=this.valueSvc.formatValue(this.column,null,q,X,!1),U=this.formatter(G);if(Z(U))this.displayedKeys.push(Y)}}getDisplayedValueCount(){return this.displayedKeys.length}getDisplayedItem(z){return this.displayedKeys[z]}getSelectAllItem(){return W1}getAddSelectionToFilterItem(){return B1}getDisplayedKeys(){return this.displayedKeys}forEachDisplayedKey(z){this.displayedKeys.forEach(z)}someDisplayedKey(z){return this.displayedKeys.some(z)}hasGroups(){return!1}refresh(){}},sj={tag:"div",cls:"ag-set-filter-item",attrs:{"aria-hidden":"true"},children:[{tag:"span",cls:"ag-set-filter-group-icons",children:[{tag:"span",ref:"eGroupClosedIcon",cls:"ag-set-filter-group-closed-icon"},{tag:"span",ref:"eGroupOpenedIcon",cls:"ag-set-filter-group-opened-icon"},{tag:"span",ref:"eGroupIndeterminateIcon",cls:"ag-set-filter-group-indeterminate-icon"}]},{tag:"ag-checkbox",ref:"eCheckbox",cls:"ag-set-filter-item-checkbox"}]},lj={tag:"div",cls:"ag-set-filter-item",children:[{tag:"ag-checkbox",ref:"eCheckbox",cls:"ag-set-filter-item-checkbox"}]},aj=class extends x{constructor(z){super(z.isGroup?sj:lj,[K4]);this.eCheckbox=j,this.eGroupOpenedIcon=j,this.eGroupClosedIcon=j,this.eGroupIndeterminateIcon=j,this.formattedValue=null,this.focusWrapper=z.focusWrapper,this.value=z.value,this.params=z.params,this.translate=z.translate,this.valueFormatter=z.valueFormatter,this.item=z.item,this.isSelected=z.isSelected,this.isTree=z.isTree,this.depth=z.depth??0,this.isGroup=z.isGroup,this.groupsExist=z.groupsExist,this.isExpanded=z.isExpanded,this.hasIndeterminateExpandState=z.hasIndeterminateExpandState}postConstruct(){if(this.tooltipFeature=this.createOptionalManagedBean(this.beans.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.focusWrapper,getLocation:()=>"setFilterValue",shouldDisplayTooltip:()=>this.shouldDisplayTooltip?.()??!0,getAdditionalParams:()=>{let{colDef:z,column:J}=this.params,Q={colDef:z,column:J,valueFormatted:this.formattedValue??void 0};if(this.isTree)Q.level=this.depth;return Q}})),this.addDestroyFunc(()=>this.destroyCellRendererComponent?.()),this.render(),this.eCheckbox.setLabelEllipsis(!0).setValue(this.isSelected,!0).setDisabled(!!this.params.readOnly).getInputElement().setAttribute("tabindex","-1"),this.refreshVariableAriaLabels(),this.isTree){if(this.depth>0)this.addCss("ag-set-filter-indent-"+this.depth),this.getGui().style.setProperty("--ag-indentation-level",String(this.depth));if(this.isGroup)this.setupExpansion();else if(this.groupsExist)this.addCss("ag-set-filter-add-group-indent");l6(this.getAriaElement(),this.depth+1)}if(this.refreshAriaChecked(),this.params.readOnly)return;this.eCheckbox.onValueChange((z)=>this.onCheckboxChanged(!!z))}getFocusableElement(){return this.focusWrapper}setupExpansion(){let{eGroupClosedIcon:z,eGroupOpenedIcon:J,eGroupIndeterminateIcon:Q,hasIndeterminateExpandState:Z,beans:$}=this;z.appendChild(vz("setFilterGroupClosed",$,null)),J.appendChild(vz("setFilterGroupOpen",$,null));let X=this.onExpandOrContractClicked.bind(this);if(this.addManagedElementListeners(z,{click:X}),this.addManagedElementListeners(J,{click:X}),Z)Q.appendChild(vz("setFilterGroupIndeterminate",$,null)),this.addManagedElementListeners(Q,{click:X});this.setExpandedIcons(),this.refreshAriaExpanded()}onExpandOrContractClicked(){this.setExpanded(!this.isExpanded)}setExpanded(z,J){if(this.isGroup&&z!==this.isExpanded){this.isExpanded=z;let Q={type:"expandedChanged",isExpanded:!!z,item:this.item};if(!J)this.dispatchLocalEvent(Q);this.setExpandedIcons(),this.refreshAriaExpanded()}}setExpandedIcons(){let{isExpanded:z,hasIndeterminateExpandState:J,eGroupClosedIcon:Q,eGroupOpenedIcon:Z,eGroupIndeterminateIcon:$}=this;if(w(Q,J?z===!1:!z),w(Z,z===!0),J)w($,z===void 0)}onCheckboxChanged(z){this.isSelected=z;let J={type:"selectionChanged",isSelected:z,item:this.item};this.dispatchLocalEvent(J),this.refreshVariableAriaLabels(),this.refreshAriaChecked()}toggleSelected(){if(this.params.readOnly)return;this.setSelected(!this.isSelected)}setSelected(z,J){this.isSelected=z,this.eCheckbox.setValue(z,J),this.refreshAriaChecked()}refreshVariableAriaLabels(){if(!this.isTree)return;let z=this.getLocaleTextFunc(),J=this.eCheckbox.getValue(),Q=J===void 0?z("ariaIndeterminate","indeterminate"):J?z("ariaVisible","visible"):z("ariaHidden","hidden"),Z=z("ariaToggleVisibility","Press SPACE to toggle visibility");sz(this.eCheckbox.getInputElement(),void 0),this.eCheckbox.setInputAriaLabel(`${Z} (${Q})`)}setupFixedAriaLabels(z){if(!this.isTree)return;let Q=this.getLocaleTextFunc()("ariaFilterValue","Filter Value"),Z=this.getAriaElement();_0(Z,`${z} ${Q}`),c1(Z,this.eCheckbox.getInputElement().id)}refreshAriaChecked(){let z=this.getAriaElement();e6(z,this.eCheckbox.getValue())}refreshAriaExpanded(){j0(this.getAriaElement(),!!this.isExpanded)}refresh(z,J,Q){if(this.item=z,J!==this.isSelected)this.setSelected(J,!0);this.setExpanded(Q,!0);let{cellRendererComponent:Z,cellRendererParams:$,beans:X,params:Y}=this;if(this.valueFunction){let q=this.valueFunction();if(this.setTooltipAndCellRendererParams(q,q),!Z)this.renderCellWithoutCellRenderer()}if(Z){let q=kz(X.userCompFactory,Y,$);if(!Z.refresh?.(q?.params??$)){let U=Z;this.renderCell(),this.destroyBean(U)}}}render(){let{params:{column:z}}=this,{value:J}=this,Q=null;if(typeof J==="function")this.valueFunction=J,Q=this.valueFunction(),J=Q;else if(this.isTree)Q=p0(J);else Q=this.getFormattedValue(z,J);this.formattedValue=Q,this.setTooltipAndCellRendererParams(J,Q),this.renderCell()}setTooltipAndCellRendererParams(z,J){let Q=this.gos;if(this.params.showTooltips&&(!h1(Q)||!this.params.cellRenderer)){let Z=J!=null?J:p0(z);this.shouldDisplayTooltip=t1(Q,()=>this.eCheckbox.getGui().querySelector(".ag-label")),this.tooltipFeature?.setTooltipAndRefresh(Z)}this.cellRendererParams=C(Q,{value:z,valueFormatted:J,colDef:this.params.colDef,column:this.params.column,setTooltip:(Z,$)=>{Q.assertModuleRegistered("Tooltip",3),this.shouldDisplayTooltip=$,this.tooltipFeature?.setTooltipAndRefresh(Z)}})}getFormattedValue(z,J){return this.beans.valueSvc.formatValue(z,null,J,this.valueFormatter,!1)}renderCell(){let J=kz(this.beans.userCompFactory,this.params,this.cellRendererParams)?.newAgStackInstance();if(J==null){this.renderCellWithoutCellRenderer();return}J.then((Q)=>{if(Q)this.cellRendererComponent=Q,this.eCheckbox.setLabel(Q.getGui()),this.destroyCellRendererComponent=()=>this.destroyBean(Q)})}renderCellWithoutCellRenderer(){let{valueFormatted:z,value:J}=this.cellRendererParams,Q=(z==null?J:z)??this.translate("blanks");if(typeof Q!=="string")V(208),Q="";this.eCheckbox.setLabel(Q),this.setupFixedAriaLabels(Q)}getComponentHolder(){return this.params.column.getColDef()}},oj={loadingOoo:"Loading...",blanks:"(Blanks)",searchOoo:"Search...",selectAll:"(Select All)",selectAllSearchResults:"(Select All Search Results)",addCurrentSelectionToFilter:"Add current selection to filter",noMatches:"No matches.",ariaSearchFilterValues:"Search filter values",ariaFilterList:"Filter List",filterSummaryListInactive:"is (All)",filterSummaryListSeparator:", ",filterSummaryListShort:(z)=>`is (${z[0]})`,filterSummaryListLong:(z)=>`is (${z[0]}) and ${z[1]} more`};function J7(z,J,Q){let Z=z;if(!Z)return null;if(Z=Z.map(($)=>p0(q0($))),!J&&Q&&Z.some(($)=>$==null)){if(y(Z)==null)return null;return Z.filter(($)=>$!=null)}return Z}function s0(z,J,Q){return DZ(z,oj,J,Q)}function ej(z){if(z.excelMode==="windows"){if(!z.buttons)z.buttons=["apply","cancel"];if(z.closeOnApply==null)z.closeOnApply=!0}else if(z.excelMode==="mac"){if(!z.buttons)z.buttons=["reset"];if(z.applyMiniFilterWhileTyping==null)z.applyMiniFilterWhileTyping=!0;if(z.debounceMs==null)z.debounceMs=500}if(z.excelMode&&z.defaultToNothingSelected)z.defaultToNothingSelected=!1,V(207)}function zO(){return([z,J],[Q,Z])=>{if(J==null)return Z==null?0:-1;else if(Z==null)return 1;for(let $=0;$=Z.length)return 1;let X=m1(J[$],Z[$]);if(X!==0)return X}return 0}}var OY=class{constructor(z,J,Q,Z){this.formatter=z,this.treeListPathGetter=J,this.treeListFormatter=Q,this.treeDataOrGrouping=Z,this.allDisplayedItemsTree=new Map,this.activeDisplayedItemsFlat=[],this.selectAllItem={depth:0,filterPasses:!0,available:!0,treeKey:W1,children:this.allDisplayedItemsTree,expanded:!0,key:W1,parentTreeKeys:[]},this.addSelectionToFilterItem={depth:0,filterPasses:!0,available:!0,treeKey:B1,expanded:!0,key:B1,parentTreeKeys:[]}}updateParams(z,J){this.treeListPathGetter=z,this.treeListFormatter=J}updateDisplayedValuesToAllAvailable(z,J,Q,Z){if(Z==="reload")this.generateItemTree(z,J,Q);else if(Z==="otherFilter")this.updateAvailable(Q),this.updateExpandAll();else if(Z==="miniFilter")this.resetFilter(),this.updateExpandAll();this.flattenItems()}updateDisplayedValuesToMatchMiniFilter(z,J,Q,Z,$,X){if(X==="reload")this.generateItemTree(z,J,Q);else if(X==="otherFilter")this.updateAvailable(Q);this.updateFilter(Z,$),this.updateExpandAll(),this.flattenItems()}generateItemTree(z,J,Q){let Z=new Map;this.allDisplayedItemsTree=Z;let $=!1,X=this.getTreeListPathGetter(z,Q);for(let Y of J){let q=z(Y),G=X(q)??[null],U=G.length;if(U>1)$=!0;let _=Q.has(Y),H=Z,W,B=[];for(let E=0;EZ;let Q=!1;for(let Z of J){let $=z(Z);if($ instanceof Date){Q=!0;break}else if($!=null)break}if(Q)return(Z)=>Ez(Z,!1);return V(211),(Z)=>[String(Z)]}flattenItems(){this.activeDisplayedItemsFlat=[];let z=(J)=>{for(let Q of J.values()){if(!Q.filterPasses||!Q.available)continue;if(this.activeDisplayedItemsFlat.push(Q),Q.children&&Q.expanded)z(Q.children)}};z(this.allDisplayedItemsTree)}resetFilter(){let z=(J)=>{let Q=J.children;if(Q)for(let Z of Q.values())z(Z);J.filterPasses=!0};for(let J of this.allDisplayedItemsTree.values())z(J)}updateFilter(z,J){let Q=(Z)=>{if(!Z.available)return!1;if(Z.treeKey==null)return J;return z(this.formatter(this.treeListFormatter?this.treeListFormatter(Z.treeKey,Z.depth,Z.parentTreeKeys):Z.treeKey))};for(let Z of this.allDisplayedItemsTree.values())this.recursiveItemCheck(Z,!1,Q,"filterPasses")}getDisplayedValueCount(){return this.activeDisplayedItemsFlat.length}getDisplayedItem(z){return this.activeDisplayedItemsFlat[z]}getSelectAllItem(){return this.selectAllItem}getAddSelectionToFilterItem(){return this.addSelectionToFilterItem}getDisplayedKeys(){let z=[];return this.forEachDisplayedKey((J)=>z.push(J)),z}forEachDisplayedKey(z){let J=(Q,Z)=>{let $=Q.children;if($){if(!Q.expanded||!Z){for(let X of $.values())if(X.filterPasses)J(X,!1)}}else z(Q.key)};for(let Q of this.activeDisplayedItemsFlat)J(Q,!0)}someDisplayedKey(z){let J=(Q,Z)=>{let $=Q.children;if($){if(!Q.expanded||!Z){for(let X of $.values())if(X.filterPasses&&J(X,!1))return!0;return!1}}else return z(Q.key);return!1};return this.activeDisplayedItemsFlat.some((Q)=>J(Q,!0))}hasGroups(){return this.groupsExist}refresh(){this.updateExpandAll(),this.flattenItems()}updateExpandAll(){let z=(Q,Z,$)=>{for(let X of Q.values()){if(!X.filterPasses||!X.available||!X.children)continue;if(Z=Z||!!X.expanded,$=$||!X.expanded,Z&&$)return;let Y=z(X.children,Z,$);if(Y===void 0)return;else if(Y)Z=!0;else $=!0}return Z&&$?void 0:Z},J=this.getSelectAllItem();J.expanded=z(J.children,!1,!1)}recursiveItemCheck(z,J,Q,Z){let $=!1,X=z.children;if(X)for(let q of X.values()){let G=this.recursiveItemCheck(q,J||Q(z),Q,Z);$=$||G}let Y=J||$||Q(z);return z[Z]=Y,Y}updateAvailable(z){let J=(Q)=>z.has(Q.key);for(let Q of this.allDisplayedItemsTree.values())this.recursiveItemCheck(Q,!1,J,"available")}},Tq=class extends $1{constructor(){super("setFilter","set-filter");this.filterType="set",this.eMiniFilter=j,this.eFilterLoading=j,this.eFilterLoadingIcon=j,this.eSetFilterList=j,this.eFilterNoMatches=j,this.hardRefreshVirtualList=!1,this.miniFilterText=null,this.addCurrentSelectionToFilter=!1,this.selectedKeys=new Set}setParams(z){super.setParams(z);let J=this.updateHandler(z.getHandler()),{column:Q,textFormatter:Z,treeList:$,treeListPathGetter:X,treeListFormatter:Y}=z;if(this.formatter=Z??((q)=>q??null),this.displayValueModel=$?new OY(this.formatter,X,Y,J.isTreeDataOrGrouping()):new tj(this.beans.valueSvc,()=>this.handler.valueFormatter,this.formatter,Q),J.valueModel.allKeys.then((q)=>{if(!this.isAlive())return;this.updateDisplayedValues("reload",q??[]),this.resetSelectionState(q??[])}),J.valueModel.isLoading())this.setIsLoading(!0);this.initialiseFilterBodyUi()}refresh(z){if(this.params.treeList!==z.treeList)return!1;return this.updateHandler(z.getHandler()),super.refresh(z)}updateParams(z,J){if(super.updateParams(z,J),this.updateMiniFilter(),z.suppressSelectAll!==J.suppressSelectAll)this.createVirtualListModel(z);let{textFormatter:Q,treeListPathGetter:Z,treeListFormatter:$}=z;if(this.formatter=Q??((X)=>X??null),this.displayValueModel instanceof OY)this.displayValueModel.updateParams(Z,$);this.handler.refreshFilterValues(!0)}updateHandler(z){if(this.handler!==z){for(let Q of this.handlerDestroyFuncs??[])Q();this.handlerDestroyFuncs=[...this.addManagedListeners(z,{anyFilterChanged:(Q)=>{z.valueModel.allKeys.then((Z)=>{if(this.isAlive()){if(this.updateDisplayedValues("otherFilter",Z??[]),Q.updated)this.checkAndRefreshVirtualList(),this.showOrHideResults()}})},dataChanged:({hardRefresh:Q})=>{z.valueModel.allKeys.then((Z)=>{if(this.isAlive()){if(this.updateDisplayedValues("reload",Z??[]),this.setSelectedModel(this.state.model?.values??null),Q)this.hardRefreshVirtualList=!0;this.checkAndRefreshVirtualList()}})}}),...this.addManagedListeners(z.valueModel,{loadingStart:()=>this.setIsLoading(!0),loadingEnd:()=>this.setIsLoading(!1)})],this.handler=z}return z}updateUiVisibility(){}createBodyTemplate(){return{tag:"div",cls:"ag-set-filter",children:[{tag:"div",ref:"eFilterLoading",cls:"ag-filter-loading ag-loading ag-hidden",children:[{tag:"span",ref:"eFilterLoadingIcon",cls:"ag-loading-icon"},{tag:"span",cls:"ag-loading-text",children:s0(this,"loadingOoo")}]},{tag:"ag-input-text-field",ref:"eMiniFilter",cls:"ag-mini-filter"},{tag:"div",ref:"eFilterNoMatches",cls:"ag-filter-no-matches ag-hidden",children:s0(this,"noMatches")},{tag:"div",ref:"eSetFilterList",cls:"ag-set-filter-list",role:"presentation"}]}}getAgComponents(){return[Zz]}handleKeyDown(z){if(super.handleKeyDown(z),z.defaultPrevented)return;let J=()=>{if(!this.eSetFilterList.contains(n(this.beans)))return;let Q=this.virtualList.getLastFocusedRow();if(Q==null)return;let Z=this.virtualList.getComponentAt(Q);if(Z==null)return;z.preventDefault();let{readOnly:$}=this.params;if($)return;return Z};switch(z.key){case k.SPACE:J()?.toggleSelected();break;case k.ENTER:this.handleKeyEnter(z);break;case k.LEFT:J()?.setExpanded(!1);break;case k.RIGHT:J()?.setExpanded(!0);break}}handleKeyEnter(z){z.preventDefault();let{excelMode:J,readOnly:Q}=this.params;if(!J||!!Q)return;if(this.params.onAction("apply",void 0,z),this.params.excelMode==="mac")this.eMiniFilter.getInputElement().select()}setModelAndRefresh(z){return this.setSelectedModel(z).then(()=>{if(this.isAlive())this.checkAndRefreshVirtualList()})}setModelIntoUi(z){this.setMiniFilter(this.params.state.state?.miniFilterValue??null,!0);let J=z==null?null:z.values;return this.setModelAndRefresh(J)}getModelFromUi(){let z=this.getSelectedModel();if(!z)return null;return{values:z,filterType:this.filterType}}areNonNullModelsEqual(z,J){return Z0(z.values,J.values)}setIsLoading(z){if(w(this.eFilterLoading,z),!z)this.hardRefreshVirtualList=!0}initialiseFilterBodyUi(){this.initVirtualList(),this.initMiniFilter(),this.initLoading()}initLoading(){let z=h("setFilterLoading",this.beans,this.params.column);if(z)this.eFilterLoadingIcon.appendChild(z)}initVirtualList(){let z=s0(this,"ariaFilterList"),J=!!this.params.treeList,Q=this.virtualList=this.createBean(new Y7({cssIdentifier:"filter",ariaRole:J?"tree":"listbox",listName:z})),Z=this.eSetFilterList;if(J)Z.classList.add("ag-set-filter-tree-list");Z.appendChild(Q.getGui());let{cellHeight:$}=this.params;if($!=null)Q.setRowHeight($);let X=(q,G)=>this.createSetListItem(q,J,G);Q.setComponentCreator(X);let Y=(q,G)=>this.updateSetListItem(q,G);Q.setComponentUpdater(Y),this.createVirtualListModel(this.params)}createVirtualListModel(z){let J;if(z.suppressSelectAll)J=new JO(this.displayValueModel);else J=new QO(this.displayValueModel,this.showAddCurrentSelectionToFilter.bind(this));if(z.treeList)J=new ZO(J);this.virtualList.setModel(J)}getSelectAllLabel(){let z=this.miniFilterText==null||!this.params.excelMode?"selectAll":"selectAllSearchResults";return s0(this,z)}getAddSelectionToFilterLabel(){return s0(this,"addCurrentSelectionToFilter")}createSetListItem(z,J,Q){let Z=this.displayValueModel.hasGroups(),{isSelected:$,isExpanded:X}=this.isSelectedExpanded(z),{value:Y,depth:q,isGroup:G,hasIndeterminateExpandState:U,selectedListener:_,expandedListener:H}=this.newSetListItemAttributes(z),W={focusWrapper:Q,value:Y,params:this.params,translate:(E)=>s0(this,E),valueFormatter:this.handler.valueFormatter,item:z,isSelected:$,isTree:J,depth:q,groupsExist:Z,isGroup:G,isExpanded:X,hasIndeterminateExpandState:U},B=this.createBean(new aj(W));if(B.addEventListener("selectionChanged",_),H)B.addEventListener("expandedChanged",H);return B}newSetTreeItemAttributes(z){let J=this.displayValueModel.hasGroups();if(z.key===W1)return{value:()=>this.getSelectAllLabel(),isGroup:J,depth:z.depth,hasIndeterminateExpandState:!0,selectedListener:(Q)=>this.onSelectAll(Q.isSelected),expandedListener:(Q)=>this.onExpandAll(Q.item,Q.isExpanded)};if(z.key===B1)return{value:()=>this.getAddSelectionToFilterLabel(),depth:z.depth,isGroup:!1,hasIndeterminateExpandState:!1,selectedListener:(Q)=>{this.addCurrentSelectionToFilter=Q.isSelected,this.refreshAfterSelection()}};if(z.children)return{value:this.params.treeListFormatter?.(z.treeKey,z.depth,z.parentTreeKeys)??z.treeKey,depth:z.depth,isGroup:!0,selectedListener:(Q)=>this.onGroupItemSelected(Q.item,Q.isSelected),expandedListener:(Q)=>this.onExpandedChanged(Q.item,Q.isExpanded)};return{value:this.params.treeListFormatter?.(z.treeKey,z.depth,z.parentTreeKeys)??z.treeKey,depth:z.depth,selectedListener:(Q)=>this.onItemSelected(Q.item.key,Q.isSelected)}}newSetListItemAttributes(z){if(this.isSetFilterModelTreeItem(z))return this.newSetTreeItemAttributes(z);if(z===W1)return{value:()=>this.getSelectAllLabel(),selectedListener:(J)=>this.onSelectAll(J.isSelected)};if(z===B1)return{value:()=>this.getAddSelectionToFilterLabel(),selectedListener:(J)=>{this.addCurrentSelectionToFilter=J.isSelected,this.refreshAfterSelection()}};return{value:this.handler.valueModel.allValues.get(z)??null,selectedListener:(J)=>this.onItemSelected(J.item,J.isSelected)}}updateSetListItem(z,J){let{isSelected:Q,isExpanded:Z}=this.isSelectedExpanded(z);J.refresh(z,Q,Z)}isSelectedExpanded(z){let J,Q;if(this.isSetFilterModelTreeItem(z))if(Q=z.expanded,z.key===W1)J=this.isSelectAllSelected();else if(z.key===B1)J=this.isAddCurrentSelectionToFilterChecked();else if(z.children)J=this.areAllChildrenSelected(z);else J=this.selectedKeys.has(z.key);else if(z===W1)J=this.isSelectAllSelected();else if(z===B1)J=this.isAddCurrentSelectionToFilterChecked();else J=this.selectedKeys.has(z);return{isSelected:J,isExpanded:Q}}isSetFilterModelTreeItem(z){return z?.treeKey!==void 0}initMiniFilter(){let{eMiniFilter:z}=this;this.updateMiniFilter(),z.onValueChange(()=>this.onMiniFilterInput()),z.setInputAriaLabel(s0(this,"ariaSearchFilterValues")),this.addManagedElementListeners(z.getInputElement(),{keydown:(J)=>this.onMiniFilterKeyDown(J)})}updateMiniFilter(){let{eMiniFilter:z,miniFilterText:J,params:Q}=this;z.setDisplayed(!Q.suppressMiniFilter),z.setValue(J)}afterGuiAttached(z){super.afterGuiAttached(z),this.resetExpansion(),this.refreshVirtualList();let{eMiniFilter:J}=this;if(J.setInputPlaceholder(s0(this,"searchOoo")),!z?.suppressFocus)if(J.isDisplayed())J.getFocusableElement().focus();else this.virtualList.awaitStable(()=>this.virtualList.focusRow(0))}afterGuiDetached(){super.afterGuiDetached();let{column:z,excelMode:J,model:Q,onStateChange:Z}=this.params;if(this.beans.colFilter?.shouldKeepStateOnDetach(z))return;if(J)this.resetMiniFilter();if(J||Q!==this.state.model)Z({model:Q,state:this.getState()}),this.showOrHideResults()}canApply(z){return this.params.excelMode?z==null||z.values.length>0:!0}onNewRowsLoaded(){}setFilterValues(z){V(283),this.handler.setFilterValues(z)}resetFilterValues(){V(283),this.handler.resetFilterValues()}refreshFilterValues(){V(283),this.doRefreshFilterValues()}doRefreshFilterValues(){this.handler.refreshFilterValues()}onAnyFilterChanged(){}onMiniFilterInput(z){if(!this.doSetMiniFilter(this.eMiniFilter.getValue()))return;if(z){this.showOrHideResults();return}let{applyMiniFilterWhileTyping:J,readOnly:Q,excelMode:Z}=this.params,$=!Q&&(J||!!Z),X=J&&!Q?"debounce":void 0;this.updateUiAfterMiniFilterChange($,X)}updateUiAfterMiniFilterChange(z,J){if(z){let{excelMode:Q,readOnly:Z,model:$}=this.params;if(Q&&!Z&&this.miniFilterText==null)this.setModelAndRefresh($?.values??null);else this.selectAllMatchingMiniFilter(!0)}this.checkAndRefreshVirtualList(),this.onUiChanged(z?J:"prevent"),this.showOrHideResults()}showOrHideResults(){let z=this.miniFilterText!=null&&this.displayValueModel.getDisplayedValueCount()<1;w(this.eFilterNoMatches,z),w(this.eSetFilterList,!z)}resetMiniFilter(){this.eMiniFilter.setValue(null,!0),this.doSetMiniFilter(null)}onMiniFilterKeyDown(z){let{excelMode:J,readOnly:Q}=this.params;if(z.key===k.ENTER&&!J&&!Q)this.updateUiAfterMiniFilterChange(!0,"immediately")}focusRowIfAlive(z){if(z==null)return Promise.resolve();return new Promise((J)=>{window.setTimeout(()=>{if(this.isAlive())this.virtualList.focusRow(z);J()},0)})}onSelectAll(z){if(z)this.selectAllMatchingMiniFilter();else this.deselectAllMatchingMiniFilter();this.refreshAfterSelection()}onGroupItemSelected(z,J){let Q=(Z)=>{if(!Z.filterPasses)return;let $=Z.children;if($)for(let X of $.values())Q(X);else this.setKeySelected(Z.key,J)};Q(z),this.refreshAfterSelection()}onItemSelected(z,J){this.setKeySelected(z,J),this.refreshAfterSelection()}onExpandAll(z,J){let Q=(Z)=>{if(Z.filterPasses&&Z.available&&Z.children){for(let $ of Z.children.values())Q($);Z.expanded=J}};Q(z),this.refreshAfterExpansion()}onExpandedChanged(z,J){z.expanded=J,this.refreshAfterExpansion()}refreshAfterExpansion(){let z=this.virtualList.getLastFocusedRow();this.updateDisplayedValues("expansion"),this.checkAndRefreshVirtualList(),this.focusRowIfAlive(z)}refreshAfterSelection(){let z=this.virtualList.getLastFocusedRow();this.checkAndRefreshVirtualList(),this.onUiChanged(),this.focusRowIfAlive(z)}setMiniFilter(z,J){this.eMiniFilter.setValue(z,J),this.onMiniFilterInput(J)}doSetMiniFilter(z){if(z=q0(z),this.miniFilterText===z)return!1;if(z===null)this.addCurrentSelectionToFilter=!1;return this.miniFilterText=z,this.updateDisplayedValues("miniFilter"),!0}getMiniFilter(){return this.miniFilterText}getUiChangeEventParams(){return{miniFilterValue:this.miniFilterText}}getState(){let z=this.miniFilterText;return z?{miniFilterValue:z}:void 0}checkAndRefreshVirtualList(){if(this.virtualList.refresh(!this.hardRefreshVirtualList),this.hardRefreshVirtualList)this.hardRefreshVirtualList=!1}getFilterKeys(){return V(283),this.handler.getFilterKeys()}getFilterValues(){return V(283),this.handler.getFilterValues()}refreshVirtualList(){if(this.params.refreshValuesOnOpen)this.doRefreshFilterValues();else this.checkAndRefreshVirtualList()}isSelectAllSelected(){if(!this.params.defaultToNothingSelected){if(this.hasSelections()&&this.isNothingVisibleSelected())return!1;if(this.isEverythingVisibleSelected())return!0}else{if(this.hasSelections()&&this.isEverythingVisibleSelected())return!0;if(this.isNothingVisibleSelected())return!1}return}areAllChildrenSelected(z){let J=(Q)=>{if(Q.children){let Z=!1,$=!1;for(let X of Q.children.values()){if(!X.filterPasses||!X.available)continue;let Y=J(X);if(Y===void 0)return;if(Y)Z=!0;else $=!0;if(Z&&$)return}return Z}else return this.selectedKeys.has(Q.key)};if(!this.params.defaultToNothingSelected)return J(z);else return this.hasSelections()&&J(z)}resetExpansion(){if(!this.params.treeList)return;let z=this.displayValueModel.getSelectAllItem();if(this.isSetFilterModelTreeItem(z)){let J=(Q)=>{let Z=Q.children;if(Z){for(let $ of Z.values())J($);Q.expanded=!1}};J(z),this.updateDisplayedValues("expansion")}}getModelAsString(z){return this.handler.getModelAsString(z)}getPositionableElement(){return this.eSetFilterList}updateDisplayedValues(z,J){if(z==="expansion"){this.displayValueModel.refresh();return}let Q=this.handler,Z=Q.valueModel;if(this.miniFilterText==null){this.displayValueModel.updateDisplayedValuesToAllAvailable((q)=>Z.allValues.get(q)??null,J,Z.availableKeys,z);return}let $=Q.caseFormat(this.formatter(this.miniFilterText)||""),X=(q)=>q!=null&&Q.caseFormat(q).includes($),Y=!!this.params.excelMode&&X(s0(this,"blanks"));this.displayValueModel.updateDisplayedValuesToMatchMiniFilter((q)=>Z.allValues.get(q)??null,J,Z.availableKeys,X,Y,z)}hasSelections(){return this.params.defaultToNothingSelected?this.selectedKeys.size>0:this.handler.valueModel.allValues.size!==this.selectedKeys.size}isInWindowsExcelMode(){return this.params.excelMode==="windows"}isAddCurrentSelectionToFilterChecked(){return this.isInWindowsExcelMode()&&this.addCurrentSelectionToFilter}showAddCurrentSelectionToFilter(){return this.isInWindowsExcelMode()&&P(this.miniFilterText)&&this.miniFilterText.length>0}selectAllMatchingMiniFilter(z=!1){if(this.miniFilterText==null)this.selectedKeys=new Set(this.handler.valueModel.allValues.keys());else{if(z)this.selectedKeys.clear();this.displayValueModel.forEachDisplayedKey((J)=>this.selectedKeys.add(J))}}deselectAllMatchingMiniFilter(){if(this.miniFilterText==null)this.selectedKeys.clear();else this.displayValueModel.forEachDisplayedKey((z)=>this.selectedKeys.delete(z))}setKeySelected(z,J){if(J)this.selectedKeys.add(z);else{if(this.params.excelMode&&this.isEverythingVisibleSelected())this.resetSelectionState(this.displayValueModel.getDisplayedKeys());this.selectedKeys.delete(z)}}isEverythingVisibleSelected(){return!this.displayValueModel.someDisplayedKey((z)=>!this.selectedKeys.has(z))}isNothingVisibleSelected(){return!this.displayValueModel.someDisplayedKey((z)=>this.selectedKeys.has(z))}getSelectedModel(){if(!this.hasSelections())return null;let z=this.isAddCurrentSelectionToFilterChecked()?this.params.model?.values:void 0;if(z?.length){if(this.selectedKeys){let J=new Set([...z,...this.selectedKeys]);return Array.from(J)}return Array.from(z)}return Array.from(this.selectedKeys)}setSelectedModel(z){let J=this.handler,Q=J.valueModel;return Q.allKeys.then((Z)=>{if(z==null)this.resetSelectionState(Z??[]);else{this.selectedKeys.clear();let $=new Map;Q.allValues.forEach((X,Y)=>{$.set(J.caseFormat(Y),Y)}),z.forEach((X)=>{let Y=J.caseFormat(q0(X)),q=$.get(Y);if(q!==void 0)this.selectedKeys.add(q)})}})}resetSelectionState(z){if(this.params.defaultToNothingSelected)this.selectedKeys.clear();else this.selectedKeys=new Set(z)}getFilterHandler(){return this.handler}destroy(){this.virtualList=this.destroyBean(this.virtualList);for(let z of this.handlerDestroyFuncs??[])z();this.handler=void 0,this.displayValueModel=void 0,this.selectedKeys.clear(),super.destroy()}},JO=class{constructor(z){this.model=z}getRowCount(){return this.model.getDisplayedValueCount()}getRow(z){return this.model.getDisplayedItem(z)}areRowsEqual(z,J){return z===J}},QO=class{constructor(z,J){this.model=z,this.showAddCurrentSelectionToFilter=J}getRowCount(){let J=this.showAddCurrentSelectionToFilter()?2:1;return this.model.getDisplayedValueCount()+J}getRow(z){if(z===0)return this.model.getSelectAllItem();let J=this.showAddCurrentSelectionToFilter(),Q=J?2:1;if(z===1&&J)return this.model.getAddSelectionToFilterItem();return this.model.getDisplayedItem(z-Q)}areRowsEqual(z,J){return z===J}},ZO=class{constructor(z){this.model=z}getRowCount(){return this.model.getRowCount()}getRow(z){return this.model.getRow(z)}areRowsEqual(z,J){if(z==null&&J==null)return!0;return z!=null&&J!=null&&z.treeKey===J.treeKey&&z.depth===J.depth}},$O=class extends S{constructor(z,J,Q,Z,$){super();this.createKey=z,this.caseFormat=J,this.getValue=Q,this.isTreeDataOrGrouping=Z,this.isTreeData=$}extractUniqueValuesAsync(z,J){return new N((Q)=>{if(this.beans.rowModel.rowCountReady)Q(this.extractUniqueValues(z,J));else{let[Z]=this.addManagedEventListeners({rowCountReady:()=>{Z?.(),Q(this.extractUniqueValues(z,J))}})}})}extractUniqueValues(z,J){let Q=new Map,Z=this.extractExistingFormattedKeys(J),$=new Set,X=this.isTreeData(),Y=this.isTreeDataOrGrouping(),q=this.beans.rowGroupColsSvc?.columns,G=this.gos.get("groupAllowUnbalanced"),U=(_,H)=>{let W=this.caseFormat(_);if(!$.has(W)){$.add(W);let B=_,E=q0(H),K=Z?.get(W);if(K!=null)B=K,E=J.get(K);Q.set(B,E)}};return this.beans.rowModel.forEachLeafNode((_)=>{if(!_.data||!z(_))return;if(Y){this.addValueForTreeDataOrGrouping(_,X,q,U,G);return}let H=this.getValue(_);if(H!=null&&Array.isArray(H)){for(let W of H)U(this.createKey(W,_),W);if(H.length===0)U(null,null)}else U(this.createKey(H,_),H)}),Q}addValueForTreeDataOrGrouping(z,J,Q=[],Z,$){let X;if(J){if(z.childrenAfterGroup?.length)return;X=z.getRoute()??[z.key??z.id]}else X=Q.map((q)=>this.beans.valueSvc.getKeyForNode(q,z)),X.push(this.getValue(z));let Y=J7(X,J,$);Z(this.createKey(Y),Y)}extractExistingFormattedKeys(z){if(!z)return null;let J=new Map;return z.forEach((Q,Z)=>{J.set(this.caseFormat(Z),Z)}),J}},XO=class{constructor(z){this.caseFormat=z,this.keys=null}isNull(){return this.keys==null}isEmpty(){return!this.keys?.size}update(z){let J=new Set;this.keys=J;let Q=z?.values;if(Q){let Z=this.caseFormat;for(let $=0,X=Q.length;${return z[z.PROVIDED_LIST=0]="PROVIDED_LIST",z[z.PROVIDED_CALLBACK=1]="PROVIDED_CALLBACK",z[z.TAKEN_FROM_GRID_VALUES=2]="TAKEN_FROM_GRID_VALUES",z})(vq||{}),r5=vq,YO=class extends S{constructor(z,J,Q,Z,$){super();this.clientSideValuesExtractor=z,this.caseFormat=J,this.createKey=Q,this.isTreeDataOrGrouping=Z,this.params=$,this.allValues=new Map,this.availableKeys=new Set,this.providedValues=null,this.initialised=!1}postConstruct(){let z=this.params,J=z.handlerParams.filterParams.values;if(this.updateParams(z),J==null)this.valuesType=2;else this.valuesType=Array.isArray(J)?0:1,this.providedValues=J;this.updateAllValues()}refresh(z){let J=z.handlerParams;if(J.source!=="colDef")return;let{values:Q,suppressSorting:Z}=J.filterParams,$=this.providedValues,X=this.params.handlerParams.filterParams.suppressSorting;if(this.params=z,this.updateParams(z),this.providedValues=Q??null,this.providedValues!==$||Z!==X){if(!Q||Q.length===0)this.valuesType=2,this.providedValues=null;else this.valuesType=Array.isArray(Q)?0:1;this.updateAllValues()}}updateParams(z){let{handlerParams:{colDef:J,filterParams:{comparator:Q,treeList:Z,treeListPathGetter:$}},usingComplexObjects:X}=z,Y=Q??J.comparator,q=this.isTreeDataOrGrouping(),G;if(q&&!Y)G=zO();else if(Z&&!$&&!Y)G=([U,_],[H,W])=>m1(_,W);else G=([U,_],[H,W])=>Y(_,W);this.entryComparator=G,this.keyComparator=Y??m1,this.compareByValue=!!(X&&Y||q||Z&&!$)}updateAllValues(){return this.allKeys=new N((z)=>{switch(this.valuesType){case 2:this.getValuesFromRowsAsync().then((J)=>z(this.processAllValues(J)));break;case 0:{z(this.processAllValues(this.uniqueValues(this.validateProvidedValues(this.providedValues))));break}case 1:{this.dispatchLocalEvent({type:"loadingStart"});let J=this.providedValues,{column:Q,colDef:Z}=this.params.handlerParams,$=C(this.gos,{success:(X)=>{this.dispatchLocalEvent({type:"loadingEnd"}),z(this.processAllValues(this.uniqueValues(this.validateProvidedValues(X))))},colDef:Z,column:Q});window.setTimeout(()=>J($),0);break}}}),this.allKeys.then((z)=>{this.updateAvailableKeys(z??[]),this.initialised=!0}),this.allKeys}getAvailableValues(z){return this.sortKeys(this.getValuesFromRows(z))}overrideValues(z){return this.allKeys.then(()=>{this.valuesType=0,this.providedValues=z})}refreshAvailable(){return new N((z)=>{if(this.showAvailableOnly()){this.allKeys.then((J)=>{let Q=J??[];this.updateAvailableKeys(Q),z(!0)});return}z(!1)})}refreshAll(){return new N((z)=>{this.allKeys.then(()=>{this.updateAllValues().then(()=>{z()})})})}isLoading(){return!this.initialised&&this.valuesType===1}isInitialised(){return this.initialised}getValueForFormatter(z){return this.initialised?this.allValues.get(z):z}getAvailableKeys(z){return this.initialised?z.filter((J)=>this.availableKeys.has(J)):z}getParamsForValuesFromRows(z){if(!this.clientSideValuesExtractor){r(113);return}return z&&!this.params.handlerParams.filterParams.caseSensitive?this.allValues:void 0}getValuesFromRows(z){let J=this.getParamsForValuesFromRows(!0);return this.clientSideValuesExtractor?.extractUniqueValues(z,J)??null}getValuesFromRowsAsync(){let z=this.getParamsForValuesFromRows(!1);return this.clientSideValuesExtractor?.extractUniqueValuesAsync(()=>!0,z)??N.resolve(null)}processAllValues(z){let J=this.sortKeys(z);return this.allValues=z??new Map,J}uniqueValues(z){let J=new Map,Q=new Set,{caseFormat:Z,createKey:$}=this;for(let X of z??[]){let Y=q0(X),q=$(Y),G=Z(q);if(!Q.has(G))Q.add(G),J.set(q,Y)}return J}validateProvidedValues(z){if(this.params.usingComplexObjects&&z?.length){let J=z[0];if(J&&typeof J!=="object"&&typeof J!=="function")if(this.createKey(J)==null)V(209);else V(210)}return z}sortKeys(z){let J=z??new Map,Q=this.params.handlerParams.filterParams;if(Q.suppressSorting)return Array.from(J.keys());let Z;if(this.compareByValue)Z=Array.from(J.entries()).sort(this.entryComparator).map(([$])=>$);else Z=Array.from(J.keys()).sort(this.keyComparator);if(Q.excelMode&&J.has(null))Z=Z.filter(($)=>$!=null),Z.push(null);return Z}showAvailableOnly(){return this.valuesType===2}updateAvailableKeys(z){let J=this.showAvailableOnly()?this.getAvailableValues((Q)=>this.params.handlerParams.doesRowPassOtherFilter(Q)):z;this.availableKeys=new Set(J),window.setTimeout(()=>{if(this.isAlive())this.dispatchLocalEvent({type:"availableValuesChanged"})})}},qO=class extends S{constructor(){super(...arguments);this.filterType="set",this.treeDataTreeList=!1,this.groupingTreeList=!1,this.caseSensitive=!1,this.noValueFormatterSupplied=!1}init(z){this.updateParams(z);let J=this.isTreeDataOrGrouping.bind(this),Q=()=>this.treeDataTreeList,Z=this.createKey,$=this.caseFormat.bind(this),{gos:X,beans:Y}=this,q=o(X,Y.rowModel)?this.createManagedBean(new $O(Z,$,z.getValue,J,Q)):void 0,G=this.createManagedBean(new YO(q,$,Z,J,{handlerParams:z,usingComplexObjects:!!(z.filterParams.keyCreator??z.colDef.keyCreator)}));this.addManagedListeners(G,{availableValuesChanged:z.onModelAsStringChange}),this.valueModel=G,this.appliedModel=new XO(this.caseFormat.bind(this)),this.appliedModel.update(z.model),this.validateModel(z),this.addEventListenersForDataChanges()}refresh(z){this.updateParams(z),this.valueModel.refresh({handlerParams:z,usingComplexObjects:!!(z.filterParams.keyCreator??z.colDef.keyCreator)}),this.appliedModel.update(z.model),this.validateModel(z)}updateParams(z){this.params=z;let{colDef:J,filterParams:{caseSensitive:Q,treeList:Z,keyCreator:$,valueFormatter:X}}=z;this.caseSensitive=!!Q;let Y=!!J.showRowGroup;this.treeDataTreeList=this.gos.get("treeData")&&!!Z&&Y,this.groupingTreeList=!!this.beans.rowGroupColsSvc?.columns.length&&!!Z&&Y;let q=$??J.keyCreator;this.createKey=this.generateCreateKey(q,this.isTreeDataOrGrouping()),this.setValueFormatter(X,q,!!Z,!!J.refData)}doesFilterPass(z){let{appliedModel:J,treeDataTreeList:Q,groupingTreeList:Z}=this;if(J.isNull())return!0;if(J.isEmpty())return!1;let{node:$}=z;if(Q)return this.doesFilterPassForTreeData($);if(Z)return this.doesFilterPassForGrouping($);let X=this.params.getValue($);if(X!=null&&Array.isArray(X)){if(X.length===0)return J.has(null);return X.some((Y)=>J.has(this.createKey(Y,$)))}return J.has(this.createKey(X,$))}getFormattedValue(z){let J=this.valueModel.getValueForFormatter(z);if(this.noValueFormatterSupplied&&this.isTreeDataOrGrouping()&&Array.isArray(J))J=y(J);let Q=this.beans.valueSvc.formatValue(this.params.column,null,J,this.valueFormatter,!1);return(Q==null?p0(J):Q)??s0(this,"blanks")}getModelAsString(z,J){let{values:Q}=z??{},Z=J==="filterToolPanel";if(Q==null)return Z?s0(this,"filterSummaryListInactive"):"";let $=this.valueModel.getAvailableKeys(Q),X=$.length,Y=Z?3:10,q=$.slice(0,Y).map((G)=>this.getFormattedValue(G));if(Z){let G=q.join(s0(this,"filterSummaryListSeparator"));if(X>3)return s0(this,"filterSummaryListLong",[G,String(X-3)]);else return s0(this,"filterSummaryListShort",[G])}return`(${X}) ${q.join(",")}${X>10?",...":""}`}onAnyFilterChanged(){window.setTimeout(()=>{if(!this.isAlive())return;this.valueModel.refreshAvailable().then((z)=>{this.dispatchLocalEvent({type:"anyFilterChanged",updated:!!z})})})}onNewRowsLoaded(){this.syncAfterDataChange()}setFilterValues(z){this.valueModel.overrideValues(z).then(()=>{this.refreshFilterValues()})}resetFilterValues(){this.valueModel.valuesType=r5.TAKEN_FROM_GRID_VALUES,this.syncAfterDataChange()}refreshFilterValues(z){if(!this.valueModel.isInitialised())return;this.valueModel.refreshAll().then(()=>{this.dispatchLocalEvent({type:"dataChanged",hardRefresh:!0}),this.validateModel(this.params,void 0,!z)})}getFilterKeys(){return Array.from(this.valueModel.allValues.keys())}getFilterValues(){return Array.from(this.valueModel.allValues.values())}isTreeDataOrGrouping(){return this.treeDataTreeList||this.groupingTreeList}caseFormat(z){if(z==null||typeof z!=="string")return z;return this.caseSensitive?z:z.toUpperCase()}addEventListenersForDataChanges(){this.addManagedPropertyListeners(["groupAllowUnbalanced"],()=>this.syncAfterDataChange());let z=i0(this,this.syncAfterDataChange.bind(this),0);this.addManagedEventListeners({cellValueChanged:(J)=>{if(J.column===this.params.column)z()}})}syncAfterDataChange(){if(!this.isValuesTakenFromGrid())return;this.valueModel.refreshAll().then(()=>{this.dispatchLocalEvent({type:"dataChanged"}),this.validateModel(this.params,{afterDataChange:!0})})}validateModel(z,J,Q){let Z=this.valueModel;Z.allKeys.then(()=>{let $=z.model;if($==null)return;let X=new Map,Y=(B)=>X.set(this.caseFormat(B),B);if(Q)for(let B of Z.availableKeys)Y(B);else Z.allValues.forEach((B,E)=>Y(E));let q=[],G=!1;for(let B of $.values){let E=this.caseFormat(q0(B)),K=X.get(E);if(K!==void 0){if(q.push(K),K!==B)G=!0}else G=!0}let U=q.length,_=z.filterParams;if(U===0&&_.excelMode){z.onModelChange(null,J);return}let W=!_.defaultToNothingSelected&&(this.valueModel.valuesType===r5.TAKEN_FROM_GRID_VALUES||!_.suppressClearModelOnRefreshValues)&&U===X.size;if(G||!$.filterType||W){let B=W?null:{filterType:this.filterType,values:q};z.onModelChange(B,J)}})}isValuesTakenFromGrid(){return this.valueModel.valuesType===r5.TAKEN_FROM_GRID_VALUES}doesFilterPassForTreeData(z){if(z.childrenAfterGroup?.length)return!1;let{gos:J,appliedModel:Q}=this;return Q.has(this.createKey(J7(z.getRoute()??[z.key??z.id],!0,J.get("groupAllowUnbalanced"))))}doesFilterPassForGrouping(z){let{appliedModel:J,params:Q,gos:Z,beans:{rowGroupColsSvc:$,valueSvc:X}}=this,Y=($?.columns??[]).map((q)=>X.getKeyForNode(q,z));return Y.push(Q.getValue(z)),J.has(this.createKey(J7(Y,!1,Z.get("groupAllowUnbalanced"))))}generateCreateKey(z,J){if(J&&!z)return r(250),()=>null;if(z)return(Q,Z=null)=>{let $=this.getKeyCreatorParams(Q,Z);return q0(z($))};return(Q)=>q0(p0(Q))}getKeyCreatorParams(z,J=null){let{colDef:Q,column:Z}=this.params;return C(this.gos,{value:z,colDef:Q,column:Z,node:J,data:J?.data})}setValueFormatter(z,J,Q,Z){let $=z;if(!$){if(J&&!Q){r(249);return}if(this.noValueFormatterSupplied=!0,!Z)$=(X)=>p0(X.value)}this.valueFormatter=$}getCrossFilterModel(z){let{createKey:J,valueModel:Q,params:Z}=this;return z(J,Q.availableKeys,Z.model?.values)}destroy(){this.appliedModel.destroy(),super.destroy(),this.valueModel=void 0}},GO={tag:"div",cls:"ag-floating-filter-input ag-set-floating-filter-input",role:"presentation",children:[{tag:"ag-input-text-field",ref:"eFloatingFilterText"}]},UO=class extends x{constructor(){super(GO,[Zz]);this.eFloatingFilterText=j}init(z){this.params=z,this.eFloatingFilterText.setDisabled(!0).addGuiEventListener("click",()=>this.params.showParentFilter()),this.setParams(z)}setParams(z){let J=this.beans.colNames.getDisplayNameForColumn(z.column,"header",!0),Q=this.getLocaleTextFunc();if(this.eFloatingFilterText.setInputAriaLabel(`${J} ${Q("ariaFilterInput","Filter Input")}`),this.gos.get("enableFilterHandlers")){let Z=z;this.updateFloatingFilterText(Z.model)}}refresh(z){this.params=z,this.setParams(z)}onParentModelChanged(z){this.updateFloatingFilterText(z)}parentSetFilterInstance(z){this.params.parentFilterInstance((J)=>{if(!(J instanceof Tq)){r(248);return}z(J)})}updateFloatingFilterText(z){if(z==null)this.eFloatingFilterText.setValue("");else if(this.gos.get("enableFilterHandlers"))this.eFloatingFilterText.setValue(this.params.getHandler().getModelAsString?.(z)??"");else this.parentSetFilterInstance((J)=>{this.eFloatingFilterText.setValue(J.getModelAsString(z))})}},Iq={moduleName:"SetFilter",version:$0,userComponents:{agSetColumnFilter:{classImp:Tq,params:{useForm:!0},processParams:(z)=>{return ej(z),z}},agSetColumnFloatingFilter:UO},dynamicBeans:{agSetColumnFilterHandler:qO},icons:{setFilterGroupClosed:"tree-closed",setFilterGroupOpen:"tree-open",setFilterGroupIndeterminate:"tree-indeterminate",setFilterLoading:"loading"},dependsOn:[C0,G1]},_O=".ag-status-bar{border-top:var(--ag-footer-row-border);display:flex;justify-content:space-between;line-height:1.5;overflow:hidden;padding-left:calc(var(--ag-spacing)*4);padding-right:calc(var(--ag-spacing)*4)}.ag-status-panel,:where(.ag-status-panel.ag-status-panel-aggregations .ag-status-name-value){display:inline-flex}.ag-status-name-value{color:var(--ag-status-bar-label-color);font-weight:var(--ag-status-bar-label-font-weight);margin-left:var(--ag-spacing);margin-right:var(--ag-spacing);padding-bottom:var(--ag-widget-container-vertical-padding);padding-top:var(--ag-widget-container-vertical-padding);white-space:nowrap}.ag-status-name-value-value{color:var(--ag-status-bar-value-color);font-weight:var(--ag-status-bar-value-font-weight)}.ag-status-bar-left{display:inline-flex}.ag-status-bar-center{display:inline-flex;text-align:center}.ag-status-bar-right{display:inline-flex}";function HO(z,J,Q){return z.getCompDetails(J,WO,void 0,Q,!0)}var WO={name:"statusPanel",optionalMethods:["refresh"]},BO={agAggregationComponent:{rowModels:["clientSide","serverSide"],warnArgs:[221]},agFilteredRowCountComponent:{rowModels:["clientSide"],warnArgs:[222]},agSelectedRowCountComponent:{rowModels:["clientSide","serverSide"],warnArgs:[223]},agTotalAndFilteredRowCountComponent:{rowModels:["clientSide"],warnArgs:[224]},agTotalRowCountComponent:{rowModels:["clientSide"],warnArgs:[225]}},EO={tag:"div",cls:"ag-status-bar",children:[{tag:"div",ref:"eStatusBarLeft",cls:"ag-status-bar-left",role:"status"},{tag:"div",ref:"eStatusBarCenter",cls:"ag-status-bar-center",role:"status"},{tag:"div",ref:"eStatusBarRight",cls:"ag-status-bar-right",role:"status"}]},KO=class extends x{constructor(){super(EO);this.updateQueued=!1,this.panelsPromise=N.resolve(),this.eStatusBarLeft=j,this.eStatusBarCenter=j,this.eStatusBarRight=j,this.compDestroyFunctions={},this.registerCSS(_O)}wireBeans(z){this.userCompFactory=z.userCompFactory,this.statusBarSvc=z.statusBarSvc}postConstruct(){this.processStatusPanels(new Map),this.addManagedPropertyListeners(["statusBar"],this.handleStatusBarChanged.bind(this)),Tz(this.beans,this,this.getGui())}getFocusableContainerName(){return"statusBar"}getValidPanels(){let z=this.gos,J=z.get("statusBar")?.statusPanels;if(!J)return J;return J.filter((Q)=>{let{rowModels:Z,warnArgs:$}=BO[Q.statusPanel]??{};if(!Z)return!0;if(Z.includes(z.get("rowModelType")))return!0;return V(...$),!1})}processStatusPanels(z){let J=this.getValidPanels();if(J){let Q=J.filter((X)=>X.align==="left"),Z=J.filter((X)=>X.align==="center"),$=J.filter((X)=>!X.align||X.align==="right");this.panelsPromise=N.all([this.createAndRenderComponents(Q,this.eStatusBarLeft,z),this.createAndRenderComponents(Z,this.eStatusBarCenter,z),this.createAndRenderComponents($,this.eStatusBarRight,z)])}else this.setDisplayed(!1)}handleStatusBarChanged(){if(this.updateQueued)return;this.updateQueued=!0,this.panelsPromise.then(()=>{this.updateStatusBar(),this.updateQueued=!1})}updateStatusBar(){let z=this.getValidPanels(),J=Array.isArray(z)&&z.length>0;this.setDisplayed(J);let Q=new Map;if(J)for(let Z of z){let $=Z.key??Z.statusPanel,X=this.statusBarSvc.getStatusPanel($);if(X?.refresh){let Y=C(this.gos,{...Z.statusPanelParams??{},key:$});if(X.refresh(Y))Q.set($,X),delete this.compDestroyFunctions[$],R0(X.getGui())}}if(this.resetStatusBar(),J)this.processStatusPanels(Q)}resetStatusBar(){J0(this.eStatusBarLeft),J0(this.eStatusBarCenter),J0(this.eStatusBarRight),this.destroyComponents(),this.statusBarSvc.unregisterAllComponents()}destroy(){this.destroyComponents(),super.destroy()}destroyComponents(){for(let z of Object.values(this.compDestroyFunctions))z();this.compDestroyFunctions={}}createAndRenderComponents(z,J,Q){let Z=[];for(let $ of z){let X=$.key||$.statusPanel,Y=Q.get(X),q;if(Y)q=N.resolve(Y);else{let G=HO(this.userCompFactory,$,C(this.gos,{key:X}));if(G==null)continue;q=G.newAgStackInstance()}Z.push({key:X,promise:q})}return N.all(Z.map(($)=>$.promise)).then(()=>{for(let $ of Z)$.promise.then((X)=>{let Y=()=>{this.destroyBean(X)};if(this.isAlive())this.statusBarSvc.registerStatusPanel($.key,X),J.appendChild(X.getGui()),this.compDestroyFunctions[$.key]=Y;else Y()})})}},FO={selector:"AG-STATUS-BAR",component:KO},LO={tag:"div",cls:"ag-status-name-value",children:[{tag:"span",ref:"eLabel"},": ",{tag:"span",ref:"eValue",cls:"ag-status-name-value-value"}]},DO=BigInt(Number.MIN_SAFE_INTEGER),MO=BigInt(Number.MAX_SAFE_INTEGER),X6=class extends x{constructor(){super(LO);this.eLabel=j,this.eValue=j}setLabel(z,J){this.setDisplayed(!1),this.eLabel.textContent=this.getLocaleTextFunc()(z,J)}setValue(z,J){let Q=null,Z;if(typeof z==="bigint"){if(Z=z,z>=DO&&z<=MO)Q=Number(z)}else Q=z;this.eValue.textContent=this.valueFormatter(C(this.gos,{value:Q,bigintValue:Z,totalRows:J,key:this.key}))}},kO={selector:"AG-NAME-VALUE",component:X6},Cq=(z)=>{let J=0;return z.forEachNodeAfterFilter((Q)=>{if(Q.data)J++}),J},Y6=(z)=>{let J=0;return z.forEachNode((Q)=>{if(Q.data)J++}),J};function fO(z,J){if(typeof z!=="number")return"";return P4(Math.round(z*100)/100,J)}var SO={tag:"div",cls:"ag-status-panel ag-status-panel-aggregations",children:[{tag:"ag-name-value",ref:"avgAggregationComp"},{tag:"ag-name-value",ref:"countAggregationComp"},{tag:"ag-name-value",ref:"minAggregationComp"},{tag:"ag-name-value",ref:"maxAggregationComp"},{tag:"ag-name-value",ref:"sumAggregationComp"}]},VO=class extends x{constructor(){super(SO,[kO]);this.sumAggregationComp=j,this.countAggregationComp=j,this.minAggregationComp=j,this.maxAggregationComp=j,this.avgAggregationComp=j}postConstruct(){this.avgAggregationComp.setLabel("avg","Average"),this.countAggregationComp.setLabel("count","Count"),this.minAggregationComp.setLabel("min","Min"),this.maxAggregationComp.setLabel("max","Max"),this.sumAggregationComp.setLabel("sum","Sum"),this.addManagedEventListeners({cellSelectionChanged:this.onCellSelectionChanged.bind(this),modelUpdated:this.onCellSelectionChanged.bind(this)})}init(z){this.refresh(z)}refresh(z){this.params=z;let J=z.valueFormatter??((Z)=>{let{value:$,bigintValue:X}=Z;if(X!=null)return X.toString();return fO($,this.getLocaleTextFunc.bind(this))}),Q=["avg","count","min","max","sum"];for(let Z of Q){let $=this.getAllowedAggregationValueComponent(Z);if($)$.key=Z,$.valueFormatter=J.bind(this)}return this.onCellSelectionChanged(),!0}setAggregationComponentValue(z,J,Q){let Z=this.getAllowedAggregationValueComponent(z),$=Y6(this.beans.rowModel);if(P(Z)&&Z)Z.setValue(J,$),Z.setDisplayed(Q);else this.getAggregationValueComponent(z)?.setDisplayed(!1)}getAllowedAggregationValueComponent(z){let{aggFuncs:J}=this.params;if(!J||J.includes(z))return this.getAggregationValueComponent(z);return null}getAggregationValueComponent(z){let J=`${z}AggregationComp`;return this[J]}onCellSelectionChanged(){let z=this.beans,{rangeSvc:J,valueSvc:Q}=z,Z=J?.getCellRanges(),$=0,X=0n,Y=!1,q=!1,G=0,U=0,_=null,H=null,W=null,B=null,E=(I)=>{if(typeof I==="number"){if($+=I,_===null||I<_)_=I;if(H===null||I>H)H=I;if(!Number.isInteger(I)||!Number.isSafeInteger(I))q=!0;else{let b=BigInt(I);if(X+=b,W===null||bB)B=b}}else{if(Y=!0,X+=I,W===null||IB)B=I;let b=Number(I);if($+=b,_===null||b<_)_=b;if(H===null||b>H)H=b}U++},K={};if(Z?.length&&J)for(let I=0;I{if(m===null)return;let u=n4({rowPinned:m.rowPinned,column:t,rowIndex:m.rowIndex});if(K[u])return;K[u]=!0;let Q0=S0(z,m);if(d(Q0))return;let s=Q.getValue(t,Q0,"data");if(d(s)||s==="")return;if(G++,typeof s==="object"&&"value"in s){if(s=s.value,s==="")return}if(typeof s==="string"){let P0=s.trim();if(P0==="")return;let T0=Number(P0);if(!Number.isFinite(T0))return;if($+T0>=Number.MAX_SAFE_INTEGER||$+T0<=Number.MIN_SAFE_INTEGER||T0>=Number.MAX_SAFE_INTEGER||T0<=Number.MIN_SAFE_INTEGER){if(s=Sz(P0),s===null)s=T0}else s=T0}if(typeof s==="number"&&!isNaN(s)||typeof s==="bigint")E(s)}),m=M0(z,m)}}let F=G>1,L=U>1,D=Y&&!q,M;if(D)M=X/BigInt(U);else M=$/U;let f=L?D?X:$:null,A=L?D?W:_:null,R=L?D?B:H:null,O=L?M:null,v=L;this.setAggregationComponentValue("count",G,F),this.setAggregationComponentValue("sum",f,L),this.setAggregationComponentValue("min",A,L),this.setAggregationComponentValue("max",R,L),this.setAggregationComponentValue("avg",O,v)}},RO=class extends X6{postConstruct(){this.setLabel("filteredRows","Filtered"),this.addCss("ag-status-panel"),this.addCss("ag-status-panel-filtered-row-count"),this.setDisplayed(!0);let z=this.onDataChanged.bind(this);this.addManagedEventListeners({modelUpdated:z})}onDataChanged(){let{rowModel:z}=this.beans,J=Y6(z),Q=Cq(z);this.setValue(Q,J),this.setDisplayed(J!==Q)}init(z){this.refresh(z),this.onDataChanged()}updateValueFormatter(z){this.valueFormatter=z??(({value:J})=>P4(J,this.getLocaleTextFunc.bind(this)))}refresh(z){let{key:J,valueFormatter:Q}=z;return this.key=J,this.updateValueFormatter(Q),!0}},AO=class extends X6{postConstruct(){this.setLabel("selectedRows","Selected"),this.addCss("ag-status-panel"),this.addCss("ag-status-panel-selected-row-count");let z=this.onRowSelectionChanged.bind(this);this.addManagedEventListeners({modelUpdated:z,selectionChanged:z})}onRowSelectionChanged(){let{selectionSvc:z,rowModel:J}=this.beans,Q=z?.getSelectionCount()??0,Z=Y6(J);if(this.setValue(Q,Z),Q<0){this.setDisplayed(!0);return}this.setDisplayed(Q>0)}init(z){this.refresh(z),this.onRowSelectionChanged()}updateValueFormatter(z){this.valueFormatter=z??(({value:J})=>{if(J==null||J>=0)return P4(J,this.getLocaleTextFunc.bind(this));return this.getLocaleTextFunc()("statusBarLastRowUnknown","?")})}refresh(z){let{key:J,valueFormatter:Q}=z;return this.key=J,this.updateValueFormatter(Q),!0}},jO=class extends X6{postConstruct(){this.setLabel("totalAndFilteredRows","Rows"),this.addCss("ag-status-panel"),this.addCss("ag-status-panel-total-and-filtered-row-count"),this.setDisplayed(!0),this.addManagedEventListeners({modelUpdated:this.onDataChanged.bind(this)})}onDataChanged(){let{rowModel:z}=this.beans,J=Cq(z),Q=Y6(z);this.setValue(J,Q)}init(z){this.refresh(z),this.onDataChanged()}updateValueFormatter(z){this.valueFormatter=z??(({value:J,totalRows:Q})=>{let Z=this.getLocaleTextFunc.bind(this),$=P4(J,Z),X=P4(Q??J,Z);if(J===Q)return $;let Y=Z();return`${$} ${Y("of","of")} ${X}`})}refresh(z){let{key:J,valueFormatter:Q}=z;return this.key=J,this.updateValueFormatter(Q),!0}},OO=class extends X6{postConstruct(){this.setLabel("totalRows","Total Rows"),this.addCss("ag-status-panel"),this.addCss("ag-status-panel-total-row-count"),this.setDisplayed(!0),this.addManagedEventListeners({modelUpdated:this.onDataChanged.bind(this)})}onDataChanged(){let z=Y6(this.beans.rowModel);this.setValue(z,z)}init(z){this.refresh(z),this.onDataChanged()}updateValueFormatter(z){this.valueFormatter=z??(({value:J})=>P4(J,this.getLocaleTextFunc.bind(this)))}refresh(z){let{key:J,valueFormatter:Q}=z;return this.key=J,this.updateValueFormatter(Q),!0}};function PO(z,J){let Q=z.statusBarSvc?.getStatusPanel(J);return zz(Q)}var TO=class extends S{constructor(){super();this.beanName="statusBarSvc",this.comps=new Map}registerStatusPanel(z,J){this.comps.set(z,J)}unregisterStatusPanel(z){this.comps.delete(z)}unregisterAllComponents(){this.comps.clear()}getStatusPanel(z){return this.comps.get(z)}destroy(){this.unregisterAllComponents(),super.destroy()}},yq={moduleName:"StatusBar",version:$0,beans:[TO],userComponents:{agAggregationComponent:VO,agTotalRowCountComponent:OO,agFilteredRowCountComponent:RO,agTotalAndFilteredRowCountComponent:jO,agSelectedRowCountComponent:AO},selectors:[FO],apiFunctions:{getStatusPanel:PO},dependsOn:[C0,Y1]};function bq(z){if(z.excelCreator?.getFactoryMode()==="MULTI_SHEET")return V(161),!1;return!0}function vO(z,J){if(bq(z))return z.excelCreator?.getDataAsExcel(J);return}function IO(z,J){if(bq(z))z.excelCreator?.exportDataAsExcel(J)}function CO(z,J){return z.excelCreator?.setFactoryMode("MULTI_SHEET"),z.excelCreator?.getSheetDataForExcel(J)}function yO(z,J){return z.excelCreator?.getMultipleSheetsAsExcel(J)}function bO(z,J){z.excelCreator?.exportMultipleSheetsAsExcel(J)}var xq={moduleName:"ExcelExport",version:$0,beans:[vR],apiFunctions:{getDataAsExcel:vO,exportDataAsExcel:IO,getSheetDataForExcel:CO,getMultipleSheetsAsExcel:yO,exportMultipleSheetsAsExcel:bO},dependsOn:[W5,C0]};function rJ(z){let{filters:J}=z;return J&&J.length>0?J:[{filter:"agTextColumnFilter"},{filter:"agSetColumnFilter"}]}function cJ(z,J){if(z==null)return;for(let Q=z.length-1;Q>=0;Q--)J(z[Q],Q)}function xO(z,J){if(J.title!=null)return J.title;return z instanceof $1?z.getFilterTitle():"Filter"}function iJ(z,J,Q,Z){let $=[],X=z?.filterModels;for(let Y=0;YY==null)?null:{filterType:"multi",filterModels:$}}function Xz(z,J){return z?.filterModels?.[J]??null}function pJ(z,J,Q,Z){let $=Q.filterValueGetter;return $?z.colFilter.createGetValue(J,$):Z}var wq=class extends eZ{constructor(){super({tag:"div",cls:"ag-multi-filter ag-menu-list-compact"});this.filterDefs=[],this.guiDestroyFuncs=[],this.filterGuis=[],this.lastActivatedMenuItem=null}postConstruct(){this.initialiseTabGuard({onFocusIn:(z)=>this.onFocusIn(z)})}refreshGui(z){if(z===this.lastOpenedInContainer)return N.resolve();return this.tabGuardFeature.removeAllChildrenExceptTabGuards(),this.destroyChildren(),N.all(this.getFilterWrappers().map((J,Q)=>{if(!J)return N.resolve(null);let Z=this.getFilterFromWrapper(J),$=this.getCompFromWrapper(J),X=this.filterDefs[Q],Y=xO(Z,X),q;if(X.display==="subMenu"&&z!=="toolPanel")q=this.insertFilterMenu($,Z,Y).then((G)=>G.getGui());else if(X.display==="subMenu"||X.display==="accordion"){let G=this.insertFilterGroup(Z,$,Y);q=N.resolve(G.getGui())}else q=N.resolve($.getGui());return q})).then((J)=>{J.forEach((Q,Z)=>{if(!Q)return;if(Z>0)this.appendChild(z0({tag:"div",cls:"ag-filter-separator"}));this.appendChild(Q)}),this.filterGuis=J,this.lastOpenedInContainer=z})}destroyChildren(){for(let z of this.guiDestroyFuncs)z();this.guiDestroyFuncs.length=0,this.filterGuis.length=0}insertFilterMenu(z,J,Q){let Z=z.getGui();U0(Z,"dialog");let $=this.createBean(new sA),X={getGui:()=>z.getGui(),afterGuiAttached:(Y)=>{if(z.afterGuiAttached?.(Y),z!==J)J.afterGuiAttached?.(Y)}};return $.init({menuItemDef:{name:Q,subMenu:[],subMenuRole:"dialog",cssClasses:["ag-multi-filter-menu-item"],menuItem:Uq,menuItemParams:{cssClassPrefix:"ag-compact-menu-option",isCompact:!0}},level:0,isAnotherSubMenuOpen:()=>!1,childComponent:X,contextParams:{column:null,node:null,value:null}}).then(()=>{$.setParentComponent(this),this.guiDestroyFuncs.push(()=>this.destroyBean($)),this.addManagedListeners($,{menuItemActivated:(q)=>{if(this.lastActivatedMenuItem&&this.lastActivatedMenuItem!==q.menuItem)this.lastActivatedMenuItem.deactivate();this.lastActivatedMenuItem=q.menuItem}});let Y=$.getGui();return $.addManagedElementListeners(Y,{keydown:(q)=>{let{key:G}=q;switch(G){case k.UP:case k.RIGHT:case k.DOWN:case k.LEFT:if(q.preventDefault(),G===k.RIGHT)$.openSubMenu(!0);break}},focusin:()=>$.activate(),focusout:()=>{if(!$.isSubMenuOpen()&&!$.isSubMenuOpening())$.deactivate()}}),$})}insertFilterGroup(z,J,Q){let Z=this.createBean(new lR({title:Q,cssIdentifier:"multi-filter"}));if(this.guiDestroyFuncs.push(()=>this.destroyBean(Z)),Z.addItem(J.getGui()),Z.toggleGroupExpand(!1),z.afterGuiAttached)Z.addManagedListeners(Z,{expanded:()=>z.afterGuiAttached({container:this.lastOpenedInContainer,suppressFocus:!0,hidePopup:this.hidePopup})});return Z}afterGuiAttached(z){let J;if(z)this.hidePopup=z.hidePopup,J=this.refreshGui(z.container);else this.hidePopup=void 0,J=N.resolve();let Q=z?.suppressFocus;J.then(()=>{let{filterDefs:Z,filterGuis:$,beans:X}=this,Y=this.getFilterWrappers(),q=!!Q;if(Z)cJ(Z,(U,_)=>{let H=_===0,W=U.display&&U.display!=="inline",B=Q||!H||W,E={...z??{},suppressFocus:B},K=Y[_],F=K?this.getFilterFromWrapper(K):void 0;if(K){let L=this.getCompFromWrapper(K);if(L!==F)L.afterGuiAttached(E)}if(F){if(this.executeFunctionIfExistsOnFilter(F,"afterGuiAttached",E),H&&!B)q=!0}if(!Q&&H&&W){let L=$[_];if(L){if(!E0(L))L.focus({preventScroll:!0});q=!0}}});let G=n(X);if(!q&&(Vz(X)||this.getGui().contains(G)))this.forceFocusOutOfContainer(!0)})}afterGuiDetached(){this.executeFunctionIfExists("afterGuiDetached")}onAnyFilterChanged(){this.executeFunctionIfExists("onAnyFilterChanged",(z)=>this.executeOnWrapper(z,"onAnyFilterChanged"))}onNewRowsLoaded(){this.executeFunctionIfExists("onNewRowsLoaded",(z)=>this.executeOnWrapper(z,"onNewRowsLoaded"))}destroy(){this.destroyChildren(),this.hidePopup=void 0,super.destroy()}executeOnWrapper(z,J){}executeFunctionIfExists(z,J){cJ(this.getFilterWrappers(),(Q)=>{if(Q)J?.(Q),this.executeFunctionIfExistsOnFilter(this.getFilterFromWrapper(Q),z)})}executeFunctionIfExistsOnFilter(z,J,...Q){let Z=z[J];if(typeof Z==="function")Z.apply(z,Q)}onFocusIn(z){let J=this.lastActivatedMenuItem;if(J!=null&&!J.getGui().contains(z.target))J.deactivate(),this.lastActivatedMenuItem=null}},Nq=class extends wq{constructor(){super(...arguments);this.filterType="multi",this.wrappers=[],this.activeFilterIndices=[],this.afterFiltersReadyFuncs=[]}init(z){this.params=z,this.filterDefs=rJ(z);let J=f0(this.beans.colFilter.model,z.column.getColId()),{filterChangedCallback:Q}=z;this.filterChangedCallback=Q;let Z=this.filterDefs.map(($,X)=>this.createFilter($,X,J));return new N(($)=>{N.all(Z).then((X)=>{this.wrappers=X,this.refreshGui("columnMenu").then(()=>{$()})})}).then(()=>{for(let $ of this.afterFiltersReadyFuncs)$();this.afterFiltersReadyFuncs.length=0})}refresh(z){return this.params=z,!0}isFilterActive(){return this.wrappers.some((z)=>{if(!z)return!1;let{filter:J,handler:Q,model:Z}=z;if(Q)return Z!=null;return J.isFilterActive()})}getLastActiveFilterIndex(){let z=this.activeFilterIndices;return z.length>0?z[z.length-1]:null}doesFilterPass(z,J){return this.wrappers.every((Q,Z)=>{if(!Q||J!=null&&Z===J)return!0;let{handler:$,filter:X,model:Y}=Q;if($)return Y==null||$.doesFilterPass({...z,model:Y,handlerParams:Q.handlerParams});return!X.isFilterActive()||X.doesFilterPass(z)})}getModelFromUi(){return{filterType:this.filterType,filterModels:this.wrappers.map((J)=>{if(!J)return null;let Q=J.filter;if(typeof Q.getModelFromUi==="function")return Q.getModelFromUi();return null})}}getModel(){if(!this.isFilterActive())return null;return{filterType:this.filterType,filterModels:this.wrappers.map((J)=>{if(!J)return null;let{filter:Q,handler:Z,model:$}=J;if(Z)return $;return Q.isFilterActive()?Q.getModel():null})}}setModel(z){let J=(Z,$)=>{return new N((X)=>{let Y=Z.setModel($);if(Y)Y.then(X);else X()})},Q=[];return this.wrappers.forEach((Z,$)=>{if(!Z)return;let X=Xz(z,$),{filter:Y,filterParams:q,handler:G,handlerParams:U,state:_}=Z;if(G){let H={model:X,state:_?.state};Z.state=H,Z.model=X,Q.push(VJ(()=>N.resolve({filter:Y,filterParams:q}),G,U,X,H,"api").then(()=>{this.updateActiveListForHandler($,Z.model)}))}else Q.push(J(Y,X).then(()=>{this.updateActiveListForFilter($,Y)}))}),N.all(Q).then(()=>{})}applyModel(z="api"){let J=!1;for(let Q of this.wrappers)if(Q){let Z=Q.filter;if(Z instanceof $1)J=Z.applyModel(z)||J}return J}getChildFilterInstance(z){return this.wrappers[z]?.filter}getNumChildFilters(){return this.wrappers.length}destroy(){for(let z of this.wrappers)this.destroyBean(z?.filter),this.destroyBean(z?.handler);this.wrappers.length=0,super.destroy()}getFilterWrappers(){return this.wrappers}getFilterFromWrapper(z){return z.filter}getCompFromWrapper(z){return z.comp}executeOnWrapper(z,J){z.handler?.[J]?.()}createFilter(z,J,Q){let Z=this.params.column,$=null,X,Y=this.beans,q=(B,E)=>{let K=this.wrappers[J];if(!K)return;let F={model:B,state:K.state?.state};K.state=F,K.model=B,VJ(()=>N.resolve({filter:K.filter,filterParams:K.filterParams}),K.handler,K.handlerParams,B,F,"ui").then(()=>{this.onHandlerModelChanged(J,K.model,E)})},{compDetails:G,handler:U,handlerParams:_,createFilterUi:H}=Y.colFilter.createFilterInstance(Z,z,"agTextColumnFilter",(B,E)=>{let K={...B,filterChangedCallback:E?()=>{}:(F)=>{this.executeWhenAllFiltersReady(()=>this.onFilterModelChanged(J,F))},doesRowPassOtherFilter:(F)=>B.doesRowPassOtherFilter(F)&&this.doesFilterPass({node:F,data:F.data},J),getValue:pJ(Y,Z,z,B.getValue)};if(E)$=Xz(Q,J),X=this.updateDisplayParams(K,J,$,()=>G,()=>U,q);return K});if(!H)return N.resolve(null);let W;if(U){let{doesRowPassOtherFilter:B,getValue:E}=_;W={..._,onModelChange:q,doesRowPassOtherFilter:(K)=>B(K)&&this.doesFilterPass({node:K,data:K.data},J),getValue:pJ(Y,Z,z,E)},U.init?.({...W,model:$,source:"init"})}return H().then((B)=>{if(!U)return{filter:B,comp:B};let E=G?.params,K=X(B);return{filter:B,comp:K,filterParams:E,handler:U,handlerParams:W,model:$}})}updateDisplayParams(z,J,Q,Z,$,X){let Y=this.params.column,q=new R4;z.model=Q,z.state={model:Q},z.onModelChange=X,z.getHandler=$;let G=(_,H)=>{_.state=H,q.dispatchEvent({type:"filterStateChanged",column:Y,state:H})};z.onStateChange=(_)=>{let H=this.wrappers[J];if(!H)return;G(H,_),l1(H.filter,H.filterParams,H.model??null,_,"ui")};let U=(_,H,W)=>{let B=this.wrappers[J];if(!B)return;let E=()=>B?.model??null;d6({action:H,filterParams:B.filterParams,getFilterUi:()=>{let K=N.resolve(B.filter);return{created:!0,filterParams:B.filterParams,compDetails:Z(),create:()=>K,promise:K}},getModel:E,getState:()=>B?.state??{model:E()},updateState:(K)=>G(B,K),updateModel:(K)=>B.filterParams?.onModelChange(K,W),processModelToApply:B.handler?.processModelToApply?.bind(B.handler)})};return z.onAction=(_,H,W)=>{U(Y,_,H),q.dispatchEvent({type:"filterAction",column:Y,action:_,event:W})},(_)=>{let H=Z()?.params;return this.createManagedBean(new k5(Y,{comp:_,params:H,isHandler:!0},q,U,!1))}}executeWhenAllFiltersReady(z){if((this.wrappers?.length??0)>0)z();else this.afterFiltersReadyFuncs.push(z)}updateActiveListForFilter(z,J){this.updateActiveList(z,()=>J?.isFilterActive())}updateActiveListForHandler(z,J){this.updateActiveList(z,()=>J!=null)}updateActiveList(z,J){let Q=this.activeFilterIndices;if(X0(this.activeFilterIndices,z),J())Q.push(z)}onFilterModelChanged(z,J){this.updateActiveListForFilter(z,this.wrappers[z]?.filter),this.filterChanged(z,J)}onHandlerModelChanged(z,J,Q){this.updateActiveListForHandler(z,J),this.filterChanged(z,Q)}filterChanged(z,J){this.filterChangedCallback(J),this.wrappers.forEach((Q,Z)=>{if(z===Z||!Q)return;let{filter:$,handler:X}=Q;if(X?.onAnyFilterChanged?.(),typeof $.onAnyFilterChanged==="function")$.onAnyFilterChanged()})}getModelAsString(z){if(!z?.filterModels?.length)return"";let J=this.getLastActiveFilterIndex()??0;return this.wrappers[J]?.filter?.getModelAsString?.(z.filterModels[J])??""}},wO=class extends S{constructor(){super(...arguments);this.filterType="multi",this.handlerWrappers=[],this.activeFilterIndices=[],this.filterDefs=[]}init(z){this.params=z;let J=rJ(z.filterParams);this.filterDefs=J,J.forEach((Q,Z)=>{let $=this.beans.colFilter.createHandler(z.column,Q,"agTextColumnFilter");if(this.handlerWrappers.push($),!$){V(278,{colId:z.column.getColId()});return}let{handler:X,handlerParams:Y}=$;X.init?.({...this.updateHandlerParams(Y,Z,!0),model:Xz(z.model,Z),source:"init"})}),this.resetActiveList(z.model)}refresh(z){this.params=z;let{model:J,source:Q,filterParams:Z}=z,$=Z?.filters;if(this.handlerWrappers.forEach((X,Y)=>{if(X){let q=this.updateHandlerParams(z,Y,!1,$?.[Y].filterParams);X.handlerParams=q,X.handler.refresh?.({...q,model:Xz(J,Y),source:Q})}}),z.source!=="floating"&&z.source!=="ui")this.resetActiveList(z.model);if(z.additionalEventAttributes?.fromButtons)this.onAnyFilterChanged()}updateHandlerParams(z,J,Q,Z){let{onModelChange:$,doesRowPassOtherFilter:X,getValue:Y}=z,q={...z,onModelChange:(G,U)=>$(iJ(this.params.model,this.handlerWrappers.length,G,J),U),doesRowPassOtherFilter:(G)=>X(G)&&this.doesFilterPass({node:G,data:G.data,model:this.params.model,handlerParams:q},J),getValue:pJ(this.beans,z.column,this.filterDefs[J],Y),filterParams:this.updateFilterParams(z,Q,Z)};return q}updateFilterParams(z,J,Q){let Z=z.filterParams;if(Q?.buttons&&J)V(292,{colId:z.column.getColId()});let $=Q?{...Z,...Q}:Z;if(!$.buttons)return $;if(Q)return delete $.buttons,$;let{buttons:X,...Y}=$;return Y}doesFilterPass(z,J){let Q=z.model?.filterModels;if(Q==null)return!0;return this.handlerWrappers.every((Z,$)=>{let X=Q[$];if(X==null||J!=null&&$===J)return!0;let Y=Z?.handler;return!Y||Y.doesFilterPass({...z,model:X,handlerParams:Z.handlerParams})})}resetActiveList(z){this.activeFilterIndices=[];let J=z?.filterModels;if(J==null)return;for(let Q=0;Q0?z[z.length-1]:null}getModelAsString(z,J){let Q=J==="filterToolPanel",Z=()=>Q?this.getLocaleTextFunc()("filterSummaryInactive","is (All)"):"";if(!z?.filterModels?.length)return Z();let $=this.getLastActiveFilterIndex()??0;return this.handlerWrappers[$]?.handler.getModelAsString?.(z.filterModels[$],J)??Z()}getHandler(z){return this.handlerWrappers[z]?.handler}onAnyFilterChanged(){cJ(this.handlerWrappers,(z)=>z?.handler?.onAnyFilterChanged?.())}onNewRowsLoaded(){cJ(this.handlerWrappers,(z)=>z?.handler?.onNewRowsLoaded?.())}destroy(){for(let z of this.handlerWrappers)this.destroyBean(z?.handler);this.handlerWrappers.length=0,super.destroy()}},NO=class extends S{constructor(){super(...arguments);this.beanName="multiFilter"}getParamsForDataType(z,J,Q,Z){let $=z?.filters,X=this.beans;if(!$)$=[{filter:L5(Q.baseDataType)},{filter:"agSetColumnFilter"}];let Y=this.getLocaleTextFunc();return $=$.map((q)=>{let{filter:G,filterParams:U,filterValueGetter:_}=q;if(typeof G!=="string")return q;let{filterParams:H,filterValueGetter:W}=F5(G,U,_??J,Q,Z,X,Y);return{...q,filterParams:H,filterValueGetter:W}}),{filterParams:{...z,filters:$}}}},gq=class extends wq{constructor(){super(...arguments);this.filterType="multi",this.filters=[],this.filterParams=[],this.validity=[]}init(z){this.params=z;let J=rJ(z).map((Z)=>{if(Z.filterParams?.buttons){V(292,{colId:z.column.getColId()});let $={...Z.filterParams};return delete $.buttons,{...Z,filterParams:$}}return Z});this.filterDefs=J,this.allState=z.state;let Q=this.filterDefs.map((Z,$)=>this.createFilter(Z,$));return new N((Z)=>{N.all(Q).then(($)=>{this.filters=$,this.refreshGui("columnMenu").then(()=>{Z()})})})}refresh(z){let{model:J,state:Q,source:Z}=z;if(Z==="colDef")return!1;this.params=z;let $=this.filterParams;if(Q===this.allState)return!0;this.allState=Q;let X=Q.state;return this.filters.forEach((Y,q)=>{let G=Xz(J,q),U={state:X?.[q],model:Xz(Q.model,q)};l1(Y,$[q],G,U,Z)}),!0}getLastActiveFilterIndex(){return this.getHandler().getLastActiveFilterIndex?.()??null}getChildFilterInstance(z){return this.filters[z]??void 0}getNumChildFilters(){return this.filters.length}destroy(){for(let z of this.filters)this.destroyBean(z);this.filters.length=0,super.destroy()}getFilterWrappers(){return this.filters}getFilterFromWrapper(z){return z}getCompFromWrapper(z){return z}createFilter(z,J){let Q=this.beans.userCompFactory,Z=this.updateParams(z,this.params,J),$=yZ(Q,z,Z,"agTextColumnFilter");if(!$)return N.resolve(null);return this.filterParams[J]=$.params,$.newAgStackInstance()}updateParams(z,J,Q){let{doesRowPassOtherFilter:Z,model:$,onModelChange:X,state:Y,onStateChange:q,column:G,source:U,onAction:_,onUiChange:H,getValue:W}=J,B=Xz($,Q),E=Y?{model:Xz(Y.model,Q),state:Y.state?.[Q]}:{model:B},K=()=>{let L=this.getHandler();this.filters.forEach((D,M)=>{if(Q!==M)L.getHandler(M)?.onAnyFilterChanged?.(),D?.onAnyFilterChanged?.()})},F=this.beans.colFilter;return{...F.createBaseFilterParams(G),...z,doesRowPassOtherFilter:(L)=>Z(L)&&this.getHandler().doesFilterPass({node:L,data:L.data,model:this.params.model,handlerParams:F.getHandlerParams(G)},Q),model:B,state:E,onModelChange:(L,D)=>{let{filters:M,params:f}=this,A=iJ(f.model,M.length,L,Q);this.updateActiveList(Q,L),X(A,D),K()},onStateChange:(L)=>this.onStateChange(q,Q,L),getHandler:()=>this.getHandler().getHandler(Q),onAction:(L,D,M)=>{if(d1(J))return;let f=L==="apply"||L==="reset";if(f)this.updateActiveList(Q,Xz(this.params.state.model,Q));if(_(L,D,M),f)K()},onUiChange:H,source:U,getValue:pJ(this.beans,G,z,W)}}updateActiveList(z,J){this.getHandler().updateActiveList?.(z,J)}getHandler(){return this.params.getHandler()}onStateChange(z,J,Q){let{model:Z,state:$,valid:X}=Q,Y=this.validity;Y[J]=X;let q=this.allState,G=iJ(q.model,this.filters.length,Z,J),U=Y.every((W)=>W!==!1),_=[...q.state??[]];_[J]=$;let H={state:_,model:G,valid:U};this.allState=H,z(H)}getModelAsString(z){return this.getHandler().getModelAsString?.(z)??""}},gO={tag:"div",cls:"ag-multi-floating-filter ag-floating-filter-input"},hO=class extends x{constructor(){super(gO);this.floatingFilters=[],this.compDetailsList=[]}init(z){this.params=z;let{compDetailsList:J}=this.getCompDetailsList(z);return this.setParams(J)}setParams(z){let J=[];return z.forEach((Q)=>{let Z=Q?.newAgStackInstance();if(Z!=null)this.compDetailsList.push(Q),J.push(Z)}),N.all(J).then((Q)=>{Q.forEach((Z,$)=>{this.floatingFilters.push(Z);let X=Z.getGui();if(this.appendChild(X),$>0)w(X,!1)})})}refresh(z){this.params=z;let{compDetailsList:J,floatingFilterParamsList:Q}=this.getCompDetailsList(z);if(J.length===this.compDetailsList.length&&J.every(($,X)=>!this.beans.colFilter?.areFilterCompsDifferent(this.compDetailsList[X],$))){if(Q.forEach(($,X)=>{this.floatingFilters[X].refresh?.($)}),this.gos.get("enableFilterHandlers")){let $=z;if($.model==null)this.floatingFilters.forEach((X,Y)=>{w(X.getGui(),Y===0)});else{let X=$.getHandler()?.getLastActiveFilterIndex?.();this.floatingFilters.forEach((Y,q)=>{let G=X==null?q===0:q===X;w(Y.getGui(),G)})}}}else J0(this.getGui()),this.destroyBeans(this.floatingFilters),this.floatingFilters=[],this.compDetailsList=[],this.setParams(J)}getCompDetailsList(z){let J=[],Q=[],Z=z.filterParams,$=z.currentParentModel,X=rJ(Z);return X.forEach((Y,q)=>{let G={...z,parentFilterInstance:(_)=>{this.parentMultiFilterInstance((H)=>{let W=H.getChildFilterInstance(q);if(W==null)return;_(W)})},currentParentModel:()=>$()?.filterModels?.[q]??null};if(this.gos.get("enableFilterHandlers")){let _=G;_.model=_.model?.filterModels?.[q]??null;let{onModelChange:H,getHandler:W}=_;_.onModelChange=(B,E)=>H(iJ(this.params.model,X.length,B,q),E),_.getHandler=()=>{return W().getHandler(q)}}D0(G.filterParams,Y.filterParams);let U=this.getCompDetails(Y,G);if(U)J.push(U),Q.push(G)}),{compDetailsList:J,floatingFilterParamsList:Q}}onParentModelChanged(z,J){if(J?.afterFloatingFilter)return;this.parentMultiFilterInstance((Q)=>{if(z==null)this.floatingFilters.forEach((Z,$)=>{Z.onParentModelChanged(null,J),w(Z.getGui(),$===0)});else{let Z=Q.getLastActiveFilterIndex();this.floatingFilters.forEach(($,X)=>{let Y=z.filterModels.length>X?z.filterModels[X]:null;$.onParentModelChanged(Y,J);let q=Z==null?X===0:X===Z;w($.getGui(),q)})}})}destroy(){this.destroyBeans(this.floatingFilters),this.floatingFilters.length=0,super.destroy()}getCompDetails(z,J){let{colFilter:Q,frameworkOverrides:Z,userCompFactory:$}=this.beans,X=D5(Z,z,()=>Q.getDefaultFloatingFilter(this.params.column))??"agReadOnlyFloatingFilter";return bZ($,z,J,X)}parentMultiFilterInstance(z){this.params.parentFilterInstance((J)=>{if(!(J instanceof Nq||J instanceof gq))r(120);z(J)})}},hq={moduleName:"MultiFilter",version:$0,userComponents:{agMultiColumnFilter:{getComp:(z)=>z.gos.get("enableFilterHandlers")?{classImp:gq,params:{useForm:!0}}:Nq},agMultiColumnFloatingFilter:hO},beans:[NO],dynamicBeans:{agMultiColumnFilterHandler:wO},dependsOn:[C0,G1,G7]},uO=class extends S{constructor(){super(...arguments);this.beanName="aggColNameSvc"}getHeaderName(z,J){if(this.gos.get("suppressAggFuncInHeader"))return J;let{valueColsSvc:Q,colModel:Z,rowGroupColsSvc:$}=this.beans,X=z.getColDef().pivotValueColumn,Y=P(X),q=null,G;if(Y){let U=Q?.columns??[],_=this.gos.get("removePivotHeaderRowWhenSingleValueColumn")&&U.length===1,H=z.getColDef().pivotTotalColumnIds!==void 0;if(_&&!H)return J;q=X?X.getAggFunc():null,G=!0}else{let U=z.isValueActive(),_=$?.columns.length!==0,H=Z.isPivotMode()||_||this.gos.get("treeData");if(U&&H)q=z.getAggFunc(),G=!0;else G=!1}if(G){let U=typeof q==="string"?q:"func";return`${this.getLocaleTextFunc()(U,U)}(${J})`}return J}},mO={sum:"Sum",first:"First",last:"Last",min:"Min",max:"Max",count:"Count",avg:"Average"},cO=class extends S{constructor(){super(...arguments);this.beanName="aggFuncSvc",this.aggFuncsMap={},this.initialised=!1}postConstruct(){this.init()}init(){if(this.initialised)return;this.initialiseWithDefaultAggregations(),this.addAggFuncs(this.gos.get("aggFuncs"))}initialiseWithDefaultAggregations(){let z=this.aggFuncsMap;z.sum=iO,z.first=pO,z.last=nO,z.min=dO,z.max=rO,z.count=sO,z.avg=aO,this.initialised=!0}isAggFuncPossible(z,J){let Z=this.getFuncNames(z).includes(J),$=P(this.aggFuncsMap[J]);return Z&&$}getDefaultFuncLabel(z){return mO[z]??z}getDefaultAggFunc(z){let J=z.getColDef().defaultAggFunc;if(P(J)&&this.isAggFuncPossible(z,J))return J;if(this.isAggFuncPossible(z,"sum"))return"sum";let Q=this.getFuncNames(z);return Q?.length?Q[0]:null}addAggFuncs(z){if(this.init(),!z)return;for(let J of Object.keys(z))if(z[J])this.aggFuncsMap[J]=z[J]}getAggFunc(z){return this.init(),this.aggFuncsMap[z]}getFuncNames(z){let J=z.getColDef().allowedAggFuncs;return J==null?Object.keys(this.aggFuncsMap).sort():J}clear(){this.aggFuncsMap={}}};function iO(z){let{values:J}=z,Q=null;for(let Z=0;Z0?z.values[0]:null}function nO(z){return z.values.length>0?y(z.values):null}function dO(z){let{values:J}=z,Q=null;for(let Z=0;Z$))Q=$}return Q}function rO(z){let{values:J}=z,Q=null;for(let Z=0;Z0)$=Q/(typeof Q==="number"?Z:BigInt(Z));let X=z.rowNode?.aggData?.[z.column?.getColId()];if(X&&X.count===Z&&X.value===$)return X;let Y=Object.create(lO);return Y.count=Z,Y.value=$,Y}var oO=class extends S{constructor(){super(...arguments);this.beanName="aggChildrenSvc"}getAggregatedChildren(z,J,Q){if(!z?.group)return[];if(z.rowPinned){if(z=z.pinnedSibling,!z)return[]}let Z=this.gos,$=uq(z,J,Z);if(!Q)return $;let X=[];return mq($,J,Z,X),X}},uq=(z,J,Q)=>{let Z=J?.colDef,$=Z?.pivotKeys;if($){if(z.leafGroup&&$.length&&!Z.pivotTotalColumnIds)return Lq(z.childrenMapped,$);return z.childrenAfterFilter??z.childrenAfterGroup??[]}if(u4(Q)||Q.get("suppressAggFilteredOnly"))return z.childrenAfterGroup??[];return z.childrenAfterFilter??z.childrenAfterGroup??[]},mq=(z,J,Q,Z)=>{for(let $=0,X=z.length;${MY(R,null,f)})}return}this.hadAgg=!0;let{colModel:X,aggFuncSvc:Y}=Q,q=J.get("alwaysAggregateAtRootLevel")||!!c4(J)||X.isPivotMode(),G=!u4(J)&&!J.get("suppressAggFilteredOnly"),U=Q.valueSvc,_=Q.gridApi,H=Q.gridOptions.context,W=$??[],B=W.length,E=z?.kind==="cells"?z:void 0,K,F=Array(B);for(let f=0;f=0)K=E;F[f]={column:A,colId:A.colId,colDef:A.colDef,aggFunc:cq(A.getAggFunc(),Y,A),colSlot:R}}let L=XP(X,Q.pivotResultCols,Y),D=B>0?Array(B):null,M=Q.rowModel;r0(M.rootNode,M.hierarchical,z,(f)=>{if(f.level===-1&&!q){z2(f,null,X);return}let A;if(Z)A=Z({nodes:f.childrenAfterFilter});else if(!D)A=null;else if(L)A=$P(f,L,U,_,H);else A=ZP(f,F,B,D,K,G,U,_,H);MY(f,A,X)})}},ZP=(z,J,Q,Z,$,X,Y,q,G)=>{let U=(X?z.childrenAfterFilter:z.childrenAfterGroup)??[],_=U.length,H=z.data,W=Object.create(null),B=$?$.getSlot(z):-1,E=B>=0?z.aggData:void 0,K=0;for(let F=0;F=0&&!$.hasCellBySlot(B,L.colSlot)){if(Z[F]=null,E)W[L.colId]=E[L.colId]}else Z[F]=Array(_),++K}if(K===0)return W;for(let F=0;F<_;++F){let L=U[F],D=L.aggData;if(D)for(let M=0;M{let X=J.length,Y=z.leafGroup,q=z.data,G=z.childrenMapped,U=z.childrenAfterFilter??[],_=Object.create(null),H,W;for(let B=0;B{if(typeof z==="function")return z;if(z==null)return null;let Z=J.getAggFunc(z);if(typeof Z!=="function")return V(109,{inputValue:z.toString(),allSuggestions:J.getFuncNames(Q)}),null;return Z},XP=(z,J,Q)=>{if(!z.isPivotActive())return null;let Z=J?.getAggregationOrderedList();if(!Z||Z.length===0)return null;let $=Z.length,X=Array($),Y=0;for(let q=0;q<$;++q){let G=Z[q],U=G.colDef,_=U.pivotValueColumn;if(!_)continue;X[Y++]={column:_,colId:U.colId,aggFunc:cq(_.getAggFunc(),Q,_),pivotResultCol:G,pivotKeys:U.pivotKeys,totalColIds:U.pivotTotalColumnIds}}if(Y===0)return null;return X.length=Y,X},YP=class extends S{constructor(){super(...arguments);this.beanName="filterAggStage",this.step="filter_aggregates",this.refreshProps=[],this.setAllChildrenCountTreeData=(z)=>{let J=z.childrenAfterAggFilter,Q=0;if(J){let $=J.length;Q=$;for(let X=0;X<$;++X)Q+=J[X].allChildrenCount??0}let Z=Q===0&&z.level>=0?null:Q;z.setAllChildrenCount(Z),z.pinnedSibling?.setAllChildrenCount(Z)},this.setAllChildrenCountGridGrouping=(z)=>{let J=z.childrenAfterAggFilter,Q=0;for(let Z=0,$=J.length;Z<$;++Z){let X=J[Z];if(X.group)Q+=X.allChildrenCount;else Q++}z.setAllChildrenCount(Q),z.pinnedSibling?.setAllChildrenCount(Q)}}wireBeans(z){this.filterManager=z.filterManager}execute(z){let{rowModel:J,colModel:Q,groupStage:Z}=this.beans,{filterManager:$}=this,X=Q.isPivotMode(),Y=$?.isAggregateFilterPresent()||$?.isAggregateQuickFilterPresent(),q=!!Z?.treeData,G=(E)=>!E.node.group,U=(E)=>E.node.leafGroup,_=u4(this.gos)||(X?U:G),H=q?this.setAllChildrenCountTreeData:this.setAllChildrenCountGridGrouping,W=(E,K=!1)=>{if(E.childrenAfterFilter){if(E.childrenAfterAggFilter=E.childrenAfterFilter,K){let F=E.childrenAfterAggFilter;for(let L=0,D=F.length;L{if(E.childrenAfterAggFilter=E.childrenAfterFilter?.filter((K)=>{if(_({node:K})){if($.doesRowPassAggregateFilters({rowNode:K}))return W(K,!0),!0}return K.childrenAfterAggFilter?.length})||null,E.hasChildren())H(E);else E.setAllChildrenCount(null),E.pinnedSibling?.setAllChildrenCount(null);if(E.sibling)E.sibling.childrenAfterAggFilter=E.childrenAfterAggFilter};r0(J.rootNode,J.hierarchical,z,Y?B:W)}};function J6(z,J){if(z.sibling)return;let Q=s9(z,J);Q.footer=!0,Q.setRowTop(null),Q.setRowIndex(null),Q.oldRowTop=null,Q.id="rowGroupFooter_"+z.id,Q.sibling=z,z.sibling=Q}function qP(z){let J=z.sibling;if(!J)return;J._destroy(!1),z.sibling=void 0,J.sibling=void 0}var GP=class extends S{constructor(){super(...arguments);this.beanName="footerSvc"}addTotalRows(z,J,Q,Z,$,X){let Y=z;if($){let U=Z&&c4(this.gos);if(UP(X,U))J6(J,this.beans),Q(J.sibling,Y++);return Y}let q=$J(this.gos);if((Z&&q({node:J}))===X)J6(J,this.beans),Q(J.sibling,Y++);return Y}getTopDisplayIndex(z,J,Q,Z){let $=J;if(z[0].footer){if(J===0)return 0;$-=1}let X=z[z.length-1],Y=$>=Q.length;if(X.footer&&Y)return X.rowIndex;return Z($)}doesCellShowTotalPrefix(z,J){if(!z.footer||!J?.getColDef().showRowGroup)return!1;if(this.gos.get("treeData"))return!0;if(z.level===-1)return this.beans.showRowGroupCols?.columns[0]===J;return!!z.rowGroupColumn&&J?.isRowGroupDisplayed(z.rowGroupColumn.getId())}applyTotalPrefix(z,J,Q,Z){let $=Z.getColDef().cellRendererParams?.totalValueGetter;if($){let X=C(this.gos,{column:Z,node:Q,value:z,formattedValue:J});if(typeof $==="function")return $(X);if(typeof $==="string")return this.beans.expressionSvc?.evaluate($,X);V(179)}if(Q.level===-1)return this.getLocaleTextFunc()("footerTotal","Total")+" ";return this.getTotalValue(J??z)??""}getTotalValue(z){return this.getLocaleTextFunc()("footerTotal","Total")+" "+(z??"")}};function UP(z,J){switch(J){case"top":case"pinnedTop":return z==="top";case"bottom":case"pinnedBottom":return z==="bottom";default:return!1}}var iq=class extends a1{constructor(){super(...arguments);this.beanName="valueColsSvc",this.eventName="columnValueChanged",this.columnProcessors={set:(z,J,Q)=>this.setValueActive(J,z,Q),add:(z,J,Q)=>this.setValueActive(!0,z,Q),remove:(z,J,Q)=>this.setValueActive(!1,z,Q)},this.columnExtractors={setFlagFunc:(z,J,Q)=>this.setColValueActive(z,J,Q),getIndexFunc:()=>{return},getInitialIndexFunc:()=>{return},getValueFunc:(z)=>{let J=z.aggFunc;if(J===null||J==="")return null;if(J===void 0)return;return!!J},getInitialValueFunc:(z)=>{return z.initialAggFunc!=null&&z.initialAggFunc!=""}},this.modifyColumnsNoEventsCallbacks={addCol:(z)=>this.columns.push(z),removeCol:(z)=>X0(this.columns,z)}}extractCols(z,J){this.columns=super.extractCols(z,J);for(let Q of this.columns){let Z=Q.getColDef();if(Z.aggFunc!=null&&Z.aggFunc!="")this.setColAggFunc(Q,Z.aggFunc);else if(!Q.getAggFunc())this.setColAggFunc(Q,Z.initialAggFunc)}return this.columns}setColumnAggFunc(z,J,Q){if(!z)return;let Z=this.colModel.getColDefCol(z);if(!Z)return;this.setColAggFunc(Z,J),this.dispatchColumnChangedEvent(this.eventSvc,this.eventName,[Z],Q)}syncColumnWithState(z,J,Q){let Z=Q("aggFunc").value1;if(Z!==void 0)if(typeof Z==="string"){if(this.setColAggFunc(z,Z),!z.isValueActive())this.setColValueActive(z,!0,J),this.modifyColumnsNoEventsCallbacks.addCol(z)}else{if(P(Z))V(33);if(z.isValueActive())this.setColValueActive(z,!1,J),this.modifyColumnsNoEventsCallbacks.removeCol(z)}}setValueActive(z,J,Q){if(z===J.isValueActive())return;if(this.setColValueActive(J,z,Q),z&&!J.getAggFunc()&&this.aggFuncSvc){let Z=this.aggFuncSvc.getDefaultAggFunc(J);this.setColAggFunc(J,Z)}}setColAggFunc(z,J){z.aggFunc=J,z.dispatchStateUpdatedEvent("aggFunc")}setColValueActive(z,J,Q){if(z.aggregationActive!==J)z.aggregationActive=J,z.dispatchColEvent("columnValueChanged",Q)}},pq={moduleName:"SharedAggregation",version:$0,beans:[cO,uO,GP,iq],apiFunctions:{addAggFuncs:eO,clearAggFuncs:zP,setColumnAggFunc:JP},dependsOn:[C0]},_P={moduleName:"Aggregation",version:$0,beans:[QP,YP,oO],rowModels:["clientSide"],dependsOn:[pq]},nq=class extends a1{constructor(){super(...arguments);this.beanName="pivotColsSvc",this.eventName="columnPivotChanged",this.columnProcessors={set:(z,J,Q)=>this.setColPivotActive(z,J,Q),add:(z,J,Q)=>this.setColPivotActive(z,!0,Q),remove:(z,J,Q)=>this.setColPivotActive(z,!1,Q)},this.columnOrdering={enableProp:"pivot",initialEnableProp:"initialPivot",indexProp:"pivotIndex",initialIndexProp:"initialPivotIndex"},this.columnExtractors={setFlagFunc:(z,J,Q)=>this.setColPivotActive(z,J,Q),getIndexFunc:(z)=>z.pivotIndex,getInitialIndexFunc:(z)=>z.initialPivotIndex,getValueFunc:(z)=>z.pivot,getInitialValueFunc:(z)=>z.initialPivot},this.modifyColumnsNoEventsCallbacks={addCol:(z)=>{if(!this.columns.includes(z))this.columns.push(z)},removeCol:(z)=>X0(this.columns,z)}}syncColumnWithState(z,J,Q,Z){let{value1:$,value2:X}=Q("pivot","pivotIndex");if($!==void 0||X!==void 0){if(typeof X==="number"||$){if(!z.isPivotActive())this.setColPivotActive(z,!0,J),this.modifyColumnsNoEventsCallbacks.addCol(z);if(Z&&typeof X==="number")Z[z.getId()]=X}else if(z.isPivotActive())this.setColPivotActive(z,!1,J),this.modifyColumnsNoEventsCallbacks.removeCol(z)}}setColPivotActive(z,J,Q){if(z.pivotActive!==J){if(z.pivotActive=J,J)this.beans.groupHierarchyColSvc?.insertVirtualColumnsForCol(this.columns,z)?.forEach(($)=>this.setColPivotActive($,J,Q));z.dispatchColEvent("columnPivotChanged",Q)}z.dispatchStateUpdatedEvent("pivot")}},HP=class extends a1{constructor(){super(...arguments);this.beanName="rowGroupColsSvc",this.eventName="columnRowGroupChanged",this.columnProcessors={set:(z,J,Q)=>this.setActive(J,z,Q),add:(z,J,Q)=>this.setActive(!0,z,Q),remove:(z,J,Q)=>this.setActive(!1,z,Q)},this.columnOrdering={enableProp:"rowGroup",initialEnableProp:"initialRowGroup",indexProp:"rowGroupIndex",initialIndexProp:"initialRowGroupIndex"},this.columnExtractors={setFlagFunc:(z,J,Q)=>this.setColRowGroupActive(z,J,Q),getIndexFunc:(z)=>z.rowGroupIndex,getInitialIndexFunc:(z)=>z.initialRowGroupIndex,getValueFunc:(z)=>z.rowGroup,getInitialValueFunc:(z)=>z.initialRowGroup},this.modifyColumnsNoEventsCallbacks={addCol:(z)=>{if(!this.columns.includes(z))this.columns.push(z)},removeCol:(z)=>X0(this.columns,z)}}moveColumn(z,J,Q){if(this.columns.length===0)return;let Z=this.columns[z],$=this.columns.slice(z,J);this.columns.splice(z,1),this.columns.splice(J,0,Z),this.updateIndexMap(),this.eventSvc.dispatchEvent({type:this.eventName,columns:$,column:$.length===1?$[0]:null,source:Q})}syncColumnWithState(z,J,Q,Z){let{value1:$,value2:X}=Q("rowGroup","rowGroupIndex");if($!==void 0||X!==void 0){if(typeof X==="number"||$){if(!z.isRowGroupActive())this.setColRowGroupActive(z,!0,J),this.modifyColumnsNoEventsCallbacks.addCol(z);if(Z&&typeof X==="number")Z[z.getId()]=X}else if(z.isRowGroupActive())this.setColRowGroupActive(z,!1,J),this.modifyColumnsNoEventsCallbacks.removeCol(z)}}setActive(z,J,Q){if(z===J.isRowGroupActive())return;this.setColRowGroupActive(J,z,Q);let Z=this.beans.groupHierarchyColSvc?.getColumn(J);if(YJ(this.gos,z)&&!Z)this.colModel.setColsVisible([J],!z,Q)}setColRowGroupActive(z,J,Q){if(z.rowGroupActive!==J){if(z.rowGroupActive=J,J)this.beans.groupHierarchyColSvc?.insertVirtualColumnsForCol(this.columns,z)?.forEach(($)=>this.setColRowGroupActive($,J,Q));z.dispatchColEvent("columnRowGroupChanged",Q)}z.dispatchStateUpdatedEvent("rowGroup")}},WP=class extends S{constructor(){super(...arguments);this.beanName="autoColSvc"}postConstruct(){this.addManagedPropertyListener("autoGroupColumnDef",this.updateColumns.bind(this)),this.setupGroupHideColumnsUntilExpanded()}setupGroupHideColumnsUntilExpanded(){let z=()=>this.updateGroupColumnVisibility();this.addManagedEventListeners({modelUpdated:z}),this.addManagedPropertyListeners(["groupHideColumnsUntilExpanded","groupDisplayType","groupHideOpenParents"],z)}addColumns(z){let{columns:J}=this;if(J==null)return;z.list=J.list.concat(z.list),z.tree=J.tree.concat(z.tree),g2(z)}createColumns(z,J,Q){let Z=this.beans,{colModel:$,gos:X,rowGroupColsSvc:Y,colGroupSvc:q}=Z,G=$.isPivotMode(),U=XJ(X,G),_=G?X.get("pivotSuppressAutoColumn"):this.isSuppressAutoCol(),H=Y?.columns,B=!(H&&H.length>0||X.get("treeData"))||_||U,E=()=>{if(this.columns)U4(Z,this.columns.tree),this.columns=null};if(B){E();return}let K=this.generateAutoCols(H),F=N2(K,this.columns?.list||null),L=z.treeDepth,M=(this.columns?this.columns.treeDepth:-1)==L;if(F&&M){let O=new Map(K.map((v)=>[v.getId(),v]));for(let v of this.columns?.list??[]){let I=O.get(v.getId());if(I)v.setColDef(I.getColDef(),null,Q)}return}E();let f=q?.findDepth(z.tree)??0,A=q?.balanceTreeForAutoCols(K,f)??[];this.columns={list:K,tree:A,treeDepth:f,map:{}},J((O)=>{if(!O)return null;let v=O.filter((I)=>!Z1(I));return[...K,...v]})}updateColumns(z){let J=Dz(z.source);this.columns?.list.forEach((Q,Z)=>this.updateOneAutoCol(Q,Z,J))}getColumn(z){return this.columns?.list.find((J)=>h4(J,z))??null}getColumns(){return this.columns?.list??null}generateAutoCols(z=[]){let J=[],{gos:Q}=this,Z=Q.get("treeData"),$=x2(Q);if(Z&&$)V(182),$=!1;if($)z.forEach((X,Y)=>{J.push(this.createOneAutoCol(X,Y))});else J.push(this.createOneAutoCol());return J}isSuppressAutoCol(){let z=this.gos;if(z.get("groupDisplayType")==="custom")return!0;return z.get("treeDataDisplayType")==="custom"}createOneAutoCol(z,J){let Q;if(z)Q=`${Q1}-${z.getId()}`;else Q=Q1;let Z=this.createAutoColDef(Q,z,J);Z.colId=Q;let $=new B4(Z,null,Q,!0);return this.createBean($),$}updateOneAutoCol(z,J,Q){let Z=z.getColDef(),$=typeof Z.showRowGroup=="string"?Z.showRowGroup:void 0,X=this.beans,Y=$!=null?X.colModel.getColDefCol($):void 0,q=z.getId(),G=this.createAutoColDef(q,Y??void 0,J);z.setColDef(G,null,Q),a0(X,{state:[vZ(G,q)]},Q)}createAutoColDef(z,J,Q){let Z=this.createBaseColDef(J),$=this.gos.get("autoGroupColumnDef");if(D0(Z,$),Z=e4(this.beans,Z,z,!0),$?.groupRowEditable==null)Z.groupRowEditable=void 0;if($?.groupRowValueSetter==null)Z.groupRowValueSetter=void 0;if(!this.gos.get("treeData")){if(d(Z.field)&&d(Z.valueGetter)&&d(Z.filterValueGetter)&&Z.filter!=="agGroupColumnFilter")Z.filter=!1}if(Q&&Q>0)Z.headerCheckboxSelection=!1;let X=b4(this.gos),Y=Z.valueGetter||Z.field!=null;if(X&&!Y)Z.sortIndex=void 0,Z.initialSort=void 0;return Z}createBaseColDef(z){let J=this.gos.get("autoGroupColumnDef"),Z={headerName:this.getLocaleTextFunc()("group","Group"),showRowGroup:z?.getColId()??!0};if(!(J&&(J.cellRenderer||J.cellRendererSelector)))Z.cellRenderer="agGroupCellRenderer";if(z)Z.headerName=this.beans.colNames.getDisplayNameForColumn(z,"header")??void 0,Z.headerValueGetter=z.colDef.headerValueGetter;return Z}getDeepestExpandedLevel(z,J){let Q=-1;if(!z)return Q;for(let Z of z){if(!Z.group||!Z.expanded)continue;if(Z.level>Q)Q=Z.level;if(Q>=J)return Q;let $=this.getDeepestExpandedLevel(Z.childrenAfterGroup,J);if($>Q)Q=$;if(Q>=J)return Q}return Q}updateGroupColumnVisibility(){let z=this.columns?.list;if(!z||z.length===0)return;let{gos:J,visibleCols:Q,rowModel:Z}=this.beans,$=RZ(J),X=!1,Y=(G,U)=>{if(U!==G.isVisible())G.setVisible(U,"api"),X=!0},q=()=>{for(let G of z)Y(G,!0)};if(!$)q();else if(z.length>1){let G=z.length-2,U=Z?.rootNode?.childrenAfterGroup,_=this.getDeepestExpandedLevel(U,G);if(_>=G)q();else for(let H=0;H=H)}if(X)Q.refresh("api")}destroy(){U4(this.beans,this.columns?.tree),super.destroy()}},Q7=null,PY=(z)=>{let J=Q7,Q=new Uint32Array(1<<32-Math.clz32(z|63));if(J)Q.set(J);return Q7=Q,Q},BP=(z,J,Q,Z)=>{let $=J-Z,X=Q-1;if($===1){let U=0;while(z[U].level===X)++U;if(U0){let _=z[U];z.copyWithin(1,0,U),z[0]=_}return z}let Y=Array($),q=0,G=0;for(let U=0;U{let Q=z[0].level+1,Z=Q,$=0,X=Q,Y=Q7;if(!Y||Q>=Y.length)Y=PY(Q);++Y[Q];for(let H=1;HQ){if(Q=W,Q>=Y.length)Y=PY(Q)}else if(W=0)return Y.fill(0,Z,Q+1),z;let q=Y[Z],G=Y[Q];if(q+G===J)return Y[Z]=0,Y[Q]=0,BP(z,J,Q,G);let U=0;for(let H=Q;H>=Z;--H){let W=Y[H];Y[H]=U,U+=W}let _=Array(J);for(let H=0;H{if(J===2){if(z[0].level16)return EP(z,J);for(let Q=1;Q=0&&z[X].level<$);z[Y]=Z}}return z},KP=class{constructor(){this.kind="cells",this.rows=[],this.unsorted=!1,this.slots=new Map,this.bits=[],this.extraBits=null,this.colCount=0}addRow(z){let J=z;if(J==null)return;let Q=this.slots;if(Q.get(J)!==void 0){while(J!=null&&Q.get(J)>=0)Q.set(J,-1),J=J.parent;return}let Z=this.rows;do Q.set(J,-1),Z.push(J),J=J.parent;while(J!=null&&!Q.has(J));this.unsorted=!0}addCell(z,J){if(J==null){this.addRow(z);return}if(z==null)return;let Q=this.slots,Z=this.bits,$=Q.get(J)??this.ensureCol(J),X=Q.get(z);if(X===void 0)X=this.ensureRow(z);else if(X<0)return;let Y=$<32?Z:this.extraBits[($>>>5)-1],q=1<<($&31),G=Y[X];if((G&q)!==0)return;Y[X]=G|q;let U=z.parent;while(U!=null){let _=Q.get(U);if(_<0)break;let H=Y[_];if((H&q)!==0)break;Y[_]=H|q,U=U.parent}}hasRow(z){return this.slots.has(z)}getSortedRows(){if(!this.unsorted)return this.rows;this.unsorted=!1;let z=dq(this.rows);return this.rows=z,z}getSlot(z){return this.slots.get(z)??-1}hasCellBySlot(z,J){if(z<0)return!0;if(J<32)return J>=0&&(this.bits[z]&1<>>5)-1][z]&1<<(J&31))!==0}ensureRow(z){let J=this.slots,Q=this.rows,Z=this.bits,$=this.extraBits,X=Z.push(0),Y=X-1;if($!==null)for(let G=0,U=$.length;G=32){let Q=(J>>>5)-1,Z=this.extraBits;if(Z===null)Z=[],this.extraBits=Z;if(Q>=Z.length)Z.push(Array(this.bits.length).fill(0))}return J}},TY=class{constructor(){this.kind="rows",this.rows=[],this.unsorted=!1,this.rowSet=new Set}addRow(z){let J=z;if(J==null)return;let Q=this.rowSet;if(Q.has(J))return;let Z=this.rows;do Q.add(J),Z.push(J),J=J.parent;while(J!=null&&!Q.has(J));this.unsorted=!0}addCell(z,J){this.addRow(z)}hasRow(z){return this.rowSet.has(z)}getSortedRows(){if(!this.unsorted)return this.rows;this.unsorted=!1;let z=dq(this.rows);return this.rows=z,z}},FP=class extends S{constructor(){super(...arguments);this.beanName="changedPathFactory"}newPath(z){return z?new KP:new TY}ensureRowsPath(z){let J=z.changedPath;if(!J&&z.changedRowNodes&&!z.newData){let Q=this.beans.rowModel;if(Q.hierarchical)J=new TY,z.changedPath=J,J.addRow(Q.rootNode)}return J}},LP=class extends S{addExpandedCss(z,J){if(J.isExpandable())z.push("ag-row-group"),z.push(J.expanded?"ag-row-group-expanded":"ag-row-group-contracted")}getRowExpandedListeners(z){let{rowNode:J}=z,Q=this.updateExpandedCss.bind(this,z,J);return{expandedChanged:Q,hasChildrenChanged:Q}}setExpanded(z,J,Q,Z){if(z.expanded===J)return;z._expanded=J,z.dispatchRowEvent("expandedChanged");let $={...mZ(z,this.gos,"rowGroupOpened"),expanded:J,event:Q||null};this.dispatchExpandedEvent($,Z)}defaultExpanded(z){let Q=this.beans.gos,Z=z.level??0,$=z.group&&Q.get("isGroupOpenByDefault");if(!$){let Y=Q.get("groupDefaultExpanded");return Y===-1||Z{let X=$.rowComp;X.toggleCss("ag-row-group",Q),X.toggleCss("ag-row-group-expanded",Q&&Z),X.toggleCss("ag-row-group-contracted",Q&&!Z),j0($.element,Q&&Z)})}dispatchStateUpdatedEvent(){this.eventSvc.dispatchEvent({type:"rowExpansionStateChanged"})}},DP=class extends LP{constructor(){super(...arguments);this.beanName="expansionSvc",this.events=null,this.dispatchExpandedDebounced=null}destroy(){super.destroy(),this.events=null,this.dispatchExpandedDebounced=null}setExpansionState(z){let J=new Set(z.expandedRowGroupIds);this.beans.rowModel.forEachNode((Q)=>{let Z=Q.id;if(!Z)return;Q._expanded=J.has(Z)}),this.onGroupExpandedOrCollapsed()}getInternalExpansionState(z=!1){let J=[],Q=[];return this.beans.rowModel.forEachNode((Z)=>{let $=Z.id;if(!$)return;if(Z.expanded)J.push($);else if(z&&Z.isExpandable())Q.push($)}),{expandedRowGroupIds:J,collapsedRowGroupIds:Q}}getExpansionState(){return this.getInternalExpansionState()}isExpanded(z){if(z.footer)return!!z._expanded;if(!(z.group||z.master)||z.leafGroup&&this.beans.colModel.isPivotMode())return!1;let J=z._expanded;if(J===null)J=this.defaultExpanded(z)??!1,z._expanded=J;return!!J}resetExpansion(){let{rowModel:z}=this.beans;z.forEachNode((J)=>{if(!J.group&&!J.master)return;J._expanded=null}),this.onGroupExpandedOrCollapsed()}expandAll(z){let{gos:J,rowModel:Q,colModel:Z,eventSvc:$}=this.beans,X=J.get("treeData"),Y=Z.isPivotActive(),q=(U)=>{if(!U)return;for(let _ of U){let H=()=>{_._expanded=z,q(_.childrenAfterGroup)};if(_.master){H();continue}if(X){if(P(_.childrenAfterGroup))H();continue}if(Y){if(!_.leafGroup)H();continue}if(_.group)H()}},G=Q.rootNode;if(G)q(G.childrenAfterGroup);this.onGroupExpandedOrCollapsed(),$.dispatchEvent({type:"expandOrCollapseAll",source:z?"expandAll":"collapseAll"})}onGroupExpandedOrCollapsed(){this.dispatchStateUpdatedEvent(),this.beans.rowModel.reMapRows()}setDetailsExpansionState(z){let J=this.getInternalExpansionState(!0),Q=J.collapsedRowGroupIds.length===0;if(J.expandedRowGroupIds.length===0===Q)return;return Q?z.expandAll():z.collapseAll()}dispatchExpandedEvent(z,J){if((this.events??(this.events=[])).push(z),J){this.dispatchExpandedEvents();return}let Q=this.dispatchExpandedDebounced;if(!Q){if(!this.isAlive())return;Q=this.debounce(()=>this.dispatchExpandedEvents()),this.dispatchExpandedDebounced=Q}Q()}dispatchExpandedEvents(){let{eventSvc:z,rowRenderer:J}=this.beans,Q=this.events,Z=Q?.length;if(!Z)return;this.events=null;let $=Array(Z);for(let X=0;Xwindow.setTimeout(z,0);let Q=!1;return()=>{if(!J.active){window.setTimeout(z,0);return}if(Q)return;Q=!0,J.addDestroyTask(()=>{Q=!1,z()})}}};function MP(z){let J=z.get("groupHideParentOfSingleChild");if(!J){if(J=z.get("groupRemoveSingleChildren"),!J&&z.get("groupRemoveLowestSingleChildren"))J="leafGroupsOnly"}return{groupHideParentOfSingleChild:J,isGroupMultiAutoColumn:x2(z),hideOpenParents:z.get("groupHideOpenParents"),grandTotalRow:c4(z),groupTotalRow:$J(z)}}function kP(z,J,Q){return z.groupHideParentOfSingleChild===!0&&Q&&J.childrenAfterGroup.length===1}function fP(z,J,Q){return z.groupHideParentOfSingleChild==="leafGroupsOnly"&&Q&&J.leafGroup&&J.childrenAfterGroup.length===1}function SP(z,J,Q,Z,$,X){if(Z&&!Q)return!1;if($||X)return!1;if(!z.hideOpenParents)return!0;if(J.master||J.level===-1)return!0;if(!(Z&&J.leafGroup)&&J.expanded)return!1;return!0}var VP=class extends S{constructor(){super(...arguments);this.beanName="flattenStage",this.step="map",this.refreshProps=["groupHideParentOfSingleChild","groupRemoveSingleChildren","groupRemoveLowestSingleChildren","groupTotalRow","masterDetail"]}execute(){let{beans:z,gos:J}=this,Q=[],Z=z.rowModel.rootNode;if(!Z)return Q;let $=z.colModel.isPivotMode(),X=$&&Z.leafGroup&&Z.aggData,Y=X?[Z]:Z.childrenAfterSort,q=MP(J);this.recursivelyAddToRowsToDisplay(q,Y,Q,$,0);let G=Q.length>0,U=q.grandTotalRow;if(!X&&G&&U)if(J6(Z,z),U==="pinnedBottom"||U==="pinnedTop")this.beans.pinnedRowModel?.setGrandTotalPinned(U==="pinnedBottom"?"bottom":"top");else{let H=U==="top";this.addRowNodeToRowsToDisplay(q,Z.sibling,Q,0,H)}return Q}recursivelyAddToRowsToDisplay(z,J,Q,Z,$){if(!J?.length)return;let X=this.beans.masterDetailSvc;for(let Y=0;Ythis.onCsrmCellChange(z),batchEditingStopped:()=>this.flushGroupEdits()})}destroy(){this.stopDragging(!0),super.destroy()}isGroupingDrop(z){if(!z.rowDragManaged||!z.sameGrid)return!1;if(!this.gos.get("refreshAfterGroupEdit"))return!1;return!!this.beans.rowGroupColsSvc?.columns?.length&&!this.beans.colModel.isPivotMode()}initDraggingGroups(z){let J=new Map,Q=(Z)=>{let $=Z.childrenAfterGroup;if($){if(J.has(Z))return;let X=$.slice();J.set(Z,X);for(let Y of X)Q(Y)}};for(let Z of z.rows)if(Z.group)Q(Z);this.draggingGroups=J}canSetParent(z){if(!z.sameGrid)return!1;if(this.beans.groupStage?.treeData)return!0;if(z.rowDragManaged&&!this.gos.get("refreshAfterGroupEdit"))return!1;return!!this.beans.rowGroupColsSvc?.columns?.length}canDropRow(z,J){if(this.beans.groupStage?.treeData)return!AP(z,J.newParent);let{position:Q,target:Z,newParent:$,rootNode:X}=J,Y=z.parent;if(z.group&&(IY(z,Z)||IY(z,$)))return!1;if(Q==="inside")return!0;if($&&$!==Y)return $!==X||Y===X;let q=$??Z?.parent??X;if(q!==Y)return!1;let G=z.group?z.level:Y.level??-1,U=-1;if(Z)U=Z.group?Z.level:Z.parent?.level??-1;else if(q)U=q.level;if(G>=0&&U>=0&&U!==G)return!1;return!0}fixRowsDrop(z,J,Q,Z){let $=!!this.beans.groupStage?.treeData;if(z.treeData=$,!(!!this.beans.rowGroupColsSvc?.columns?.length||this.gos.get("pivotMode"))&&!$)return;if(!this.draggingGroups&&this.isGroupingDrop(z)&&!z.suppressMoveWhenRowDragging)this.initDraggingGroups(z);let Y=z.target,q=null,G=!1,U=z.rootNode,_=this.beans.rowModel,H=this.canStartGroup(Y,$);this.updateDropTarget(z,Q,H);let W=this.beans.pageBounds?.getLastRow?.()??_.getRowCount()-1;if(J){if(!Y||Z>=0.5&&Y.rowIndex===W)q=U;else if(z.moved&&Y&&this.dropGroupThrottled&&this.shouldDropTargetBeParent(z))q=Y;if(!q)q=Y?.parent??U}if(!Q&&Y&&H&&!(Y.group&&Y.expanded))this.startDropGroupDelay(Y);if(q){if(Y&&q===Y&&q!==U){let B=q.expanded?l9(_,1,Y):null;if(B?.parent===q)Y=B,Z=-0.5;else G=!0}if(Y&&!G){let B=Y;while(B&&B!==U&&B!==q)Y=B,B=B.parent}}z.target=Y,z.newParent=q,z.yDelta=Z,z.inside=G}clearNewSameParent(z,J){let Q=z.newParent;if(Q&&(!J||jP(z.rows,Q)))z.newParent=null}updateDropTarget(z,J,Q){let Z=Q?z.target:null;if(this.dropGroupTarget&&this.dropGroupTarget!==Z)this.resetDragGroup();if(!Z?.childrenAfterSort?.length)return;if(J&&this.dropGroupThrottled&&!Z.expanded&&Z.isExpandable?.())Z.setExpanded(!0,void 0,!0);if(this.canDropInTarget(Z,z))this.dropGroupThrottled=!0,this.dropGroupTarget=Z}canDropInTarget(z,J){if(z.expanded)return!0;if(!z.group)return!1;if(J.pointerPos==="inside")return!0;if(J.treeData)return!1;let Q=J.rows,Z=z.level;for(let $=0,X=Q.length;${this.dropGroupTimer=null,this.dropGroupThrottled=!0,this.beans.dragAndDrop?.nudge()},J)}resetDragGroup(){if(this.dropGroupTimer!==null)window.clearTimeout(this.dropGroupTimer),this.dropGroupTimer=null;this.dropGroupTarget=null,this.dropGroupThrottled=!1}stopDragging(z){if(z)this.draggingGroups=null;this.resetDragGroup()}shouldDropTargetBeParent({target:z,rows:J,pointerPos:Q,treeData:Z}){if(!z||Q==="none")return!1;if(Q==="inside")return!0;if(!Z&&z.group&&!z.expanded)return!0;if(Q==="above")return!1;let $=this.beans.rowModel,Y=z.rowIndex+1,q;do q=$.getRow(Y++);while(q?.footer);let G=this.draggingGroups?.get(z)??z.childrenAfterGroup;if(q&&q.parent===z&&G?.length){let U=new Set(J);for(let _=0,H=G.length;_{if(U.has(D))return;if(U.add(D),W??(W=this.newGroupValues(X)),this.setRowGroup(D,W))H.add(D)},E=(D)=>{let M=this.draggingGroups?.get(D)??D.childrenAfterGroup,f=M?.length;if(f)for(let A=0;A=0)B(R);else E(R)}};for(let D of z.rows)if(D.group)E(D);else{let M=D.sourceRowIndex>=0&&!D.destroyed?D:this.csrmFirstLeaf(D);if(M)B(M)}let K=Q==="inside"?"above":Q,F=Q==="inside"?this.findFirstLeafForParent(X,U)??Z:Z,L=!1;if(U.size&&K!=="none")L=S$($._leafs,U,F,K==="above");if(!H.size&&!L)return!1;_.reordered=L;for(let D of U)_.updates.add(D);if(this.csrmRefresh(_),G)G.focusCell();else Y.clearFocusedCell();return!0}canStartGroup(z,J){if(!z||z.level<0||z.footer||z.detail)return!1;if(z.group)return!0;return J}flushGroupEdits(){let z=this.pendingEditRefresh;if(z)this.pendingEditRefresh=null,this.csrmRefresh(z)}csrmRefresh(z){let J=this.beans.rowModel;if(!J.rootNode)return;J.refreshModel({step:"group",keepRenderedRows:!0,animate:!this.gos.get("suppressAnimationFrame"),changedRowNodes:z})}newGroupValues(z){let J=this.beans.rowGroupColsSvc?.columns??[],Q=Array(J.length),Z=-1,$=z;while($&&$.level>=0){let X=J[$.level];if(X){let Y=X.getColId(),q=$.level;if(Q[q]=$.groupData?.[Y]??$.key??void 0,q>Z)Z=q}$=$.parent}return{values:Q,columns:J,maxLevel:Z}}setRowGroup(z,{values:J,columns:Q,maxLevel:Z}){if(Z<0)return!1;let{valueSvc:$,changeDetectionSvc:X}=this.beans,Y=!1;X?.beginDeferred();try{for(let q=0;qZ)continue;let U=J[q],_=$.getValue(G,z,"data");if(_===U||_==null&&U==null)continue;let H=U,W=$.parseValue(G,z,U,_);if(W!==void 0)H=W;if(z.setDataValue(G,H,"rowDrag"))Y=!0}}finally{X?.endDeferred()}return Y}onCsrmCellChange(z){let{column:J,node:Q,source:Z}=z;if(!this.gos.get("refreshAfterGroupEdit"))return;if(Z==="rowDrag")return;if(!J?.isRowGroupActive())return;if(Q.group||!Q.data)return;if(this.beans.editSvc?.isBatchEditing()){let X=this.pendingEditRefresh;if(!X)X=vY(),this.pendingEditRefresh=X;X.updates.add(Q)}else{let X=vY();X.updates.add(Q),this.csrmRefresh(X)}}csrmFirstLeaf(z){if(!z)return null;let J=this.draggingGroups,Q=J?.get(z)??z.childrenAfterGroup;while(Q?.length){let Z=Q[0];if(Z.sourceRowIndex>=0){if(!Z.destroyed)return Z;return this.firstAliveChildLeaf(Z)}Q=J?.get(Z)??Z.childrenAfterGroup}return X1(z)}firstAliveChildLeaf(z){let J=this.draggingGroups?.get(z)??z.childrenAfterGroup;if(J){for(let Q of J)if(Q.sourceRowIndex>=0&&!Q.destroyed)return Q}return null}findFirstLeafForParent(z,J){if(!z)return null;let Q=this.draggingGroups?.get(z)??z?.childrenAfterGroup;if(!Q)return null;for(let Z=0,$=Q.length;Z<$;++Z){let X=Q[Z];if(X.sourceRowIndex>=0&&!J.has(X))return X;let Y=this.findFirstLeafForParent(X,J);if(Y!==null)return Y}return null}},vY=()=>{let z=new I1;return z.reordered=!0,z},IY=(z,J)=>{if(!z||!J)return!1;let Q=J;while(Q){if(Q===z)return!0;Q=Q.parent}return!1},AP=(z,J)=>{if(!J||z.parent===J)return!1;let Q=J,Z=z.id;while(Q){if(Q===z)return!0;if(Z!=null&&Q.id===Z)return!0;Q=Q.parent}return!1},jP=(z,J)=>{for(let Q=0,Z=z.length;Qthis.strategy?.onShowRowGroupColsSetChanged()})}invalidateGroupCols(){this.columnsInvalidated=!0,this.strategy?.invalidateGroupCols?.()}destroy(){this.strategy=this.destroyBean(this.strategy),super.destroy()}getNonLeaf(z){return this.strategy?.nonLeafsById?.get(z)}getNestedDataGetter(){return this.getStrategy()?.nestedDataGetter}onPropChange(z){let J=this.gos,Q=this.strategy?.nestedDataGetter;if(z.has("treeData"))this.gosTreeData=J.get("treeData")&&this.hasTreeData,this.columnsInvalidated=!0;return this.strategy?.onPropChange?.(z),this.getNestedDataGetter()!==Q}extractData(){let z=this.beans.rowModel.rootNode,J=this.nested?z?.childrenAfterGroup:z?._leafs;if(!J)return this.gos.get("rowData")??[];let Q=J.length,Z=Array(Q),$=0;for(let X=0;X{let J=z.sibling;if(!J)return null;let Q=J._leafs;if(Q!==void 0)return Q;return nJ(J)},nJ=(z)=>{let J=z.childrenAfterGroup,Q=J?.length;if(z._leafs=null,!Q)return null;let Z,$=Q===1?J[0]:null;if($?.group&&$.sourceRowIndex<0){if(Z=$._leafs,Z===void 0)Z=nJ($)}else if(z.leafGroup)Z=J;else{Z=[];for(let X=0;X=0)Z.push(Y);if(!Y.group)continue;let q=Y._leafs;if(q===void 0)q=nJ(Y);if(q)for(let G=0,U=q.length;G{let{_leafs:Z,sibling:$}=z;if(z.treeNodeFlags=0,z.childrenAfterGroup=Z,z.childrenMapped=null,z._groupData=void 0,z.aggData=null,$)$.childrenAfterGroup=z.childrenAfterGroup,$.childrenAfterAggFilter=z.childrenAfterAggFilter,$.childrenAfterFilter=z.childrenAfterFilter,$.childrenAfterSort=z.childrenAfterSort,$.childrenMapped=null,$._groupData=void 0,$.aggData=null;for(let X=0,Y=Z.length??0;X{z.key=null,z.treeNodeFlags=0,z.allChildrenCount=null,z.childrenAfterGroup=null,z.childrenAfterAggFilter=null,z.childrenAfterFilter=null,z.childrenAfterSort=null,z.childrenMapped=null,z.level=0,z._groupData=void 0};function yY(z,J,Q){let Z=z,$=Z.level-J.level;if($<=0)return!1;if(!Q.get("groupHideOpenParents"))return!1;for(let Y=0;Y<$;Y++){if(Z.parent?.getFirstChild()!==Z)return!1;Z=Z.parent}return Z===J}var rq=class extends S{constructor(){super(...arguments);this.indentClass=null}init(z,J,Q,Z,$,X,Y){this.params=Y,this.eGui=J,this.eCheckbox=Q,this.eExpanded=Z,this.eContracted=$,this.comp=z,this.compClass=X;let{node:q,column:G}=Y;if(this.node=q,this.displayedNode=q,this.isEmbeddedRowMismatch())return;if(q.footer){this.initFooterCell();return}if(!G){this.initFullWidthCell();return}this.displayedNode=this.beans.showRowGroupColValueSvc?.getDisplayedNode(q,G)??this.node,this.setupExpand(),this.setupCheckbox(),this.addGroupValue(),this.setupIndent()}initFooterCell(){let{node:z}=this.params;if(this.addGroupValue(),this.setupIndent(),z.level!==-1)this.comp.toggleCss("ag-row-group-leaf-indent",!0)}initFullWidthCell(){let z=()=>{let{rowDragSvc:J}=this.beans;if(!this.params.rowDrag||!J)return;let Q=J.createRowDragComp(()=>this.params.value,this.params.node);this.createManagedBean(Q),this.eGui.insertAdjacentElement("afterbegin",Q.getGui())};this.setupExpand(),z(),this.setupCheckbox(),this.addGroupValue(),this.setupIndent()}getCellAriaRole(){let z=this.params.colDef?.cellAriaRole,J=this.params.column?.getColDef().cellAriaRole;return z||J||"gridcell"}isEmbeddedRowMismatch(){if(!this.params.fullWidth||!this.gos.get("embedFullWidthRows"))return!1;let{visibleCols:z}=this.beans,J=this.params.pinned==="left",Q=this.params.pinned==="right",Z=!J&&!Q;if(this.gos.get("enableRtl")){if(z.isPinningLeft())return!Q;return!Z}if(z.isPinningLeft())return!J;return!Z}addGroupValue(){let{params:{value:z,valueFormatted:J}}=this,Q=this.getInnerCompDetails();this.comp.setInnerRenderer(Q,J??z??null)}setupExpand(){let{colModel:z}=this.beans,{eGridCell:J,suppressDoubleClickExpand:Q}=this.params,Z=(G,U)=>{let _=h(G,this.beans,null);if(_)U.appendChild(_),this.addDestroyFunc(()=>_.remove())};Z("groupExpanded",this.eExpanded),Z("groupContracted",this.eContracted);let $=this.comp,X=()=>{if(!this.isExpandable())return;let U=!!this.displayedNode.expanded;$.setExpandedDisplayed(U),$.setContractedDisplayed(!U),j0(J,U)},Y=()=>{let G=this.isExpandable();$.toggleCss("ag-cell-expandable",G),$.toggleCss("ag-row-group",G);let U=!G&&z.isPivotMode();$.toggleCss("ag-pivot-leaf-group",U);let _=!z.isPivotMode()&&(!this.displayedNode.footer||this.displayedNode.level!==-1);$.toggleCss("ag-row-group-leaf-indent",!G&&_);let H=this.getChildCount(),W=H>0?`(${H})`:"";if($.setChildCount(W),!G)$.setExpandedDisplayed(!1),$.setContractedDisplayed(!1),m8(J);else X()};(()=>{if(!Q&&!this.isGroupCellEditable(this.displayedNode))this.addManagedListeners(J,{dblclick:this.onCellDblClicked.bind(this)});this.addManagedListeners(this.eExpanded,{click:this.onExpandClicked.bind(this)}),this.addManagedListeners(this.eContracted,{click:this.onExpandClicked.bind(this)}),this.addManagedListeners(J,{keydown:this.onKeyDown.bind(this)}),this.addManagedListeners(this.displayedNode,{allChildrenCountChanged:Y,masterChanged:Y,groupChanged:Y,hasChildrenChanged:Y,expandedChanged:X})})(),Y()}getInnerCompDetails(){let{userCompFactory:z,findSvc:J}=this.beans,Q=this.params;if(Q.fullWidth){let G=this.gos.get("groupRowRendererParams"),U=h2(z,G,Q);if(U)return U;if(J?.isMatch(Q.node,null))return h2(z,{...G,innerRenderer:"agFindCellRenderer"},Q);return}let Z=(G)=>G&&G.componentClass==this.compClass,$=h2(z,Q,Q);if($&&!Z($))return $;let{displayedNode:{rowGroupColumn:X}}=this,Y=X?.colDef,q=X&&Q.column?.isRowGroupDisplayed(X.getId());if(Y&&q){let G=kz(z,Y,Q);if(G)if(Z(G)){if(Y?.cellRendererParams?.innerRenderer)return h2(z,Y.cellRendererParams,Q)}else return G}if(J?.isMatch(Q.node,Q.column))return kz(z,{...Y??Q.colDef,cellRenderer:"agFindCellRenderer"},Q)}getChildCount(){let{column:z,suppressCount:J}=this.params;if(J)return 0;let{allChildrenCount:Q,rowGroupColumn:Z}=this.displayedNode;if(!((Q??0)>0&&(!Z||!z||z?.isRowGroupDisplayed(Z.getId()))))return 0;if(this.gos.get("showOpenedGroup")&&this.displayedNode!==this.node&&!yY(this.node,this.displayedNode,this.gos))return 0;return Q??0}isExpandable(){let{node:z,column:J,colDef:Q}=this.params;if(!this.displayedNode.isExpandable())return!1;if(z.rowPinned)return!1;if(!J)return!0;if(z.hasChildren()&&Q){let{showRowGroup:X}=Q;if(!X)return!1;if(X===!0)return!0}if(z===this.displayedNode){if(z.rowGroupColumn){if(J?.isRowGroupDisplayed(z.rowGroupColumn.getId()))return!0}if(z.master)return Q?.showRowGroup===!0||Q?.showRowGroup==null;return!1}return yY(this.node,this.displayedNode,this.gos)}setupIndent(){let{suppressPadding:z,node:J,colDef:Q}=this.params;if(z)return;let Z=()=>{let $=J.uiLevel;if(Q&&Q.showRowGroup!==!0)$=0;let X="ag-row-group-indent-"+$;if(X===this.indentClass)return;if(this.indentClass)this.comp.toggleCss(this.indentClass,!1);this.indentClass=X,this.comp.toggleCss(X,!0),this.eGui.style.setProperty("--ag-indentation-level",String($))};this.addManagedListeners(J,{uiLevelChanged:Z.bind(this)}),Z()}setupCheckbox(){let{node:z}=this.params;if(!(!z.footer&&!z.rowPinned&&!z.detail))return;this.addManagedPropertyListener("rowSelection",({currentValue:Q,previousValue:Z})=>{let $=typeof Q==="object"?Q:void 0,X=typeof Z==="object"?Z:void 0;if($?.checkboxLocation!==X?.checkboxLocation)this.destroyCheckbox(),this.addCheckbox()}),this.addCheckbox()}addCheckbox(){let{selectionSvc:z}=this.beans;if(!z||!s4(this.gos))return;let{node:J,column:Q}=this.params,Z=this.gos.get("rowSelection"),$=b1(Z);if($==="selectionColumn")return;if($==="autoGroupColumn"){let U=Q?.getColDef().showRowGroup!=null,_=!Q&&J.group;if(!(U||_))return}let X=typeof Z==="object"?Fz(Z):this.params.checkbox;if(!(typeof X==="function"||X===!0))return;if(typeof Q?.getColDef().showRowGroup==="string"&&!this.isExpandable()){this.comp.setCheckboxSpacing(!0);return}let G=z.createCheckboxSelectionComponent();this.cbComp=G,this.createBean(G),G.init({rowNode:J,column:Q,overrides:{isVisible:X,callbackParams:this.params,removeHidden:!0}}),this.eCheckbox.appendChild(G.getGui()),this.comp.setCheckboxVisible(!0)}destroyCheckbox(){this.comp.setCheckboxSpacing(!1),this.comp.setCheckboxVisible(!1),this.cbComp?.getGui().remove(),this.cbComp=this.destroyBean(this.cbComp)}isGroupCellEditable(z){let J=this.params.column;return!!J&&(!!J.getColDef().groupRowEditable||this.gos.get("enableGroupEdit"))&&J.isCellEditable(z)}onExpandClicked(z){if(q4(z))return;l0(z),this.onExpandOrContract(z)}onKeyDown(z){if(z.key!==k.ENTER||this.params.suppressEnterExpand)return;if(this.isGroupCellEditable(this.params.node))return;this.onExpandOrContract(z)}onCellDblClicked(z){if(q4(z))return;if(!(zJ(this.eExpanded,z)||zJ(this.eContracted,z)))this.onExpandOrContract(z)}onExpandOrContract(z){if(!this.isExpandable())return;let J=this.displayedNode,Q=!J.expanded;if(!Q&&J.sticky)this.beans.ctrlsSvc.getScrollFeature().setVerticalScrollPosition(J.rowTop-J.stickyRowTop);J.setExpanded(Q,z)}destroy(){super.destroy(),this.destroyCheckbox()}},vP={tag:"span",cls:"ag-cell-wrapper",children:[{tag:"span",ref:"eExpanded",cls:"ag-group-expanded ag-hidden"},{tag:"span",ref:"eContracted",cls:"ag-group-contracted ag-hidden"},{tag:"span",ref:"eCheckbox",cls:"ag-group-checkbox ag-invisible"},{tag:"span",ref:"eValue",cls:"ag-group-value"},{tag:"span",ref:"eChildCount",cls:"ag-group-child-count"}]},bY=class extends x{constructor(){super(vP);this.eExpanded=j,this.eContracted=j,this.eCheckbox=j,this.eValue=j,this.eChildCount=j}init(z){let J={setInnerRenderer:(X,Y)=>this.setRenderDetails(X,Y),setChildCount:(X)=>this.eChildCount.textContent=X,toggleCss:(X,Y)=>this.toggleCss(X,Y),setContractedDisplayed:(X)=>w(this.eContracted,X),setExpandedDisplayed:(X)=>w(this.eExpanded,X),setCheckboxVisible:(X)=>this.eCheckbox.classList.toggle("ag-invisible",!X),setCheckboxSpacing:(X)=>this.eCheckbox.classList.toggle("ag-group-checkbox-spacing",X)},Q=this.createManagedBean(new rq),Z=!z.colDef,$=this.getGui();if(Q.init(J,$,this.eCheckbox,this.eExpanded,this.eContracted,this.constructor,z),Z)U0($,Q.getCellAriaRole())}setRenderDetails(z,J){if(z)z.newAgStackInstance().then((Q)=>{if(!Q)return;let Z=()=>this.destroyBean(Q);if(this.isAlive())this.eValue.appendChild(Q.getGui()),this.addDestroyFunc(Z);else Z()});else this.eValue.innerText=J}destroy(){this.destroyBean(this.innerCellRenderer),super.destroy()}refresh(){return!1}},IP=".ag-group-checkbox-spacing{width:var(--ag-icon-size)}:where(.ag-ltr) .ag-group-checkbox-spacing{margin-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-group-checkbox-spacing{margin-left:var(--ag-cell-widget-spacing)}",CP=class extends S{constructor(){super(...arguments);this.beanName="showRowGroupColValueSvc"}getGroupValue(z,J,Q){if(!J){if(!z.group)return null;return{displayedNode:z,value:z.groupValue}}let Z=this.beans.valueSvc,$=J.colDef.showRowGroup;if(!$)return null;if(z.level===-1&&z.footer)return{displayedNode:z,value:null};if(typeof $==="string"){if((this.beans.rowGroupColsSvc?.getColumnIndex($)??-1)>z.level)return null;let q=this.getDisplayedNode(z,J,!0);if(q)return{displayedNode:q,value:Z.getValue(J,q,"data",Q)}}let X=Z.getValue(J,z,"data",Q);if(X==null){let Y=this.getDisplayedNode(z,J);if(Y)return{displayedNode:Y,value:Z.getValue(J,Y,"data",Q)}}return{displayedNode:z,value:X}}formatAndPrefixGroupColValue(z,J,Q=!1){let Z=this.formatGroupColValue(z,J,Q),{value:$,displayedNode:X}=z,Y=this.beans.footerSvc;if(Y?.doesCellShowTotalPrefix(X,J))return Y.applyTotalPrefix($,Z,X,J);if(X.footer&&X.level===-1)return null;return Z}formatGroupColValue(z,J,Q=!1){let Z=this.beans.valueSvc,{displayedNode:$,value:X}=z,Y=$.rowGroupColumn,q=$.group&&!J;if(Y&&(q||J?.isRowGroupDisplayed(Y.colId))){if(Q&&Y.colDef.useValueFormatterForExport===!1)return null;let U=Z.formatValue(Y,$,X);if(U==null&&$.key==="")return this.getLocaleTextFunc()("blanks","(Blanks)");return U}if(!J||$.group)return null;if(Q&&J.colDef.useValueFormatterForExport===!1)return null;return Z.formatValue(J,$,X)}getDisplayedNode(z,J,Q=!1){let Z=this.gos,$=Z.get("groupHideOpenParents"),X=Z.get("showOpenedGroup")&&!Q;if(!$&&!X)return;let Y=J.colDef.showRowGroup;if(Y===!0){if(z.group)return;return z.parent??void 0}let q=z;while(q&&q.rowGroupColumn?.getId()!=Y){let G=q===q.parent?.getFirstChild();if(!X&&!G)return;q=q.parent}if(q===z)return;return q??void 0}},yP=class extends S{constructor(){super(...arguments);this.beanName="showRowGroupCols",this.columns=[],this.colsSet=new Set,this.colsMap=new Map}destroy(){super.destroy(),this.columns.length=0,this.colsSet.clear(),this.colsMap.clear()}refresh(){let{colModel:z,rowGroupColsSvc:J}=this.beans,Q=this.columns,Z=this.colsSet,$=this.colsMap;$.clear();let X=Q.length,Y=0,q=!1,G=z.getCols();for(let U=0,_=G.length;U<_;++U){let H=G[U],B=H.getColDef().showRowGroup;if(typeof B==="string")$.set(B,H);else if(B===!0){let E=J?.columns;if(E)for(let K=0,F=E.length;K=X||!Z.has(H)),Q[Y++]=H}if(q||(q=Y!==X),q){Q.length=Y,Z.clear();for(let U=0;U{this.gridBodyCtrl=z.gridBodyCtrl}),this.resetStickyContainers()}setOffsetTop(z){if(this.extraTopHeight===z)return;this.extraTopHeight=z,this.eventSvc.dispatchEvent({type:"stickyTopOffsetChanged",offset:z})}setOffsetBottom(z){if(this.extraBottomHeight===z)return;this.extraBottomHeight=z}resetOffsets(){this.setOffsetBottom(0),this.setOffsetTop(0)}getLastPixelOfGroup(z){return this.isClientSide?wP(z):xP(z)}getFirstPixelOfGroup(z){if(z.footer)return z.sibling.rowTop+z.sibling.rowHeight-1;if(z.hasChildren())return z.rowTop-1;return 0}updateStickyRows(z){let J=z==="top",Q=0;if(!this.canRowsBeSticky())return this.refreshNodesAndContainerHeight(z,new Set,Q);let Z=new Set,{rowModel:$,rowRenderer:X,pinnedRowModel:Y,pageBounds:q,rowContainerHeight:G}=this.beans,{pageFirstPixel:U,pageLastPixel:_}=q.getCurrentPagePixelRange(),H=J?X.firstVisibleVPixel-this.extraTopHeight:X.lastVisibleVPixel-this.extraTopHeight,W=G.divStretchOffset??0,B=U+W,E=_+W,K=(M)=>{if(Z.add(M),J){let f=this.getLastPixelOfGroup(M),A=H+Q+M.rowHeight;if(fA)M.stickyRowTop=Q-(f-A);else M.stickyRowTop=Q}Q=0,Z.forEach((f)=>{let A=f.stickyRowTop+f.rowHeight;if(Q{if(!M.displayed)return!1;if(M.footer){if(F===!0)return!1;if(F==="grand"&&M.level===-1)return!1;if(F==="group"&&M.level>-1)return!1;let f=M.sibling.rowIndex?M.sibling.rowIndex+1===M.rowIndex:!1;if(z==="bottom"&&f)return!1;if(M.level===-1&&Y?.getGrandTotalPinned())return!1;return!Z.has(M)}if(M.isExpandable()){if(L===!0)return!1;if(z==="bottom")return!1;return!Z.has(M)&&!!M.expanded}return!1};for(let M=0;M<100;M++){let f=H+Q;if(!J)f=H-Q;if(J&&fE)f=E;let A=$.getRowIndexAtPixel(f),R=$.getRow(A);if(R==null)break;let v=this.getStickyAncestors(R).find((b)=>(J?b.rowIndexA)&&D(b));if(v){K(v);continue}if((J?R.rowTopf)&&D(R)){K(R);continue}break}if(!J)Z.forEach((M)=>{M.stickyRowTop=Q-(M.stickyRowTop+M.rowHeight)});return this.refreshNodesAndContainerHeight(z,Z,Q)}areFooterRowsStickySuppressed(){let z=this.gos.get("suppressStickyTotalRow");if(z===!0)return!0;let J=z==="group",Q=z==="grand";if(J&&Q)return!0;if(Q)return"grand";if(J)return"group";return!1}canRowsBeSticky(){let z=p1(this.gos),J=this.areFooterRowsStickySuppressed(),Q=this.gos.get("suppressGroupRowsSticky");return z&&(!J||!Q)}getStickyAncestors(z){let J=[],Q=z.footer?z.sibling:z.parent;while(Q){if(Q.sibling)J.push(Q.sibling);J.push(Q),Q=Q.parent}return J.reverse()}checkStickyRows(){let z=this.updateStickyRows("top"),J=this.updateStickyRows("bottom");return z||J}destroyStickyCtrls(){this.resetStickyContainers()}resetStickyContainers(){this.refreshNodesAndContainerHeight("top",new Set,0),this.refreshNodesAndContainerHeight("bottom",new Set,0)}refreshStickyNode(z){let J=new Set;if(this.stickyTopRowCtrls.some((Q)=>Q.rowNode===z)){for(let Q=0;Q{if(q.has(B))return;B.sticky=!0,G.push(this.createRowCon(B,!1,!1))});let U=!!G.length||Y.length!==$.length;if(Z){if(this.topContainerHeight!==Q)this.topContainerHeight=Q,this.gridBodyCtrl.setStickyTopHeight(Q),U=!0}else if(this.bottomContainerHeight!==Q)this.bottomContainerHeight=Q,this.gridBodyCtrl.setStickyBottomHeight(Q),U=!0;this.destroyRowCtrls(X,!1);let _=[...Y,...G];if(_.sort((B,E)=>E.rowNode.rowIndex-B.rowNode.rowIndex),!Z)_.reverse();for(let B of _)B.setRowTop(B.rowNode.stickyRowTop);let H=this.beans.pageBounds,W=0;if(Z){for(let B of J)if(B.rowIndexthis.topContainerHeight)W=this.topContainerHeight;this.setOffsetTop(W)}else{for(let B of J)if(B.rowIndex>H.getLastRow())W+=B.rowHeight;if(W>this.bottomContainerHeight)W=this.bottomContainerHeight;this.setOffsetBottom(W)}if(!U)return!1;if(Z)this.stickyTopRowCtrls=_;else this.stickyBottomRowCtrls=_;return!0}ensureRowHeightsValid(){let z=!1,J=(Q)=>{let Z=Q.rowNode;if(Z.rowHeightEstimated){let $=f2(this.beans,Z);Z.setRowHeight($.height),z=!0}};return this.stickyTopRowCtrls.forEach(J),this.stickyBottomRowCtrls.forEach(J),z}};function xP(z){if(z.isExpandable()||z.footer){if(z.master&&z.detailNode)return z.detailNode.rowTop+z.detailNode.rowHeight;if(!z.sibling||Math.abs(z.sibling.rowIndex-z.rowIndex)===1){let Q=z.childStore?.getStoreBounds();if(z.footer)Q=z.sibling.childStore?.getStoreBounds();return(Q?.heightPx??0)+(Q?.topPx??0)}if(z.footer)return z.rowTop+z.rowHeight;return z.sibling.rowTop+z.sibling.rowHeight}return Number.MAX_SAFE_INTEGER}function wP(z){if(z.isExpandable()||z.footer){if(z.footer&&z.rowIndex===0)return Number.MAX_SAFE_INTEGER;if(!z.sibling||Math.abs(z.sibling.rowIndex-z.rowIndex)===1){let Z=z.footer?z.sibling:z;while(Z.isExpandable()&&Z.expanded)if(Z.master&&Z.detailNode)Z=Z.detailNode;else if(Z.childrenAfterSort){if(Z.childrenAfterSort.length===0)break;Z=y(Z.childrenAfterSort)}return Z.rowTop+Z.rowHeight}if(z.footer)return z.rowTop+z.rowHeight;return z.sibling.rowTop+z.sibling.rowHeight}return Number.MAX_SAFE_INTEGER}var NP=class extends S{constructor(){super(...arguments);this.beanName="stickyRowSvc"}createStickyRowFeature(z,J,Q){let Z=this.gos;if(p1(Z)&&o(Z)||Az(Z))return z.createManagedBean(new bP(J,Q));return}},tq={moduleName:"GroupCellRenderer",version:$0,userComponents:{agGroupRowRenderer:bY,agGroupCellRenderer:bY},dynamicBeans:{groupCellRendererCtrl:rq},icons:{groupContracted:"tree-closed",groupExpanded:"tree-open"},css:[IP],dependsOn:[C0]},gP={moduleName:"GroupColumn",version:$0,beans:[WP,yP,CP,HP,nq,iq],dependsOn:[C0,tq]},sq={moduleName:"ChangedPath",version:$0,beans:[FP],dependsOn:[C0]},tJ={moduleName:"ClientSideRowModelHierarchy",version:$0,rowModels:["clientSide"],beans:[OP,VP,DP],dependsOn:[C0,sq]},lq={moduleName:"StickyRow",version:$0,beans:[NP]},hP={moduleName:"GroupEdit",version:$0,beans:[RP],dependsOn:[C0,tJ]},uP=({valueSvc:z,dataTypeSvc:J},Q,Z)=>{let $=z.getValue(Q,Z,"data"),X=null;if($ instanceof Date)X=$;else if(typeof $==="string")X=(J?.getDateParserFunction(Q)??g0)($)??null;return X},Cz=(z,J,Q,Z)=>($)=>{let X=uP(z,J,$.node),Y=Ez(X);if(!Y)return null;return Z?.(Y[Q])??Y[Q]},yz=({colNames:z},J,Q)=>(Z)=>{let $=z.getDisplayNameForColumn(J,Z.location);if($)return`${$} (${Q})`;return""},mP=Object.fromEntries(A2.map((z)=>[z,z.toLowerCase()])),cP=(z)=>{let J=A2[Number.parseInt(z,10)-1]??z,Q=mP[J]??z;return{month:J,localeKey:Q}};function xY(z){return z.groupHierarchy??z.rowGroupingHierarchy}var iP=class extends S{constructor(){super(...arguments);this.beanName="groupHierarchyColSvc",this.columns=null,this.sourceColumnMap=new WeakMap,this.inverseColumnMap=new WeakMap}addColumns(z){let J=this.columns;if(J==null)return;z.list=J.list.filter((Q)=>!z.list.some((Z)=>Z.getColId()===Q.getColId())).concat(z.list),z.tree=J.tree.filter((Q)=>!z.tree.some((Z)=>Z.getId()===Q.getId())).concat(z.tree),g2(z)}createColumns(z){let J=new WeakMap,Q=new WeakMap,Z=this.createGroupHierarchyColumns(z,J,Q);if(N2(Z,this.columns?.list??[]))return;U4(this.beans,this.columns?.tree),this.columns=null;let{colGroupSvc:X}=this.beans,Y=X?.findDepth(z.tree)??0,q=X?.balanceTreeForAutoCols(Z,Y)??[];this.columns={list:Z,tree:q,treeDepth:Y,map:{}},this.sourceColumnMap=J,this.inverseColumnMap=Q}updateColumns(z){}getColumn(z){return this.columns?.list.find((J)=>h4(J,z))??null}getColumns(){return this.columns?.list??null}expandColumnInto(z,J){let Q=this.getVirtualColumnsForColumn(J).concat(J);for(let Z of Q)if(!z.some(($)=>h4($,Z)||$.getColId()===Z.getColId()))z.push(Z)}compareVirtualColumns(z,J){let Q=this.inverseColumnMap.get(z),Z=this.inverseColumnMap.get(J);if(Q&&Q===Z){let $=this.sourceColumnMap.get(Q)??[];return $?.indexOf(z)-$?.indexOf(J)}if(this.sourceColumnMap.get(z)?.includes(J))return 1;if(this.sourceColumnMap.get(J)?.includes(z))return-1;return null}insertVirtualColumnsForCol(z,J){let Q=this.getVirtualColumnsForColumn(J);if(!Q)return[];let Z=z.indexOf(J);if(Z<0)Z=z.length-1;return P2(z,Q),z.splice(Z,0,...Q),Q}getVirtualColumnsForColumn(z){if(this.isGroupHierarchyColsEnabledForCol(z))return this.sourceColumnMap.get(z)??[];return[]}isGroupHierarchyColsEnabled(z){return z.list.some((J)=>this.isGroupHierarchyColsEnabledForCol(J))}isGroupHierarchyColsEnabledForCol(z){let J=z.getColDef();return!!(xY(J)&&(J.rowGroup||J.enableRowGroup||J.rowGroupIndex!=null||J.pivot||J.enablePivot||J.pivotIndex!=null))}createGroupHierarchyColDefs(z){let J=[],Q=z.getColDef(),Z=xY(Q);if(!Z)return J;if(!this.isGroupHierarchyColsEnabledForCol(z))return J;for(let $ of Z){let X=null;if(typeof $==="string")X=this.createColDefForPart($,z,Q);else X=$;if(X)J.push(X)}return J}createGroupHierarchyColumns(z,J,Q){if(!this.isGroupHierarchyColsEnabled(z))return[];let Z=[];for(let $ of z.list)for(let X of this.createGroupHierarchyColDefs($)){let Y=X.colId;this.gos.validateColDef(X,Y,!0);let q=new B4(X,null,Y,!0);this.createBean(q),Z.push(q),pP(J,$,q),Q.set(q,$)}return Z}createColDefForPart(z,J,Q){let{beans:Z,gos:$}=this,X=`${I9}-${J.getColId()}-${z}`,Y={enableRowGroup:Q.enableRowGroup,rowGroup:Q.rowGroup,enablePivot:Q.enablePivot,hide:!0,editable:!1},q=$.get("groupHierarchyConfig")??{};if(z in q){let H={...Y,...q[z]};return H.colId??(H.colId=X),e4(Z,H,H.colId,!0)}let G=e4(Z,{colId:X,...Y},X,!0),U=this.getLocaleTextFunc(),_=(H,W)=>U?.(H,W)??W;switch(z){case"year":return{...G,headerValueGetter:yz(Z,J,_(z,"Year")),valueGetter:Cz(Z,J,0)};case"quarter":return{...G,headerValueGetter:yz(Z,J,_(z,"Quarter")),valueGetter:Cz(Z,J,1,(H)=>(Math.floor(Number(H)/4)+1).toString())};case"month":return{...G,headerValueGetter:yz(Z,J,_(z,"Month")),valueGetter:Cz(Z,J,1)};case"formattedMonth":return{...G,headerValueGetter:yz(Z,J,_("month","Month")),valueGetter:Cz(Z,J,1,(H)=>{let W=cP(H);return _(W.localeKey,W.month)})};case"day":return{...G,headerValueGetter:yz(Z,J,_(z,"Day")),valueGetter:Cz(Z,J,2)};case"hour":return{...G,headerValueGetter:yz(Z,J,_(z,"Hour")),valueGetter:Cz(Z,J,3)};case"minute":return{...G,headerValueGetter:yz(Z,J,_(z,"Minute")),valueGetter:Cz(Z,J,4)};case"second":return{...G,headerValueGetter:yz(Z,J,_(z,"Second")),valueGetter:Cz(Z,J,5)};default:return null}}};function pP(z,J,Q){let Z=z.get(J);z.set(J,(Z??[]).concat(Q))}var nP={moduleName:"GroupHierarchy",version:$0,beans:[iP],dependsOn:[sq]};var dP=(z,J)=>{if(!z){J.length=0;return}let Q=z.length;J.length=Q;for(let Z=0;Z{let Q=z.length;if(Q!==J?.length)return!0;for(let Z=0;Z0){Q=!0;break}if(!Q)return!1;return z.sort(wY),!0}function wY(z,J){let Q=z.sourceRowIndex,Z=J.sourceRowIndex,$=Q>=0,X=Z>=0,Y=$&&X,q=!$&&!X;if(Y)return Q-Z;if(q)return z.__objectId-J.__objectId;if($)return 1;return-1}var sP=class extends S{constructor(){super(...arguments);this.groupCols=[],this.nonLeafsById=new Map,this.checkGroupCols=!0,this.pivotMode=!1,this.groupEmpty=!1}invalidateGroupCols(){this.checkGroupCols=!0}destroy(){super.destroy(),this.groupCols.length=0,this.nonLeafsById.clear()}clearNonLeafs(){let z=this.nonLeafsById;for(let J of z.values())J._destroy(!1);z.clear()}loadGroupData(z){if(!z.group)return z._groupData=null,null;let J=z.rowGroupColumn,{valueSvc:Q,showRowGroupCols:Z}=this.beans,$={};if(z._groupData=$,!J)return $;let X=X1(z),Y=J.getId();if(!Z)return $;let q=Z.columns;for(let G=0,U=q.length;G{let Z=Q.childrenAfterGroup,$=Z?.length;if(!$)return;let X=Array($),Y=0,q=!1,G;for(let U=0;U<$;++U){let _=Z[U];if(!_.childrenAfterGroup?.length)q||(q=Y!==U),X[Y++]=_;else if(!G&&_.key===""){G=_;let H=$-1;q||(q=U!==H),X[H]=_}}if(q){for(let _=0;_<$;++_){let H=Z[_];if(H.childrenAfterGroup?.length&&H!==G)X[Y++]=H}Q.childrenAfterGroup=X;let U=Q.sibling;if(U)U.childrenAfterGroup=X}})}initRefresh(z){let{rowGroupColsSvc:J,colModel:Q,gos:Z}=this.beans;this.pivotMode=Q.isPivotMode(),this.groupEmpty=this.pivotMode||!Z.get("groupAllowUnbalanced");let $=J?.columns,X=this.groupCols,Y=z.afterColumnsChanged;if(Y||!X||this.checkGroupCols)if(this.checkGroupCols=!1,X&&!rP(X,$)){if(Y)return"skip"}else{z.animate=!1;let q=X[0]?.col.getId()!==$?.[0]?.getId();return dP($,X),q?"refresh":"groupColsChanged"}return"refresh"}handleDeltaUpdate(z,J,{removals:Q,updates:Z,adds:$,reordered:X},Y){let q=new Set;for(let G=0,U=Q.length;G1)}}if($.size)for(let G of $){this.insertOneNode(z,G);let U=G.parent;J?.addRow(U),X||(X=(U?.childrenAfterGroup?.length??0)>1)}if(q.size)NY(q),this.removeEmptyGroups(q,Y);if(X)this.sortChildren(z,J)}sortChildren(z,J){r0(z,!0,void 0,(Q)=>{if(tP(Q.childrenAfterGroup))J?.addRow(Q)})}orderGroups(z){let J=this.gos.getCallback("initialGroupOrderComparator");if(!J)return;let Q=this.beans,Z=Q.gridApi,$=Q.gridOptions.context,X=(q,G)=>J({api:Z,context:$,nodeA:q,nodeB:G}),Y=(q)=>{let G=q.childrenAfterGroup,U=G?.length;if(!U||q.leafGroup)return;if(U>1)G.sort(X);for(let _=0,H=U;_=0;--q){let{col:G}=Y[q],U=Q.getKeyForNode(G,J);if(U==null||U===""){if(!Z)continue;U=""}if(!$?.parent||$.key!==U){X=!0;break}$=$.parent}if(X||(X=!!$?.parent),!X)return!1;return this.removeFromParent(J),this.insertOneNode(z,J),J.setData(J.data),!0}groupShouldBeRemoved(z){let J=this.getChildrenMappedKey(z.key,z.rowGroupColumn),Q=z.parent?.childrenMapped;if(Q?!Q[J]:!0)return!1;return!!z.group&&(z.childrenAfterGroup?.length??0)===0}removeEmptyGroups(z,J){let Q=this.beans.selectionSvc,Z,$=Array.from(z),X=this.nonLeafsById;do{z.clear();for(let Y=0;Y<$.length;++Y){let q=$[Y];while(q){let G=q.parent;if(q.destroyed){$[Y]=G,q=G;continue}if(!G)break;if(!this.groupShouldBeRemoved(q)){q=G;continue}if(z.add(G),this.removeFromParent(q),Q&&q.isSelected())Z??(Z=[]),Z.push(q);$[Y]=G,X.delete(q.id),q._destroy(J),q=G}}NY(z)}while(z.size);if(Z)Q.setNodesSelected({nodes:Z,newValue:!1,source:"rowGroupChanged"})}removeFromParent(z){let J=z.parent;if(J){let Q=this.getChildrenMappedKey(z.key,z.rowGroupColumn),Z=J.childrenMapped;if(Z)delete Z[Q]}return z.setRowTop(null),z.setRowIndex(null),J}addToParent(z,J){let Q=J.childrenMapped??(J.childrenMapped={}),Z=this.getChildrenMappedKey(z.key,z.rowGroupColumn);if(Q[Z]!==z){Q[Z]=z;let $=J.childrenAfterGroup;if(!$){J.childrenAfterGroup=$=[];let X=J.sibling;if(X)X.childrenAfterGroup=J.childrenAfterGroup}$.push(z),Dq(J,this.beans,!0),wJ(J)}}shotgunResetEverything(z){let J=this.nonLeafsById;for(let $ of J.values())$.childrenAfterGroup=null,$.childrenMapped=null;z.leafGroup=!this.groupCols?.length,z.childrenAfterGroup=[],z.childrenMapped={},z.updateHasChildren();let Q=z.sibling;if(Q)Q.childrenAfterGroup=z.childrenAfterGroup,Q.childrenMapped=z.childrenMapped;let Z=z._leafs;for(let $=0,X=Z.length;$=q-1,K=this.createGroup(Q,U,H,B,E,J);this.addToParent(K,Q),Q=K}if(!Q.group)V(184,{parentGroupData:Q.data,childNodeData:J.data});J.parent=Q,J.level=Q.level+1,Q.childrenAfterGroup.push(J),Q.updateHasChildren(),wJ(Q)}createGroup(z,J,Q,Z,$,X){let Y=J.col,q=(z.level>=0?z.id+"-":"row-group-")+(Y.getColId()+"-"+Q),G=this.nonLeafsById,U=G.get(q),_=!0;if(U){if(U.childrenAfterGroup!==null)return U._expanded??(U._expanded=null),U;_=!1,wJ(U)}else U=new Pz(this.beans),U.group=!0,U.key=Q,U.id=q,U.aggData=null,G.set(q,U);let H=(K)=>{K.childrenAfterGroup=W,K.childrenMapped=B,K.parent=z,K.level=Z,K.rowGroupIndex=Z,K.leafGroup=$},W=[],B={};if(H(U),U.field=J.field??null,U.rowGroupColumn=Y,U.groupValue=this.beans.valueSvc.getValue(Y,X,"data"),U._expanded??(U._expanded=null),_)return U.setAllChildrenCount(0),U.updateHasChildren(),U;let E=U.sibling;if(E)H(E);return U.dispatchRowEvent("hasChildrenChanged"),U}getChildrenMappedKey(z,J){return J?J.getId()+"-"+z:z}onShowRowGroupColsSetChanged(){let{rowModel:z,valueSvc:J}=this.beans;for(let Z of this.nonLeafsById.values()){Z._groupData=void 0;let $=Z.rowGroupColumn,X=$&&X1(Z);Z.groupValue=X&&J.getValue($,X,"data")}let Q=z.rootNode?._leafs;if(Q)for(let Z=0,$=Q.length;Z<$;++Z){let X=Q[Z];X.parent._groupData=void 0}}},NY=(z)=>{for(let J of z){let Q=J?.childrenAfterGroup;if(!Q)continue;let Z=Q.length,$=0;for(let X=0;X{while(z._leafs!==void 0){let J=z.parent;if(!J)break;z._leafs=void 0,z=J}};function lP(z,J){z.rowGroupColsSvc?.setColumns(J,"api")}function aP(z,J){z.rowGroupColsSvc?.removeColumns(J,"api")}function oP(z,J){z.rowGroupColsSvc?.addColumns(J,"api")}function eP(z,J,Q){z.rowGroupColsSvc?.moveColumn?.(J,Q,"api")}function zT(z){return z.rowGroupColsSvc?.columns??[]}var aq={moduleName:"SharedRowGrouping",version:$0,apiFunctions:{setRowGroupColumns:lP,removeRowGroupColumns:aP,addRowGroupColumns:oP,getRowGroupColumns:zT,moveRowGroupColumn:eP},dependsOn:[C0,pq,gP,lq,nP]},JT={moduleName:"RowGrouping",version:$0,dynamicBeans:{groupStrategy:sP},rowModels:["clientSide"],dependsOn:[aq,_P,tJ,hP]};function QT(z,J){z.clipboardSvc?.copyToClipboard(J)}function ZT(z,J){z.clipboardSvc?.cutToClipboard(J)}function $T(z,J){z.clipboardSvc?.copySelectedRowsToClipboard(J)}function XT(z,J){z.clipboardSvc?.copySelectedRangeToClipboard(J)}function YT(z){z.clipboardSvc?.copyRangeDown()}function qT(z){z.clipboardSvc?.pasteFromClipboard()}var IJ="paste",t5="dragCopy",s5="clipboard";function GT(z,J=","){let Q=[],Z=(X)=>X==="\r"||X===` +`,$=!1;if(z==="")return[[""]];for(let X=0,Y=0,q=0;q{if(!Q[X])Q[X]=[];if(!Q[X][Y])Q[X][Y]=""};if(H(),U==='"'){if($)if(_==='"')Q[X][Y]+='"',q++;else $=!1;else if(G===void 0||G===J||Z(G))$=!0}if(!$&&U!=='"'){if(U===J){Y++,H();continue}else if(Z(U)){if(Y=0,X++,H(),U==="\r"&&_===` +`)q++;continue}}Q[X][Y]+=U}return Q}var UT=class extends S{constructor(){super(...arguments);this.beanName="clipboardSvc",this.clientSideRowModel=null,this.gridCtrl=null,this.lastPasteOperationTime=0,this.navigatorApiFailed=!1}postConstruct(){let{gos:z,rowModel:J,ctrlsSvc:Q}=this.beans;if(o(z,J))this.clientSideRowModel=J;Q.whenReady(this,(Z)=>{this.gridCtrl=Z.gridCtrl})}destroy(){super.destroy(),this.clientSideRowModel=null,this.gridCtrl=null}pasteFromClipboard(){if(!this.gos.get("suppressClipboardApi")&&!this.navigatorApiFailed&&navigator.clipboard?.readText)navigator.clipboard.readText().then(this.processClipboardData.bind(this)).catch((J)=>{V(40,{e:J,method:"readText"}),this.navigatorApiFailed=!0,this.pasteFromClipboardLegacy()});else this.pasteFromClipboardLegacy()}pasteFromClipboardLegacy(){let z=!1,J=(Q)=>{let Z=Date.now();if(Z-this.lastPasteOperationTime<50)z=!0,Q.preventDefault();this.lastPasteOperationTime=Z};this.executeOnTempElement((Q)=>{Q.addEventListener("paste",J),Q.focus({preventScroll:!0})},(Q)=>{let Z=Q.value;if(!z)this.processClipboardData(Z);else this.refocusLastFocusedCell();Q.removeEventListener("paste",J)})}refocusLastFocusedCell(){let{focusSvc:z}=this.beans,J=z.getFocusedCell();if(J)z.setFocusedCell({rowIndex:J.rowIndex,column:J.column,rowPinned:J.rowPinned,forceBrowserFocus:!0})}getClipboardDelimiter(){let z=this.gos.get("clipboardDelimiter");return P(z)?z:"\t"}processClipboardData(z){if(z==null)return;let J=GT(z,this.getClipboardDelimiter()),Q=this.gos.getCallback("processDataFromClipboard");if(Q)J=Q({data:J});if(J==null)return;if(this.gos.get("suppressLastEmptyLineOnPaste"))this.removeLastLineIfBlank(J);let{rangeSvc:Z,editSvc:$}=this.beans,X=(Y,q,G,U)=>{if(Z?.isMoreThanOneCell()&&!this.hasOnlyOneValueToPaste(J))this.pasteIntoActiveRange(J,Y,q,U);else this.pasteStartingFromFocusedCell(J,Y,q,G,U);$?.stopEditing(void 0,{source:IJ})};this.doPasteOperation(X)}doPasteOperation(z){let{eventSvc:Q,focusSvc:Z,rowRenderer:$,gos:X}=this.beans;Q.dispatchEvent({type:"pasteStart",source:"clipboard"});let{clientSideRowModel:Y}=this,q=Y?.rootNode,G=q&&this.beans.changedPathFactory?.newPath(X.get("aggregateOnlyChangedColumns")),U={},_=[],H=Z.getFocusedCell();z(U,_,H,G);let W=_.slice();if(G)Y.doAggregate(G),r0(q,Y.hierarchical,G,(B)=>{W.push(B)});$.refreshCells({rowNodes:W}),this.dispatchFlashCells(U),this.fireRowChanged(_),this.refocusLastFocusedCell(),Q.dispatchEvent({type:"pasteEnd",source:"clipboard"})}getPreProcessRangeCallback(z){return(J)=>{let{rangeSvc:Q}=this.beans;if(!Q)return;let{rowDiff:Z,colDiff:$}=this.getAdjustedRangeDimensionForPaste(J,z);if(Z!==0)Q.extendRangeRowCountBy(J,Z);if($!==0)Q.extendRangeColumnCountBy(J,$)}}getAdjustedRangeDimensionForPaste(z,J){let Q=this.beans.rangeSvc,Z=J.length,$=Q.getRangeRowCount(z),X=$>=Z&&$%Z===0,Y=J[0].length,q=z.columns.length,G=q>=Y&&q%Y===0;return{rowDiff:X?0:Z-$,colDiff:G?0:Y-q}}pasteIntoActiveRange(z,J,Q,Z){let $=0,X=0,Y=(q,G,U,_)=>{if(_-$>=z.length){if(_%z.length!==0)return;$+=X,X=0}let W=z[_-$];Q.push(G);let B=this.gos.getCallback("processCellFromClipboard"),E=U.columns,K=E.findIndex(i4);if(K!==-1)E.splice(K,1);for(let F=0;F=W.length)D=F%W.length;let M=this.processCell(G,L,W[D],t5,B,!0);G.setDataValue(L,M,IJ),Z?.addCell(G.parent,L.getId());let{rowIndex:f,rowPinned:A}=q,R=n4({rowIndex:f,column:L,rowPinned:A});J[R]=!0}X++};this.iterateActiveRanges(Y,!1,this.getPreProcessRangeCallback(z))}getDisplayedColumnsStartingAt(z){let J=z,Q=[],{visibleCols:Z}=this.beans;while(J&&w2(J))J=Z.getColAfter(J);while(J!=null)Q.push(J),J=Z.getColAfter(J);return Q}pasteStartingFromFocusedCell(z,J,Q,Z,$){if(!Z)return;let X={rowIndex:Z.rowIndex,rowPinned:Z.rowPinned},Y=this.getDisplayedColumnsStartingAt(Z.column);if(this.isPasteSingleValueIntoRange(z))this.pasteSingleValueIntoRange(z,Q,J,$);else this.pasteMultipleValues(z,X,Q,Y,J,s5,$)}isPasteSingleValueIntoRange(z){let J=this.beans.rangeSvc;return this.hasOnlyOneValueToPaste(z)&&!!J&&!J.isEmpty()}pasteSingleValueIntoRange(z,J,Q,Z){let $=z[0][0],X=(Y,q,G)=>{J.push(q),G.columns.forEach((U)=>this.updateCellValue(q,U,$,Q,s5,Z))};this.iterateActiveRanges(X)}hasOnlyOneValueToPaste(z){return z.length===1&&z[0].length===1}copyRangeDown(){let{rangeSvc:z,gos:J,formula:Q,valueSvc:Z}=this.beans;if(!z||z.isEmpty())return;let $=[],X=(Y,q,G,U)=>{let _=J.getCallback("processCellForClipboard"),H=J.getCallback("processCellFromClipboard"),W=(B,E,K)=>{let{columns:F}=K;if(!$.length)F.forEach((L)=>{let D=this.processCell(E,L,Z.getValue(L,E,"batch"),t5,_,!1,!0);$.push(D)});else q.push(E),F.forEach((L,D)=>{if(!L.isCellEditable(E)||L.isSuppressPaste(E))return;if(L.isAllowFormula()&&Q?.isFormula($[D]))$[D]=Q?.updateFormulaByOffset({value:$[D],rowDelta:1});let f=this.processCell(E,L,$[D],t5,H,!0);E.setDataValue(L,f,IJ),U?.addCell(E.parent,L.getId());let{rowIndex:A,rowPinned:R}=B,O=n4({rowIndex:A,column:L,rowPinned:R});Y[O]=!0})};this.iterateActiveRanges(W,!0)};this.doPasteOperation(X)}removeLastLineIfBlank(z){let J=y(z);if(J&&J.length===1&&J[0]===""){if(z.length===1)return;X0(z,J)}}fireRowChanged(z){if(this.gos.get("editType")!=="fullRow")return;for(let J of z)this.eventSvc.dispatchEvent({type:"rowValueChanged",node:J,data:J.data,rowIndex:J.rowIndex,rowPinned:J.rowPinned})}shouldSkipPasteRow(z,J,Q){if(z.detail||z.footer)return!0;if(Q&&z.group){for(let Z of J)if(Z.isCellEditable(z))return!1;return!0}return!1}pasteMultipleValues(z,J,Q,Z,$,X,Y){let q=J,G=this.beans,{gos:U}=G,_=this.clientSideRowModel!=null&&!U.get("enableGroupEdit")&&!U.get("treeData"),H=()=>{while(q){let W=S0(G,q);if(q=M0(G,{rowPinned:q.rowPinned,rowIndex:q.rowIndex}),W!=null&&!this.shouldSkipPasteRow(W,Z,_))return W}return null};for(let W of z){let B=H();if(!B)continue;W.forEach((E,K)=>this.updateCellValue(B,Z[K],E,$,X,Y)),Q.push(B)}}updateCellValue(z,J,Q,Z,$,X){if(!z||!J?.isCellEditable(z)||J?.isSuppressPaste(z))return;let Y=this.processCell(z,J,Q,$,this.gos.getCallback("processCellFromClipboard"),!0);z.setDataValue(J,Y,IJ);let{rowIndex:q,rowPinned:G}=z,U=n4({rowIndex:q,column:J,rowPinned:G});Z[U]=!0,X?.addCell(z.parent,J.getId())}copyToClipboard(z={}){this.copyOrCutToClipboard(z)}cutToClipboard(z={},J="api"){if(this.gos.get("suppressCutToClipboard"))return;this.eventSvc.dispatchEvent({type:"cutStart",source:J}),this.copyOrCutToClipboard(z,!0),this.eventSvc.dispatchEvent({type:"cutEnd",source:J})}copyOrCutToClipboard(z,J){let{includeHeaders:Q,includeGroupHeaders:Z}=z,{gos:$,focusSvc:X}=this.beans;if(Q==null)Q=$.get("copyHeadersToClipboard");if(Z==null)Z=$.get("copyGroupHeadersToClipboard");let Y={includeHeaders:Q,includeGroupHeaders:Z},q=$.get("rowSelection"),G=$.get("cellSelection"),U=null;if(this.shouldCopyCells(G,q))this.copySelectedRangeToClipboard(Y),U=0;else if(this.shouldCopyRows(q))this.copySelectedRowsToClipboard(Y),U=1;else if(X.isAnyCellFocused())this.copyFocusedCellToClipboard(Y),U=2;if(J&&U!==null)this.clearCellsAfterCopy(U)}shouldCopyCells(z,J){let{rangeSvc:Q,selectionSvc:Z,gos:$}=this.beans;if(!Q||Q.isEmpty())return!1;if(z)return!(typeof J==="object"&&J.copySelectedRows&&!Z?.isEmpty());else{let X=$.get("suppressCopySingleCellRanges");return!(!Q.isMoreThanOneCell()&&X)}}shouldCopyRows(z){let{selectionSvc:J,gos:Q}=this.beans;if(J?.isEmpty()??!0)return!1;if(z&&typeof z!=="string")return z.copySelectedRows??!1;else return!Q.get("suppressCopyRowsToClipboard")}clearCellsAfterCopy(z){let J=this.beans,{rangeSvc:Q,focusSvc:Z,eventSvc:$}=J;if($.dispatchEvent({type:"keyShortcutChangedCellStart"}),z===0)Q.clearCellRangeCellValues({cellEventSource:"clipboardSvc"});else if(z===1)this.clearSelectedRows();else{let X=Z.getFocusedCell();if(X==null)return;let Y=S0(J,X);if(Y)this.clearCellValue(Y,X.column)}$.dispatchEvent({type:"keyShortcutChangedCellEnd"})}clearSelectedRows(){let{selectionSvc:z,visibleCols:J}=this.beans,Q=z?.getSelectedNodes()??[],Z=J.allCols;for(let $ of Q)for(let X of Z)this.clearCellValue($,X)}clearCellValue(z,J){if(!J.isCellEditable(z))return;let Q=this.beans.valueSvc.getDeleteValue(J,z);z.setDataValue(J,Q,"clipboardSvc")}iterateActiveRanges(z,J,Q){let Z=this.beans.rangeSvc;if(!Z||Z.isEmpty())return;let $=Z.getCellRanges(),X=J?[$[0]]:$;for(let Y of X)this.iterateActiveRange({cellRange:Y,rowCallback:z,preProcessRange:Q})}iterateActiveRange(z){let{cellRange:J,preProcessRange:Q,rowCallback:Z}=z,{beans:$}=this,{rangeSvc:X}=$;if(!X)return;if(Q)Q(J);let Y=X.getRangeStartRow(J),q=X.getRangeEndRow(J),G=0,U=!1;while(!U&&Y!=null){let _=S0($,Y);U=a(Y,q),Z(Y,_,J,G++),Y=M0($,Y)}}copySelectedRangeToClipboard(z={}){let J=this.beans.rangeSvc;if(!J||J.isEmpty())return;let Q=J.areAllRangesAbleToMerge(),{data:Z,cellsToFlash:$}=Q?this.buildDataFromMergedRanges(J,z):this.buildDataFromRanges(J,z);this.copyDataToClipboard(Z),this.dispatchFlashCells($)}buildDataFromMergedRanges(z,J){let Q=new Set,Z=z.getCellRanges(),$=new Map,X=[],Y={},q=o(this.gos,this.beans.rowModel),G=new Set;if(!q)this.beans.rowModel.forEachNode((W)=>{G.add(W.rowIndex)});for(let W of Z){W.columns.forEach((K)=>Q.add(K));let{rowPositions:B,cellsToFlash:E}=this.getRangeRowPositionsAndCellsToFlash(z,W);for(let K of B){let F=G.has(K.rowIndex);if(!q&&!F)continue;let L=`${K.rowIndex}-${K.rowPinned||"null"}`;if(!$.get(L))$.set(L,!0),X.push(K)}Object.assign(Y,E)}let U=this.beans.visibleCols.allCols,_=Array.from(Q);return _.sort((W,B)=>{let E=U.indexOf(W),K=U.indexOf(B);return E-K}),{data:this.buildExportParams({columns:_,rowPositions:X,includeHeaders:J.includeHeaders,includeGroupHeaders:J.includeGroupHeaders}),cellsToFlash:Y}}buildDataFromRanges(z,J){let Q=z.getCellRanges(),Z=[],$={};for(let X of Q){let{rowPositions:Y,cellsToFlash:q}=this.getRangeRowPositionsAndCellsToFlash(z,X);Object.assign($,q),Z.push(this.buildExportParams({columns:X.columns,rowPositions:Y,includeHeaders:J.includeHeaders,includeGroupHeaders:J.includeGroupHeaders}))}return{data:Z.join(` +`),cellsToFlash:$}}getRangeRowPositionsAndCellsToFlash(z,J){let Q=[],Z={},$=z.getRangeStartRow(J),X=z.getRangeEndRow(J),Y=$;while(Y){Q.push(Y);for(let q of J.columns){let{rowIndex:G,rowPinned:U}=Y,_=n4({rowIndex:G,column:q,rowPinned:U});Z[_]=!0}if(a(Y,X))break;Y=M0(this.beans,Y)}return{rowPositions:Q,cellsToFlash:Z}}getCellsToFlashFromRowNodes(z){let J=this.beans.visibleCols.allCols,Q={};for(let Z=0;Z{let{value:H,valueFormatted:W}=this.beans.valueSvc.getValueForDisplay({column:_,node:U,includeValueFormatted:!0,from:"batch"}),B=W??H??"",E=X.getCallback("processCellForClipboard");if(!E)return B;return E({column:_,node:U,value:B,type:s5,formatValue:(K)=>this.beans.valueSvc.formatValue(_,U,K)??K,parseValue:(K)=>this.beans.valueSvc.parseValue(_,U,K,H)??K})},G={columnKeys:J,rowPositions:Q,skipColumnHeaders:!Z,skipColumnGroupHeaders:!$,suppressQuotes:!0,columnSeparator:this.getClipboardDelimiter(),onlySelected:!Q,valueFrom:"batch",processCellCallback:X.getCallback("processCellForClipboard"),processRowGroupCallback:q,processHeaderCallback:X.getCallback("processHeaderForClipboard"),processGroupHeaderCallback:X.getCallback("processGroupHeaderForClipboard")};return Y.getDataAsCsv(G,!0)}dispatchFlashCells(z){window.setTimeout(()=>{this.eventSvc.dispatchEvent({type:"flashCells",cells:z})},0)}processCell(z,J,Q,Z,$,X,Y){let{valueSvc:q,formula:G}=this.beans;if($)return $({column:J,node:z,value:Q,type:Z,formatValue:(_)=>q.formatValue(J,z??null,_)??_,parseValue:(_)=>q.parseValue(J,z??null,_,q.getValue(J,z,"edit"))});if(X&&J.getColDef().useValueParserForImport!==!1)return q.parseValue(J,z??null,Q,q.getValue(J,z,"edit"));if(Y&&J.getColDef().useValueFormatterForExport!==!1){if(G?.isFormula(Q))return Q;return q.formatValue(J,z??null,Q)??Q}return Q}copyDataToClipboard(z){let J=this.gos.getCallback("sendToClipboard");if(J){J({data:z});return}if(!this.gos.get("suppressClipboardApi")&&navigator.clipboard){navigator.clipboard.writeText(z).catch((Z)=>{V(40,{e:Z,method:"writeText"}),this.copyDataToClipboardLegacy(z)});return}this.copyDataToClipboardLegacy(z)}copyDataToClipboardLegacy(z){this.executeOnTempElement((J)=>{let Q=Y0(this.beans),Z=n(this.beans);if(J.value=z||" ",J.select(),J.focus({preventScroll:!0}),!Q.execCommand("copy"))V(41);if(Z?.focus!=null)Z.focus({preventScroll:!0})})}executeOnTempElement(z,J){if(!this.gridCtrl)return;let Q=Y0(this.beans),Z=Q.createElement("textarea"),$=Z.style;$.width="1px",$.height="1px";let X=Q.documentElement;$.top=X.scrollTop+"px",$.left=X.scrollLeft+"px",$.position="absolute",$.opacity="0",this.gridCtrl.getGui().appendChild(Z);try{z(Z)}catch(q){V(42)}if(J)window.setTimeout(()=>{J(Z),Z.remove()},100);else Z.remove()}},oq={moduleName:"Clipboard",version:$0,beans:[UT],apiFunctions:{copyToClipboard:QT,cutToClipboard:ZT,copySelectedRowsToClipboard:$T,copySelectedRangeToClipboard:XT,copySelectedRangeDown:YT,pasteFromClipboard:qT},dependsOn:[C0,EX,Y1,aX]};var eq=class extends S{constructor(){super(...arguments);this.loadRowDataVersion=0}wireBeans(z){this.environment=z.environment}init(z,J){if(this.params=J,this.comp=z,J.pinned!=null)return;this.setAutoHeightClasses(),this.setupRefreshStrategy(),this.createDetailGrid(),this.loadRowData(),this.addManagedEventListeners({fullWidthRowFocused:this.onFullWidthRowFocused.bind(this)})}onFullWidthRowFocused(z){let J=this.params,Q={rowIndex:J.node.rowIndex,rowPinned:J.node.rowPinned},Z={rowIndex:z.rowIndex,rowPinned:z.rowPinned};if(!a(Q,Z))return;E0(this.comp.getGui(),z.fromBelow)}setAutoHeightClasses(){let z=this.gos.get("detailRowAutoHeight"),J=z?"ag-details-row-auto-height":"ag-details-row-fixed-height",Q=z?"ag-details-grid-auto-height":"ag-details-grid-fixed-height",Z=this.comp;Z.toggleCss(J,!0),Z.toggleDetailGridCss(Q,!0)}setupRefreshStrategy(){let z=this.params.refreshStrategy;if(z=="everything"||z=="nothing"||z=="rows"){this.refreshStrategy=z;return}if(z!=null)V(170,{providedStrategy:z});this.refreshStrategy="rows"}createDetailGrid(){let{params:z,gos:J}=this;if(d(z.detailGridOptions)){V(171);return}let Q=J.get("theme"),Z=z.detailGridOptions.theme;if(Z&&Z!==Q)V(267);let $={themeStyleContainer:this.environment.eStyleContainer,...z.detailGridOptions,theme:Q};if(J.get("detailRowAutoHeight"))$.domLayout="autoHeight";this.comp.setDetailGrid($)}registerDetailWithMaster(z){let{params:J,beans:{selectionSvc:Q,findSvc:Z,expansionSvc:$}}=this,X=J.node.id,Y=J.api,q={id:X,api:z},G=J.node;if(Y.isDestroyed())return;Y.addDetailGridInfo(X,q),G.detailGridInfo=q;let U=G.parent;Z?.registerDetailGrid(G,z);function _(){if(U)Q?.refreshMasterNodeState(U)}function H({source:B}){if(B==="expandAll")return z.expandAll();if(B==="collapseAll")return z.collapseAll()}function W({node:B,source:E}){if(B!==U||E==="masterDetail"||z.isDestroyed())return;Q?.setDetailSelectionState(U,J.detailGridOptions,z)}z.addEventListener("firstDataRendered",()=>{if(z.isDestroyed()||Y.isDestroyed())return;Q?.setDetailSelectionState(U,J.detailGridOptions,z),z.addEventListener("selectionChanged",_),Y.addEventListener("rowSelected",W);let E=`${"CsrmSsrmSharedApi"}Module`;if(z.isModuleRegistered(E))Y.addEventListener("expandOrCollapseAll",H),$?.setDetailsExpansionState(z)}),this.addManagedListeners(U,{masterChanged:(B)=>{if(!B.node.master)this.onDestroy(q)}}),this.addDestroyFunc(()=>this.onDestroy(q))}onDestroy(z){let{params:J}=this,Q=J.node,Z=J.api;if(Q.detailGridInfo!==z)return;if(!Z.isDestroyed())Z.removeDetailGridInfo(Q.id);Q.detailGridInfo=null}loadRowData(){this.loadRowDataVersion++;let z=this.loadRowDataVersion,J=this.params;if(J.detailGridOptions?.rowModelType==="serverSide"){J.node.detailGridInfo?.api?.refreshServerSide({purge:!0});return}let Q=J.getDetailRowData;if(!Q){V(172);return}let Z=(X)=>{if(this.loadRowDataVersion===z)this.comp.setRowData(X)},$={node:J.node,data:J.node.data,successCallback:Z,context:C(this.gos,{}).context};Q($)}refresh(){switch(this.refreshStrategy){case"nothing":return!0;case"everything":return!1}return this.loadRowData(),!0}},_T=class{constructor(z){this.parentWrapper=z}wrap(z,J,Q,Z){return this.parentWrapper.wrap(z,J,Q,Z)}},HT={tag:"div",cls:"ag-details-row"},WT={tag:"div",cls:"ag-details-row",role:"gridcell",children:[{tag:"div",ref:"eDetailGrid",cls:"ag-details-grid",role:"presentation"}]},BT=class extends x{constructor(){super(...arguments);this.eDetailGrid=j}wireBeans(z){this.context=z.context}init(z){this.params=z,this.selectAndSetTemplate();let J={toggleCss:(Q,Z)=>this.toggleCss(Q,Z),toggleDetailGridCss:(Q,Z)=>this.eDetailGrid.classList.toggle(Q,Z),setDetailGrid:(Q)=>this.setDetailGrid(Q),setRowData:(Q)=>this.setRowData(Q),getGui:()=>this.eDetailGrid};this.ctrl=this.createManagedBean(new eq),this.ctrl.init(J,z)}refresh(){return this.ctrl?.refresh()??!1}selectAndSetTemplate(){let z=this.params;if(z.pinned){this.setTemplate(HT);return}let J=()=>{this.setTemplate(WT)};if(d(z.template))J();else if(typeof z.template==="string")this.setTemplate(z.template,[]);else if(typeof z.template==="function"){let Q=z.template,Z=Q(z);this.setTemplate(Z,[])}else V(168),J();if(this.eDetailGrid==null)V(169)}setDetailGrid(z){if(!this.eDetailGrid)return;let J=this.context.getBean("frameworkCompWrapper"),Q=new _T(J),{frameworkOverrides:Z}=this.beans,$=fJ(this.eDetailGrid,z,{frameworkOverrides:Z,providedBeanInstances:{frameworkCompWrapper:Q},modules:X9(this.params.api.getGridId(),z.rowModelType??"clientSide")});this.detailApi=$,this.ctrl?.registerDetailWithMaster($),this.addDestroyFunc(()=>{$.destroy()})}setRowData(z){this.detailApi?.setGridOption("rowData",z)}};function sJ(z,J){let Q=z.masterDetailSvc?.store;return Q?J(Q):void 0}function ET(z,J,Q){sJ(z,(Z)=>{Z[J]=Q})}function KT(z,J){sJ(z,(Q)=>{delete Q[J]})}function FT(z,J){return sJ(z,(Q)=>Q[J])}function LT(z,J){sJ(z,(Q)=>{let Z=0;Object.values(Q).forEach(($)=>{if($)J($,Z++)})})}var DT=".ag-details-row{width:100%}.ag-details-row-fixed-height{height:100%}.ag-details-grid{width:100%}.ag-details-grid-fixed-height{height:100%}",MT=class extends S{constructor(){super(...arguments);this.beanName="masterDetailSvc",this.store={}}isEnabled(){return this.gos.get("masterDetail")}postConstruct(){let z=this.gos;if(o(z))this.enabled=this.isEnabled();if(Az(z))this.addEventListeners()}addEventListeners(){let z=(Z)=>{this.setMaster(Z.node,!1,!0)},J,Q=()=>{if(J){for(let Z of J)Z();J=void 0}if(this.isEnabled())J=this.addManagedListeners(this.beans.eventSvc,{rowNodeDataChanged:z})};Q(),this.gos.addPropertyEventListener("masterDetail",Q)}refreshModel(z){if(z.changedProps){let J=this.isEnabled();if(this.enabled!==J){this.setMasters(null);return}}if(z.rowDataUpdated)this.setMasters(z.changedRowNodes)}setMaster(z,J,Q){let Z=z.master,$=this.isEnabled(),X=$,Y=this.gos,q=Y.get("isRowMaster"),G=Y.get("treeData");if($)if(J||Q){if(q){let U=z.data;X=!!U&&!!q(U)}}else X=Z;if(!G){if(X&&J||!X&&Z)z._expanded??(z._expanded=null)}if(X!==Z)z.master=X,z.dispatchRowEvent("masterChanged")}setMasters(z){if(this.enabled=this.isEnabled(),z){for(let J of z.updates)this.setMaster(J,!1,!0);for(let J of z.adds)this.setMaster(J,!0,!1)}else{let J=uZ(this.beans)?.rootNode?._leafs;if(J)for(let Q=0,Z=J.length;Q{let Y=J.clientHeight;if(Y!=null&&Y>0){let q=()=>{let{rowModel:G}=this.beans,{rowNode:U}=z;if(U.setRowHeight(Y),o(Q,G)||Az(Q,G))G.onRowHeightChanged()};window.setTimeout(q,0)}},X=j4(Z,J,$);z.addDestroyFunc(X),$()}destroy(){this.store={},super.destroy()}},kT={moduleName:"SharedMasterDetail",version:$0,beans:[MT],userComponents:{agDetailCellRenderer:BT},dynamicBeans:{detailCellRendererCtrl:eq},apiFunctions:{addDetailGridInfo:ET,removeDetailGridInfo:KT,getDetailGridInfo:FT,forEachDetailGridInfo:LT},dependsOn:[C0,tq,lq],css:[DT]},zG={moduleName:"MasterDetail",version:$0,dependsOn:[kT,tJ,lX]},JG=class extends x{constructor(){super(...arguments);this.changedCalculatedValues=!1,this.dragging=!1,this.shouldDestroyOnEndDragging=!1}postConstruct(){this.beans.dragSvc.addDragSource({dragStartPixels:0,eElement:this.getGui(),onDragging:(z)=>{let J=!1;if(!this.dragging)J=!0,this.dragging=!0,Rz(this.beans).classList?.add(this.getDraggingCssClass());if(this.updateValuesOnMove(z),J){this.changedCalculatedValues=!1;return}if(this.beans.rangeSvc.autoScrollService.check(z),this.changedCalculatedValues)this.onDrag(z),this.changedCalculatedValues=!1},onDragStop:(z)=>{this.dragging=!1,this.onDragEnd(z),this.clearDragProperties()},onDragCancel:()=>{this.dragging=!1,this.onDragCancel(),this.clearDragProperties()}}),this.addManagedEventListeners({cellSelectionChanged:this.updateLocalRangeIfNeeded.bind(this)}),this.addManagedElementListeners(this.getGui(),{pointerdown:gY,mousedown:gY})}getLastCellHovered(){return this.lastCellHovered}getDraggingCssClass(){return`ag-dragging-${this.type===0?"fill":"range"}-handle`}updateValuesOnMove(z){let J=z5(this.gos,z);if(!J||this.shouldSkipCell(J)||this.lastCellHovered&&r1(J,this.lastCellHovered))return;this.lastCellHovered=J,this.changedCalculatedValues=!0}clearDragProperties(){if(this.clearValues(),this.beans.rangeSvc.autoScrollService.ensureCleared(),Rz(this.beans).classList?.remove(this.getDraggingCssClass()),this.shouldDestroyOnEndDragging)this.destroy()}getType(){return this.type}refresh(z,J){let Q=this.cellCtrl,Z=this.getGui(),$=J??y(this.beans.rangeSvc.getCellRanges()),X=$.startRow,Y=$.endRow;if(X&&Y)if(W0(Y,X))this.rangeStartRow=Y,this.rangeEndRow=X;else this.rangeStartRow=X,this.rangeEndRow=Y;if(Q!==z||!B0(Z)){this.cellCtrl=z;let q=z.comp.getParentOfValue();if(q)q.appendChild(Z)}this.cellRange=$}clearValues(){this.lastCellHovered=void 0}destroy(){if(!this.shouldDestroyOnEndDragging&&this.dragging){w(this.getGui(),!1),this.shouldDestroyOnEndDragging=!0;return}this.shouldDestroyOnEndDragging=!1,super.destroy(),this.getGui()?.remove()}updateLocalRangeIfNeeded(z){if(!this.cellRange)return;let{id:J,type:Q}=this.cellRange;if(!J||J!==z.id)return;let Z=this.beans.rangeSvc?.getCellRanges().find(($)=>$.id===J&&$.type===Q);if(Z&&Z!==this.cellRange)this.cellRange=Z}},gY=(z)=>{z.stopPropagation()};function fT(z){let J=z.length,Q=0;if(J<=1)return z;for(let H=0;H1){Q=Math.max(Q,parseInt(B[1],10));continue}if(Math.floor(W)===W)continue;Q=Math.max(Q,W.toString().split(".")[1].length)}let Z=0,$=0,X=0,Y=0,q=0;for(let H=0;HY?"x":"y";else G=q;if(G!==this.dragAxis)this.dragAxis=G,this.changedCalculatedValues=!0}shouldSkipCell(z){return y0(z.column)}onDrag(z){if(!this.initialPosition){let Q=this.cellCtrl;if(!Q)return;this.initialPosition=Q.cellPosition}let J=this.getLastCellHovered();if(J)this.markPathFrom(this.initialPosition,J)}onDragEnd(z){if(this.initialXY=null,!this.markedCells.length)return;let J=this.dragAxis==="x",{cellRange:Q,rangeStartRow:Z,rangeEndRow:$,beans:{rangeSvc:X}}=this,Y=Q.columns.length,q;if(!this.isUp&&!this.isLeft)q=X.createCellRangeFromCellRangeParams({rowStartIndex:Z.rowIndex,rowStartPinned:Z.rowPinned,columnStart:Q.columns[0],rowEndIndex:J?$.rowIndex:this.lastCellMarked.rowIndex,rowEndPinned:J?$.rowPinned:this.lastCellMarked.rowPinned,columnEnd:J?this.lastCellMarked.column:Q.columns[Y-1]});else{let G=J?Z:this.lastCellMarked;q=X.createCellRangeFromCellRangeParams({rowStartIndex:G.rowIndex,rowStartPinned:G.rowPinned,columnStart:J?this.lastCellMarked.column:Q.columns[0],rowEndIndex:$.rowIndex,rowEndPinned:$.rowPinned,columnEnd:Q.columns[Y-1]})}if(q)this.performFill({event:z,initialRange:Q,finalRange:q,shouldUpdateRange:!0})}onDragCancel(){if(this.initialXY=null,!this.markedCells.length)return;this.clearMarkedPath()}performFill({event:z,initialRange:J,finalRange:Q,shouldUpdateRange:Z}){let{eventSvc:$,rangeSvc:X}=this.beans;if($.dispatchEvent({type:"fillStart"}),this.handleValueChanged(J,Q,z),Z)X.setCellRanges([Q]);$.dispatchEvent({type:"fillEnd",initialRange:J,finalRange:Q})}getFillHandleDirection(){let z=qJ(this.gos)?.direction;if(!z)return"xy";if(z!=="x"&&z!=="y"&&z!=="xy")return V(177),"xy";return z}handleValueChanged(z,J,Q){let{beans:Z}=this,{rangeSvc:$,gos:X,valueSvc:Y}=Z,q=$.getRangeEndRow(z),G=$.getRangeStartRow(z),U=$.getRangeEndRow(J),_=$.getRangeStartRow(J),H=this.dragAxis==="y";if(this.isReduce&&!qJ(X)?.suppressClearOnFillReduction){let R=H?z.columns:z.columns.filter((v)=>J.columns.indexOf(v)<0),O=H?M0(Z,U):_;if(O)this.clearCellsInRange(O,q,R);return}let W=[],B=[],E=[],K=[],F=!0,L=0,D=()=>{W.length=0,B.length=0,E.length=0,K.length=0,L=0},M=(R,O)=>{let v=this.isUp?q:G,I=!1;if(H)F=!0,D();while(!I&&v){let b=S0(Z,v);if(!b)break;if(H&&R)f(W,R,b,()=>!a(v,this.isUp?G:q));else if(O){F=!0,D();for(let m of O)f(W,m,b,()=>m!==(this.isLeft?z.columns[0]:y(z.columns)))}I=a(v,this.isUp?_:U),v=this.isUp?d0(this.beans,v):M0(Z,v)}},f=(R,O,v,I)=>{let b,m=!1;if(F)b=Y.getValue(O,v,"edit"),B.push(b),E.push(Y.getValue(O,v,"edit",!0)),K.push(Y.getValueForDisplay({column:O,node:v,from:"edit"}).valueFormatted),F=I();else{let{value:g,fromUserFunction:e,sourceCol:t,sourceRowNode:u}=this.processValues({event:Q,values:R,initialValues:B,initialNonAggregatedValues:E,initialFormattedValues:K,col:O,rowNode:v,idx:L++});if(b=g,O.isCellEditable(v)){let Q0=Y.getValue(O,v,"edit");if(!e){if(t){let s=t.getColDef();if(s.useValueFormatterForExport!==!1&&s.valueFormatter){let P0=Y.getValueForDisplay({column:t,node:u,includeValueFormatted:!0,from:"edit"}).valueFormatted;if(P0!=null)b=P0}}if(O.getColDef().useValueParserForImport!==!1)b=Y.parseValue(O,v,t?b:p0(b),Q0)}if(!e||Q0!==b)v.setDataValue(O,b,"rangeSvc");else m=!0}}if(!m)R.push({value:b,column:O,rowNode:v})},{changeDetectionSvc:A}=this.beans;A?.beginDeferred();try{if(H)z.columns.forEach((R)=>{M(R)});else{let R=this.isLeft?[...J.columns].reverse():J.columns;M(void 0,R)}this.beans.editSvc?.stopEditing(void 0,{source:"fillHandle"})}finally{A?.endDeferred()}}clearCellsInRange(z,J,Q){let Z={startRow:z,endRow:J,columns:Q,startColumn:Q[0]};this.beans.rangeSvc.clearCellRangeCellValues({cellRanges:[Z],restoreSourceInBatch:!0})}processValues(z){let{formula:J,valueSvc:Q}=this.beans,{event:Z,values:$,initialValues:X,initialNonAggregatedValues:Y,initialFormattedValues:q,col:G,rowNode:U,idx:_}=z,H=qJ(this.gos)?.setFillValue,W=this.dragAxis==="y",B;if(W)B=this.isUp?"up":"down";else B=this.isLeft?"left":"right";if(H){let F=C(this.gos,{event:Z,values:$.map(({value:D})=>D),initialValues:X,initialNonAggregatedValues:Y,initialFormattedValues:q,currentIndex:_,currentCellValue:Q.getValue(G,U,"edit"),direction:B,column:G,rowNode:U}),L=H(F);if(L!==!1)return{value:L,fromUserFunction:!0}}let E=(F)=>typeof F==="number"&&Number.isFinite(F)||typeof F==="string"&&/^[+-]?\d+(?:\.\d+)?$/.test(F.trim()),K=$.every(({value:F})=>E(F));if(Z.altKey||!K){let F=String(y($)?.value??"");if(K&&X.length===1){let R=this.isUp||this.isLeft?-1:1;return{value:parseFloat(F)+1*R,fromUserFunction:!1}}let{value:L,column:D,rowNode:M}=$[_%$.length],f,A=D.isAllowFormula()&&J?.isFormula(F);if(A){let R=B==="up"?-1:B==="down"?1:0,O=B==="left"?-1:B==="right"?1:0;f=J.updateFormulaByOffset({value:F,rowDelta:R,columnDelta:O})}else f=L;return{value:f,fromUserFunction:!1,sourceCol:A?void 0:D,sourceRowNode:M}}return{value:y(fT($.map(({value:F})=>Number(F)))),fromUserFunction:!1}}clearValues(){this.clearMarkedPath(),this.clearCellValues(),this.lastCellMarked=void 0,super.clearValues()}clearMarkedPath(){for(let z of this.markedCells){if(!z.isAlive())continue;let{comp:J}=z;J.toggleCss("ag-selection-fill-top",!1),J.toggleCss("ag-selection-fill-right",!1),J.toggleCss("ag-selection-fill-bottom",!1),J.toggleCss("ag-selection-fill-left",!1)}this.markedCells.length=0,this.isUp=!1,this.isLeft=!1,this.isReduce=!1}clearCellValues(){this.cellValues.length=0}markPathFrom(z,J){if(this.clearMarkedPath(),this.clearCellValues(),this.dragAxis==="y"){if(a(J,z))return;let Q=W0(J,z),{rangeStartRow:Z,rangeEndRow:$}=this;if(Q&&(J.rowPinned==Z.rowPinned&&J.rowIndex>=Z.rowIndex||Z.rowPinned!=$.rowPinned&&J.rowPinned==$.rowPinned&&J.rowIndex<=$.rowIndex))this.reduceVertical(z,J),this.isReduce=!0;else this.extendVertical(z,J,Q),this.isReduce=!1}else{let Q=z.column,Z=J.column;if(Q===Z)return;let $=this.beans.visibleCols.allCols,X=$.indexOf(Q),Y=$.indexOf(Z);if(Y<=X&&Y>=$.indexOf(this.cellRange.columns[0]))this.reduceHorizontal(z,J),this.isReduce=!0;else this.extendHorizontal(z,J,Y=4),z.toggleCss(PT,X),o6(Z,$>0?!0:void 0),z.toggleCss(TT,this.isSingleCell()),this.updateRangeBorders(),this.refreshRangeStyleAndHandle()}updateRangeBorders(){let z=this.getRangeBorders(),J=this.isSingleCell(),Q=!J&&z.top,Z=!J&&z.right,$=!J&&z.bottom,X=!J&&z.left,Y=this.cellComp;Y.toggleCss(IT,Q),Y.toggleCss(CT,Z),Y.toggleCss(yT,$),Y.toggleCss(bT,X)}isSingleCell(){let{rangeSvc:z}=this;return this.rangeCount===1&&!!z&&!z.isMoreThanOneCell()}getHasChartRange(){let{rangeSvc:z}=this;if(!this.rangeCount||!z)return!1;let J=z.getCellRanges();return J.length>0&&J.every((Q)=>[p4.DIMENSION,p4.VALUE].includes(Q.type))}updateRangeBordersIfRangeCount(){if(this.rangeCount>0)this.updateRangeBorders(),this.refreshRangeStyleAndHandle()}getRangeBorders(){let z=this.beans.gos.get("enableRtl"),J=!1,Q=!1,Z=!1,$=!1,{rangeSvc:X,beans:{visibleCols:Y},cellCtrl:{cellPosition:q}}=this,G=q.column,U=X.getCellRanges().filter((W)=>X.isCellInSpecificRange(q,W));if(!U.length)return{top:J,right:Q,bottom:Z,left:$};let _,H;if(z)_=Y.getColAfter(G),H=Y.getColBefore(G);else _=Y.getColBefore(G),H=Y.getColAfter(G);if(!_)$=!0;if(!H)Q=!0;for(let W=0;W=0;Z--){let $=Q[Z],X=$.colorClass;if(!X)continue;if(z.isCellInSpecificRange(this.cellCtrl.cellPosition,$))return X}return null}refreshHandleColor(z){let J=this.selectionHandle?.getGui?.(),Q=z?.colorClass??null;if(!J){this.handleColorClass=null;return}if(this.handleColorClass&&this.handleColorClass!==Q)J.classList.remove(this.handleColorClass);if(Q)J.classList.add(Q);else if(this.handleColorClass)J.classList.remove(this.handleColorClass);this.handleColorClass=Q??null}getRangeForHandle(){let{gos:z,editSvc:J}=this.beans,Q=this.rangeSvc,Z=Q.getCellRanges(),$=Z.length;if(this.rangeCount<1||$<1)return null;let X=J?.isRangeSelectionEnabledWhileEditing(),Y=X?Z:[y(Z)];for(let q of Y){let{cellPosition:G,column:U}=this.cellCtrl,_=mY(z)&&!U.isSuppressFillHandle(),H=xT(z),B=!J?.isEditing(this.cellCtrl,{withOpenEditor:!0})&&(X||$===1&&(_||H));if(this.hasChartRange)B=q.type===p4.VALUE;if(B&&q.endRow!=null&&Q.isContiguousRange(q)&&Q.isBottomRightCell(q,G))return q}return null}addSelectionHandle(z){let{beans:J}=this,Q=J.editSvc?.isRangeSelectionEnabledWhileEditing(),Z=z.type,X=!Q&&mY(J.gos)&&d(Z)?0:1;if(this.selectionHandle&&this.selectionHandle.getType()!==X)this.selectionHandle=J.context.destroyBean(this.selectionHandle);if(!this.selectionHandle){let Y=J.registry.createDynamicBean(X===0?"fillHandle":"rangeHandle",!1);if(Y)this.selectionHandle=J.context.createBean(Y)}this.selectionHandle?.refresh(this.cellCtrl,z)}destroy(){this.unsetComp()}},NT=class extends S{constructor(z){super();this.eContainer=z}postConstruct(){let{beans:z,gos:J,eContainer:Q}=this,Z=z.rangeSvc,$={eElement:Q,onDragStart:Z.onDragStart.bind(Z),onDragStop:Z.onDragStop.bind(Z),onDragging:Z.onDragging.bind(Z)},X=z.dragSvc,Y=X.addDragSource.bind(X,$),q=X.removeDragSource.bind(X,$);if(this.addManagedPropertyListeners(["enableRangeSelection","cellSelection"],()=>{if(n0(J))Y();else q()}),this.addDestroyFunc(q),n0(J))Y()}},gT=class extends S{constructor(z,J){super();this.column=z,this.eGui=J}postConstruct(){this.addManagedElementListeners(this.eGui,{click:(z)=>z&&this.onClick(z)})}onClick(z){this.beans.rangeSvc?.handleColumnSelection(this.column,z)}},hT=class extends S{constructor(z,J){super();this.column=z,this.comp=J,this.columnMap=new Map,this.isActive=!1,this.resetColumnMap()}postConstruct(){this.addManagedPropertyListener("cellSelection",()=>{this.refreshActive()}),this.refreshActive(),this.setupRangeHeaderHighlight()}resetColumnMap(){this.columnMap.clear();let z;if(this.column.isColumn)z=[this.column];else z=this.column.getDisplayedLeafColumns();for(let J of z)this.columnMap.set(J,!1)}refreshActive(){let{gos:z,rangeSvc:J}=this.beans,Q=z.get("cellSelection");this.isActive=!!(Q&&J&&typeof Q==="object"&&Q.enableHeaderHighlight)}setupRangeHeaderHighlight(){let z=this.onRangeSelectionChanged.bind(this);this.addManagedEventListeners({rangeSelectionChanged:z,columnPinned:z,columnMoved:z,columnGroupOpened:z}),z()}onRangeSelectionChanged(){if(!this.isActive)return;this.resetColumnMap();let z=this.beans.rangeSvc.getCellRanges(),J=!1,Q=!0;for(let Z of z){if(J)break;for(let $ of Z.columns)if(this.columnMap.has($))this.columnMap.set($,!0),J||(J=!0)}for(let Z of Array.from(this.columnMap.values()))if(Z===!1){Q=!1;break}this.comp.toggleCss("ag-header-range-highlight",J&&Q)}destroy(){super.destroy(),this.comp=null,this.column=null}},uT=class extends S{constructor(){super(...arguments);this.beanName="rangeSvc",this.rangeSelectionExtensions=[],this.cellRanges=[],this.bodyScrollListener=this.onBodyScroll.bind(this),this.dragging=!1,this.intersectionRange=!1,this.columnRangeSelectionCtx={}}wireBeans(z){this.rowModel=z.rowModel,this.dragSvc=z.dragSvc,this.colModel=z.colModel,this.visibleCols=z.visibleCols,this.cellNavigation=z.cellNavigation,this.ctrlsSvc=z.ctrlsSvc}postConstruct(){let z=this.onColumnsChanged.bind(this),J=()=>this.removeAllCellRanges(),Q=this.refreshLastRangeStart.bind(this);this.addManagedEventListeners({newColumnsLoaded:z,columnVisible:z,columnValueChanged:z,columnPivotModeChanged:J,columnRowGroupChanged:J,columnPivotChanged:J,columnGroupOpened:Q,columnMoved:Q,columnPinned:Q}),this.ctrlsSvc.whenReady(this,(Z)=>{let $=Z.gridBodyCtrl;this.autoScrollService=new EJ({scrollContainer:$.eBodyViewport,scrollAxis:"xy",getVerticalPosition:()=>$.scrollFeature.getVScrollPosition().top,setVerticalPosition:(X)=>$.scrollFeature.setVerticalScrollPosition(X),getHorizontalPosition:()=>$.scrollFeature.getHScrollPosition().left,setHorizontalPosition:(X)=>$.scrollFeature.setHorizontalScrollPosition(X),shouldSkipVerticalScroll:()=>!A0(this.gos,"normal"),shouldSkipHorizontalScroll:()=>!$.scrollFeature.isHorizontalScrollShowing()})})}registerRangeSelectionExtension(z){if(this.rangeSelectionExtensions.includes(z))return;this.rangeSelectionExtensions.push(z)}unregisterRangeSelectionExtension(z){X0(this.rangeSelectionExtensions,z)}shouldSuppressRangeSelection(z){return this.rangeSelectionExtensions.some((J)=>J.shouldSuppressRangeSelection?.(z))}shouldSkipColumn(z){return this.rangeSelectionExtensions.some((J)=>J.shouldSkipColumn?.(z))}isAllColumnsSelectionCell(z){return this.rangeSelectionExtensions.some((J)=>J.isAllColumnsSelectionCell?.(z))}isAllColumnsRange(z,J){return this.rangeSelectionExtensions.some((Q)=>Q.isAllColumnsRange?.(z,J))}updateSelectionModeForCell(z){this.setSelectionMode(this.isAllColumnsSelectionCell(z))}onDragStart(z){let J=this.gos,Q=z.target;if(!n0(J)||aZ(J,Q)?.isSuppressMouseEvent(z))return;if(this.shouldSuppressRangeSelection(Q))return;let{shiftKey:Z}=z,$=this.isMultiRange(z),X=Z&&!!this.cellRanges?.length;if(!$&&(!X||P(y(this.cellRanges).type)))this.removeAllCellRanges(!0);let Y=this.dragSvc.startTarget;if(Y)this.updateValuesOnMove(Y);if(!this.lastCellHovered)return;if(this.dragging=!0,this.lastMouseEvent=z,this.intersectionRange=$&&this.getCellRangeCount(this.lastCellHovered)>1,!X)this.setNewestRangeStartCell(this.lastCellHovered);if(this.cellRanges.length>0)this.draggingRange=y(this.cellRanges);else{let q={rowIndex:this.lastCellHovered.rowIndex,rowPinned:this.lastCellHovered.rowPinned},G=this.getColumnsFromModel([this.lastCellHovered.column]);if(!G?.length)return;this.draggingRange={startRow:q,endRow:q,columns:G,startColumn:this.newestRangeStartCell.column},this.cellRanges.push(this.draggingRange)}this.ctrlsSvc.getGridBodyCtrl().eBodyViewport.addEventListener("scroll",this.bodyScrollListener,{passive:!0}),this.dispatchChangedEvent(!0,!1,this.draggingRange.id)}onDragging(z){let{dragging:J,lastCellHovered:Q,newestRangeStartCell:Z,autoScrollService:$,cellHasChanged:X}=this;if(!J||!z)return;this.updateValuesOnMove(z.target),this.lastMouseEvent=z;let Y=(B)=>Q&&Q.rowPinned===B&&Z.rowPinned===B,q=Y("top")||Y("bottom");if($.check(z,q),!X||!Q)return;let G=Z?.column,U=Q?.column,_=this.calculateColumnsBetween(G,U);if(!_)return;let{rowIndex:H,rowPinned:W}=Q;this.draggingRange.endRow={rowIndex:H,rowPinned:W},this.draggingRange.columns=_,this.dispatchChangedEvent(!1,!1,this.draggingRange.id)}onDragStop(){if(!this.dragging)return;let{id:z}=this.draggingRange;if(this.autoScrollService.ensureCleared(),this.ctrlsSvc.getGridBodyCtrl().eBodyViewport.removeEventListener("scroll",this.bodyScrollListener),this.lastMouseEvent=null,this.dragging=!1,this.draggingRange=void 0,this.lastCellHovered=void 0,this.intersectionRange)this.intersectionRange=!1,this.intersectLastRange();this.dispatchChangedEvent(!1,!0,z)}onColumnsChanged(){this.refreshLastRangeStart();let z=this.visibleCols.allCols;for(let Q of this.cellRanges){let Z=Q.columns;if(Q.columns=Q.columns.filter((X)=>X.isVisible()&&z.indexOf(X)!==-1),!Z0(Z,Q.columns))this.dispatchChangedEvent(!1,!0,Q.id)}let J=this.cellRanges.length;if(this.cellRanges=this.cellRanges.filter((Q)=>Q.columns.length>0),J>this.cellRanges.length)this.dispatchChangedEvent(!1,!0)}refreshLastRangeStart(){let z=y(this.cellRanges);if(!z)return;this.refreshRangeStart(z)}isContiguousRange(z){let J=z.columns;if(!J.length)return!1;let Q=this.visibleCols.allCols,Z=J.map(($)=>Q.indexOf($)).sort(($,X)=>$-X);return y(Z)-Z[0]+1===J.length}getRangeStartRow(z){if(z.startRow&&z.endRow)return W0(z.startRow,z.endRow)?z.startRow:z.endRow;return{rowIndex:0,rowPinned:(this.beans.pinnedRowModel?.getPinnedTopRowCount()??0)>0?"top":null}}getRangeEndRow(z){if(z.startRow&&z.endRow)return W0(z.startRow,z.endRow)?z.endRow:z.startRow;let J=this.beans.pinnedRowModel?.getPinnedBottomRowCount()??0;if(J>0)return{rowIndex:J-1,rowPinned:"bottom"};return{rowIndex:this.rowModel.getRowCount()-1,rowPinned:null}}getRangeRowCount(z){let J=this.beans,Q=this.getRangeStartRow(z),Z=this.getRangeEndRow(z),$=cZ(J,Q);return cZ(J,Z)-$+1}handleCellMouseDown(z,J){let Q=z.ctrlKey||z.metaKey;this.handleCellSelectionInput(J,{target:z.target,shiftKey:z.shiftKey,isRightClick:jZ(this.beans,z),isMultiRange:this.isMultiRange(z),isMultiKey:Q,preventDefault:()=>z.preventDefault()})}handleCellKeyboardSelect(z,J){let Q=z.ctrlKey||z.metaKey;this.handleCellSelectionInput(J,{target:z.target,shiftKey:z.shiftKey,isRightClick:!1,isMultiRange:this.isMultiRangeForKeyState(Q),isMultiKey:Q,preventDefault:()=>z.preventDefault()})}handleCellSelectionInput(z,J){let{target:Q,shiftKey:Z,isRightClick:$,isMultiRange:X,isMultiKey:Y,preventDefault:q}=J;if(this.shouldSuppressRangeSelection(Q))return;let G=this.isAllColumnsSelectionCell(z);if(G)q();if(Z)return this.extendLatestRangeToCell(z);if(G&&$)return;this.updateSelectionModeForCell(z);let U=this.calculateColumnsBetween(z.column,z.column);if(!U)return;let _=G?this.findContainingRange({columns:U,startRow:z,endRow:z}):void 0;if(G&&!!_&&X&&Y&&_)this.removeRowFromAllColumnsRange(z,_);else this.setRangeToCell(z,X)}isMultiRange(z){return this.isMultiRangeForKeyState(z.ctrlKey||z.metaKey)}isMultiRangeForKeyState(z){let{editingWithRanges:J,allowMulti:Q}=this.getMultiRangeContext();return J||(Q?z:!1)}getMultiRangeContext(){let{gos:z,editSvc:J}=this.beans,Q=!!J?.isEditing()&&!!J?.isRangeSelectionEnabledWhileEditing(),Z=D9(z)&&!Q;return{editingWithRanges:Q,suppressMultiRanges:Z,allowMulti:!Z}}removeRowFromAllColumnsRange(z,J){let{beans:Q,cellRanges:Z}=this,$=w1(Q),X=fz(Q),Y=this.getRangeStartRow(J),q=this.getRangeEndRow(J);if(!Y&&a($,z))CJ(J,M0(Q,$),"top");else if(!q&&a(X,z))CJ(J,d0(Q,X),"bottom");else if(a(Y,q))X0(Z,J);else if(a(Y,z))CJ(J,M0(Q,z),"top");else if(a(q,z))CJ(J,d0(Q,z),"bottom");else{let G=d0(Q,z),U=M0(Q,z);J.startRow=Y,J.endRow=G??void 0,Z.push({...J,startRow:U??void 0,endRow:q})}this.dispatchChangedEvent(!0,!0)}setRangeToCell(z,J=!1){let{gos:Q}=this;if(!n0(Q))return;this.updateSelectionModeForCell(z);let Z=this.calculateColumnsBetween(z.column,z.column);if(!Z)return;let{suppressMultiRanges:$}=this.getMultiRangeContext();if($||!J||d(this.cellRanges))this.removeAllCellRanges(!0);let X={rowIndex:z.rowIndex,rowPinned:z.rowPinned},Y={startRow:X,endRow:X,columns:Z,startColumn:z.column},q=this.ensureRangeStartColumn(Y);if(!q)return;this.cellRanges.push(Y),this.setNewestRangeStartCell({...z,column:q}),this.onDragStop(),this.dispatchChangedEvent(!0,!0)}getRangeLastColumn(z){let J=z.columns[0],Q=y(z.columns);return this.newestRangeStartCell?.column===J?Q:J}extendRangeRowCountBy(z,J){let{beans:Q}=this,{startRow:Z,endRow:$}=z;if(!Z||!$)return;let X=0,Y,q=W0($,Z);if(q)Y=Z;else Y=$;let G=J>0?M0:d0,U=Math.abs(J);while(XJ.indexOf(Z)).filter((Z)=>Z>-1).sort((Z,$)=>Z-$);return{left:J[Q[0]],right:J[y(Q)]}}extendLatestRangeInDirection(z){if(this.isEmpty()||!this.newestRangeStartCell)return;let J=z.key,Q=z.ctrlKey||z.metaKey,Z=y(this.cellRanges),$=this.newestRangeStartCell,X=Z.endRow.rowIndex,Y=Z.endRow.rowPinned,G={column:this.getRangeLastColumn(Z),rowIndex:X,rowPinned:Y},U=this.cellNavigation.getNextCellToFocus(J,G,Q);if(!U)return;if(this.shouldSkipColumn(U.column))return;return this.setCellRange({rowStartIndex:$.rowIndex,rowStartPinned:$.rowPinned,rowEndIndex:U.rowIndex,rowEndPinned:U.rowPinned,columnStart:$.column,columnEnd:U.column}),U}setCellRange(z){if(!n0(this.gos))return;this.removeAllCellRanges(!0),this.addCellRange(z)}setCellRanges(z){if(Z0(this.cellRanges,z))return;if(!this.verifyCellRanges(this.gos))return;this.setSelectionMode(!1),this.removeAllCellRanges(!0);let J=this.getColumnsFromModel(this.visibleCols.allCols)??[],Q=!1;for(let Z of z){if(Z.columns&&Z.startRow){let $=this.getColumnsFromModel(Z.columns);if(!$||$.length===0)continue;Z.columns=$;let{startRow:X}=Z;this.setNewestRangeStartCell({rowIndex:X.rowIndex,rowPinned:X.rowPinned,column:Z.columns[0]})}if(!Q&&J.length>0&&this.isAllColumnsRange(Z,J))Q=!0;this.cellRanges.push(Z)}this.setSelectionMode(Q),this.dispatchChangedEvent(!1,!0)}clearCellRangeCellValues(z){let{beans:J,eventSvc:Q}=this,{cellEventSource:Z="rangeSvc",dispatchWrapperEvents:$,wrapperEventSource:X="deleteKey",restoreSourceInBatch:Y}=z,{cellRanges:q}=z;if($)Q.dispatchEvent({type:"cellSelectionDeleteStart",source:X}),Q.dispatchEvent({type:"rangeDeleteStart",source:X});if(!q)q=this.cellRanges;let{valueSvc:G,editSvc:U}=J,_=!!U?.isBatchEditing(),{changeDetectionSvc:H}=J;H?.beginDeferred();try{this.forEachEditableCellInRanges(q,(W,B)=>{if(Y&&_){U?.batchResetToSourceValue({rowNode:W,column:B});return}let E=G.getDeleteValue(B,W);W.setDataValue(B,E,Z)})}finally{H?.endDeferred()}if($)Q.dispatchEvent({type:"cellSelectionDeleteEnd",source:X}),Q.dispatchEvent({type:"rangeDeleteEnd",source:X})}createCellRangeFromCellRangeParams(z){return this.createPartialCellRangeFromRangeParams(z,!1)}createPartialCellRangeFromRangeParams(z,J){let{columns:Q,columnStart:Z,columnEnd:$,rowStartIndex:X,rowStartPinned:Y,rowEndIndex:q,rowEndPinned:G}=z,U=this.getColumnsFromParams(Q,Z,$);if(!U||!J&&U.columns.length===0)return;let{columns:_,startsOnTheRight:H}=U,W=cY(X,Y),B=cY(q,G);return{startRow:W,endRow:B,columns:_,startColumn:this.getColumnFromModel(Z)??(H?y(_):_[0])}}addCellRange(z){let J=this.gos;if(!n0(J)||!this.verifyCellRanges(J))return;this.setSelectionMode(!1);let Q=this.createCellRangeFromCellRangeParams(z);if(Q){if(Q.startRow)this.setNewestRangeStartCell({rowIndex:Q.startRow.rowIndex,rowPinned:Q.startRow.rowPinned,column:Q.startColumn});return this.cellRanges.push(Q),this.dispatchChangedEvent(!1,!0,Q.id),Q}}getCellRanges(){return this.cellRanges}isEmpty(){return this.cellRanges.length===0}isMoreThanOneCell(){let z=this.cellRanges.length;if(z===0)return!1;if(z>1)return!0;let J=this.cellRanges[0],Q=this.getRangeStartRow(J),Z=this.getRangeEndRow(J);return Q.rowPinned!==Z.rowPinned||Q.rowIndex!==Z.rowIndex||J.columns.length!==1}areAllRangesAbleToMerge(){let z=new Map;if(this.cellRanges.length<=1)return!0;for(let Z of this.cellRanges)this.forEachRowInRange(Z,($)=>{let X=`${$.rowPinned||"normal"}_${$.rowIndex}`,Y=z.get(X),q=Z.columns.map((G)=>G.getId());if(Y){let G=q.filter((U)=>Y.indexOf(U)===-1);Y.push(...G)}else z.set(X,q)});let Q;for(let Z of z.values()){let $=Z.sort().join();if(Q===void 0){Q=$;continue}if(Q!==$)return!1}return!0}removeAllCellRanges(z){if(this.isEmpty())return;if(this.onDragStop(),this.cellRanges.length=0,!z)this.dispatchChangedEvent(!1,!0)}isCellInAnyRange(z){return this.getCellRangeCount(z)>0}isCellInSpecificRange(z,J){let Q=J.columns?.includes(z.column),Z=this.isRowInRange(z,J);return Q&&Z}isColumnInAnyRange(z){let{beans:J}=this,Q=w1(J),Z=fz(J);if(!Q||!Z)return!1;let $=z.isColumn?[z]:z.getDisplayedLeafColumns();return this.findContainingRange({columns:$,startRow:Q,endRow:Z},!0)!=null}findContainingRange({columns:z,startRow:J,endRow:Q},Z=!1){let $=this.cellRanges;for(let X=$.length-1;X>=0;X--){let Y=$[X],q=z.every((U)=>Y.columns.includes(U)),G=!1;if(Z)G=a(Y.startRow,J)&&a(Y.endRow,Q);else{let U=J&&this.isRowInRange(J,Y),_=Q&&this.isRowInRange(Q,Y);G=!!U&&!!_}if(q&&G)return Y}}isBottomRightCell(z,J){let Q=this.visibleCols.allCols,Z=z.columns.map((U)=>Q.indexOf(U)).sort((U,_)=>U-_),{startRow:$,endRow:X}=z,Y=W0($,X)?X:$,q=Q.indexOf(J.column)===y(Z),G=J.rowIndex===Y.rowIndex&&q0(J.rowPinned)===q0(Y.rowPinned);return q&&G}getCellRangeCount(z){return this.cellRanges.filter((J)=>this.isCellInSpecificRange(z,J)).length}isRowInRange(z,J){let Q=this.getRangeStartRow(J),Z=this.getRangeEndRow(J),$=a(z,Q),X=a(z,Z);if($||X)return!0;let Y=!W0(z,Q),q=W0(z,Z);return Y&&q}intersectLastRange(z){let{editingWithRanges:J,suppressMultiRanges:Q}=this.getMultiRangeContext();if(J||Q||z&&this.dragging||this.isEmpty())return;let Z=y(this.cellRanges),$=this.getRangeStartRow(Z),X=this.getRangeEndRow(Z),Y=[];for(let q of this.cellRanges.slice(0,-1)){let G=this.getRangeStartRow(q),U=this.getRangeEndRow(q),_=q.columns,H=_.filter((B)=>Z.columns.indexOf(B)===-1);if(H.length===_.length){Y.push(q);continue}if(W0(X,G)||W0(U,$)){Y.push(q);continue}let W=Y.length;if(W0(G,$)){let B={columns:[..._],startColumn:Z.startColumn,startRow:{...G},endRow:d0(this.beans,$)};Y.push(B)}if(H.length>0){let B={columns:H,startColumn:H.includes(Z.startColumn)?Z.startColumn:H[0],startRow:mT([{...$},{...G}]),endRow:cT([{...X},{...U}])};Y.push(B)}if(W0(X,U))Y.push({columns:[..._],startColumn:Z.startColumn,startRow:M0(this.beans,X),endRow:{...U}});if(Y.length-W===1)Y[Y.length-1].id=q.id}if(this.cellRanges=Y,z)this.dispatchChangedEvent(!1,!0)}createRangeHighlightFeature(z,J,Q){z.createManagedBean(new hT(J,Q))}setSelectionMode(z){this.selectionMode=z?1:0}refreshRangeStart(z){let{columns:J}=z,Q=this.ensureRangeStartColumn(z);if(!Q)return;let Z=(G,U)=>{let _=z.columns.filter((H)=>H!==G);if(G)z.startColumn=G,z.columns=U?[G,..._]:[..._,G];else z.columns=_},{left:$,right:X}=this.getRangeEdgeColumns(z);if(Q===J[0]&&Q!==$){Z($,!0);return}if(Q===y(J)&&Q===X)Z(X,!1)}setNewestRangeStartCell(z){this.newestRangeStartCell=z}getColumnsFromParams(z,J,Q){let Z=!z&&!J&&!Q,$,X=!1;if(Z||z)$=this.getColumnsFromModel(Z?void 0:z);else if(J&&Q){if($=this.calculateColumnsBetween(J,Q),$?.length)X=$[0]!==this.getColumnFromModel(J)}return $?{columns:$,startsOnTheRight:X}:void 0}verifyCellRanges(z){let{suppressMultiRanges:J}=this.getMultiRangeContext(),Q=L9(z)&&J&&this.cellRanges.length>1;if(Q)V(93);return!Q}forEachRowInRange(z,J){let Q=this.getRangeStartRow(z),Z=this.getRangeEndRow(z),$=Q;while($){if(J($),a($,Z))break;$=M0(this.beans,$)}}forEachEditableCellInRanges(z,J){let{beans:Q}=this;for(let Z of z)this.forEachRowInRange(Z,($)=>{let X=S0(Q,$);if(!X)return;for(let Y=0;Y0,U=J.ctrlKey||J.metaKey,_=!q||U,H=w1(Z),W=fz(Z);if(!H||!W)return;if(J.key===k.ENTER)J.preventDefault();if(J.shiftKey){let E=$.root;if(!E)return;let K=z.isColumn?z:y(z.getLeafColumns()),F=this.findContainingRange({columns:[E],startRow:H,endRow:W},!0);if(!F){X0(X,$.lastCellRange),this.selectColumns(this.calculateColumnsBetween(E,K),H,W);return}this.updateRangeRowBoundary({cellRange:F,boundary:"end",cellPosition:{column:K,...W}});return}if(G&&(Y||!U&&!q))this.removeAllCellRanges(!0);let B=(E,K)=>{let F=this.findContainingRange({columns:E,startRow:H,endRow:W},!0);if(F&&_)this.deselectColumnsFromRange(F,E);else{let L=this.selectColumns(E,H,W);if(L)$.lastCellRange=L}$.root=K};if(z.isColumn)B([z],z);else{let E=z.getDisplayedLeafColumns();B(E,E[0])}}deselectColumnsFromRange(z,J){if(P2(z.columns,J),J.includes(z.startColumn))z.startColumn=z.columns[0];if(z.columns.length===0)X0(this.cellRanges,z);this.dispatchChangedEvent(!0,!0)}selectColumns(z,J,Q){return this.addCellRange({columns:z,columnStart:z[0],columnEnd:y(z),rowStartIndex:J.rowIndex,rowStartPinned:J.rowPinned,rowEndIndex:Q.rowIndex,rowEndPinned:Q.rowPinned})}};function cY(z,J){return z!=null?{rowIndex:z,rowPinned:J}:void 0}function mT(z){let J;for(let Q of z)if(J===void 0||W0(J,Q))J=Q;return J}function cT(z){let J;for(let Q of z)if(J===void 0||W0(Q,J))J=Q;return J}function iT(z,J){let{startRow:Q,endRow:Z}=z,$=W0(Q,Z)?Z:Q,X=J.rowIndex===$.rowIndex&&J.rowPinned===$.rowPinned,Y=z.columns[0],q=y(z.columns),G=z.startColumn===Y?q:Y;return J.column===G&&X}function CJ(z,J,Q){let Z;if(Q==="top")Z=!z.startRow||!z.endRow||W0(z.startRow,z.endRow)?"startRow":"endRow";else Z=!z.startRow||!z.endRow||W0(z.startRow,z.endRow)?"endRow":"startRow";z[Z]=J??void 0}var QG={moduleName:"CellSelection",version:$0,beans:[uT],dynamicBeans:{fillHandle:VT,rangeHandle:RT},apiFunctions:{getCellRanges:jT,addCellRange:OT,clearRangeSelection:hY,clearCellSelection:hY},dependsOn:[C0,Y1,KJ],css:[AT]};function pT(z){return z.colModel.isPivotMode()}function nT(z,J,Q){return z.pivotResultCols?.lookupPivotResultCol(J,Q)??null}function dT(z,J){z.valueColsSvc?.setColumns(J,"api")}function rT(z){return z.valueColsSvc?.columns??[]}function tT(z,J){z.valueColsSvc?.removeColumns(J,"api")}function sT(z,J){z.valueColsSvc?.addColumns(J,"api")}function lT(z,J){z.pivotColsSvc?.setColumns(J,"api")}function aT(z,J){z.pivotColsSvc?.removeColumns(J,"api")}function oT(z,J){z.pivotColsSvc?.addColumns(J,"api")}function eT(z){return z.pivotColsSvc?.columns??[]}function zv(z,J){z.pivotResultCols?.setPivotResultCols(J,"api")}function Jv(z){let J=z.pivotResultCols?.getPivotResultCols();return J?J.list:null}var iY="PivotRowTotal_",Qv=({headerName:z},{headerName:J})=>{if(z&&!J)return 1;else if(!z&&J)return-1;else if(!z&&!J)return 0;if(zJ)return 1;else return 0},Zv=(z)=>(J,Q)=>z(J.headerName,Q.headerName),$v=class extends S{constructor(){super(...arguments);this.beanName="pivotColDefSvc"}wireBeans(z){this.colModel=z.colModel,this.pivotColsSvc=z.pivotColsSvc,this.valueColsSvc=z.valueColsSvc,this.colNames=z.colNames}postConstruct(){let z=()=>this.gos.get("serverSidePivotResultFieldSeparator")??"_";this.fieldSeparator=z(),this.addManagedPropertyListener("serverSidePivotResultFieldSeparator",()=>{this.fieldSeparator=z()});let J=()=>this.gos.get("pivotDefaultExpanded");this.pivotDefaultExpanded=J(),this.addManagedPropertyListener("pivotDefaultExpanded",()=>{this.pivotDefaultExpanded=J()})}createPivotColumnDefs(z){let J=this.createPivotColumnsFromUniqueValues(z);function Q($,X=[]){return $.forEach((Y)=>{if(Y.children!==void 0)Q(Y.children,X);else X.push(Y)}),X}let Z=Q(J);return this.addRowGroupTotals(J,Z),this.addExpandablePivotGroups(J,Z),this.addPivotTotalsToGroups(J,Z),J}createPivotColumnsFromUniqueValues(z){let J=this.pivotColsSvc?.columns??[],Q=J.length;return this.recursivelyBuildGroup(0,z,[],Q,J)}recursivelyBuildGroup(z,J,Q,Z,$){if(z>=Z)return this.buildMeasureCols(Q);let{pivotComparator:X}=$[z].getColDef(),Y=X?Zv(X):Qv,q=this.valueColsSvc?.columns;if(q?.length===1&&this.gos.get("removePivotHeaderRowWhenSingleValueColumn")&&z===Z-1){let U=[];for(let _ of J.keys()){let H=[...Q,_],W=this.createColDef(q[0],_,H);W.columnGroupShow="open",U.push(W)}return U.sort(Y),U}let G=[];for(let U of J.keys()){let _=this.pivotDefaultExpanded===-1||z{let Z=this.colNames.getDisplayNameForColumn(Q,"header"),$=this.createColDef(Q,Z,z);return $.columnGroupShow="open",$})}addExpandablePivotGroups(z,J){let Q=this.gos.get("suppressExpandablePivotGroups");if(Q||this.gos.get("pivotColumnGroupTotals"))return;let Z=($,X,Y)=>{if("children"in $){let{valueColsSvc:U}=this,{columns:_=[]}=U??{},H=new Map;$.children.forEach((E)=>{Z(E,X,H)});let W=!$.children.some((E)=>E.children),B=W&&_.length===1&&this.gos.get("removePivotHeaderRowWhenSingleValueColumn");for(let E of _){let K=this.colNames.getDisplayNameForColumn(E,"header"),F=this.createColDef(E,K,$.pivotKeys);if(F.pivotTotalColumnIds=H.get(E.getColId()),F.columnGroupShow=!Q?"closed":"open",F.aggFunc=E.getAggFunc(),!W||B)$.children.push(F),X.push(F)}this.merge(Y,H);return}if(!$.pivotValueColumn)return;let q=$.pivotValueColumn.getColId();if(Y.has(q))Y.get(q).push($.colId);else Y.set(q,[$.colId])};z.forEach(($)=>{Z($,J,new Map)})}addPivotTotalsToGroups(z,J){if(!this.gos.get("pivotColumnGroupTotals"))return;let Q=this.gos.get("pivotColumnGroupTotals")==="after",Z=this.valueColsSvc?.columns,$=Z?.map((X)=>X.getAggFunc());if(!$||$.length<1||!this.sameAggFuncs($))return;if(Z){let X=Z[0];z.forEach((Y)=>{this.recursivelyAddPivotTotal(Y,J,X,Q)})}}recursivelyAddPivotTotal(z,J,Q,Z){let $=z;if(!$.children){let Y=z;return Y.colId?[Y.colId]:null}let X=[];if($.children.forEach((Y)=>{let q=this.recursivelyAddPivotTotal(Y,J,Q,Z);if(q)X=X.concat(q)}),$.children.length>1){let q=this.getLocaleTextFunc()("pivotColumnGroupTotals","Total"),G=this.createColDef(Q,q,z.pivotKeys,!0);G.pivotTotalColumnIds=X,G.aggFunc=Q.getAggFunc(),G.columnGroupShow=this.gos.get("suppressExpandablePivotGroups")?"open":void 0;let U=z.children;if(Z)U.push(G);else U.unshift(G);J.push(G)}return X}addRowGroupTotals(z,J){if(!this.gos.get("pivotRowTotals"))return;let Q=this.gos.get("pivotRowTotals")==="after",$=(this.valueColsSvc?.columns??[]).slice();if(!Q)$.reverse();let X=$.length>1||!this.gos.get("removePivotHeaderRowWhenSingleValueColumn");for(let Y=0;Y<$.length;Y++){let q=$[Y],G=this.colNames.getDisplayNameForColumn(q,"header"),U=this.createColDef(q,G,[]),_=[];for(let W=0;WX.data?.[X.colDef.field],$.pivotKeys=Q,$.pivotValueColumn=z,$.filter===!0)$.filter="agNumberColumnFilter";return $}sameAggFuncs(z){if(z.length==1)return!0;for(let J=1;J{let X=[...z.has(Z)?z.get(Z):[],...Q];z.set(Z,X)})}generateColumnGroupId(z){return`pivotGroup_${(this.pivotColsSvc?.columns??[]).map((Q)=>Q.getColId()).join("-")}_${z.join("-")}`}generateColumnId(z,J){return`pivot_${(this.pivotColsSvc?.columns??[]).map((Z)=>Z.getColId()).join("-")}_${z.join("-")}_${J}`}createColDefsFromFields(z){let J=new Map;for(let $=0;${let G=[];for(let[H,W]of Y){let B=Q(`${$}${this.fieldSeparator}${H}`,H,W,q+1);G.push(B)}if(G.length===0){let H=this.colModel.getColDefCol(X);if(H){let B=this.colNames.getDisplayNameForColumn(H,"header")??X,E=this.createColDef(H,B,void 0,!1);return E.colId=$,E.aggFunc=H.getAggFunc(),E.valueGetter=(K)=>K.data?.[$],E}return{colId:$,headerName:X,valueGetter:(B)=>B.data?.[$]}}if(this.gos.get("removePivotHeaderRowWhenSingleValueColumn")&&G.length===1&&"colId"in G[0])return G[0].headerName=X,G[0];return{openByDefault:this.pivotDefaultExpanded===-1||q{$.forEach((X)=>{if(P(X.children)){let q=X;if(Q)Q(q);Z(q.children)}else{let q=X;if(J)J(q)}})};if(z)Z(z)}},pY="Exceeded maximum allowed pivot column count.",NJ=(z)=>{let J={};return z.forEach((Q,Z)=>J[Z]=Q instanceof Map?NJ(Q):Q),J},Yv=class extends S{constructor(){super(...arguments);this.beanName="pivotStage",this.step="pivot",this.refreshProps=["removePivotHeaderRowWhenSingleValueColumn","pivotRowTotals","pivotColumnGroupTotals","suppressExpandablePivotGroups"],this.uniqueValues=new Map,this.lastTimeFailed=!1,this.maxUniqueValues=-1,this.currentUniqueCount=0}wireBeans(z){this.valueSvc=z.valueSvc,this.colModel=z.colModel,this.pivotResultCols=z.pivotResultCols,this.rowGroupColsSvc=z.rowGroupColsSvc,this.valueColsSvc=z.valueColsSvc,this.pivotColsSvc=z.pivotColsSvc,this.pivotColDefSvc=z.pivotColDefSvc}execute(z){if(this.colModel.isPivotActive())return this.executePivotOn(z);else return this.executePivotOff()}executePivotOff(){if(this.aggregationColumnsHashLastTime=null,this.uniqueValues=new Map,this.pivotResultCols.isPivotResultColsPresent())return this.pivotResultCols.setPivotResultCols(null,"rowModelUpdated"),!0;return!1}executePivotOn(z){let J=this.valueColsSvc?.columns.length??1,Q=this.gos.get("pivotMaxGeneratedColumns");this.maxUniqueValues=Q===-1?-1:Q/J;let Z;try{Z=this.bucketUpRowNodes(z)}catch(L){if(L.message===pY)return this.pivotResultCols.setPivotResultCols([],"rowModelUpdated"),this.eventSvc.dispatchEvent({type:"pivotMaxColumnsExceeded",message:L.message}),this.lastTimeFailed=!0,!1;throw L}let $=this.setUniqueValues(Z),X=this.valueColsSvc?.columns??[],Y=X.map((L)=>`${L.getId()}-${L.getColDef().headerName}`).join("#"),q=X.map((L)=>L.getAggFunc().toString()).join("#"),G=this.aggregationColumnsHashLastTime!==Y,U=this.aggregationFuncsHashLastTime!==q;this.aggregationColumnsHashLastTime=Y,this.aggregationFuncsHashLastTime=q;let _=(this.rowGroupColsSvc?.columns??[]).map((L)=>L.getId()).join("#"),H=_!==this.groupColumnsHashLastTime;this.groupColumnsHashLastTime=_;let W=this.gos.get("pivotRowTotals"),B=this.gos.get("pivotColumnGroupTotals"),E=this.gos.get("suppressExpandablePivotGroups"),K=this.gos.get("removePivotHeaderRowWhenSingleValueColumn"),F=W!==this.pivotRowTotalsLastTime||B!==this.pivotColumnGroupTotalsLastTime||E!==this.suppressExpandablePivotGroupsLastTime||K!==this.removePivotHeaderRowWhenSingleValueColumnLastTime;if(this.pivotRowTotalsLastTime=W,this.pivotColumnGroupTotalsLastTime=B,this.suppressExpandablePivotGroupsLastTime=E,this.removePivotHeaderRowWhenSingleValueColumnLastTime=K,this.lastTimeFailed||$||G||H||U||F){let L=this.pivotColDefSvc.createPivotColumnDefs(this.uniqueValues);return this.pivotResultCols.setPivotResultCols(L,"rowModelUpdated"),this.lastTimeFailed=!1,!0}return this.lastTimeFailed=!1,!1}setUniqueValues(z){if(!s6(NJ(this.uniqueValues),NJ(z)))return this.uniqueValues=z,!0;return!1}bucketUpRowNodes(z){this.currentUniqueCount=0;let J=new Map;r0(this.beans.rowModel.rootNode,this.beans.rowModel.hierarchical,z,(Z)=>{if(Z.leafGroup)Z.childrenMapped=null});let Q=(Z)=>{if(Z.leafGroup)this.bucketRowNode(Z,J);else{let $=Z.childrenAfterFilter;if($)for(let X=0,Y=$.length;Xthis.maxUniqueValues;if(Y&&W)throw Error(pY)}if(!$.has(H))$.set(H,[]);$.get(H).push(_)}if(Q===J.length-1)return $;let q=new Map;for(let G of $.keys())q.set(G,this.bucketChildren($.get(G),J,Q+1,Z.get(G)));return q}},qv={moduleName:"SharedPivot",version:$0,beans:[Xv,$v,nq],apiFunctions:{isPivotMode:pT,getPivotResultColumn:nT,setValueColumns:dT,getValueColumns:rT,removeValueColumns:tT,addValueColumns:sT,setPivotColumns:lT,removePivotColumns:aT,addPivotColumns:oT,getPivotColumns:eT,setPivotResultColumns:zv,getPivotResultColumns:Jv},dependsOn:[aq,Z5]},ZG={moduleName:"Pivot",version:$0,rowModels:["clientSide"],beans:[Yv],dependsOn:[qv,JT,tJ]};var RN=String.fromCodePoint(31,41150,8291);var $G=[{symbol:"%",fixity:"postfix",precedence:100},{symbol:"-",fixity:"prefix",precedence:90},{symbol:"+",fixity:"prefix",precedence:90},{symbol:"^",fixity:"infix",precedence:80,associativity:"right"},{symbol:"*",fixity:"infix",precedence:70,associativity:"left",isAssociative:!0},{symbol:"/",fixity:"infix",precedence:70,associativity:"left"},{symbol:"+",fixity:"infix",precedence:60,associativity:"left",isAssociative:!0},{symbol:"-",fixity:"infix",precedence:60,associativity:"left"},{symbol:"&",fixity:"infix",precedence:55,associativity:"left",isAssociative:!0},{symbol:"=",fixity:"infix",precedence:50,associativity:"left"},{symbol:"<>",fixity:"infix",precedence:50,associativity:"left"},{symbol:">=",fixity:"infix",precedence:50,associativity:"left"},{symbol:"<=",fixity:"infix",precedence:50,associativity:"left"},{symbol:">",fixity:"infix",precedence:50,associativity:"left"},{symbol:"<",fixity:"infix",precedence:50,associativity:"left"}],nY=new Map;for(let z of $G){let J=nY.get(z.symbol)??[];J.push(z),nY.set(z.symbol,J)}var AN=[...new Set($G.map((z)=>z.symbol))].sort((z,J)=>J.length-z.length);var jN=Symbol("WrappedFunctionMarker");var Gv={column:"bar",groupedColumn:"bar",stackedColumn:"bar",normalizedColumn:"bar",bar:"bar",groupedBar:"bar",stackedBar:"bar",normalizedBar:"bar",line:"line",stackedLine:"line",normalizedLine:"line",scatter:"scatter",bubble:"bubble",pie:"pie",donut:"donut",doughnut:"donut",area:"area",stackedArea:"area",normalizedArea:"area",histogram:"histogram",radarLine:"radar-line",radarArea:"radar-area",nightingale:"nightingale",radialColumn:"radial-column",radialBar:"radial-bar",sunburst:"sunburst",rangeBar:"range-bar",rangeArea:"range-area",boxPlot:"box-plot",treemap:"treemap",heatmap:"heatmap",waterfall:"waterfall",funnel:"funnel",coneFunnel:"cone-funnel",pyramid:"pyramid"},Uv=new Set(["columnLineCombo","areaColumnCombo","customCombo"]);function _v(z){return Uv.has(z)}function Hv(z){return z==="doughnut"?"donut":z}function Wv(z){return Gv[z]}var Bv=["number","category","grouped-category","log","time"];var ON=Bv.reduce((z,J)=>({...z,[J]:{title:{_enabledFromTheme:!0}}}),{});var lJ=(z)=>{return(J)=>{if(J==null)return!0;return z(J)}};var Ev=["doughnut"];function Kv(z){return!!Wv(z)||_v(z)}function Fv(z){return Ev.includes(z)}var TN=lJ((z)=>{if(Kv(z))return!0;if(Fv(z)){let J=Hv(z);return y4(`The chart type '${z}' has been deprecated. Please use '${J}' instead.`),J}return!1}),vN=lJ((z)=>{return typeof z==="object"}),IN=lJ((z)=>{return typeof z==="object"}),CN=lJ((z)=>{return typeof z==="string"||typeof z==="function"});function XG(z){return z.map((J,Q,Z)=>J.map(($,X)=>Z.slice(0,Q+1).reduce((Y,q)=>Y+q[X],0)))}function YG(z){let J=z.map((Q,Z)=>z.reduce(($,X)=>Math.max($,X[Z]),0));return z.map((Q)=>Q.map((Z,$)=>Z/J[$]*19))}var qG=[[1,3,5],[2,6,4],[5,3,1]];var Lv=XG(qG);var yN=YG(Lv);var Dv=qG;var Mv=XG(Dv);var bN=YG(Mv);var kv=["number","category","time","grouped-category"],fv=["angle-category","angle-number","radius-category","radius-number"],xN=[...kv,...fv];var{h:Sv,watch:W7,onUnmount:Vv}=window.SigPro;Y9.registerModules([$Y,BX,ZY,sX,QY,RX,HX,hq,QG,ZG,zG,q7,Rq,Oq,yq,xq,oq,rX,dX,Iq,tX,Pq]);var Wu=(z)=>{let{data:J,options:Q,api:Z,on:$,class:X,style:Y="height: 100%; width: 100%",dark:q}=z,G=null,U=null,_=()=>q!==void 0?typeof q==="function"?q():q:document.documentElement.getAttribute("data-theme")==="dark"||window.matchMedia("(prefers-color-scheme: dark)").matches,H=()=>{if(_())return DJ.withParams({headerFontSize:14,headerVerticalPaddingScale:0.4,rowVerticalPaddingScale:0.4,backgroundColor:"#1d1d1d",foregroundColor:"#ffffff",headerBackgroundColor:"#2a2a2a",headerForegroundColor:"#ffffff",oddRowBackgroundColor:"#262626",borderColor:"#404040",browserColorScheme:"dark"});return DJ.withParams({browserColorScheme:"light",headerFontSize:14,headerVerticalPaddingScale:0.4,rowVerticalPaddingScale:0.4})};return Sv("div",{class:X,style:Y,ref:(B)=>{if(U)U(),U=null;if(G&&!G.isDestroyed()){if(G.destroy(),Z)Z.current=null;G=null}if(!B)return;let E=typeof J==="function"?J():J,K=typeof Q==="function"?Q():Q,F=["onFilterChanged","onModelUpdated","onGridSizeChanged","onFirstDataRendered","onRowValueChanged","onSelectionChanged","onCellClicked","onCellDoubleClicked","onCellValueChanged","onRowClicked","onSortChanged","onContextMenu","onColumnResized","onColumnMoved","onRowDataUpdated","onCellEditingStarted","onCellEditingStopped","onPaginationChanged","onBodyScroll"],L={};F.forEach((R)=>{if($?.[R])L[R]=(O)=>$[R](O)});let D={...K,theme:H(),rowData:E||[],onGridReady:(R)=>{if(G=R.api,Z)Z.current=G;if($?.onGridReady)$.onGridReady(R);if(K?.autoSizeColumns)R.api.autoSizeAllColumns()},...L};G=fJ(B,D);let M=W7(()=>{if(!G||G.isDestroyed())return;let R=typeof J==="function"?J():J;if(Array.isArray(R)){let O=G.getGridOption("rowData");if(R!==O)G.setGridOption("rowData",R)}}),f=W7(()=>{if(!G||G.isDestroyed())return;_();let R=H(),O=G.getGridOption("theme");if(JSON.stringify(R)!==JSON.stringify(O))G.setGridOption("theme",R)}),A=W7(()=>{if(!G||G.isDestroyed()||!Q)return;let R=typeof Q==="function"?Q():Q;if(R)Object.entries(R).forEach(([O,v])=>{try{G.setGridOption(O,v)}catch(I){}})});U=()=>{if(M(),f(),A(),G&&!G.isDestroyed()){if(G.destroy(),Z)Z.current=null;G=null}},Vv(()=>{if(U)U(),U=null})}})};export{Wu as Grid}; diff --git a/dist/sigpro.ui.css b/dist/sigpro.ui.css index 036531f..e8e0d00 100644 --- a/dist/sigpro.ui.css +++ b/dist/sigpro.ui.css @@ -1,2 +1,2 @@ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-3xl:48rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-7xl:4.5rem;--text-7xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-3xl:1.5rem;--drop-shadow-2xl:0 25px 25px #00000026;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab, red, red)){:root{scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) #0000}}@property --radialprogress{syntax:"";inherits:true;initial-value:0%}:root:not(span){overflow:var(--page-overflow)}:root{background:var(--page-scroll-bg,var(--root-bg));--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) var(--root-bg,#0000)}@supports (color:color-mix(in lab, red, red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) color-mix(in srgb, var(--root-bg,#0000), oklch(0% 0 0) calc(var(--page-has-backdrop,0) * 40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset) ; else: unset)}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root,[data-theme]{background:var(--page-scroll-bg,var(--root-bg));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}:where(:root),:root:has(input.theme-controller[value=splight]:checked),[data-theme=splight]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(92% 0 0);--color-base-content:oklch(25% .006 285);--color-primary:oklch(25% .006 285);--color-primary-content:oklch(98% 0 0);--color-secondary:oklch(55% .046 257.417);--color-secondary-content:oklch(98% 0 0);--color-accent:oklch(96% 0 0);--color-accent-content:oklch(25% .006 285);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232);--color-success:oklch(62% .17 163);--color-warning:oklch(82% .18 84);--color-error:oklch(60% .25 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(15% .005 285.823);--color-base-200:oklch(20% .005 285.823);--color-base-300:oklch(30% .005 285.823);--color-base-content:oklch(92% .004 286.32);--color-primary:oklch(98% 0 0);--color-primary-content:oklch(15% 0 0);--color-secondary:oklch(65% .046 257.417);--color-secondary-content:oklch(15% .005 285.823);--color-accent:oklch(25% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(92% .004 286.32);--color-neutral-content:oklch(14% .005 285.823);--color-info:oklch(70% .1 230);--color-success:oklch(65% .15 160);--color-warning:oklch(85% .15 90);--color-error:oklch(55% .2 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=spdark]:checked),[data-theme=spdark]{color-scheme:dark;--color-base-100:oklch(15% .005 285.823);--color-base-200:oklch(20% .005 285.823);--color-base-300:oklch(30% .005 285.823);--color-base-content:oklch(92% .004 286.32);--color-primary:oklch(98% 0 0);--color-primary-content:oklch(15% 0 0);--color-secondary:oklch(65% .046 257.417);--color-secondary-content:oklch(15% .005 285.823);--color-accent:oklch(25% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(92% .004 286.32);--color-neutral-content:oklch(14% .005 285.823);--color-info:oklch(70% .1 230);--color-success:oklch(65% .15 160);--color-warning:oklch(85% .15 90);--color-error:oklch(55% .2 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}@layer components;@layer utilities{@layer daisyui.l1.l2.l3{.diff{webkit-user-select:none;-webkit-user-select:none;user-select:none;direction:ltr;grid-template-rows:1fr 1.8rem 1fr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus-visible),.diff:focus-visible{outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:95cqi;max-width:95cqi}.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-1:focus-visible) .diff-resizer{min-width:5cqi;max-width:5cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:5cqi;max-width:5cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:95cqi;max-width:95cqi}}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:visibility .3s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}:where(.drawer-side){overflow:hidden}.drawer-side{pointer-events:none;visibility:hidden;z-index:10;overscroll-behavior:contain;opacity:0;width:100%;transition:opacity .2s ease-out .1s allow-discrete, visibility .3s ease-out .1s allow-discrete;inset-inline-start:0;background-color:#0000;grid-template-rows:repeat(1,minmax(0,1fr));grid-template-columns:repeat(1,minmax(0,1fr));grid-row-start:1;grid-column-start:1;place-items:flex-start start;height:100dvh;display:grid;position:fixed;top:0}.drawer-side>.drawer-overlay{cursor:pointer;background-color:oklch(0% 0 0/.4);place-self:stretch stretch;position:sticky;top:0}.drawer-side>*{grid-row-start:1;grid-column-start:1}.drawer-side>:not(.drawer-overlay){will-change:transform;transition:translate .3s ease-out,width .2s ease-out;translate:-100%}[dir=rtl] :is(.drawer-side>:not(.drawer-overlay)){translate:100%}.fab{pointer-events:none;z-index:999;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;inset-inline-end:1rem;flex-direction:column-reverse;align-items:flex-end;gap:.5rem;display:flex;position:fixed;bottom:1rem}.fab>*{pointer-events:auto;align-items:center;gap:.5rem;display:flex}.fab>:hover,.fab>:has(:focus-visible){z-index:1}.fab>[tabindex]:first-child{transition-property:opacity,visibility,rotate;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:grid;position:relative}.fab .fab-close,.fab .fab-main-action{inset-inline-end:0;position:absolute;bottom:0}:is(.fab:focus-within:has(.fab-close),.fab:focus-within:has(.fab-main-action))>[tabindex]{opacity:0;rotate:90deg}.fab:focus-within>[tabindex]:first-child{pointer-events:none}.fab:focus-within>:nth-child(n+2){visibility:visible;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.fab>:nth-child(n+2){visibility:hidden;--tw-scale-x:80%;--tw-scale-y:80%;--tw-scale-z:80%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:0;transition-property:opacity,scale,visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.fab>:nth-child(n+2).fab-main-action,.fab>:nth-child(n+2).fab-close{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.fab>:nth-child(3){transition-delay:30ms}.fab>:nth-child(4){transition-delay:60ms}.fab>:nth-child(5){transition-delay:90ms}.fab>:nth-child(6){transition-delay:.12s}.drawer-toggle{appearance:none;opacity:0;width:0;height:0;position:fixed}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:currentColor oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4))}@supports (color:color-mix(in lab, red, red)){:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4))}}:where(:root:has(.drawer-toggle:checked)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}.tooltip{--tt-bg:var(--color-neutral);--tt-off:calc(100% + .5rem);--tt-tail:calc(100% + 1px + .25rem);display:inline-block;position:relative}.tooltip>.tooltip-content,.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:2;--tw-content:attr(data-tip);content:var(--tw-content);width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);display:block;position:absolute}@media (prefers-reduced-motion:no-preference){.tooltip>.tooltip-content,.tooltip[data-tip]:before,.tooltip:after{transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms}}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem}@media (prefers-reduced-motion:no-preference){:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media (hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:.75rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));--tab-radius-limit:min(var(--radius-field), var(--tab-radius-min));--tab-radius-grad:#0000 calc(69% - var(--border)), var(--tab-border-color) calc(69% - var(--border) + .25px), var(--tab-border-color) 69%, var(--tab-bg) calc(69% + .25px);order:var(--tab-order);height:var(--tab-height);padding-inline:var(--tab-p);border-color:#0000;font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content{display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0}@media (prefers-reduced-motion:no-preference){.menu details::details-content{transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li).menu-disabled{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.floating-label{display:block;position:relative}.floating-label input{display:block}.floating-label input::placeholder,.floating-label textarea::placeholder{transition:top .1s ease-out,translate .1s ease-out,scale .1s ease-out,opacity .1s ease-out}.floating-label>span{z-index:1;background-color:var(--color-base-100);opacity:0;inset-inline-start:.75rem;top:calc(var(--size-field,.25rem) * 10 / 2);pointer-events:none;border-radius:2px;padding-inline:.25rem;font-size:.875rem;line-height:1;transition:top .1s ease-out,translate .1s ease-out,scale .1s ease-out,opacity .1s ease-out;position:absolute;translate:0 -50%}:is(.floating-label:focus-within,.floating-label:not(:has(input:placeholder-shown,textarea:placeholder-shown))) ::placeholder{opacity:0;pointer-events:auto;top:0;translate:-12.5% calc(-50% - .125em);scale:.75}:is(.floating-label:focus-within,.floating-label:not(:has(input:placeholder-shown,textarea:placeholder-shown)))>span{opacity:1;pointer-events:auto;z-index:2;top:0;translate:-12.5% calc(-50% - .125em);scale:.75}.floating-label:has(:disabled,[disabled])>span{opacity:0}.floating-label:has(.input-xs,.select-xs,.textarea-xs) span{top:calc(var(--size-field,.25rem) * 6 / 2);font-size:.6875rem}.floating-label:has(.input-sm,.select-sm,.textarea-sm) span{top:calc(var(--size-field,.25rem) * 8 / 2);font-size:.75rem}.floating-label:has(.input-md,.select-md,.textarea-md) span{top:calc(var(--size-field,.25rem) * 10 / 2);font-size:.875rem}.floating-label:has(.input-lg,.select-lg,.textarea-lg) span{top:calc(var(--size-field,.25rem) * 12 / 2);font-size:1.125rem}.floating-label:has(.input-xl,.select-xl,.textarea-xl) span{top:calc(var(--size-field,.25rem) * 14 / 2);font-size:1.375rem}.dropdown{position-area:var(--anchor-v,bottom) var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(:has(~[class*=dropdown-content])):focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.dropdown>:not(:has(~[class*=dropdown-content])):focus{outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown.dropdown-close .dropdown-content,.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content,.dropdown.dropdown-hover:not(:hover) [tabindex]:first-child:focus:not(:focus-visible)~.dropdown-content{transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover],.dropdown .dropdown-content{z-index:999}@media (prefers-reduced-motion:no-preference){.dropdown[popover],.dropdown .dropdown-content{transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:.95}}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}.dropdown:is(details) summary::-webkit-details-marker{display:none}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed}@supports not (position-area:bottom){.dropdown[popover]{margin:auto}.dropdown[popover].dropdown-close{transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover].dropdown-open:not(:popover-open){transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover]::backdrop{background-color:oklab(0% none none/.3)}}:is(.dropdown[popover].dropdown-close,.dropdown[popover]:not(.dropdown-open,:popover-open)){transform-origin:top;opacity:0;display:none;scale:.95}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0 / calc(var(--depth) * .15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0 / calc(var(--depth) * 6%)) inset, var(--btn-shadow);--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab, red, red)){.btn{--btn-border:color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000)}}.btn{--btn-noise:var(--fx-noise)}@media (hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio])[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem) * 6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.collapse{border-radius:var(--radius-box,1rem);isolation:isolate;grid-template-rows:max-content 0fr;grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:hidden}@media (prefers-reduced-motion:no-preference){.collapse{transition:grid-template-rows .2s}}.collapse>input:is([type=checkbox],[type=radio]){appearance:none;opacity:0;z-index:1;grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close)),.collapse:not(.collapse-close):has(>input:is([type=checkbox],[type=radio]):checked){grid-template-rows:max-content 1fr}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){content-visibility:visible;min-height:fit-content}@supports not (content-visibility:visible){.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){visibility:visible}}.collapse:focus-visible,.collapse:has(>input:is([type=checkbox],[type=radio]):focus-visible),.collapse:has(summary:focus-visible){outline-color:var(--color-base-content);outline-offset:2px;outline-width:2px;outline-style:solid}.collapse:not(.collapse-close)>input[type=checkbox],.collapse:not(.collapse-close)>input[type=radio]:not(:checked),.collapse:not(.collapse-close)>.collapse-title{cursor:pointer}:is(.collapse[tabindex]:focus:not(.collapse-close,.collapse[open]),.collapse[tabindex]:focus-within:not(.collapse-close,.collapse[open]))>.collapse-title{cursor:unset}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>:where(.collapse-content),.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){padding-bottom:1rem}.collapse:is(details){width:100%}@media (prefers-reduced-motion:no-preference){.collapse:is(details)::details-content{transition:content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out, height .2s;interpolate-size:allow-keywords;height:0}.collapse:is(details):where([open])::details-content{height:auto}}.collapse:is(details) summary{display:block;position:relative}.collapse:is(details) summary::-webkit-details-marker{display:none}.collapse:is(details)>.collapse-content{content-visibility:visible}.collapse:is(details) summary{outline:none}.collapse-content{content-visibility:hidden;min-height:0;cursor:unset;grid-row-start:2;grid-column-start:1;padding-left:1rem;padding-right:1rem}@supports not (content-visibility:hidden){.collapse-content{visibility:hidden}}@media (prefers-reduced-motion:no-preference){.collapse-content{transition:content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out}}.validator-hint{visibility:hidden;margin-top:.5rem;font-size:.75rem}.validator:user-valid{--input-color:var(--color-success)}.validator:user-valid:focus{--input-color:var(--color-success)}.validator:user-valid:checked{--input-color:var(--color-success)}.validator:user-valid[aria-checked=true]{--input-color:var(--color-success)}.validator:user-valid:focus-within{--input-color:var(--color-success)}.validator:has(:user-valid){--input-color:var(--color-success)}.validator:has(:user-valid):focus{--input-color:var(--color-success)}.validator:has(:user-valid):checked{--input-color:var(--color-success)}.validator:has(:user-valid)[aria-checked=true]{--input-color:var(--color-success)}.validator:has(:user-valid):focus-within{--input-color:var(--color-success)}.validator:user-invalid{--input-color:var(--color-error)}.validator:user-invalid:focus{--input-color:var(--color-error)}.validator:user-invalid:checked{--input-color:var(--color-error)}.validator:user-invalid[aria-checked=true]{--input-color:var(--color-error)}.validator:user-invalid:focus-within{--input-color:var(--color-error)}.validator:user-invalid~.validator-hint{visibility:visible;color:var(--color-error)}.validator:has(:user-invalid){--input-color:var(--color-error)}.validator:has(:user-invalid):focus{--input-color:var(--color-error)}.validator:has(:user-invalid):checked{--input-color:var(--color-error)}.validator:has(:user-invalid)[aria-checked=true]{--input-color:var(--color-error)}.validator:has(:user-invalid):focus-within{--input-color:var(--color-error)}.validator:has(:user-invalid)~.validator-hint{visibility:visible;color:var(--color-error)}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))),:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus,:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):checked,:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))[aria-checked=true],:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus-within{--input-color:var(--color-error)}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))~.validator-hint{visibility:visible;color:var(--color-error)}.radial-progress{height:var(--size);width:var(--size);vertical-align:middle;box-sizing:content-box;--value:0;--size:5rem;--thickness:calc(var(--size) / 10);--radialprogress:calc(var(--value) * 1%);background-color:#0000;border-radius:3.40282e38px;place-content:center;transition:--radialprogress .3s linear;display:inline-grid;position:relative}.radial-progress:before{content:"";background:radial-gradient(farthest-side, currentColor 98%, #0000) top/var(--thickness) var(--thickness) no-repeat, conic-gradient(currentColor var(--radialprogress), #0000 0);webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));border-radius:3.40282e38px;position:absolute;inset:0}.radial-progress:after{content:"";inset:calc(50% - var(--thickness) / 2);transform:rotate(calc(var(--value) * 3.6deg - 90deg)) translate(calc(var(--size) / 2 - 50%));background-color:currentColor;border-radius:3.40282e38px;transition:transform .3s linear;position:absolute}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0, auto) 1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab, red, red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent)}}.toast{translate:var(--toast-x,0) var(--toast-y,0);inset-inline:auto 1rem;background-color:#0000;flex-direction:column;gap:.5rem;width:max-content;max-width:calc(100vw - 2rem);display:flex;position:fixed;top:auto;bottom:1rem}@media (prefers-reduced-motion:no-preference){.toast>*{animation:.25s ease-out toast}}.toggle{border:var(--border) solid currentColor;color:var(--input-color);cursor:pointer;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p), var(--radius-selector-max)) + min(var(--border), var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab, red, red)){.toggle{box-shadow:0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab, red, red)){.toggle{--input-color:color-mix(in oklab, var(--color-base-content) 50%, #0000)}}.toggle{--toggle-p:calc(var(--size) * .125);--size:calc(var(--size-selector,.25rem) * 6);width:calc((var(--size) * 2) - (var(--border) + var(--toggle-p)) * 2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:0deg}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:0deg}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);width:100%;height:100%;box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab, red, red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000)}}.toggle:before{background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}@media (forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border) solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab, red, red)){.input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.indicator{width:max-content;display:inline-flex;position:relative}.indicator :where(.indicator-item){z-index:1;white-space:nowrap;top:var(--indicator-t,0);bottom:var(--indicator-b,auto);left:var(--indicator-s,auto);right:var(--indicator-e,0);translate:var(--indicator-x,50%) var(--indicator-y,-50%);position:absolute}.table{border-collapse:separate;--tw-border-spacing-x:calc(.25rem * 0);--tw-border-spacing-y:calc(.25rem * 0);width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);border-radius:var(--radius-box);text-align:left;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead,tfoot){color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.table :where(thead,tfoot){font-size:.875rem;font-weight:600}.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.steps{counter-reset:step;grid-auto-columns:1fr;grid-auto-flow:column;display:inline-grid;overflow:auto hidden}.steps .step{text-align:center;--step-bg:var(--color-base-300);--step-fg:var(--color-base-content);grid-template-rows:40px 1fr;grid-template-columns:auto;place-items:center;min-width:4rem;display:grid}.steps .step:before{width:100%;height:.5rem;color:var(--step-bg);background-color:var(--step-bg);content:"";border:1px solid;grid-row-start:1;grid-column-start:1;margin-inline-start:-100%;top:0}.steps .step>.step-icon,.steps .step:not(:has(.step-icon)):after{--tw-content:counter(step);content:var(--tw-content);counter-increment:step;z-index:1;color:var(--step-fg);background-color:var(--step-bg);border:1px solid var(--step-bg);border-radius:3.40282e38px;grid-row-start:1;grid-column-start:1;place-self:center;place-items:center;width:2rem;height:2rem;display:grid;position:relative}.steps .step:first-child:before{--tw-content:none;content:var(--tw-content)}.steps .step[data-content]:after{--tw-content:attr(data-content);content:var(--tw-content)}.range{appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem) * 6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:currentColor}@supports (color:color-mix(in lab, red, red)){.range{--range-bg:color-mix(in oklab, currentColor 10%, #0000)}}.range{cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}@media (forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));background-color:var(--range-thumb);height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));position:relative;top:50%;transform:translateY(-50%)}@supports (color:color-mix(in lab, red, red)){.range::-webkit-slider-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));background-color:currentColor;position:relative;top:50%}@supports (color:color-mix(in lab, red, red)){.range::-moz-range-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range:disabled{cursor:not-allowed;opacity:.3}.chat-bubble{border-radius:var(--radius-field);background-color:var(--color-base-300);width:fit-content;color:var(--color-base-content);grid-row-end:3;min-width:2.5rem;max-width:90%;min-height:2rem;padding-block:.5rem;padding-inline:1rem;display:block;position:relative}.chat-bubble:before{background-color:inherit;content:"";width:.75rem;height:.75rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-chat);-webkit-mask-image:var(--mask-chat);mask-image:var(--mask-chat);position:absolute;bottom:0;-webkit-mask-position:0 -1px;mask-position:0 -1px;-webkit-mask-size:.8125rem;mask-size:.8125rem}.select{border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;white-space:nowrap;text-overflow:ellipsis;box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:.75rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.select{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.select{border-color:var(--input-color);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.select{--size:calc(var(--size-field,.25rem) * 10)}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}[dir=rtl] .select::picker(select){translate:.5rem}[dir=rtl] .select select::picker(select){translate:.5rem}.select[multiple]{background-image:none;height:auto;padding-block:.75rem;padding-inline-end:.75rem;overflow:auto}.select select{appearance:none;width:calc(100% + 2.75rem);height:calc(100% - calc(var(--border) * 2));background:inherit;border-radius:inherit;border-style:none;align-items:center;margin-inline:-.75rem -1.75rem;padding-inline:.75rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.select select:focus,.select select:focus-within{outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.select:focus,.select:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.select:focus,.select:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}@supports (appearance:base-select){.select,.select select{appearance:base-select}:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) optgroup{padding-top:.5em}:is(.select,.select select) optgroup option:first-child{margin-top:.5em}:is(.select,.select select) option{border-radius:var(--radius-field);white-space:normal;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{outline-offset:2px;outline:2px solid #0000}}:is(.select,.select select) option:not(:disabled):active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}.timeline{display:flex;position:relative}.timeline>li{grid-template-rows:var(--timeline-row-start,minmax(0, 1fr)) auto var(--timeline-row-end,minmax(0, 1fr));grid-template-columns:var(--timeline-col-start,minmax(0, 1fr)) auto var(--timeline-col-end,minmax(0, 1fr));flex-shrink:0;align-items:center;display:grid;position:relative}.timeline>li>hr{border:none;width:100%}.timeline>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline>li>hr:last-child{grid-area:2/3/auto/none}@media print{.timeline>li>hr{border:.1px solid var(--color-base-300)}}.timeline :where(hr){background-color:var(--color-base-300);height:.25rem}.timeline:has(.timeline-middle hr):first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline:has(.timeline-middle hr):last-child,.timeline:not(:has(.timeline-middle)) :first-child hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline:not(:has(.timeline-middle)) :last-child hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.swap{cursor:pointer;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;place-content:center;display:inline-grid;position:relative}.swap input{appearance:none;border:none}.swap>*{grid-row-start:1;grid-column-start:1}@media (prefers-reduced-motion:no-preference){.swap>*{transition-property:transform,rotate,opacity;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.swap .swap-on,.swap .swap-indeterminate,.swap input:indeterminate~.swap-on,.swap input:is(:checked,:indeterminate)~.swap-off{opacity:0}.swap input:checked~.swap-on,.swap input:indeterminate~.swap-indeterminate{opacity:1;backface-visibility:visible}.collapse-title{grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out;position:relative}.mockup-code{border-radius:var(--radius-box);background-color:var(--color-neutral);color:var(--color-neutral-content);direction:ltr;padding-block:1.25rem;font-size:.875rem;position:relative;overflow:auto hidden}.mockup-code:before{content:"";opacity:.3;border-radius:3.40282e38px;width:.75rem;height:.75rem;margin-bottom:1rem;display:block;box-shadow:1.4em 0,2.8em 0,4.2em 0}.mockup-code pre{padding-right:1.25rem}.mockup-code pre:before{content:"";margin-right:2ch}.mockup-code pre[data-prefix]:before{--tw-content:attr(data-prefix);content:var(--tw-content);text-align:right;opacity:.5;width:2rem;display:inline-block}.avatar{vertical-align:middle;display:inline-flex;position:relative}.avatar>div{aspect-ratio:1;display:block;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.checkbox{border:var(--border) solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox{border:var(--border) solid var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 0 #0000 inset, 0 0 #0000;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:0deg}.radio{cursor:pointer;appearance:none;vertical-align:middle;border:var(--border) solid var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;display:inline-block;position:relative}@supports (color:color-mix(in lab, red, red)){.radio{border:var(--border) solid var(--input-color,color-mix(in srgb, currentColor 20%, #0000))}}.radio{box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);color:var(--input-color,currentColor)}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor}@media (prefers-reduced-motion:no-preference){.radio:checked,.radio[aria-checked=true]{animation:.2s ease-out radio}}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1));background-color:currentColor}@media (forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.rating{vertical-align:middle;display:inline-flex;position:relative}.rating input{appearance:none;border:none}.rating :where(*){background-color:var(--color-base-content);opacity:.2;border-radius:0;width:1.5rem;height:1.5rem}@media (prefers-reduced-motion:no-preference){.rating :where(*){animation:.25s ease-out rating}}.rating :where(*):is(input){cursor:pointer}.rating .rating-hidden{background-color:#0000;width:.5rem}.rating input[type=radio]:checked{background-image:none}.rating :checked,.rating [aria-checked=true],.rating [aria-current=true],.rating :has(~:checked,~[aria-checked=true],~[aria-current=true]){opacity:1}.rating :focus-visible{scale:1.1}@media (prefers-reduced-motion:no-preference){.rating :focus-visible{transition:scale .2s ease-out}}.rating :active:focus{animation:none;scale:1.1}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.drawer{grid-auto-columns:max-content auto;width:100%;display:grid;position:relative}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.progress{appearance:none;border-radius:var(--radius-box);background-color:currentColor;width:100%;height:.5rem;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.progress{background-color:color-mix(in oklab, currentcolor 20%, transparent)}}.progress{color:var(--color-base-content)}.progress:indeterminate{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%}@media (prefers-reduced-motion:no-preference){.progress:indeterminate{animation:5s ease-in-out infinite progress}}@supports ((-moz-appearance:none)){.progress:indeterminate::-moz-progress-bar{background-color:#0000}@media (prefers-reduced-motion:no-preference){.progress:indeterminate::-moz-progress-bar{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%;animation:5s ease-in-out infinite progress}}.progress::-moz-progress-bar{border-radius:var(--radius-box);background-color:currentColor}}@supports ((-webkit-appearance:none)){.progress::-webkit-progress-bar{border-radius:var(--radius-box);background-color:#0000}.progress::-webkit-progress-value{border-radius:var(--radius-box);background-color:currentColor}}.file-input{cursor:pointer;cursor:pointer;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));align-items:center;padding-inline-end:.75rem;font-size:.875rem;line-height:2;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.file-input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.file-input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.file-input::file-selector-button{cursor:pointer;webkit-user-select:none;-webkit-user-select:none;user-select:none;height:calc(100% + var(--border) * 2);margin-inline-end:1rem;margin-block:calc(var(--border) * -1);color:var(--btn-fg);border-width:var(--border);border-style:solid;border-color:var(--btn-border);background-color:var(--btn-bg);background-size:calc(var(--noise) * 100%);background-image:var(--btn-noise);text-shadow:0 .5px oklch(1 0 0 / calc(var(--depth) * .15));box-shadow:0 .5px 0 .5px white inset, var(--btn-shadow);border-start-start-radius:calc(var(--join-ss,var(--radius-field) - var(--border)));border-end-start-radius:calc(var(--join-es,var(--radius-field) - var(--border)));margin-inline-start:calc(var(--border) * -1);padding-inline:1rem;font-size:.875rem;font-weight:600}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{box-shadow:0 .5px 0 .5px color-mix(in oklab, color-mix(in oklab, white 30%, var(--btn-bg)) calc(var(--depth) * 20%), #0000) inset, var(--btn-shadow)}}.file-input::file-selector-button{--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-border:var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-border:color-mix(in oklab, var(--btn-bg), #000 5%)}}.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000)}}.file-input::file-selector-button{--btn-noise:var(--fx-noise)}.file-input:focus{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.file-input:focus{box-shadow:0 1px color-mix(in oklab, var(--input-color) 10%, #0000)}}.file-input:focus{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200)}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){box-shadow:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){color:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.textarea{border:var(--border) solid #0000;appearance:none;border-radius:var(--radius-field);background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);min-height:5rem;font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;flex-shrink:1;padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab, red, red)){.textarea{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.textarea{--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.textarea textarea{appearance:none;background-color:#0000;border:none}.textarea textarea:focus,.textarea textarea:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.textarea textarea:focus,.textarea textarea:focus-within{outline-offset:2px;outline:2px solid #0000}}.textarea:focus,.textarea:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.textarea:focus,.textarea:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.textarea:focus,.textarea:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.textarea:focus,.textarea:focus-within{--font-size:1rem}}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){box-shadow:none}.textarea:has(>textarea[disabled])>textarea[disabled]{cursor:not-allowed}.stack{grid-template-rows:3px 4px 1fr 4px 3px;grid-template-columns:3px 4px 1fr 4px 3px;display:inline-grid}.stack>*{width:100%;height:100%}.stack>:nth-child(n+2){opacity:.7;width:100%}.stack>:nth-child(2){z-index:2;opacity:.9}.stack>:first-child{z-index:3;width:100%}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.tab-content{order:var(--tabcontent-order);--tabcontent-radius-ss:var(--radius-box);--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box);--tabcontent-order:1;width:100%;height:calc(100% - var(--tab-height) + var(--border));margin:var(--tabcontent-margin);border-color:#0000;border-width:var(--border);border-start-start-radius:var(--tabcontent-radius-ss);border-start-end-radius:var(--tabcontent-radius-se);border-end-end-radius:var(--tabcontent-radius-ee);border-end-start-radius:var(--tabcontent-radius-es);display:none}.timeline-end{grid-area:3/1/4/4;place-self:flex-start center;margin:.25rem}.timeline-start{grid-area:1/1/2/4;place-self:flex-end center;margin:.25rem}.stat-figure{grid-row:1/span 3;grid-column-start:2;place-self:center flex-end}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:.95;box-shadow:0 25px 50px -12px oklch(0% 0 0/.25)}.drawer-content{grid-row-start:1;grid-column-start:2;min-width:0}.timeline-middle{grid-row-start:2;grid-column-start:2}.stat-value{white-space:nowrap;grid-column-start:1;font-size:2rem;font-weight:800}.stat-desc{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-desc{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-desc{font-size:.75rem}.stat-title{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-title{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-title{font-size:.75rem}.chat-image{grid-row:span 2/span 2;align-self:flex-end}.chat-footer{grid-row-start:3;gap:.25rem;font-size:.6875rem;display:flex}.chat-header{grid-row-start:1;gap:.25rem;font-size:.6875rem;display:flex}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.divider{--divider-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{--tw-content:"×";content:var(--tw-content)}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.breadcrumbs{max-width:100%;padding-block:.5rem;overflow-x:auto}.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol{white-space:nowrap;align-items:center;min-height:min-content;display:flex}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li{align-items:center;display:flex}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>*{cursor:pointer;align-items:center;gap:.5rem;display:flex}@media (hover:hover){:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:hover{text-decoration-line:underline}}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus{outline-offset:2px;outline:2px solid #0000}}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus-visible{outline-offset:2px;outline:2px solid}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li+:before{content:"";opacity:.4;background-color:#0000;border-top:1px solid;border-right:1px solid;width:.375rem;height:.375rem;margin-inline:.5rem .75rem;display:block;rotate:45deg}[dir=rtl] :is(:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li)+:before{rotate:-135deg}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.label{color:color-mix(in oklab, currentcolor 60%, transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.fieldset-legend{color:var(--color-base-content);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:-.25rem;padding-block:.5rem;font-weight:600;display:flex}.carousel-item{box-sizing:content-box;scroll-snap-align:start;flex:none;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab, red, red)){.status{background-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab, red, red)){.status{color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.status{background-image:radial-gradient(circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * .5)), #0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab, red, red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border) solid var(--badge-color,var(--color-base-200));background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem) * 6);width:fit-content;height:var(--size);padding-inline:calc(var(--size) / 2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.kbd{border-radius:var(--radius-field);background-color:var(--color-base-200);vertical-align:middle;border:var(--border) solid var(--color-base-content);justify-content:center;align-items:center;padding-inline:.5em;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.kbd{border:var(--border) solid color-mix(in srgb, var(--color-base-content) 20%, #0000)}}.kbd{border-bottom:calc(var(--border) + 1px) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.kbd{border-bottom:calc(var(--border) + 1px) solid color-mix(in srgb, var(--color-base-content) 20%, #0000)}}.kbd{--size:calc(var(--size-selector,.25rem) * 6);height:var(--size);min-width:var(--size);font-size:.875rem}.text-rotate{vertical-align:bottom;white-space:nowrap;--duration:var(--tw-duration);transition-property:none;display:inline-block;overflow:hidden}.text-rotate>*{height:calc(var(--items,1) * 100%);justify-items:start;display:grid}.text-rotate>:has(:nth-child(2)){--items:2;animation:rotator var(--duration,10s) linear(0 0% 49%, .5 50% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(3)){--items:3;animation:rotator var(--duration,10s) linear(0 0% 32%, .333333 33% 65%, .666666 66% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(4)){--items:4;animation:rotator var(--duration,10s) linear(0 0% 24%, .25 25% 49%, .5 50% 74%, .75 75% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(5)){--items:5;animation:rotator var(--duration,10s) linear(0 0% 19%, .2 20% 39%, .4 40% 59%, .6 60% 79%, .8 80% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(6)){--items:6;animation:rotator var(--duration,10s) linear(0 0% 15%, .16666 16% 32%, .333333 33% 49%, .5 50% 65%, .666666 66% 82%, .833333 83% 99%, 1 100% 100%) infinite}.text-rotate>*>*{clip-path:inset(.5px 0);align-content:baseline}.text-rotate>*>:first-child{translate:var(--first-item-position)}.text-rotate:hover>*{animation-play-state:paused}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem) * 10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>*{place-items:start;gap:.5rem;display:grid}.footer.footer-center{text-align:center;grid-auto-flow:column dense;place-items:center}.footer.footer-center>*{place-items:center}.stat{grid-template-columns:repeat(1,1fr);column-gap:1rem;width:100%;padding-block:1rem;padding-inline:1.5rem;display:inline-grid}.stat:not(:last-child){border-inline-end:var(--border) dashed currentColor}@supports (color:color-mix(in lab, red, red)){.stat:not(:last-child){border-inline-end:var(--border) dashed color-mix(in oklab, currentColor 10%, #0000)}}.stat:not(:last-child){border-block-end:none}.navbar-end{justify-content:flex-end;align-items:center;width:50%;display:inline-flex}.navbar-start{justify-content:flex-start;align-items:center;width:50%;display:inline-flex}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.navbar-center{flex-shrink:0;align-items:center;display:inline-flex}.carousel{scroll-snap-type:x mandatory;scrollbar-width:none;display:inline-flex;overflow-x:scroll}@media (prefers-reduced-motion:no-preference){.carousel{scroll-behavior:smooth}}.carousel::-webkit-scrollbar{display:none}.alert{--alert-border-color:var(--color-base-200);border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px #000, 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08));border-style:solid;grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab, red, red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px color-mix(in oklab, color-mix(in oklab, #000 20%, var(--alert-color,var(--color-base-200))) calc(var(--depth) * 20%), #0000), 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.fieldset{grid-template-columns:1fr;grid-auto-rows:max-content;gap:.375rem;padding-block:.25rem;font-size:.75rem;display:grid}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e");grid-auto-rows:min-content;column-gap:.75rem;padding-block:.25rem;display:grid}.card-actions{flex-wrap:wrap;align-items:flex-start;gap:.5rem;display:flex}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.avatar-group{display:flex;overflow:hidden}.avatar-group .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}.mask{vertical-align:middle;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.timeline-box{border:var(--border) solid;border-radius:var(--radius-box);border-color:var(--color-base-300);background-color:var(--color-base-100);padding-block:.5rem;padding-inline:1rem;font-size:.75rem;box-shadow:0 1px 2px oklch(0% 0 0/.05)}.btn-accent{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-info{--btn-color:var(--color-info);--btn-fg:var(--color-info-content)}.btn-neutral{--btn-color:var(--color-neutral);--btn-fg:var(--color-neutral-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-secondary{--btn-color:var(--color-secondary);--btn-fg:var(--color-secondary-content)}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}}@layer daisyui.l1.l2{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;background-color:oklch(0% 0 0/.4)}:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal) .modal-box{opacity:1;translate:0;scale:1}:root:has(:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}@starting-style{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{opacity:0}}:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto}:where(.drawer-toggle:checked~.drawer-side)>:not(.drawer-overlay){translate:0%}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-offset:2px;outline:2px solid}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off) 50%}.tooltip:after{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail) 50%}.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.btn-disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn-disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn-disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn-disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn-disabled{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}@media (prefers-reduced-motion:no-preference){.collapse[open].collapse-arrow>.collapse-title:after,.collapse.collapse-open.collapse-arrow>.collapse-title:after{transform:translateY(-50%)rotate(225deg)}}.collapse.collapse-open.collapse-plus>.collapse-title:after{--tw-content:"−";content:var(--tw-content)}:is(.collapse[tabindex].collapse-arrow:focus:not(.collapse-close),.collapse.collapse-arrow[tabindex]:focus-within:not(.collapse-close))>.collapse-title:after,.collapse.collapse-arrow:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{transform:translateY(-50%)rotate(225deg)}.collapse[open].collapse-plus>.collapse-title:after,.collapse[tabindex].collapse-plus:focus:not(.collapse-close)>.collapse-title:after,.collapse.collapse-plus:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{--tw-content:"−";content:var(--tw-content)}.tabs-lift{--tabs-height:auto;--tabs-direction:row}.tabs-lift>.tab{--tab-border:0 0 var(--border) 0;--tab-radius-ss:var(--tab-radius-limit);--tab-radius-se:var(--tab-radius-limit);--tab-radius-es:0;--tab-radius-ee:0;--tab-paddings:var(--border) var(--tab-p) 0 var(--tab-p);--tab-border-colors:#0000 #0000 var(--tab-border-color) #0000;--tab-corner-width:calc(100% + var(--tab-radius-limit) * 2);--tab-corner-height:var(--tab-radius-limit);--tab-corner-position:top left, top right;border-width:var(--tab-border);padding:var(--tab-paddings);border-color:var(--tab-border-colors);border-start-start-radius:var(--tab-radius-ss);border-start-end-radius:var(--tab-radius-se);border-end-end-radius:var(--tab-radius-ee);border-end-start-radius:var(--tab-radius-es)}.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked)){--tab-border:var(--border) var(--border) 0 var(--border);--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color);--tab-paddings:0 calc(var(--tab-p) - var(--border)) var(--border) calc(var(--tab-p) - var(--border));--tab-inset:auto auto 0 auto;--radius-start:radial-gradient(circle at top left, var(--tab-radius-grad));--radius-end:radial-gradient(circle at top right, var(--tab-radius-grad));background-color:var(--tab-bg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):before{z-index:1;content:"";width:var(--tab-corner-width);height:var(--tab-corner-height);background-position:var(--tab-corner-position);background-image:var(--radius-start), var(--radius-end);background-size:var(--tab-radius-limit) var(--tab-radius-limit);inset:var(--tab-inset);background-repeat:no-repeat;display:block;position:absolute}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{--radius-start:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{transform:rotateY(180deg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{--radius-end:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{transform:rotateY(180deg)}.tabs-lift:has(>.tab-content)>.tab:first-child:not(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color)}.tabs-lift>.tab-content{--tabcontent-margin:calc(-1 * var(--border)) 0 0 0;--tabcontent-radius-ss:0;--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box)}:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:first-child,:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:nth-child(n+3){--tabcontent-radius-ss:var(--radius-box)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row>*{grid-row-start:1}.avatar-offline:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}.avatar-online:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}.steps .step-neutral+.step-neutral:before,.steps .step-neutral:after,.steps .step-neutral>.step-icon{--step-bg:var(--color-neutral);--step-fg:var(--color-neutral-content)}.steps .step-primary+.step-primary:before,.steps .step-primary:after,.steps .step-primary>.step-icon{--step-bg:var(--color-primary);--step-fg:var(--color-primary-content)}.steps .step-secondary+.step-secondary:before,.steps .step-secondary:after,.steps .step-secondary>.step-icon{--step-bg:var(--color-secondary);--step-fg:var(--color-secondary-content)}.steps .step-accent+.step-accent:before,.steps .step-accent:after,.steps .step-accent>.step-icon{--step-bg:var(--color-accent);--step-fg:var(--color-accent-content)}.steps .step-info+.step-info:before,.steps .step-info:after,.steps .step-info>.step-icon{--step-bg:var(--color-info);--step-fg:var(--color-info-content)}.steps .step-success+.step-success:before,.steps .step-success:after,.steps .step-success>.step-icon{--step-bg:var(--color-success);--step-fg:var(--color-success-content)}.steps .step-warning+.step-warning:before,.steps .step-warning:after,.steps .step-warning>.step-icon{--step-bg:var(--color-warning);--step-fg:var(--color-warning-content)}.steps .step-error+.step-error:before,.steps .step-error:after,.steps .step-error>.step-icon{--step-bg:var(--color-error);--step-fg:var(--color-error-content)}.tabs-border>.tab{--tab-border-color:#0000 #0000 var(--tab-border-color) #0000;border-radius:var(--radius-field);position:relative}.tabs-border>.tab:before{content:"";background-color:var(--tab-border-color);border-radius:var(--radius-field);width:80%;height:3px;transition:background-color .2s;position:absolute;bottom:0;left:10%}:is(.tabs-border>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-border>.tab:is(input:checked),.tabs-border>.tab:is(label:has(:checked))):before{--tab-border-color:currentColor;border-top:3px solid}.checkbox:disabled,.radio:disabled{cursor:not-allowed;opacity:.2}.rating.rating-xs :where(:not(.rating-hidden)){width:1rem;height:1rem}.rating.rating-sm :where(:not(.rating-hidden)){width:1.25rem;height:1.25rem}.rating.rating-md :where(:not(.rating-hidden)){width:1.5rem;height:1.5rem}.rating.rating-lg :where(:not(.rating-hidden)){width:1.75rem;height:1.75rem}.rating.rating-xl :where(:not(.rating-hidden)){width:2rem;height:2rem}:where(.navbar){position:relative}.tooltip-bottom>.tooltip-content,.tooltip-bottom[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,-.25rem));inset:var(--tt-off) auto auto 50%}.tooltip-bottom:after{transform:translateX(-50%) translateY(var(--tt-pos,-.25rem)) rotate(180deg);inset:var(--tt-tail) auto auto 50%}.tooltip-left>.tooltip-content,.tooltip-left[data-tip]:before{transform:translateX(calc(var(--tt-pos,.25rem) - .25rem)) translateY(-50%);inset:50% var(--tt-off) auto auto}.tooltip-left:after{transform:translateX(var(--tt-pos,.25rem)) translateY(-50%) rotate(-90deg);inset:50% calc(var(--tt-tail) + 1px) auto auto}.tooltip-right>.tooltip-content,.tooltip-right[data-tip]:before{transform:translateX(calc(var(--tt-pos,-.25rem) + .25rem)) translateY(-50%);inset:50% auto auto var(--tt-off)}.tooltip-right:after{transform:translateX(var(--tt-pos,-.25rem)) translateY(-50%) rotate(90deg);inset:50% auto auto calc(var(--tt-tail) + 1px)}.tooltip-top>.tooltip-content,.tooltip-top[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off) 50%}.tooltip-top:after{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail) 50%}.dropdown-right{--anchor-h:right;--anchor-v:span-bottom}.dropdown-right .dropdown-content{transform-origin:0;inset-inline-start:100%;top:0;bottom:auto}.chat-end{grid-template-columns:1fr auto;place-items:end}.chat-end .chat-header,.chat-end .chat-footer{grid-column-start:1}.chat-end .chat-image{grid-column-start:2}.chat-end .chat-bubble{border-end-end-radius:0;grid-column-start:1}.chat-end .chat-bubble:before{inset-inline-start:100%;transform:rotateY(180deg)}[dir=rtl] :is(.chat-end .chat-bubble):before{transform:rotateY(0)}.chat-start{grid-template-columns:auto 1fr;place-items:start}.chat-start .chat-header,.chat-start .chat-footer{grid-column-start:2}.chat-start .chat-image{grid-column-start:1}.chat-start .chat-bubble{border-end-start-radius:0;grid-column-start:2}.chat-start .chat-bubble:before{inset-inline-start:-.75rem;transform:rotateY(0)}[dir=rtl] :is(.chat-start .chat-bubble):before{transform:rotateY(180deg)}.dropdown-left{--anchor-h:left;--anchor-v:span-bottom}.dropdown-left .dropdown-content{transform-origin:100%;inset-inline-end:100%;top:0;bottom:auto}.dropdown-end{--anchor-h:span-left}.dropdown-end :where(.dropdown-content){inset-inline-end:0;translate:0}[dir=rtl] :is(.dropdown-end :where(.dropdown-content)){translate:0}.dropdown-end.dropdown-left{--anchor-h:left;--anchor-v:span-top}.dropdown-end.dropdown-left .dropdown-content{top:auto;bottom:0}.dropdown-end.dropdown-right{--anchor-h:right;--anchor-v:span-top}.dropdown-end.dropdown-right .dropdown-content{top:auto;bottom:0}.dropdown-bottom{--anchor-v:bottom}.dropdown-bottom .dropdown-content{transform-origin:top;top:100%;bottom:auto}.dropdown-top{--anchor-v:top}.dropdown-top .dropdown-content{transform-origin:bottom;top:auto;bottom:100%}.btn-active{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn-active{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}.btn-active{--btn-shadow:0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0);isolation:isolate}:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4}:is(.stack,.stack.stack-bottom)>:nth-child(2){grid-area:2/2/5/5}:is(.stack,.stack.stack-bottom)>:first-child{grid-area:1/1/4/6}.stack.stack-top>*{grid-area:1/3/4/4}.stack.stack-top>:nth-child(2){grid-area:2/2/5/5}.stack.stack-top>:first-child{grid-area:3/1/6/6}.stack.stack-start>*{grid-area:3/1/4/4}.stack.stack-start>:nth-child(2){grid-area:2/2/5/5}.stack.stack-start>:first-child{grid-area:1/3/6/6}.stack.stack-end>*{grid-area:3/3/4/6}.stack.stack-end>:nth-child(2){grid-area:2/2/5/5}.stack.stack-end>:first-child{grid-area:1/1/6/4}.tabs-box{background-color:var(--color-base-200);--tabs-box-radius:calc(3 * var(--radius-field));border-radius:calc(min(var(--tab-height) / 2, var(--radius-field)) + min(.25rem, var(--tabs-box-radius)));box-shadow:0 -.5px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 .5px oklch(0% 0 0 / calc(var(--depth) * .05)) inset;padding:.25rem}.tabs-box>.tab{border-radius:var(--radius-field);border-style:none}.tabs-box>.tab:focus-visible,.tabs-box>.tab:is(label:has(:checked:focus-visible)){outline-offset:2px}.tabs-box>.tab:focus-visible{z-index:1}.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){background-color:var(--tab-bg,var(--color-base-100));box-shadow:0 1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px 1px -1px var(--color-neutral), 0 1px 6px -4px var(--color-neutral)}@supports (color:color-mix(in lab, red, red)){.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){box-shadow:0 1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px 1px -1px color-mix(in oklab, var(--color-neutral) calc(var(--depth) * 50%), #0000), 0 1px 6px -4px color-mix(in oklab, var(--color-neutral) calc(var(--depth) * 100%), #0000)}}@media (forced-colors:active){.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){border:1px solid}}.tabs-box>.tab-content{height:calc(100% - var(--tab-height) + var(--border) - .5rem);border-radius:calc(min(var(--tab-height) / 2, var(--radius-field)) + min(.25rem, var(--tabs-box-radius)) - var(--border));margin-top:.25rem}.timeline-horizontal{flex-direction:row}.timeline-horizontal>li{align-items:center}.timeline-horizontal>li>hr{width:100%;height:.25rem}.timeline-horizontal>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline-horizontal>li>hr:last-child{grid-area:2/3/auto/none}.timeline-horizontal .timeline-start{grid-area:1/1/2/4;place-self:flex-end center}.timeline-horizontal .timeline-end{grid-area:3/1/4/4;place-self:flex-start center}.timeline-horizontal:has(.timeline-middle)>li>hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline-horizontal:has(.timeline-middle)>li>hr:last-child,.timeline-horizontal:not(:has(.timeline-middle)) :first-child>hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline-horizontal:not(:has(.timeline-middle)) :last-child>hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline-vertical{flex-direction:column}.timeline-vertical>li{--timeline-row-start:minmax(0, 1fr);--timeline-row-end:minmax(0, 1fr);justify-items:center}.timeline-vertical>li>hr{width:.25rem;height:100%}.timeline-vertical>li>hr:first-child{grid-row-start:1;grid-column-start:2}.timeline-vertical>li>hr:last-child{grid-area:3/2/none}.timeline-vertical .timeline-start{grid-area:1/1/4/2;place-self:center flex-end}.timeline-vertical .timeline-end{grid-area:1/3/4/4;place-self:center flex-start}.timeline-vertical:has(.timeline-middle)>li>hr:first-child{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:var(--radius-selector);border-bottom-left-radius:var(--radius-selector)}.timeline-vertical:has(.timeline-middle)>li>hr:last-child,.timeline-vertical:not(:has(.timeline-middle)) :first-child>hr:last-child{border-top-left-radius:var(--radius-selector);border-top-right-radius:var(--radius-selector);border-bottom-right-radius:0;border-bottom-left-radius:0}.timeline-vertical:not(:has(.timeline-middle)) :last-child>hr:first-child{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:var(--radius-selector);border-bottom-left-radius:var(--radius-selector)}.timeline-vertical.timeline-snap-icon>li{--timeline-col-start:minmax(0, 1fr);--timeline-row-start:.5rem}.timeline-compact{--timeline-row-start:0}.timeline-compact .timeline-start{grid-area:3/1/4/4;place-self:flex-start center}.timeline-compact li:has(.timeline-start) .timeline-end{grid-row-start:auto;grid-column-start:none}.timeline-compact.timeline-vertical>li{--timeline-col-start:0}.timeline-compact.timeline-vertical .timeline-start{grid-area:1/3/4/4;place-self:center flex-start}.timeline-compact.timeline-vertical li:has(.timeline-start) .timeline-end{grid-row-start:none;grid-column-start:auto}.drawer-end{grid-auto-columns:auto max-content}.drawer-end>.drawer-toggle~.drawer-content{grid-column-start:1}.drawer-end>.drawer-toggle~.drawer-side{grid-column-start:2;justify-items:end}.drawer-end>.drawer-toggle~.drawer-side>:not(.drawer-overlay){translate:100%}[dir=rtl] :is(.drawer-end>.drawer-toggle~.drawer-side>:not(.drawer-overlay)){translate:-100%}.drawer-end>.drawer-toggle:checked~.drawer-side>:not(.drawer-overlay){translate:0%}.input-lg{--size:calc(var(--size-field,.25rem) * 12);font-size:max(var(--font-size,1.125rem), 1.125rem)}.input-lg[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input-md{--size:calc(var(--size-field,.25rem) * 10);font-size:max(var(--font-size,.875rem), .875rem)}.input-md[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input-sm{--size:calc(var(--size-field,.25rem) * 8);font-size:max(var(--font-size,.75rem), .75rem)}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.input-xs{--size:calc(var(--size-field,.25rem) * 6);font-size:max(var(--font-size,.6875rem), .6875rem)}.input-xs[type=number]::-webkit-inner-spin-button{margin-block:-.25rem;margin-inline-end:-.75rem}.avatar-placeholder>div{justify-content:center;align-items:center;display:flex}.modal-bottom{place-items:end}.modal-bottom .modal-box{--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:0;--modal-br:0;width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 100%;scale:1}.modal-middle{place-items:center}.modal-middle .modal-box{--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:91.6667%;max-width:32rem;height:auto;max-height:calc(100vh - 5em);translate:0 2%;scale:.98}.modal-top{place-items:start}.modal-top .modal-box{--modal-tl:0;--modal-tr:0;--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 -100%;scale:1}.divider-horizontal{--divider-m:0 1rem}.divider-horizontal.divider{flex-direction:column;width:1rem;height:auto}.divider-horizontal.divider:before,.divider-horizontal.divider:after{width:.125rem;height:100%}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.btn-wide{width:100%;max-width:16rem}.rating-half.rating-xs :not(.rating-hidden){width:.5rem}.rating-half.rating-sm :not(.rating-hidden){width:.625rem}.rating-half.rating-md :not(.rating-hidden){width:.75rem}.rating-half.rating-lg :not(.rating-hidden){width:.875rem}.rating-half.rating-xl :not(.rating-hidden){width:1rem}.btn-block{width:100%}.swap-rotate .swap-on,.swap-rotate input:indeterminate~.swap-on{rotate:45deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-on,.swap-rotate.swap-active .swap-on{rotate:0deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-off,.swap-rotate.swap-active .swap-off{rotate:-45deg}.swap-flip{transform-style:preserve-3d;perspective:20rem}.swap-flip .swap-on,.swap-flip .swap-indeterminate,.swap-flip input:indeterminate~.swap-on{backface-visibility:hidden;transform:rotateY(180deg)}.swap-flip input:is(:checked,:indeterminate)~.swap-on,.swap-flip.swap-active .swap-on{transform:rotateY(0)}.swap-flip input:is(:checked,:indeterminate)~.swap-off,.swap-flip.swap-active .swap-off{backface-visibility:hidden;opacity:1;transform:rotateY(-180deg)}.badge-dash{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-style:dashed;border-color:currentColor}.badge-soft{color:var(--badge-color,var(--color-base-content));background-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.badge-soft{background-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 8%, var(--color-base-100))}}.badge-soft{border-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.badge-soft{border-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 10%, var(--color-base-100))}}.badge-soft{background-image:none}.input-ghost{box-shadow:none;background-color:#0000;border-color:#0000}.input-ghost:focus,.input-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.badge-outline{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-color:currentColor}.table-zebra tbody tr:where(:nth-child(2n)),.table-zebra tbody tr:where(:nth-child(2n)) :where(.table-pin-cols tr th){background-color:var(--color-base-200)}@media (hover:hover){:is(.table-zebra tbody tr.row-hover,.table-zebra tbody tr.row-hover:where(:nth-child(2n))):hover{background-color:var(--color-base-300)}}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.mask-circle{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e")}.mask-heart{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='200' height='185' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='200' height='185' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e")}.mask-star{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z' fill-rule='evenodd'/%3e%3c/svg%3e")}.mask-star-2{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z' fill-rule='evenodd'/%3e%3c/svg%3e")}.checkbox-lg{--size:calc(var(--size-selector,.25rem) * 7);padding:.3125rem}.checkbox-md{--size:calc(var(--size-selector,.25rem) * 6);padding:.25rem}.checkbox-sm{--size:calc(var(--size-selector,.25rem) * 5);padding:.1875rem}.checkbox-xs{--size:calc(var(--size-selector,.25rem) * 4);padding:.125rem}.radio-lg{padding:.3125rem}.radio-lg[type=radio]{--size:calc(var(--size-selector,.25rem) * 7)}.radio-md{padding:.25rem}.radio-md[type=radio]{--size:calc(var(--size-selector,.25rem) * 6)}.radio-sm{padding:.1875rem}.radio-sm[type=radio]{--size:calc(var(--size-selector,.25rem) * 5)}.radio-xs{padding:.125rem}.radio-xs[type=radio]{--size:calc(var(--size-selector,.25rem) * 4)}.select-lg{--size:calc(var(--size-field,.25rem) * 12);font-size:1.125rem}.select-lg option{padding-block:.375rem;padding-inline:1rem}.select-md{--size:calc(var(--size-field,.25rem) * 10);font-size:.875rem}.select-md option{padding-block:.375rem;padding-inline:.75rem}.select-sm{--size:calc(var(--size-field,.25rem) * 8);font-size:.75rem}.select-sm option{padding-block:.25rem;padding-inline:.625rem}.select-xs{--size:calc(var(--size-field,.25rem) * 6);font-size:.6875rem}.select-xs option{padding-block:.25rem;padding-inline:.5rem}.table-lg :not(thead,tfoot) tr{font-size:1.125rem}.table-lg :where(th,td){padding-block:1rem;padding-inline:1.25rem}.table-md :not(thead,tfoot) tr{font-size:.875rem}.table-md :where(th,td){padding-block:.75rem;padding-inline:1rem}.table-sm :not(thead,tfoot) tr{font-size:.75rem}.table-sm :where(th,td){padding-block:.5rem;padding-inline:.75rem}.table-xs :not(thead,tfoot) tr{font-size:.6875rem}.table-xs :where(th,td){padding-block:.25rem;padding-inline:.5rem}.badge-lg{--size:calc(var(--size-selector,.25rem) * 7);font-size:1rem}.badge-md{--size:calc(var(--size-selector,.25rem) * 6);font-size:.875rem}.badge-sm{--size:calc(var(--size-selector,.25rem) * 5);font-size:.75rem}.badge-xs{--size:calc(var(--size-selector,.25rem) * 4);font-size:.625rem}.kbd-lg{--size:calc(var(--size-selector,.25rem) * 7);font-size:1rem}.kbd-md{--size:calc(var(--size-selector,.25rem) * 6);font-size:.875rem}.kbd-sm{--size:calc(var(--size-selector,.25rem) * 5);font-size:.75rem}.kbd-xl{--size:calc(var(--size-selector,.25rem) * 8);font-size:1.125rem}.kbd-xs{--size:calc(var(--size-selector,.25rem) * 4);font-size:.625rem}.alert-error{color:var(--color-error-content);--alert-border-color:var(--color-error);--alert-color:var(--color-error)}.alert-info{color:var(--color-info-content);--alert-border-color:var(--color-info);--alert-color:var(--color-info)}.alert-success{color:var(--color-success-content);--alert-border-color:var(--color-success);--alert-color:var(--color-success)}.alert-warning{color:var(--color-warning-content);--alert-border-color:var(--color-warning);--alert-color:var(--color-warning)}.checkbox-accent{color:var(--color-accent-content);--input-color:var(--color-accent)}.checkbox-error{color:var(--color-error-content);--input-color:var(--color-error)}.checkbox-info{color:var(--color-info-content);--input-color:var(--color-info)}.checkbox-primary{color:var(--color-primary-content);--input-color:var(--color-primary)}.checkbox-secondary{color:var(--color-secondary-content);--input-color:var(--color-secondary)}.checkbox-success{color:var(--color-success-content);--input-color:var(--color-success)}.checkbox-warning{color:var(--color-warning-content);--input-color:var(--color-warning)}.range-accent{color:var(--color-accent);--range-thumb:var(--color-accent-content)}.range-error{color:var(--color-error);--range-thumb:var(--color-error-content)}.range-info{color:var(--color-info);--range-thumb:var(--color-info-content)}.range-primary{color:var(--color-primary);--range-thumb:var(--color-primary-content)}.range-secondary{color:var(--color-secondary);--range-thumb:var(--color-secondary-content)}.range-success{color:var(--color-success);--range-thumb:var(--color-success-content)}.range-warning{color:var(--color-warning);--range-thumb:var(--color-warning-content)}.tooltip-accent{--tt-bg:var(--color-accent)}.tooltip-accent>.tooltip-content,.tooltip-accent[data-tip]:before{color:var(--color-accent-content)}.tooltip-error{--tt-bg:var(--color-error)}.tooltip-error>.tooltip-content,.tooltip-error[data-tip]:before{color:var(--color-error-content)}.tooltip-info{--tt-bg:var(--color-info)}.tooltip-info>.tooltip-content,.tooltip-info[data-tip]:before{color:var(--color-info-content)}.tooltip-primary{--tt-bg:var(--color-primary)}.tooltip-primary>.tooltip-content,.tooltip-primary[data-tip]:before{color:var(--color-primary-content)}.tooltip-secondary{--tt-bg:var(--color-secondary)}.tooltip-secondary>.tooltip-content,.tooltip-secondary[data-tip]:before{color:var(--color-secondary-content)}.tooltip-success{--tt-bg:var(--color-success)}.tooltip-success>.tooltip-content,.tooltip-success[data-tip]:before{color:var(--color-success-content)}.tooltip-warning{--tt-bg:var(--color-warning)}.tooltip-warning>.tooltip-content,.tooltip-warning[data-tip]:before{color:var(--color-warning-content)}.progress-accent{color:var(--color-accent)}.progress-error{color:var(--color-error)}.progress-info{color:var(--color-info)}.progress-neutral{color:var(--color-neutral)}.progress-primary{color:var(--color-primary)}.progress-secondary{color:var(--color-secondary)}.progress-success{color:var(--color-success)}.progress-warning{color:var(--color-warning)}.swap-active .swap-off{opacity:0}.swap-active .swap-on{opacity:1}.btn-lg{--fontsize:1.125rem;--btn-p:1.25rem;--size:calc(var(--size-field,.25rem) * 12)}.btn-md{--fontsize:.875rem;--btn-p:1rem;--size:calc(var(--size-field,.25rem) * 10)}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem) * 8)}.btn-xl{--fontsize:1.375rem;--btn-p:1.5rem;--size:calc(var(--size-field,.25rem) * 14)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem) * 6)}.badge-accent{--badge-color:var(--color-accent);--badge-fg:var(--color-accent-content)}.badge-error{--badge-color:var(--color-error);--badge-fg:var(--color-error-content)}.badge-info{--badge-color:var(--color-info);--badge-fg:var(--color-info-content)}.badge-primary{--badge-color:var(--color-primary);--badge-fg:var(--color-primary-content)}.badge-secondary{--badge-color:var(--color-secondary);--badge-fg:var(--color-secondary-content)}.badge-success{--badge-color:var(--color-success);--badge-fg:var(--color-success-content)}.badge-warning{--badge-color:var(--color-warning);--badge-fg:var(--color-warning-content)}.input-accent,.input-accent:focus,.input-accent:focus-within{--input-color:var(--color-accent)}.input-error,.input-error:focus,.input-error:focus-within{--input-color:var(--color-error)}.input-info,.input-info:focus,.input-info:focus-within{--input-color:var(--color-info)}.input-primary,.input-primary:focus,.input-primary:focus-within{--input-color:var(--color-primary)}.input-secondary,.input-secondary:focus,.input-secondary:focus-within{--input-color:var(--color-secondary)}.input-success,.input-success:focus,.input-success:focus-within{--input-color:var(--color-success)}.input-warning,.input-warning:focus,.input-warning:focus-within{--input-color:var(--color-warning)}.radio-accent{--input-color:var(--color-accent)}.radio-error{--input-color:var(--color-error)}.radio-info{--input-color:var(--color-info)}.radio-primary{--input-color:var(--color-primary)}.radio-secondary{--input-color:var(--color-secondary)}.radio-success{--input-color:var(--color-success)}.radio-warning{--input-color:var(--color-warning)}.range-lg{--range-thumb-size:calc(var(--size-selector,.25rem) * 7)}.range-md{--range-thumb-size:calc(var(--size-selector,.25rem) * 6)}.range-sm{--range-thumb-size:calc(var(--size-selector,.25rem) * 5)}.range-xs{--range-thumb-size:calc(var(--size-selector,.25rem) * 4)}.select-accent,.select-accent:focus,.select-accent:focus-within{--input-color:var(--color-accent)}.select-error,.select-error:focus,.select-error:focus-within{--input-color:var(--color-error)}.select-info,.select-info:focus,.select-info:focus-within{--input-color:var(--color-info)}.select-primary,.select-primary:focus,.select-primary:focus-within{--input-color:var(--color-primary)}.select-secondary,.select-secondary:focus,.select-secondary:focus-within{--input-color:var(--color-secondary)}.select-success,.select-success:focus,.select-success:focus-within{--input-color:var(--color-success)}.select-warning,.select-warning:focus,.select-warning:focus-within{--input-color:var(--color-warning)}.toggle-accent:checked,.toggle-accent[aria-checked=true]{--input-color:var(--color-accent)}.toggle-lg[type=checkbox],.toggle-lg:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 7)}.toggle-md[type=checkbox],.toggle-md:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 6)}.toggle-primary:checked,.toggle-primary[aria-checked=true]{--input-color:var(--color-primary)}.toggle-secondary:checked,.toggle-secondary[aria-checked=true]{--input-color:var(--color-secondary)}.toggle-sm[type=checkbox],.toggle-sm:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 5)}.toggle-xs[type=checkbox],.toggle-xs:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 4)}}.prose :where(a.btn:not(.btn-link)):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:none}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse:not(td,tr,colgroup){visibility:revert-layer}.validator:user-invalid~.validator-hint{display:revert-layer}.validator:has(:user-invalid)~.validator-hint{display:revert-layer}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))~.validator-hint{display:revert-layer}.collapse{visibility:collapse}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.top-0{top:calc(var(--spacing) * 0)}.top-0\.5{top:calc(var(--spacing) * .5)}.top-2{top:calc(var(--spacing) * 2)}.top-10{top:calc(var(--spacing) * 10)}.right-0{right:calc(var(--spacing) * 0)}.right-0\.5{right:calc(var(--spacing) * .5)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing) * 2)}.bottom-10{bottom:calc(var(--spacing) * 10)}.left-1\/2{left:50%}.left-1\/4{left:25%}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>:where(:focus,:has(:focus)){z-index:1}@media (hover:hover){.join>:where(.btn:hover,:has(.btn:hover)){isolation:isolate}}.-z-0{z-index:calc(0 * -1)}.z-10{z-index:10}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.my-8{margin-block:calc(var(--spacing) * 8)}.my-16{margin-block:calc(var(--spacing) * 16)}.join-vertical{flex-direction:column}.join-vertical>.join-item:first-child,.join-vertical :first-child:not(:last-child) .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:0;--join-ee:0}.join-vertical>.join-item:last-child,.join-vertical :last-child:not(:first-child) .join-item{--join-ss:0;--join-se:0;--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join-vertical>.join-item:only-child,.join-vertical :only-child .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join-vertical .join-item:where(:not(:first-child)){margin-block-start:calc(var(--border,1px) * -1);margin-inline-start:0}.-mt-10{margin-top:calc(var(--spacing) * -10)}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.ml-1{margin-left:calc(var(--spacing) * 1)}.icon-\[lucide--alert-circle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 8v4m0 4h.01'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--alert-triangle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--calendar\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M8 2v4m8-4v4'/%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M3 10h18'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--check-circle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M21.801 10A10 10 0 1 1 17 3.335'/%3E%3Cpath d='m9 11l3 3L22 4'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--check\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M20 6L9 17l-5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevron-left\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m15 18l-6-6l6-6'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevron-right\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 18l6-6l-6-6'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevrons-left\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m11 17l-5-5l5-5m7 10l-5-5l5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevrons-right\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 17l5-5l-5-5m7 10l5-5l-5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--eye-off\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242'/%3E%3Cpath d='M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--eye\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--hash\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 9h16M4 15h16M10 3L8 21m8-18l-2 18'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--heart\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 9.5a5.5 5.5 0 0 1 9.591-3.676a.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--info\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4m0-4h.01'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--link\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'/%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--lock\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='18' height='11' x='3' y='11' rx='2' ry='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--mail\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7'/%3E%3Crect width='20' height='16' x='2' y='4' rx='2'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--phone\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233a14 14 0 0 0 6.392 6.384'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--search\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='m21 21l-4.34-4.34'/%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--text\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M15 18H3M17 6H3m18 6H3'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--upload\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 3v12m5-7l-5-5l-5 5m14 7v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--x\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M18 6L6 18M6 6l12 12'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.kbd{box-shadow:none}.text-rotate{height:1lh}.alert{border-width:var(--border);border-color:var(--alert-border-color,var(--color-base-200))}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-48{height:calc(var(--spacing) * 48)}.h-96{height:calc(var(--spacing) * 96)}.h-auto{height:auto}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-20{width:calc(var(--spacing) * 20)}.w-48{width:calc(var(--spacing) * 48)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-auto{width:auto}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-\[180px\]{max-width:180px}.max-w-md{max-width:var(--container-md)}.flex-1{flex:1}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-10{--tw-translate-x:calc(var(--spacing) * 10);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * -6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * -6) * calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.\!rounded-lg{border-radius:var(--radius-lg)!important}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-box{border-radius:var(--radius-box);border-radius:var(--radius-box)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}@layer daisyui.l1{.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.btn-dash:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media (hover:none){.btn-dash:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert-soft{background:color-mix(in oklab, var(--alert-color,var(--color-base-content)) 8%, var(--color-base-100))}}.alert-soft{--alert-border-color:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert-soft{--alert-border-color:color-mix(in oklab, var(--alert-color,var(--color-base-content)) 10%, var(--color-base-100))}}.alert-soft{box-shadow:none;background-image:none}.btn-link{--btn-border:#0000;--btn-bg:#0000;--btn-noise:none;--btn-shadow:"";outline-color:currentColor;text-decoration-line:underline}.btn-link:not(.btn-disabled,.btn:disabled,.btn[disabled]){--btn-fg:var(--btn-color,var(--color-primary))}.btn-link:is(.btn-active,:hover,:active:focus,:focus-visible){--btn-border:#0000;--btn-bg:#0000}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)):not(:disabled,[disabled],.btn-disabled){--btn-fg:var(--btn-color,currentColor);outline-color:currentColor}@media (hover:none){.btn-ghost:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color,currentColor);--btn-border:#0000;--btn-noise:none;outline-color:currentColor}}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media (hover:none){.btn-outline:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 8%, var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 10%, var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-noise:none}@media (hover:none){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 8%, var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 10%, var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-noise:none}}}.btn-dash{border-style:dashed}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-base-200\/30{border-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.border-base-200\/30{border-color:color-mix(in oklab, var(--color-base-200) 30%, transparent)}}.border-base-300{border-color:var(--color-base-300)}.border-base-content\/20{border-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.border-base-content\/20{border-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.border-black\/5{border-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.border-black\/5{border-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.border-primary{border-color:var(--color-primary)}.glass{-webkit-backdrop-filter:blur(var(--glass-blur,40px));backdrop-filter:blur(var(--glass-blur,40px));background-color:#0000;background-image:linear-gradient(135deg, oklch(100% 0 0 / var(--glass-opacity,30%)) 0%, oklch(0% 0 0/0) 100%), linear-gradient(var(--glass-reflect-degree,100deg), oklch(100% 0 0 / var(--glass-reflect-opacity,5%)) 25%, oklch(0% 0 0/0) 25%);box-shadow:0 0 0 1px oklch(100% 0 0 / var(--glass-border-opacity,20%)) inset, 0 0 0 2px oklch(0% 0 0/.05);text-shadow:0 1px oklch(0% 0 0 / var(--glass-text-shadow-opacity,5%));border:none}.bg-accent{background-color:var(--color-accent)}.bg-base-100,.bg-base-100\/80{background-color:var(--color-base-100)}@supports (color:color-mix(in lab, red, red)){.bg-base-100\/80{background-color:color-mix(in oklab, var(--color-base-100) 80%, transparent)}}.bg-base-200,.bg-base-200\/30{background-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.bg-base-200\/30{background-color:color-mix(in oklab, var(--color-base-200) 30%, transparent)}}.bg-base-200\/50{background-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.bg-base-200\/50{background-color:color-mix(in oklab, var(--color-base-200) 50%, transparent)}}.bg-base-300{background-color:var(--color-base-300)}.bg-primary,.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.bg-primary\/20{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.from-primary{--tw-gradient-from:var(--color-primary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-secondary{--tw-gradient-via:var(--color-secondary);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-accent{--tw-gradient-to:var(--color-accent);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.mask-circle{--tw-mask-radial-shape:circle}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-6{padding-left:calc(var(--spacing) * 6)}.\!text-center{text-align:center!important}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-accent{color:var(--color-accent)}.text-base-content,.text-base-content\/40{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/40{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}.text-base-content\/50{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/50{color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.text-base-content\/60{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/60{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.text-base-content\/90{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/90{color:color-mix(in oklab, var(--color-base-content) 90%, transparent)}}.text-error{color:var(--color-error)}.text-primary{color:var(--color-primary)}.text-secondary{color:var(--color-secondary)}.text-transparent{color:#0000}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-primary\/20{--tw-shadow-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-primary) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-primary{--tw-ring-color:var(--color-primary)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-2xl{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:z-10:hover{z-index:10}.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-accent\/40:hover{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:border-accent\/40:hover{border-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.hover\:border-base-content\/20:hover{border-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.hover\:border-base-content\/20:hover{border-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.hover\:border-primary\/40:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab, var(--color-primary) 40%, transparent)}}.hover\:border-secondary\/40:hover{border-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-secondary\/40:hover{border-color:color-mix(in oklab, var(--color-secondary) 40%, transparent)}}.hover\:bg-base-300:hover{background-color:var(--color-base-300)}.hover\:text-base-content:hover{color:var(--color-base-content)}}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (min-width:48rem){.md\:h-64{height:calc(var(--spacing) * 64)}.md\:w-64{width:calc(var(--spacing) * 64)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}}@media (min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:join-horizontal{flex-direction:row}.lg\:join-horizontal>.join-item:first-child,.lg\:join-horizontal :first-child:not(:last-child) .join-item{--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.lg\:join-horizontal>.join-item:last-child,.lg\:join-horizontal :last-child:not(:first-child) .join-item{--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.lg\:join-horizontal>.join-item:only-child,.lg\:join-horizontal :only-child .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.lg\:join-horizontal .join-item:where(:not(:first-child)){margin-block-start:0;margin-inline-start:calc(var(--border,1px) * -1)}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}:root{font-size:14px}.input,.label,.select,.textarea{transition:all .3s cubic-bezier(.4,0,.2,1)}:is(.input,.label,.select,.textarea):focus,:is(.input,.label,.select,.textarea):focus-within{box-shadow:0 0 4px;outline:none!important}:is(.input,.label,.select,.textarea):hover:not(:focus){background-color:oklch(from var(--color-base-100) calc(l - .03) c h)}.floating-label span{color:oklch(30% .01 260);font-size:1.1rem;transition:all .2s}.floating-label:focus-within span{color:oklch(25% .02 260);font-size:1.1rem}.floating-label:has(input:not(:placeholder-shown)) span{color:oklch(28% .01 260);font-size:1.1rem}.markdown-section progress.progress{all:revert-layer}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items) * 100%)}to{translate:0 -100%}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes menu{0%{opacity:0}}@keyframes progress{50%{background-position-x:-115%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-3xl:48rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-7xl:4.5rem;--text-7xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-3xl:1.5rem;--drop-shadow-2xl:0 25px 25px #00000026;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab, red, red)){:root{scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) #0000}}@property --radialprogress{syntax:"";inherits:true;initial-value:0%}:root:not(span){overflow:var(--page-overflow)}:root{background:var(--page-scroll-bg,var(--root-bg));--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) var(--root-bg,#0000)}@supports (color:color-mix(in lab, red, red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) color-mix(in srgb, var(--root-bg,#0000), oklch(0% 0 0) calc(var(--page-has-backdrop,0) * 40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset) ; else: unset)}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root,[data-theme]{background:var(--page-scroll-bg,var(--root-bg));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}:where(:root),:root:has(input.theme-controller[value=splight]:checked),[data-theme=splight]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(92% 0 0);--color-base-content:oklch(25% .006 285);--color-primary:oklch(25% .006 285);--color-primary-content:oklch(98% 0 0);--color-secondary:oklch(55% .046 257.417);--color-secondary-content:oklch(98% 0 0);--color-accent:oklch(96% 0 0);--color-accent-content:oklch(25% .006 285);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232);--color-success:oklch(62% .17 163);--color-warning:oklch(82% .18 84);--color-error:oklch(60% .25 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(15% .005 285.823);--color-base-200:oklch(20% .005 285.823);--color-base-300:oklch(30% .005 285.823);--color-base-content:oklch(92% .004 286.32);--color-primary:oklch(98% 0 0);--color-primary-content:oklch(15% 0 0);--color-secondary:oklch(65% .046 257.417);--color-secondary-content:oklch(15% .005 285.823);--color-accent:oklch(25% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(92% .004 286.32);--color-neutral-content:oklch(14% .005 285.823);--color-info:oklch(70% .1 230);--color-success:oklch(65% .15 160);--color-warning:oklch(85% .15 90);--color-error:oklch(55% .2 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=spdark]:checked),[data-theme=spdark]{color-scheme:dark;--color-base-100:oklch(15% .005 285.823);--color-base-200:oklch(20% .005 285.823);--color-base-300:oklch(30% .005 285.823);--color-base-content:oklch(92% .004 286.32);--color-primary:oklch(98% 0 0);--color-primary-content:oklch(15% 0 0);--color-secondary:oklch(65% .046 257.417);--color-secondary-content:oklch(15% .005 285.823);--color-accent:oklch(25% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(92% .004 286.32);--color-neutral-content:oklch(14% .005 285.823);--color-info:oklch(70% .1 230);--color-success:oklch(65% .15 160);--color-warning:oklch(85% .15 90);--color-error:oklch(55% .2 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}@layer components;@layer utilities{@layer daisyui.l1.l2.l3{.diff{webkit-user-select:none;-webkit-user-select:none;user-select:none;direction:ltr;grid-template-rows:1fr 1.8rem 1fr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus-visible),.diff:focus-visible{outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:95cqi;max-width:95cqi}.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-1:focus-visible) .diff-resizer{min-width:5cqi;max-width:5cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:5cqi;max-width:5cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:95cqi;max-width:95cqi}}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:visibility .3s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}:where(.drawer-side){overflow:hidden}.drawer-side{pointer-events:none;visibility:hidden;z-index:10;overscroll-behavior:contain;opacity:0;width:100%;transition:opacity .2s ease-out .1s allow-discrete, visibility .3s ease-out .1s allow-discrete;inset-inline-start:0;background-color:#0000;grid-template-rows:repeat(1,minmax(0,1fr));grid-template-columns:repeat(1,minmax(0,1fr));grid-row-start:1;grid-column-start:1;place-items:flex-start start;height:100dvh;display:grid;position:fixed;top:0}.drawer-side>.drawer-overlay{cursor:pointer;background-color:oklch(0% 0 0/.4);place-self:stretch stretch;position:sticky;top:0}.drawer-side>*{grid-row-start:1;grid-column-start:1}.drawer-side>:not(.drawer-overlay){will-change:transform;transition:translate .3s ease-out,width .2s ease-out;translate:-100%}[dir=rtl] :is(.drawer-side>:not(.drawer-overlay)){translate:100%}.fab{pointer-events:none;z-index:999;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;inset-inline-end:1rem;flex-direction:column-reverse;align-items:flex-end;gap:.5rem;display:flex;position:fixed;bottom:1rem}.fab>*{pointer-events:auto;align-items:center;gap:.5rem;display:flex}.fab>:hover,.fab>:has(:focus-visible){z-index:1}.fab>[tabindex]:first-child{transition-property:opacity,visibility,rotate;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:grid;position:relative}.fab .fab-close,.fab .fab-main-action{inset-inline-end:0;position:absolute;bottom:0}:is(.fab:focus-within:has(.fab-close),.fab:focus-within:has(.fab-main-action))>[tabindex]{opacity:0;rotate:90deg}.fab:focus-within>[tabindex]:first-child{pointer-events:none}.fab:focus-within>:nth-child(n+2){visibility:visible;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.fab>:nth-child(n+2){visibility:hidden;--tw-scale-x:80%;--tw-scale-y:80%;--tw-scale-z:80%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:0;transition-property:opacity,scale,visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.fab>:nth-child(n+2).fab-main-action,.fab>:nth-child(n+2).fab-close{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.fab>:nth-child(3){transition-delay:30ms}.fab>:nth-child(4){transition-delay:60ms}.fab>:nth-child(5){transition-delay:90ms}.fab>:nth-child(6){transition-delay:.12s}.drawer-toggle{appearance:none;opacity:0;width:0;height:0;position:fixed}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:currentColor oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4))}@supports (color:color-mix(in lab, red, red)){:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4))}}:where(:root:has(.drawer-toggle:checked)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}.tooltip{--tt-bg:var(--color-neutral);--tt-off:calc(100% + .5rem);--tt-tail:calc(100% + 1px + .25rem);display:inline-block;position:relative}.tooltip>.tooltip-content,.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:2;--tw-content:attr(data-tip);content:var(--tw-content);width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);display:block;position:absolute}@media (prefers-reduced-motion:no-preference){.tooltip>.tooltip-content,.tooltip[data-tip]:before,.tooltip:after{transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms}}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem}@media (prefers-reduced-motion:no-preference){:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media (hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:.75rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));--tab-radius-limit:min(var(--radius-field), var(--tab-radius-min));--tab-radius-grad:#0000 calc(69% - var(--border)), var(--tab-border-color) calc(69% - var(--border) + .25px), var(--tab-border-color) 69%, var(--tab-bg) calc(69% + .25px);order:var(--tab-order);height:var(--tab-height);padding-inline:var(--tab-p);border-color:#0000;font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content{display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0}@media (prefers-reduced-motion:no-preference){.menu details::details-content{transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li).menu-disabled{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.floating-label{display:block;position:relative}.floating-label input{display:block}.floating-label input::placeholder,.floating-label textarea::placeholder{transition:top .1s ease-out,translate .1s ease-out,scale .1s ease-out,opacity .1s ease-out}.floating-label>span{z-index:1;background-color:var(--color-base-100);opacity:0;inset-inline-start:.75rem;top:calc(var(--size-field,.25rem) * 10 / 2);pointer-events:none;border-radius:2px;padding-inline:.25rem;font-size:.875rem;line-height:1;transition:top .1s ease-out,translate .1s ease-out,scale .1s ease-out,opacity .1s ease-out;position:absolute;translate:0 -50%}:is(.floating-label:focus-within,.floating-label:not(:has(input:placeholder-shown,textarea:placeholder-shown))) ::placeholder{opacity:0;pointer-events:auto;top:0;translate:-12.5% calc(-50% - .125em);scale:.75}:is(.floating-label:focus-within,.floating-label:not(:has(input:placeholder-shown,textarea:placeholder-shown)))>span{opacity:1;pointer-events:auto;z-index:2;top:0;translate:-12.5% calc(-50% - .125em);scale:.75}.floating-label:has(:disabled,[disabled])>span{opacity:0}.floating-label:has(.input-xs,.select-xs,.textarea-xs) span{top:calc(var(--size-field,.25rem) * 6 / 2);font-size:.6875rem}.floating-label:has(.input-sm,.select-sm,.textarea-sm) span{top:calc(var(--size-field,.25rem) * 8 / 2);font-size:.75rem}.floating-label:has(.input-md,.select-md,.textarea-md) span{top:calc(var(--size-field,.25rem) * 10 / 2);font-size:.875rem}.floating-label:has(.input-lg,.select-lg,.textarea-lg) span{top:calc(var(--size-field,.25rem) * 12 / 2);font-size:1.125rem}.floating-label:has(.input-xl,.select-xl,.textarea-xl) span{top:calc(var(--size-field,.25rem) * 14 / 2);font-size:1.375rem}.dropdown{position-area:var(--anchor-v,bottom) var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(:has(~[class*=dropdown-content])):focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.dropdown>:not(:has(~[class*=dropdown-content])):focus{outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown.dropdown-close .dropdown-content,.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content,.dropdown.dropdown-hover:not(:hover) [tabindex]:first-child:focus:not(:focus-visible)~.dropdown-content{transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover],.dropdown .dropdown-content{z-index:999}@media (prefers-reduced-motion:no-preference){.dropdown[popover],.dropdown .dropdown-content{transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:.95}}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}.dropdown:is(details) summary::-webkit-details-marker{display:none}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed}@supports not (position-area:bottom){.dropdown[popover]{margin:auto}.dropdown[popover].dropdown-close{transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover].dropdown-open:not(:popover-open){transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover]::backdrop{background-color:oklab(0% none none/.3)}}:is(.dropdown[popover].dropdown-close,.dropdown[popover]:not(.dropdown-open,:popover-open)){transform-origin:top;opacity:0;display:none;scale:.95}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0 / calc(var(--depth) * .15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0 / calc(var(--depth) * 6%)) inset, var(--btn-shadow);--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab, red, red)){.btn{--btn-border:color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000)}}.btn{--btn-noise:var(--fx-noise)}@media (hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio])[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem) * 6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.collapse{border-radius:var(--radius-box,1rem);isolation:isolate;grid-template-rows:max-content 0fr;grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:hidden}@media (prefers-reduced-motion:no-preference){.collapse{transition:grid-template-rows .2s}}.collapse>input:is([type=checkbox],[type=radio]){appearance:none;opacity:0;z-index:1;grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close)),.collapse:not(.collapse-close):has(>input:is([type=checkbox],[type=radio]):checked){grid-template-rows:max-content 1fr}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){content-visibility:visible;min-height:fit-content}@supports not (content-visibility:visible){.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){visibility:visible}}.collapse:focus-visible,.collapse:has(>input:is([type=checkbox],[type=radio]):focus-visible),.collapse:has(summary:focus-visible){outline-color:var(--color-base-content);outline-offset:2px;outline-width:2px;outline-style:solid}.collapse:not(.collapse-close)>input[type=checkbox],.collapse:not(.collapse-close)>input[type=radio]:not(:checked),.collapse:not(.collapse-close)>.collapse-title{cursor:pointer}:is(.collapse[tabindex]:focus:not(.collapse-close,.collapse[open]),.collapse[tabindex]:focus-within:not(.collapse-close,.collapse[open]))>.collapse-title{cursor:unset}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>:where(.collapse-content),.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){padding-bottom:1rem}.collapse:is(details){width:100%}@media (prefers-reduced-motion:no-preference){.collapse:is(details)::details-content{transition:content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out, height .2s;interpolate-size:allow-keywords;height:0}.collapse:is(details):where([open])::details-content{height:auto}}.collapse:is(details) summary{display:block;position:relative}.collapse:is(details) summary::-webkit-details-marker{display:none}.collapse:is(details)>.collapse-content{content-visibility:visible}.collapse:is(details) summary{outline:none}.collapse-content{content-visibility:hidden;min-height:0;cursor:unset;grid-row-start:2;grid-column-start:1;padding-left:1rem;padding-right:1rem}@supports not (content-visibility:hidden){.collapse-content{visibility:hidden}}@media (prefers-reduced-motion:no-preference){.collapse-content{transition:content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out}}.validator-hint{visibility:hidden;margin-top:.5rem;font-size:.75rem}.validator:user-valid{--input-color:var(--color-success)}.validator:user-valid:focus{--input-color:var(--color-success)}.validator:user-valid:checked{--input-color:var(--color-success)}.validator:user-valid[aria-checked=true]{--input-color:var(--color-success)}.validator:user-valid:focus-within{--input-color:var(--color-success)}.validator:has(:user-valid){--input-color:var(--color-success)}.validator:has(:user-valid):focus{--input-color:var(--color-success)}.validator:has(:user-valid):checked{--input-color:var(--color-success)}.validator:has(:user-valid)[aria-checked=true]{--input-color:var(--color-success)}.validator:has(:user-valid):focus-within{--input-color:var(--color-success)}.validator:user-invalid{--input-color:var(--color-error)}.validator:user-invalid:focus{--input-color:var(--color-error)}.validator:user-invalid:checked{--input-color:var(--color-error)}.validator:user-invalid[aria-checked=true]{--input-color:var(--color-error)}.validator:user-invalid:focus-within{--input-color:var(--color-error)}.validator:user-invalid~.validator-hint{visibility:visible;color:var(--color-error)}.validator:has(:user-invalid){--input-color:var(--color-error)}.validator:has(:user-invalid):focus{--input-color:var(--color-error)}.validator:has(:user-invalid):checked{--input-color:var(--color-error)}.validator:has(:user-invalid)[aria-checked=true]{--input-color:var(--color-error)}.validator:has(:user-invalid):focus-within{--input-color:var(--color-error)}.validator:has(:user-invalid)~.validator-hint{visibility:visible;color:var(--color-error)}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))),:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus,:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):checked,:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))[aria-checked=true],:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus-within{--input-color:var(--color-error)}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))~.validator-hint{visibility:visible;color:var(--color-error)}.radial-progress{height:var(--size);width:var(--size);vertical-align:middle;box-sizing:content-box;--value:0;--size:5rem;--thickness:calc(var(--size) / 10);--radialprogress:calc(var(--value) * 1%);background-color:#0000;border-radius:3.40282e38px;place-content:center;transition:--radialprogress .3s linear;display:inline-grid;position:relative}.radial-progress:before{content:"";background:radial-gradient(farthest-side, currentColor 98%, #0000) top/var(--thickness) var(--thickness) no-repeat, conic-gradient(currentColor var(--radialprogress), #0000 0);webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));border-radius:3.40282e38px;position:absolute;inset:0}.radial-progress:after{content:"";inset:calc(50% - var(--thickness) / 2);transform:rotate(calc(var(--value) * 3.6deg - 90deg)) translate(calc(var(--size) / 2 - 50%));background-color:currentColor;border-radius:3.40282e38px;transition:transform .3s linear;position:absolute}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0, auto) 1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab, red, red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent)}}.toast{translate:var(--toast-x,0) var(--toast-y,0);inset-inline:auto 1rem;background-color:#0000;flex-direction:column;gap:.5rem;width:max-content;max-width:calc(100vw - 2rem);display:flex;position:fixed;top:auto;bottom:1rem}@media (prefers-reduced-motion:no-preference){.toast>*{animation:.25s ease-out toast}}.toggle{border:var(--border) solid currentColor;color:var(--input-color);cursor:pointer;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p), var(--radius-selector-max)) + min(var(--border), var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab, red, red)){.toggle{box-shadow:0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab, red, red)){.toggle{--input-color:color-mix(in oklab, var(--color-base-content) 50%, #0000)}}.toggle{--toggle-p:calc(var(--size) * .125);--size:calc(var(--size-selector,.25rem) * 6);width:calc((var(--size) * 2) - (var(--border) + var(--toggle-p)) * 2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:0deg}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:0deg}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);width:100%;height:100%;box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab, red, red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000)}}.toggle:before{background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}@media (forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border) solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab, red, red)){.input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.indicator{width:max-content;display:inline-flex;position:relative}.indicator :where(.indicator-item){z-index:1;white-space:nowrap;top:var(--indicator-t,0);bottom:var(--indicator-b,auto);left:var(--indicator-s,auto);right:var(--indicator-e,0);translate:var(--indicator-x,50%) var(--indicator-y,-50%);position:absolute}.table{border-collapse:separate;--tw-border-spacing-x:calc(.25rem * 0);--tw-border-spacing-y:calc(.25rem * 0);width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);border-radius:var(--radius-box);text-align:left;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead,tfoot){color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.table :where(thead,tfoot){font-size:.875rem;font-weight:600}.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.steps{counter-reset:step;grid-auto-columns:1fr;grid-auto-flow:column;display:inline-grid;overflow:auto hidden}.steps .step{text-align:center;--step-bg:var(--color-base-300);--step-fg:var(--color-base-content);grid-template-rows:40px 1fr;grid-template-columns:auto;place-items:center;min-width:4rem;display:grid}.steps .step:before{width:100%;height:.5rem;color:var(--step-bg);background-color:var(--step-bg);content:"";border:1px solid;grid-row-start:1;grid-column-start:1;margin-inline-start:-100%;top:0}.steps .step>.step-icon,.steps .step:not(:has(.step-icon)):after{--tw-content:counter(step);content:var(--tw-content);counter-increment:step;z-index:1;color:var(--step-fg);background-color:var(--step-bg);border:1px solid var(--step-bg);border-radius:3.40282e38px;grid-row-start:1;grid-column-start:1;place-self:center;place-items:center;width:2rem;height:2rem;display:grid;position:relative}.steps .step:first-child:before{--tw-content:none;content:var(--tw-content)}.steps .step[data-content]:after{--tw-content:attr(data-content);content:var(--tw-content)}.range{appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem) * 6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:currentColor}@supports (color:color-mix(in lab, red, red)){.range{--range-bg:color-mix(in oklab, currentColor 10%, #0000)}}.range{cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}@media (forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));background-color:var(--range-thumb);height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));position:relative;top:50%;transform:translateY(-50%)}@supports (color:color-mix(in lab, red, red)){.range::-webkit-slider-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));background-color:currentColor;position:relative;top:50%}@supports (color:color-mix(in lab, red, red)){.range::-moz-range-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range:disabled{cursor:not-allowed;opacity:.3}.chat-bubble{border-radius:var(--radius-field);background-color:var(--color-base-300);width:fit-content;color:var(--color-base-content);grid-row-end:3;min-width:2.5rem;max-width:90%;min-height:2rem;padding-block:.5rem;padding-inline:1rem;display:block;position:relative}.chat-bubble:before{background-color:inherit;content:"";width:.75rem;height:.75rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-chat);-webkit-mask-image:var(--mask-chat);mask-image:var(--mask-chat);position:absolute;bottom:0;-webkit-mask-position:0 -1px;mask-position:0 -1px;-webkit-mask-size:.8125rem;mask-size:.8125rem}.select{border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;white-space:nowrap;text-overflow:ellipsis;box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:.75rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.select{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.select{border-color:var(--input-color);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.select{--size:calc(var(--size-field,.25rem) * 10)}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}[dir=rtl] .select::picker(select){translate:.5rem}[dir=rtl] .select select::picker(select){translate:.5rem}.select[multiple]{background-image:none;height:auto;padding-block:.75rem;padding-inline-end:.75rem;overflow:auto}.select select{appearance:none;width:calc(100% + 2.75rem);height:calc(100% - calc(var(--border) * 2));background:inherit;border-radius:inherit;border-style:none;align-items:center;margin-inline:-.75rem -1.75rem;padding-inline:.75rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.select select:focus,.select select:focus-within{outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.select:focus,.select:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.select:focus,.select:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}@supports (appearance:base-select){.select,.select select{appearance:base-select}:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) optgroup{padding-top:.5em}:is(.select,.select select) optgroup option:first-child{margin-top:.5em}:is(.select,.select select) option{border-radius:var(--radius-field);white-space:normal;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{outline-offset:2px;outline:2px solid #0000}}:is(.select,.select select) option:not(:disabled):active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}.timeline{display:flex;position:relative}.timeline>li{grid-template-rows:var(--timeline-row-start,minmax(0, 1fr)) auto var(--timeline-row-end,minmax(0, 1fr));grid-template-columns:var(--timeline-col-start,minmax(0, 1fr)) auto var(--timeline-col-end,minmax(0, 1fr));flex-shrink:0;align-items:center;display:grid;position:relative}.timeline>li>hr{border:none;width:100%}.timeline>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline>li>hr:last-child{grid-area:2/3/auto/none}@media print{.timeline>li>hr{border:.1px solid var(--color-base-300)}}.timeline :where(hr){background-color:var(--color-base-300);height:.25rem}.timeline:has(.timeline-middle hr):first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline:has(.timeline-middle hr):last-child,.timeline:not(:has(.timeline-middle)) :first-child hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline:not(:has(.timeline-middle)) :last-child hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.swap{cursor:pointer;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;place-content:center;display:inline-grid;position:relative}.swap input{appearance:none;border:none}.swap>*{grid-row-start:1;grid-column-start:1}@media (prefers-reduced-motion:no-preference){.swap>*{transition-property:transform,rotate,opacity;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.swap .swap-on,.swap .swap-indeterminate,.swap input:indeterminate~.swap-on,.swap input:is(:checked,:indeterminate)~.swap-off{opacity:0}.swap input:checked~.swap-on,.swap input:indeterminate~.swap-indeterminate{opacity:1;backface-visibility:visible}.collapse-title{grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out;position:relative}.mockup-code{border-radius:var(--radius-box);background-color:var(--color-neutral);color:var(--color-neutral-content);direction:ltr;padding-block:1.25rem;font-size:.875rem;position:relative;overflow:auto hidden}.mockup-code:before{content:"";opacity:.3;border-radius:3.40282e38px;width:.75rem;height:.75rem;margin-bottom:1rem;display:block;box-shadow:1.4em 0,2.8em 0,4.2em 0}.mockup-code pre{padding-right:1.25rem}.mockup-code pre:before{content:"";margin-right:2ch}.mockup-code pre[data-prefix]:before{--tw-content:attr(data-prefix);content:var(--tw-content);text-align:right;opacity:.5;width:2rem;display:inline-block}.avatar{vertical-align:middle;display:inline-flex;position:relative}.avatar>div{aspect-ratio:1;display:block;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.checkbox{border:var(--border) solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox{border:var(--border) solid var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 0 #0000 inset, 0 0 #0000;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:0deg}.radio{cursor:pointer;appearance:none;vertical-align:middle;border:var(--border) solid var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;display:inline-block;position:relative}@supports (color:color-mix(in lab, red, red)){.radio{border:var(--border) solid var(--input-color,color-mix(in srgb, currentColor 20%, #0000))}}.radio{box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);color:var(--input-color,currentColor)}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor}@media (prefers-reduced-motion:no-preference){.radio:checked,.radio[aria-checked=true]{animation:.2s ease-out radio}}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1));background-color:currentColor}@media (forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.rating{vertical-align:middle;display:inline-flex;position:relative}.rating input{appearance:none;border:none}.rating :where(*){background-color:var(--color-base-content);opacity:.2;border-radius:0;width:1.5rem;height:1.5rem}@media (prefers-reduced-motion:no-preference){.rating :where(*){animation:.25s ease-out rating}}.rating :where(*):is(input){cursor:pointer}.rating .rating-hidden{background-color:#0000;width:.5rem}.rating input[type=radio]:checked{background-image:none}.rating :checked,.rating [aria-checked=true],.rating [aria-current=true],.rating :has(~:checked,~[aria-checked=true],~[aria-current=true]){opacity:1}.rating :focus-visible{scale:1.1}@media (prefers-reduced-motion:no-preference){.rating :focus-visible{transition:scale .2s ease-out}}.rating :active:focus{animation:none;scale:1.1}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.drawer{grid-auto-columns:max-content auto;width:100%;display:grid;position:relative}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.progress{appearance:none;border-radius:var(--radius-box);background-color:currentColor;width:100%;height:.5rem;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.progress{background-color:color-mix(in oklab, currentcolor 20%, transparent)}}.progress{color:var(--color-base-content)}.progress:indeterminate{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%}@media (prefers-reduced-motion:no-preference){.progress:indeterminate{animation:5s ease-in-out infinite progress}}@supports ((-moz-appearance:none)){.progress:indeterminate::-moz-progress-bar{background-color:#0000}@media (prefers-reduced-motion:no-preference){.progress:indeterminate::-moz-progress-bar{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%;animation:5s ease-in-out infinite progress}}.progress::-moz-progress-bar{border-radius:var(--radius-box);background-color:currentColor}}@supports ((-webkit-appearance:none)){.progress::-webkit-progress-bar{border-radius:var(--radius-box);background-color:#0000}.progress::-webkit-progress-value{border-radius:var(--radius-box);background-color:currentColor}}.file-input{cursor:pointer;cursor:pointer;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));align-items:center;padding-inline-end:.75rem;font-size:.875rem;line-height:2;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.file-input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.file-input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.file-input::file-selector-button{cursor:pointer;webkit-user-select:none;-webkit-user-select:none;user-select:none;height:calc(100% + var(--border) * 2);margin-inline-end:1rem;margin-block:calc(var(--border) * -1);color:var(--btn-fg);border-width:var(--border);border-style:solid;border-color:var(--btn-border);background-color:var(--btn-bg);background-size:calc(var(--noise) * 100%);background-image:var(--btn-noise);text-shadow:0 .5px oklch(1 0 0 / calc(var(--depth) * .15));box-shadow:0 .5px 0 .5px white inset, var(--btn-shadow);border-start-start-radius:calc(var(--join-ss,var(--radius-field) - var(--border)));border-end-start-radius:calc(var(--join-es,var(--radius-field) - var(--border)));margin-inline-start:calc(var(--border) * -1);padding-inline:1rem;font-size:.875rem;font-weight:600}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{box-shadow:0 .5px 0 .5px color-mix(in oklab, color-mix(in oklab, white 30%, var(--btn-bg)) calc(var(--depth) * 20%), #0000) inset, var(--btn-shadow)}}.file-input::file-selector-button{--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-border:var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-border:color-mix(in oklab, var(--btn-bg), #000 5%)}}.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000)}}.file-input::file-selector-button{--btn-noise:var(--fx-noise)}.file-input:focus{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.file-input:focus{box-shadow:0 1px color-mix(in oklab, var(--input-color) 10%, #0000)}}.file-input:focus{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200)}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){box-shadow:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){color:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.textarea{border:var(--border) solid #0000;appearance:none;border-radius:var(--radius-field);background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);min-height:5rem;font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;flex-shrink:1;padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab, red, red)){.textarea{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.textarea{--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.textarea textarea{appearance:none;background-color:#0000;border:none}.textarea textarea:focus,.textarea textarea:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.textarea textarea:focus,.textarea textarea:focus-within{outline-offset:2px;outline:2px solid #0000}}.textarea:focus,.textarea:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.textarea:focus,.textarea:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.textarea:focus,.textarea:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.textarea:focus,.textarea:focus-within{--font-size:1rem}}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){box-shadow:none}.textarea:has(>textarea[disabled])>textarea[disabled]{cursor:not-allowed}.stack{grid-template-rows:3px 4px 1fr 4px 3px;grid-template-columns:3px 4px 1fr 4px 3px;display:inline-grid}.stack>*{width:100%;height:100%}.stack>:nth-child(n+2){opacity:.7;width:100%}.stack>:nth-child(2){z-index:2;opacity:.9}.stack>:first-child{z-index:3;width:100%}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.tab-content{order:var(--tabcontent-order);--tabcontent-radius-ss:var(--radius-box);--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box);--tabcontent-order:1;width:100%;height:calc(100% - var(--tab-height) + var(--border));margin:var(--tabcontent-margin);border-color:#0000;border-width:var(--border);border-start-start-radius:var(--tabcontent-radius-ss);border-start-end-radius:var(--tabcontent-radius-se);border-end-end-radius:var(--tabcontent-radius-ee);border-end-start-radius:var(--tabcontent-radius-es);display:none}.timeline-end{grid-area:3/1/4/4;place-self:flex-start center;margin:.25rem}.timeline-start{grid-area:1/1/2/4;place-self:flex-end center;margin:.25rem}.stat-figure{grid-row:1/span 3;grid-column-start:2;place-self:center flex-end}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:.95;box-shadow:0 25px 50px -12px oklch(0% 0 0/.25)}.drawer-content{grid-row-start:1;grid-column-start:2;min-width:0}.timeline-middle{grid-row-start:2;grid-column-start:2}.stat-value{white-space:nowrap;grid-column-start:1;font-size:2rem;font-weight:800}.stat-desc{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-desc{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-desc{font-size:.75rem}.stat-title{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-title{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-title{font-size:.75rem}.chat-image{grid-row:span 2/span 2;align-self:flex-end}.chat-footer{grid-row-start:3;gap:.25rem;font-size:.6875rem;display:flex}.chat-header{grid-row-start:1;gap:.25rem;font-size:.6875rem;display:flex}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.divider{--divider-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{--tw-content:"×";content:var(--tw-content)}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.filter\!{flex-wrap:wrap!important;display:flex!important}.filter\! input[type=radio]{width:auto!important}.filter\! input{opacity:1!important;transition:margin .1s,opacity .3s,padding .3s,border-width .1s!important;overflow:hidden!important;scale:1!important}.filter\! input:not(:last-child){margin-inline-end:.25rem!important}.filter\! input.filter-reset{aspect-ratio:1!important}.filter\! input.filter-reset:after{--tw-content:"×"!important;content:var(--tw-content)!important}.filter\!:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter\!:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter\!:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0!important;border-width:0!important;width:0!important;margin-inline:0!important;padding-inline:0!important;scale:0!important}.breadcrumbs{max-width:100%;padding-block:.5rem;overflow-x:auto}.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol{white-space:nowrap;align-items:center;min-height:min-content;display:flex}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li{align-items:center;display:flex}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>*{cursor:pointer;align-items:center;gap:.5rem;display:flex}@media (hover:hover){:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:hover{text-decoration-line:underline}}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus{outline-offset:2px;outline:2px solid #0000}}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus-visible{outline-offset:2px;outline:2px solid}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li+:before{content:"";opacity:.4;background-color:#0000;border-top:1px solid;border-right:1px solid;width:.375rem;height:.375rem;margin-inline:.5rem .75rem;display:block;rotate:45deg}[dir=rtl] :is(:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li)+:before{rotate:-135deg}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.label{color:color-mix(in oklab, currentcolor 60%, transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.label\!{white-space:nowrap!important;color:currentColor!important;align-items:center!important;gap:.375rem!important;display:inline-flex!important}@supports (color:color-mix(in lab, red, red)){.label\!{color:color-mix(in oklab, currentcolor 60%, transparent)!important}}.label\!:has(input){cursor:pointer!important}.label\!:is(.input>*,.select>*){white-space:nowrap!important;height:calc(100% - .5rem)!important;font-size:inherit!important;align-items:center!important;padding-inline:.75rem!important;display:flex!important}.label\!:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid currentColor!important;margin-inline:-.75rem .75rem!important}@supports (color:color-mix(in lab, red, red)){.label\!:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)!important}}.label\!:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid currentColor!important;margin-inline:.75rem -.75rem!important}@supports (color:color-mix(in lab, red, red)){.label\!:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)!important}}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.fieldset-legend{color:var(--color-base-content);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:-.25rem;padding-block:.5rem;font-weight:600;display:flex}.carousel-item{box-sizing:content-box;scroll-snap-align:start;flex:none;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab, red, red)){.status{background-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab, red, red)){.status{color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.status{background-image:radial-gradient(circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * .5)), #0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab, red, red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border) solid var(--badge-color,var(--color-base-200));background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem) * 6);width:fit-content;height:var(--size);padding-inline:calc(var(--size) / 2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.kbd{border-radius:var(--radius-field);background-color:var(--color-base-200);vertical-align:middle;border:var(--border) solid var(--color-base-content);justify-content:center;align-items:center;padding-inline:.5em;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.kbd{border:var(--border) solid color-mix(in srgb, var(--color-base-content) 20%, #0000)}}.kbd{border-bottom:calc(var(--border) + 1px) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.kbd{border-bottom:calc(var(--border) + 1px) solid color-mix(in srgb, var(--color-base-content) 20%, #0000)}}.kbd{--size:calc(var(--size-selector,.25rem) * 6);height:var(--size);min-width:var(--size);font-size:.875rem}.text-rotate{vertical-align:bottom;white-space:nowrap;--duration:var(--tw-duration);transition-property:none;display:inline-block;overflow:hidden}.text-rotate>*{height:calc(var(--items,1) * 100%);justify-items:start;display:grid}.text-rotate>:has(:nth-child(2)){--items:2;animation:rotator var(--duration,10s) linear(0 0% 49%, .5 50% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(3)){--items:3;animation:rotator var(--duration,10s) linear(0 0% 32%, .333333 33% 65%, .666666 66% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(4)){--items:4;animation:rotator var(--duration,10s) linear(0 0% 24%, .25 25% 49%, .5 50% 74%, .75 75% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(5)){--items:5;animation:rotator var(--duration,10s) linear(0 0% 19%, .2 20% 39%, .4 40% 59%, .6 60% 79%, .8 80% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(6)){--items:6;animation:rotator var(--duration,10s) linear(0 0% 15%, .16666 16% 32%, .333333 33% 49%, .5 50% 65%, .666666 66% 82%, .833333 83% 99%, 1 100% 100%) infinite}.text-rotate>*>*{clip-path:inset(.5px 0);align-content:baseline}.text-rotate>*>:first-child{translate:var(--first-item-position)}.text-rotate:hover>*{animation-play-state:paused}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem) * 10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>*{place-items:start;gap:.5rem;display:grid}.footer.footer-center{text-align:center;grid-auto-flow:column dense;place-items:center}.footer.footer-center>*{place-items:center}.stat{grid-template-columns:repeat(1,1fr);column-gap:1rem;width:100%;padding-block:1rem;padding-inline:1.5rem;display:inline-grid}.stat:not(:last-child){border-inline-end:var(--border) dashed currentColor}@supports (color:color-mix(in lab, red, red)){.stat:not(:last-child){border-inline-end:var(--border) dashed color-mix(in oklab, currentColor 10%, #0000)}}.stat:not(:last-child){border-block-end:none}.navbar-end{justify-content:flex-end;align-items:center;width:50%;display:inline-flex}.navbar-start{justify-content:flex-start;align-items:center;width:50%;display:inline-flex}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.navbar-center{flex-shrink:0;align-items:center;display:inline-flex}.carousel{scroll-snap-type:x mandatory;scrollbar-width:none;display:inline-flex;overflow-x:scroll}@media (prefers-reduced-motion:no-preference){.carousel{scroll-behavior:smooth}}.carousel::-webkit-scrollbar{display:none}.alert{--alert-border-color:var(--color-base-200);border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px #000, 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08));border-style:solid;grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab, red, red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px color-mix(in oklab, color-mix(in oklab, #000 20%, var(--alert-color,var(--color-base-200))) calc(var(--depth) * 20%), #0000), 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.fieldset{grid-template-columns:1fr;grid-auto-rows:max-content;gap:.375rem;padding-block:.25rem;font-size:.75rem;display:grid}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e");grid-auto-rows:min-content;column-gap:.75rem;padding-block:.25rem;display:grid}.card-actions{flex-wrap:wrap;align-items:flex-start;gap:.5rem;display:flex}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.avatar-group{display:flex;overflow:hidden}.avatar-group .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}.mask{vertical-align:middle;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.link:focus{outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.timeline-box{border:var(--border) solid;border-radius:var(--radius-box);border-color:var(--color-base-300);background-color:var(--color-base-100);padding-block:.5rem;padding-inline:1rem;font-size:.75rem;box-shadow:0 1px 2px oklch(0% 0 0/.05)}.btn-accent{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-info{--btn-color:var(--color-info);--btn-fg:var(--color-info-content)}.btn-neutral{--btn-color:var(--color-neutral);--btn-fg:var(--color-neutral-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-secondary{--btn-color:var(--color-secondary);--btn-fg:var(--color-secondary-content)}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}}@layer daisyui.l1.l2{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;background-color:oklch(0% 0 0/.4)}:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal) .modal-box{opacity:1;translate:0;scale:1}:root:has(:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}@starting-style{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{opacity:0}}:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto}:where(.drawer-toggle:checked~.drawer-side)>:not(.drawer-overlay){translate:0%}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-offset:2px;outline:2px solid}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off) 50%}.tooltip:after{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail) 50%}.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.btn-disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn-disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn-disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn-disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn-disabled{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}@media (prefers-reduced-motion:no-preference){.collapse[open].collapse-arrow>.collapse-title:after,.collapse.collapse-open.collapse-arrow>.collapse-title:after{transform:translateY(-50%)rotate(225deg)}}.collapse.collapse-open.collapse-plus>.collapse-title:after{--tw-content:"−";content:var(--tw-content)}:is(.collapse[tabindex].collapse-arrow:focus:not(.collapse-close),.collapse.collapse-arrow[tabindex]:focus-within:not(.collapse-close))>.collapse-title:after,.collapse.collapse-arrow:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{transform:translateY(-50%)rotate(225deg)}.collapse[open].collapse-plus>.collapse-title:after,.collapse[tabindex].collapse-plus:focus:not(.collapse-close)>.collapse-title:after,.collapse.collapse-plus:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{--tw-content:"−";content:var(--tw-content)}.tabs-lift{--tabs-height:auto;--tabs-direction:row}.tabs-lift>.tab{--tab-border:0 0 var(--border) 0;--tab-radius-ss:var(--tab-radius-limit);--tab-radius-se:var(--tab-radius-limit);--tab-radius-es:0;--tab-radius-ee:0;--tab-paddings:var(--border) var(--tab-p) 0 var(--tab-p);--tab-border-colors:#0000 #0000 var(--tab-border-color) #0000;--tab-corner-width:calc(100% + var(--tab-radius-limit) * 2);--tab-corner-height:var(--tab-radius-limit);--tab-corner-position:top left, top right;border-width:var(--tab-border);padding:var(--tab-paddings);border-color:var(--tab-border-colors);border-start-start-radius:var(--tab-radius-ss);border-start-end-radius:var(--tab-radius-se);border-end-end-radius:var(--tab-radius-ee);border-end-start-radius:var(--tab-radius-es)}.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked)){--tab-border:var(--border) var(--border) 0 var(--border);--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color);--tab-paddings:0 calc(var(--tab-p) - var(--border)) var(--border) calc(var(--tab-p) - var(--border));--tab-inset:auto auto 0 auto;--radius-start:radial-gradient(circle at top left, var(--tab-radius-grad));--radius-end:radial-gradient(circle at top right, var(--tab-radius-grad));background-color:var(--tab-bg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):before{z-index:1;content:"";width:var(--tab-corner-width);height:var(--tab-corner-height);background-position:var(--tab-corner-position);background-image:var(--radius-start), var(--radius-end);background-size:var(--tab-radius-limit) var(--tab-radius-limit);inset:var(--tab-inset);background-repeat:no-repeat;display:block;position:absolute}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{--radius-start:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{transform:rotateY(180deg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{--radius-end:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{transform:rotateY(180deg)}.tabs-lift:has(>.tab-content)>.tab:first-child:not(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color)}.tabs-lift>.tab-content{--tabcontent-margin:calc(-1 * var(--border)) 0 0 0;--tabcontent-radius-ss:0;--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box)}:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:first-child,:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:nth-child(n+3){--tabcontent-radius-ss:var(--radius-box)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row>*{grid-row-start:1}.avatar-offline:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}.avatar-online:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}.steps .step-neutral+.step-neutral:before,.steps .step-neutral:after,.steps .step-neutral>.step-icon{--step-bg:var(--color-neutral);--step-fg:var(--color-neutral-content)}.steps .step-primary+.step-primary:before,.steps .step-primary:after,.steps .step-primary>.step-icon{--step-bg:var(--color-primary);--step-fg:var(--color-primary-content)}.steps .step-secondary+.step-secondary:before,.steps .step-secondary:after,.steps .step-secondary>.step-icon{--step-bg:var(--color-secondary);--step-fg:var(--color-secondary-content)}.steps .step-accent+.step-accent:before,.steps .step-accent:after,.steps .step-accent>.step-icon{--step-bg:var(--color-accent);--step-fg:var(--color-accent-content)}.steps .step-info+.step-info:before,.steps .step-info:after,.steps .step-info>.step-icon{--step-bg:var(--color-info);--step-fg:var(--color-info-content)}.steps .step-success+.step-success:before,.steps .step-success:after,.steps .step-success>.step-icon{--step-bg:var(--color-success);--step-fg:var(--color-success-content)}.steps .step-warning+.step-warning:before,.steps .step-warning:after,.steps .step-warning>.step-icon{--step-bg:var(--color-warning);--step-fg:var(--color-warning-content)}.steps .step-error+.step-error:before,.steps .step-error:after,.steps .step-error>.step-icon{--step-bg:var(--color-error);--step-fg:var(--color-error-content)}.tabs-border>.tab{--tab-border-color:#0000 #0000 var(--tab-border-color) #0000;border-radius:var(--radius-field);position:relative}.tabs-border>.tab:before{content:"";background-color:var(--tab-border-color);border-radius:var(--radius-field);width:80%;height:3px;transition:background-color .2s;position:absolute;bottom:0;left:10%}:is(.tabs-border>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-border>.tab:is(input:checked),.tabs-border>.tab:is(label:has(:checked))):before{--tab-border-color:currentColor;border-top:3px solid}.checkbox:disabled,.radio:disabled{cursor:not-allowed;opacity:.2}.rating.rating-xs :where(:not(.rating-hidden)){width:1rem;height:1rem}.rating.rating-sm :where(:not(.rating-hidden)){width:1.25rem;height:1.25rem}.rating.rating-md :where(:not(.rating-hidden)){width:1.5rem;height:1.5rem}.rating.rating-lg :where(:not(.rating-hidden)){width:1.75rem;height:1.75rem}.rating.rating-xl :where(:not(.rating-hidden)){width:2rem;height:2rem}:where(.navbar){position:relative}.tooltip-bottom>.tooltip-content,.tooltip-bottom[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,-.25rem));inset:var(--tt-off) auto auto 50%}.tooltip-bottom:after{transform:translateX(-50%) translateY(var(--tt-pos,-.25rem)) rotate(180deg);inset:var(--tt-tail) auto auto 50%}.tooltip-left>.tooltip-content,.tooltip-left[data-tip]:before{transform:translateX(calc(var(--tt-pos,.25rem) - .25rem)) translateY(-50%);inset:50% var(--tt-off) auto auto}.tooltip-left:after{transform:translateX(var(--tt-pos,.25rem)) translateY(-50%) rotate(-90deg);inset:50% calc(var(--tt-tail) + 1px) auto auto}.tooltip-right>.tooltip-content,.tooltip-right[data-tip]:before{transform:translateX(calc(var(--tt-pos,-.25rem) + .25rem)) translateY(-50%);inset:50% auto auto var(--tt-off)}.tooltip-right:after{transform:translateX(var(--tt-pos,-.25rem)) translateY(-50%) rotate(90deg);inset:50% auto auto calc(var(--tt-tail) + 1px)}.tooltip-top>.tooltip-content,.tooltip-top[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off) 50%}.tooltip-top:after{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail) 50%}.dropdown-right{--anchor-h:right;--anchor-v:span-bottom}.dropdown-right .dropdown-content{transform-origin:0;inset-inline-start:100%;top:0;bottom:auto}.chat-end{grid-template-columns:1fr auto;place-items:end}.chat-end .chat-header,.chat-end .chat-footer{grid-column-start:1}.chat-end .chat-image{grid-column-start:2}.chat-end .chat-bubble{border-end-end-radius:0;grid-column-start:1}.chat-end .chat-bubble:before{inset-inline-start:100%;transform:rotateY(180deg)}[dir=rtl] :is(.chat-end .chat-bubble):before{transform:rotateY(0)}.chat-start{grid-template-columns:auto 1fr;place-items:start}.chat-start .chat-header,.chat-start .chat-footer{grid-column-start:2}.chat-start .chat-image{grid-column-start:1}.chat-start .chat-bubble{border-end-start-radius:0;grid-column-start:2}.chat-start .chat-bubble:before{inset-inline-start:-.75rem;transform:rotateY(0)}[dir=rtl] :is(.chat-start .chat-bubble):before{transform:rotateY(180deg)}.dropdown-left{--anchor-h:left;--anchor-v:span-bottom}.dropdown-left .dropdown-content{transform-origin:100%;inset-inline-end:100%;top:0;bottom:auto}.dropdown-end{--anchor-h:span-left}.dropdown-end :where(.dropdown-content){inset-inline-end:0;translate:0}[dir=rtl] :is(.dropdown-end :where(.dropdown-content)){translate:0}.dropdown-end.dropdown-left{--anchor-h:left;--anchor-v:span-top}.dropdown-end.dropdown-left .dropdown-content{top:auto;bottom:0}.dropdown-end.dropdown-right{--anchor-h:right;--anchor-v:span-top}.dropdown-end.dropdown-right .dropdown-content{top:auto;bottom:0}.dropdown-bottom{--anchor-v:bottom}.dropdown-bottom .dropdown-content{transform-origin:top;top:100%;bottom:auto}.dropdown-top{--anchor-v:top}.dropdown-top .dropdown-content{transform-origin:bottom;top:auto;bottom:100%}.btn-active{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn-active{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}.btn-active{--btn-shadow:0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0);isolation:isolate}:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4}:is(.stack,.stack.stack-bottom)>:nth-child(2){grid-area:2/2/5/5}:is(.stack,.stack.stack-bottom)>:first-child{grid-area:1/1/4/6}.stack.stack-top>*{grid-area:1/3/4/4}.stack.stack-top>:nth-child(2){grid-area:2/2/5/5}.stack.stack-top>:first-child{grid-area:3/1/6/6}.stack.stack-start>*{grid-area:3/1/4/4}.stack.stack-start>:nth-child(2){grid-area:2/2/5/5}.stack.stack-start>:first-child{grid-area:1/3/6/6}.stack.stack-end>*{grid-area:3/3/4/6}.stack.stack-end>:nth-child(2){grid-area:2/2/5/5}.stack.stack-end>:first-child{grid-area:1/1/6/4}.tabs-box{background-color:var(--color-base-200);--tabs-box-radius:calc(3 * var(--radius-field));border-radius:calc(min(var(--tab-height) / 2, var(--radius-field)) + min(.25rem, var(--tabs-box-radius)));box-shadow:0 -.5px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 .5px oklch(0% 0 0 / calc(var(--depth) * .05)) inset;padding:.25rem}.tabs-box>.tab{border-radius:var(--radius-field);border-style:none}.tabs-box>.tab:focus-visible,.tabs-box>.tab:is(label:has(:checked:focus-visible)){outline-offset:2px}.tabs-box>.tab:focus-visible{z-index:1}.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){background-color:var(--tab-bg,var(--color-base-100));box-shadow:0 1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px 1px -1px var(--color-neutral), 0 1px 6px -4px var(--color-neutral)}@supports (color:color-mix(in lab, red, red)){.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){box-shadow:0 1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px 1px -1px color-mix(in oklab, var(--color-neutral) calc(var(--depth) * 50%), #0000), 0 1px 6px -4px color-mix(in oklab, var(--color-neutral) calc(var(--depth) * 100%), #0000)}}@media (forced-colors:active){.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){border:1px solid}}.tabs-box>.tab-content{height:calc(100% - var(--tab-height) + var(--border) - .5rem);border-radius:calc(min(var(--tab-height) / 2, var(--radius-field)) + min(.25rem, var(--tabs-box-radius)) - var(--border));margin-top:.25rem}.timeline-horizontal{flex-direction:row}.timeline-horizontal>li{align-items:center}.timeline-horizontal>li>hr{width:100%;height:.25rem}.timeline-horizontal>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline-horizontal>li>hr:last-child{grid-area:2/3/auto/none}.timeline-horizontal .timeline-start{grid-area:1/1/2/4;place-self:flex-end center}.timeline-horizontal .timeline-end{grid-area:3/1/4/4;place-self:flex-start center}.timeline-horizontal:has(.timeline-middle)>li>hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline-horizontal:has(.timeline-middle)>li>hr:last-child,.timeline-horizontal:not(:has(.timeline-middle)) :first-child>hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline-horizontal:not(:has(.timeline-middle)) :last-child>hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline-vertical{flex-direction:column}.timeline-vertical>li{--timeline-row-start:minmax(0, 1fr);--timeline-row-end:minmax(0, 1fr);justify-items:center}.timeline-vertical>li>hr{width:.25rem;height:100%}.timeline-vertical>li>hr:first-child{grid-row-start:1;grid-column-start:2}.timeline-vertical>li>hr:last-child{grid-area:3/2/none}.timeline-vertical .timeline-start{grid-area:1/1/4/2;place-self:center flex-end}.timeline-vertical .timeline-end{grid-area:1/3/4/4;place-self:center flex-start}.timeline-vertical:has(.timeline-middle)>li>hr:first-child{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:var(--radius-selector);border-bottom-left-radius:var(--radius-selector)}.timeline-vertical:has(.timeline-middle)>li>hr:last-child,.timeline-vertical:not(:has(.timeline-middle)) :first-child>hr:last-child{border-top-left-radius:var(--radius-selector);border-top-right-radius:var(--radius-selector);border-bottom-right-radius:0;border-bottom-left-radius:0}.timeline-vertical:not(:has(.timeline-middle)) :last-child>hr:first-child{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:var(--radius-selector);border-bottom-left-radius:var(--radius-selector)}.timeline-vertical.timeline-snap-icon>li{--timeline-col-start:minmax(0, 1fr);--timeline-row-start:.5rem}.timeline-compact{--timeline-row-start:0}.timeline-compact .timeline-start{grid-area:3/1/4/4;place-self:flex-start center}.timeline-compact li:has(.timeline-start) .timeline-end{grid-row-start:auto;grid-column-start:none}.timeline-compact.timeline-vertical>li{--timeline-col-start:0}.timeline-compact.timeline-vertical .timeline-start{grid-area:1/3/4/4;place-self:center flex-start}.timeline-compact.timeline-vertical li:has(.timeline-start) .timeline-end{grid-row-start:none;grid-column-start:auto}.drawer-end{grid-auto-columns:auto max-content}.drawer-end>.drawer-toggle~.drawer-content{grid-column-start:1}.drawer-end>.drawer-toggle~.drawer-side{grid-column-start:2;justify-items:end}.drawer-end>.drawer-toggle~.drawer-side>:not(.drawer-overlay){translate:100%}[dir=rtl] :is(.drawer-end>.drawer-toggle~.drawer-side>:not(.drawer-overlay)){translate:-100%}.drawer-end>.drawer-toggle:checked~.drawer-side>:not(.drawer-overlay){translate:0%}.input-lg{--size:calc(var(--size-field,.25rem) * 12);font-size:max(var(--font-size,1.125rem), 1.125rem)}.input-lg[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input-md{--size:calc(var(--size-field,.25rem) * 10);font-size:max(var(--font-size,.875rem), .875rem)}.input-md[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input-sm{--size:calc(var(--size-field,.25rem) * 8);font-size:max(var(--font-size,.75rem), .75rem)}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.input-xs{--size:calc(var(--size-field,.25rem) * 6);font-size:max(var(--font-size,.6875rem), .6875rem)}.input-xs[type=number]::-webkit-inner-spin-button{margin-block:-.25rem;margin-inline-end:-.75rem}.avatar-placeholder>div{justify-content:center;align-items:center;display:flex}.modal-bottom{place-items:end}.modal-bottom .modal-box{--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:0;--modal-br:0;width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 100%;scale:1}.modal-middle{place-items:center}.modal-middle .modal-box{--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:91.6667%;max-width:32rem;height:auto;max-height:calc(100vh - 5em);translate:0 2%;scale:.98}.modal-top{place-items:start}.modal-top .modal-box{--modal-tl:0;--modal-tr:0;--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 -100%;scale:1}.divider-horizontal{--divider-m:0 1rem}.divider-horizontal.divider{flex-direction:column;width:1rem;height:auto}.divider-horizontal.divider:before,.divider-horizontal.divider:after{width:.125rem;height:100%}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.btn-wide{width:100%;max-width:16rem}.rating-half.rating-xs :not(.rating-hidden){width:.5rem}.rating-half.rating-sm :not(.rating-hidden){width:.625rem}.rating-half.rating-md :not(.rating-hidden){width:.75rem}.rating-half.rating-lg :not(.rating-hidden){width:.875rem}.rating-half.rating-xl :not(.rating-hidden){width:1rem}.btn-block{width:100%}.swap-rotate .swap-on,.swap-rotate input:indeterminate~.swap-on{rotate:45deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-on,.swap-rotate.swap-active .swap-on{rotate:0deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-off,.swap-rotate.swap-active .swap-off{rotate:-45deg}.swap-flip{transform-style:preserve-3d;perspective:20rem}.swap-flip .swap-on,.swap-flip .swap-indeterminate,.swap-flip input:indeterminate~.swap-on{backface-visibility:hidden;transform:rotateY(180deg)}.swap-flip input:is(:checked,:indeterminate)~.swap-on,.swap-flip.swap-active .swap-on{transform:rotateY(0)}.swap-flip input:is(:checked,:indeterminate)~.swap-off,.swap-flip.swap-active .swap-off{backface-visibility:hidden;opacity:1;transform:rotateY(-180deg)}.badge-dash{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-style:dashed;border-color:currentColor}.badge-soft{color:var(--badge-color,var(--color-base-content));background-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.badge-soft{background-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 8%, var(--color-base-100))}}.badge-soft{border-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.badge-soft{border-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 10%, var(--color-base-100))}}.badge-soft{background-image:none}.input-ghost{box-shadow:none;background-color:#0000;border-color:#0000}.input-ghost:focus,.input-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.badge-outline{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-color:currentColor}.table-zebra tbody tr:where(:nth-child(2n)),.table-zebra tbody tr:where(:nth-child(2n)) :where(.table-pin-cols tr th){background-color:var(--color-base-200)}@media (hover:hover){:is(.table-zebra tbody tr.row-hover,.table-zebra tbody tr.row-hover:where(:nth-child(2n))):hover{background-color:var(--color-base-300)}}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.mask-circle{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e")}.mask-heart{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='200' height='185' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='200' height='185' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e")}.mask-star{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z' fill-rule='evenodd'/%3e%3c/svg%3e")}.mask-star-2{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z' fill-rule='evenodd'/%3e%3c/svg%3e")}.checkbox-lg{--size:calc(var(--size-selector,.25rem) * 7);padding:.3125rem}.checkbox-md{--size:calc(var(--size-selector,.25rem) * 6);padding:.25rem}.checkbox-sm{--size:calc(var(--size-selector,.25rem) * 5);padding:.1875rem}.checkbox-xs{--size:calc(var(--size-selector,.25rem) * 4);padding:.125rem}.radio-lg{padding:.3125rem}.radio-lg[type=radio]{--size:calc(var(--size-selector,.25rem) * 7)}.radio-md{padding:.25rem}.radio-md[type=radio]{--size:calc(var(--size-selector,.25rem) * 6)}.radio-sm{padding:.1875rem}.radio-sm[type=radio]{--size:calc(var(--size-selector,.25rem) * 5)}.radio-xs{padding:.125rem}.radio-xs[type=radio]{--size:calc(var(--size-selector,.25rem) * 4)}.select-lg{--size:calc(var(--size-field,.25rem) * 12);font-size:1.125rem}.select-lg option{padding-block:.375rem;padding-inline:1rem}.select-md{--size:calc(var(--size-field,.25rem) * 10);font-size:.875rem}.select-md option{padding-block:.375rem;padding-inline:.75rem}.select-sm{--size:calc(var(--size-field,.25rem) * 8);font-size:.75rem}.select-sm option{padding-block:.25rem;padding-inline:.625rem}.select-xs{--size:calc(var(--size-field,.25rem) * 6);font-size:.6875rem}.select-xs option{padding-block:.25rem;padding-inline:.5rem}.table-lg :not(thead,tfoot) tr{font-size:1.125rem}.table-lg :where(th,td){padding-block:1rem;padding-inline:1.25rem}.table-md :not(thead,tfoot) tr{font-size:.875rem}.table-md :where(th,td){padding-block:.75rem;padding-inline:1rem}.table-sm :not(thead,tfoot) tr{font-size:.75rem}.table-sm :where(th,td){padding-block:.5rem;padding-inline:.75rem}.table-xs :not(thead,tfoot) tr{font-size:.6875rem}.table-xs :where(th,td){padding-block:.25rem;padding-inline:.5rem}.badge-lg{--size:calc(var(--size-selector,.25rem) * 7);font-size:1rem}.badge-md{--size:calc(var(--size-selector,.25rem) * 6);font-size:.875rem}.badge-sm{--size:calc(var(--size-selector,.25rem) * 5);font-size:.75rem}.badge-xs{--size:calc(var(--size-selector,.25rem) * 4);font-size:.625rem}.kbd-lg{--size:calc(var(--size-selector,.25rem) * 7);font-size:1rem}.kbd-md{--size:calc(var(--size-selector,.25rem) * 6);font-size:.875rem}.kbd-sm{--size:calc(var(--size-selector,.25rem) * 5);font-size:.75rem}.kbd-xl{--size:calc(var(--size-selector,.25rem) * 8);font-size:1.125rem}.kbd-xs{--size:calc(var(--size-selector,.25rem) * 4);font-size:.625rem}.alert-error{color:var(--color-error-content);--alert-border-color:var(--color-error);--alert-color:var(--color-error)}.alert-info{color:var(--color-info-content);--alert-border-color:var(--color-info);--alert-color:var(--color-info)}.alert-success{color:var(--color-success-content);--alert-border-color:var(--color-success);--alert-color:var(--color-success)}.alert-warning{color:var(--color-warning-content);--alert-border-color:var(--color-warning);--alert-color:var(--color-warning)}.checkbox-accent{color:var(--color-accent-content);--input-color:var(--color-accent)}.checkbox-error{color:var(--color-error-content);--input-color:var(--color-error)}.checkbox-info{color:var(--color-info-content);--input-color:var(--color-info)}.checkbox-primary{color:var(--color-primary-content);--input-color:var(--color-primary)}.checkbox-secondary{color:var(--color-secondary-content);--input-color:var(--color-secondary)}.checkbox-success{color:var(--color-success-content);--input-color:var(--color-success)}.checkbox-warning{color:var(--color-warning-content);--input-color:var(--color-warning)}.range-accent{color:var(--color-accent);--range-thumb:var(--color-accent-content)}.range-error{color:var(--color-error);--range-thumb:var(--color-error-content)}.range-info{color:var(--color-info);--range-thumb:var(--color-info-content)}.range-primary{color:var(--color-primary);--range-thumb:var(--color-primary-content)}.range-secondary{color:var(--color-secondary);--range-thumb:var(--color-secondary-content)}.range-success{color:var(--color-success);--range-thumb:var(--color-success-content)}.range-warning{color:var(--color-warning);--range-thumb:var(--color-warning-content)}.tooltip-accent{--tt-bg:var(--color-accent)}.tooltip-accent>.tooltip-content,.tooltip-accent[data-tip]:before{color:var(--color-accent-content)}.tooltip-error{--tt-bg:var(--color-error)}.tooltip-error>.tooltip-content,.tooltip-error[data-tip]:before{color:var(--color-error-content)}.tooltip-info{--tt-bg:var(--color-info)}.tooltip-info>.tooltip-content,.tooltip-info[data-tip]:before{color:var(--color-info-content)}.tooltip-primary{--tt-bg:var(--color-primary)}.tooltip-primary>.tooltip-content,.tooltip-primary[data-tip]:before{color:var(--color-primary-content)}.tooltip-secondary{--tt-bg:var(--color-secondary)}.tooltip-secondary>.tooltip-content,.tooltip-secondary[data-tip]:before{color:var(--color-secondary-content)}.tooltip-success{--tt-bg:var(--color-success)}.tooltip-success>.tooltip-content,.tooltip-success[data-tip]:before{color:var(--color-success-content)}.tooltip-warning{--tt-bg:var(--color-warning)}.tooltip-warning>.tooltip-content,.tooltip-warning[data-tip]:before{color:var(--color-warning-content)}.progress-accent{color:var(--color-accent)}.progress-error{color:var(--color-error)}.progress-info{color:var(--color-info)}.progress-neutral{color:var(--color-neutral)}.progress-primary{color:var(--color-primary)}.progress-secondary{color:var(--color-secondary)}.progress-success{color:var(--color-success)}.progress-warning{color:var(--color-warning)}.swap-active .swap-off{opacity:0}.swap-active .swap-on{opacity:1}.btn-lg{--fontsize:1.125rem;--btn-p:1.25rem;--size:calc(var(--size-field,.25rem) * 12)}.btn-md{--fontsize:.875rem;--btn-p:1rem;--size:calc(var(--size-field,.25rem) * 10)}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem) * 8)}.btn-xl{--fontsize:1.375rem;--btn-p:1.5rem;--size:calc(var(--size-field,.25rem) * 14)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem) * 6)}.badge-accent{--badge-color:var(--color-accent);--badge-fg:var(--color-accent-content)}.badge-error{--badge-color:var(--color-error);--badge-fg:var(--color-error-content)}.badge-info{--badge-color:var(--color-info);--badge-fg:var(--color-info-content)}.badge-primary{--badge-color:var(--color-primary);--badge-fg:var(--color-primary-content)}.badge-secondary{--badge-color:var(--color-secondary);--badge-fg:var(--color-secondary-content)}.badge-success{--badge-color:var(--color-success);--badge-fg:var(--color-success-content)}.badge-warning{--badge-color:var(--color-warning);--badge-fg:var(--color-warning-content)}.input-accent,.input-accent:focus,.input-accent:focus-within{--input-color:var(--color-accent)}.input-error,.input-error:focus,.input-error:focus-within{--input-color:var(--color-error)}.input-info,.input-info:focus,.input-info:focus-within{--input-color:var(--color-info)}.input-primary,.input-primary:focus,.input-primary:focus-within{--input-color:var(--color-primary)}.input-secondary,.input-secondary:focus,.input-secondary:focus-within{--input-color:var(--color-secondary)}.input-success,.input-success:focus,.input-success:focus-within{--input-color:var(--color-success)}.input-warning,.input-warning:focus,.input-warning:focus-within{--input-color:var(--color-warning)}.radio-accent{--input-color:var(--color-accent)}.radio-error{--input-color:var(--color-error)}.radio-info{--input-color:var(--color-info)}.radio-primary{--input-color:var(--color-primary)}.radio-secondary{--input-color:var(--color-secondary)}.radio-success{--input-color:var(--color-success)}.radio-warning{--input-color:var(--color-warning)}.range-lg{--range-thumb-size:calc(var(--size-selector,.25rem) * 7)}.range-md{--range-thumb-size:calc(var(--size-selector,.25rem) * 6)}.range-sm{--range-thumb-size:calc(var(--size-selector,.25rem) * 5)}.range-xs{--range-thumb-size:calc(var(--size-selector,.25rem) * 4)}.select-accent,.select-accent:focus,.select-accent:focus-within{--input-color:var(--color-accent)}.select-error,.select-error:focus,.select-error:focus-within{--input-color:var(--color-error)}.select-info,.select-info:focus,.select-info:focus-within{--input-color:var(--color-info)}.select-primary,.select-primary:focus,.select-primary:focus-within{--input-color:var(--color-primary)}.select-secondary,.select-secondary:focus,.select-secondary:focus-within{--input-color:var(--color-secondary)}.select-success,.select-success:focus,.select-success:focus-within{--input-color:var(--color-success)}.select-warning,.select-warning:focus,.select-warning:focus-within{--input-color:var(--color-warning)}.toggle-accent:checked,.toggle-accent[aria-checked=true]{--input-color:var(--color-accent)}.toggle-lg[type=checkbox],.toggle-lg:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 7)}.toggle-md[type=checkbox],.toggle-md:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 6)}.toggle-primary:checked,.toggle-primary[aria-checked=true]{--input-color:var(--color-primary)}.toggle-secondary:checked,.toggle-secondary[aria-checked=true]{--input-color:var(--color-secondary)}.toggle-sm[type=checkbox],.toggle-sm:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 5)}.toggle-xs[type=checkbox],.toggle-xs:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 4)}}.prose :where(a.btn:not(.btn-link)):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:none}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse:not(td,tr,colgroup){visibility:revert-layer}.validator:user-invalid~.validator-hint{display:revert-layer}.validator:has(:user-invalid)~.validator-hint{display:revert-layer}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))~.validator-hint{display:revert-layer}.\!visible{visibility:visible!important}.collapse{visibility:collapse}.visible{visibility:visible}.visible\!{visibility:visible!important}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing) * 0)}.top-0\.5{top:calc(var(--spacing) * .5)}.top-2{top:calc(var(--spacing) * 2)}.top-10{top:calc(var(--spacing) * 10)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-0\.5{right:calc(var(--spacing) * .5)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing) * 2)}.bottom-10{bottom:calc(var(--spacing) * 10)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-1\/4{left:25%}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>:where(:focus,:has(:focus)){z-index:1}@media (hover:hover){.join>:where(.btn:hover,:has(.btn:hover)){isolation:isolate}}.-z-0{z-index:calc(0 * -1)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-auto{margin-inline:auto}.my-8{margin-block:calc(var(--spacing) * 8)}.my-16{margin-block:calc(var(--spacing) * 16)}.join-vertical{flex-direction:column}.join-vertical>.join-item:first-child,.join-vertical :first-child:not(:last-child) .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:0;--join-ee:0}.join-vertical>.join-item:last-child,.join-vertical :last-child:not(:first-child) .join-item{--join-ss:0;--join-se:0;--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join-vertical>.join-item:only-child,.join-vertical :only-child .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join-vertical .join-item:where(:not(:first-child)){margin-block-start:calc(var(--border,1px) * -1);margin-inline-start:0}.-mt-10{margin-top:calc(var(--spacing) * -10)}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.ml-1{margin-left:calc(var(--spacing) * 1)}.icon-\[lucide--alert-circle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 8v4m0 4h.01'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--alert-triangle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--calendar\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M8 2v4m8-4v4'/%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M3 10h18'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--check-circle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M21.801 10A10 10 0 1 1 17 3.335'/%3E%3Cpath d='m9 11l3 3L22 4'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--check\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M20 6L9 17l-5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevron-left\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m15 18l-6-6l6-6'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevron-right\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 18l6-6l-6-6'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevrons-left\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m11 17l-5-5l5-5m7 10l-5-5l5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevrons-right\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 17l5-5l-5-5m7 10l5-5l-5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--eye-off\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242'/%3E%3Cpath d='M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--eye\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--hash\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 9h16M4 15h16M10 3L8 21m8-18l-2 18'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--heart\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 9.5a5.5 5.5 0 0 1 9.591-3.676a.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--info\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4m0-4h.01'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--link\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'/%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--lock\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='18' height='11' x='3' y='11' rx='2' ry='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--mail\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7'/%3E%3Crect width='20' height='16' x='2' y='4' rx='2'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--paperclip\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m16 6l-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--phone\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233a14 14 0 0 0 6.392 6.384'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--search\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='m21 21l-4.34-4.34'/%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--text\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M15 18H3M17 6H3m18 6H3'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--upload\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 3v12m5-7l-5-5l-5 5m14 7v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--x\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M18 6L6 18M6 6l12 12'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.kbd{box-shadow:none}.text-rotate{height:1lh}.alert{border-width:var(--border);border-color:var(--alert-border-color,var(--color-base-200))}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\!{display:flex!important}.grid{display:grid}.hidden{display:none}.hidden\!{display:none!important}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-48{height:calc(var(--spacing) * 48)}.h-96{height:calc(var(--spacing) * 96)}.h-auto{height:auto}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[22rem\]{min-height:22rem}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-20{width:calc(var(--spacing) * 20)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-\[180px\]{max-width:180px}.max-w-md{max-width:var(--container-md)}.flex-1{flex:1}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-10{--tw-translate-x:calc(var(--spacing) * 10);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * -6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * -6) * calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.\!rounded-lg{border-radius:var(--radius-lg)!important}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-box{border-radius:var(--radius-box);border-radius:var(--radius-box)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}@layer daisyui.l1{.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.btn-dash:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media (hover:none){.btn-dash:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert-soft{background:color-mix(in oklab, var(--alert-color,var(--color-base-content)) 8%, var(--color-base-100))}}.alert-soft{--alert-border-color:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert-soft{--alert-border-color:color-mix(in oklab, var(--alert-color,var(--color-base-content)) 10%, var(--color-base-100))}}.alert-soft{box-shadow:none;background-image:none}.btn-link{--btn-border:#0000;--btn-bg:#0000;--btn-noise:none;--btn-shadow:"";outline-color:currentColor;text-decoration-line:underline}.btn-link:not(.btn-disabled,.btn:disabled,.btn[disabled]){--btn-fg:var(--btn-color,var(--color-primary))}.btn-link:is(.btn-active,:hover,:active:focus,:focus-visible){--btn-border:#0000;--btn-bg:#0000}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)):not(:disabled,[disabled],.btn-disabled){--btn-fg:var(--btn-color,currentColor);outline-color:currentColor}@media (hover:none){.btn-ghost:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color,currentColor);--btn-border:#0000;--btn-noise:none;outline-color:currentColor}}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media (hover:none){.btn-outline:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 8%, var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 10%, var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-noise:none}@media (hover:none){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 8%, var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 10%, var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-noise:none}}}.btn-dash{border-style:dashed}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-base-200\/30{border-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.border-base-200\/30{border-color:color-mix(in oklab, var(--color-base-200) 30%, transparent)}}.border-base-300{border-color:var(--color-base-300)}.border-base-content\/20{border-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.border-base-content\/20{border-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.border-black\/5{border-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.border-black\/5{border-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.border-primary{border-color:var(--color-primary)}.glass{-webkit-backdrop-filter:blur(var(--glass-blur,40px));backdrop-filter:blur(var(--glass-blur,40px));background-color:#0000;background-image:linear-gradient(135deg, oklch(100% 0 0 / var(--glass-opacity,30%)) 0%, oklch(0% 0 0/0) 100%), linear-gradient(var(--glass-reflect-degree,100deg), oklch(100% 0 0 / var(--glass-reflect-opacity,5%)) 25%, oklch(0% 0 0/0) 25%);box-shadow:0 0 0 1px oklch(100% 0 0 / var(--glass-border-opacity,20%)) inset, 0 0 0 2px oklch(0% 0 0/.05);text-shadow:0 1px oklch(0% 0 0 / var(--glass-text-shadow-opacity,5%));border:none}.bg-accent{background-color:var(--color-accent)}.bg-base-100,.bg-base-100\/80{background-color:var(--color-base-100)}@supports (color:color-mix(in lab, red, red)){.bg-base-100\/80{background-color:color-mix(in oklab, var(--color-base-100) 80%, transparent)}}.bg-base-200,.bg-base-200\/30{background-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.bg-base-200\/30{background-color:color-mix(in oklab, var(--color-base-200) 30%, transparent)}}.bg-base-200\/50{background-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.bg-base-200\/50{background-color:color-mix(in oklab, var(--color-base-200) 50%, transparent)}}.bg-base-300{background-color:var(--color-base-300)}.bg-primary,.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.bg-primary\/20{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.bg-transparent{background-color:#0000}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.from-primary{--tw-gradient-from:var(--color-primary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-secondary{--tw-gradient-via:var(--color-secondary);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-accent{--tw-gradient-to:var(--color-accent);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.mask-circle{--tw-mask-radial-shape:circle}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-6{padding-left:calc(var(--spacing) * 6)}.\!text-center{text-align:center!important}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-accent{color:var(--color-accent)}.text-base-content,.text-base-content\/40{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/40{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}.text-base-content\/50{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/50{color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.text-base-content\/60{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/60{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.text-base-content\/90{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/90{color:color-mix(in oklab, var(--color-base-content) 90%, transparent)}}.text-error{color:var(--color-error)}.text-primary{color:var(--color-primary)}.text-secondary{color:var(--color-secondary)}.text-transparent{color:#0000}.uppercase{text-transform:uppercase}.italic{font-style:italic}.italic\!{font-style:italic!important}.underline{text-decoration-line:underline}.underline\!{text-decoration-line:underline!important}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow\!{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-primary\/20{--tw-shadow-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-primary) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-primary{--tw-ring-color:var(--color-primary)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline\!{outline-style:var(--tw-outline-style)!important;outline-width:1px!important}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-2xl{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:z-10:hover{z-index:10}.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-accent\/40:hover{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:border-accent\/40:hover{border-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.hover\:border-base-content\/20:hover{border-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.hover\:border-base-content\/20:hover{border-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.hover\:border-primary\/40:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab, var(--color-primary) 40%, transparent)}}.hover\:border-secondary\/40:hover{border-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-secondary\/40:hover{border-color:color-mix(in oklab, var(--color-secondary) 40%, transparent)}}.hover\:bg-base-300:hover{background-color:var(--color-base-300)}.hover\:text-base-content:hover{color:var(--color-base-content)}}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (min-width:48rem){.md\:h-64{height:calc(var(--spacing) * 64)}.md\:w-64{width:calc(var(--spacing) * 64)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}}@media (min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:join-horizontal{flex-direction:row}.lg\:join-horizontal>.join-item:first-child,.lg\:join-horizontal :first-child:not(:last-child) .join-item{--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.lg\:join-horizontal>.join-item:last-child,.lg\:join-horizontal :last-child:not(:first-child) .join-item{--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.lg\:join-horizontal>.join-item:only-child,.lg\:join-horizontal :only-child .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.lg\:join-horizontal .join-item:where(:not(:first-child)){margin-block-start:0;margin-inline-start:calc(var(--border,1px) * -1)}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (hover:hover){.\[\&_\.resizable-img-container\]\:hover\:border-primary .resizable-img-container:hover{border-color:var(--color-primary)}}.\[\&_blockquote\]\:border-l-4 blockquote{border-left-style:var(--tw-border-style);border-left-width:4px}.\[\&_blockquote\]\:border-base-300 blockquote{border-color:var(--color-base-300)}.\[\&_blockquote\]\:pl-4 blockquote{padding-left:calc(var(--spacing) * 4)}.\[\&_blockquote\]\:italic blockquote{font-style:italic}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.\[\&_ol\]\:pl-8 ol{padding-left:calc(var(--spacing) * 8)}.\[\&_ul\]\:list-disc ul{list-style-type:disc}.\[\&_ul\]\:pl-8 ul{padding-left:calc(var(--spacing) * 8)}.\[\&\>div\]\:m-0>div{margin:calc(var(--spacing) * 0)}.\[\&\>div\]\:min-h-\[1em\]>div{min-height:1em}.\[\&\>p\]\:m-0>p{margin:calc(var(--spacing) * 0)}}:root{font-size:14px}.input,.label,.select,.textarea{transition:all .3s cubic-bezier(.4,0,.2,1)}:is(.input,.label,.select,.textarea):focus,:is(.input,.label,.select,.textarea):focus-within{box-shadow:0 0 4px;outline:none!important}:is(.input,.label,.select,.textarea):hover:not(:focus){background-color:oklch(from var(--color-base-100) calc(l - .03) c h)}.floating-label span{color:oklch(30% .01 260);font-size:1.1rem;transition:all .2s}.floating-label:focus-within span{color:oklch(25% .02 260);font-size:1.1rem}.floating-label:has(input:not(:placeholder-shown)) span{color:oklch(28% .01 260);font-size:1.1rem}.markdown-section progress.progress{all:revert-layer}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items) * 100%)}to{translate:0 -100%}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes menu{0%{opacity:0}}@keyframes progress{50%{background-position-x:-115%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file diff --git a/docs/sigpro.editor.js b/docs/sigpro.editor.js new file mode 100644 index 0000000..d90671c --- /dev/null +++ b/docs/sigpro.editor.js @@ -0,0 +1 @@ +var{$:u,isF:C}=window.SigPro,S=(x)=>{let{value:s,class:z}=x,l=u(0),g=u(""),v=u(0),h=u(0),c=u(0),w=()=>window.getSelection().rangeCount?window.getSelection().getRangeAt(0):0,o,d,R="\uD83D\uDE00 \uD83D\uDE0A \uD83D\uDE09 \uD83E\uDDD0 \uD83D\uDE2E \uD83E\uDD14 \uD83D\uDE05 \uD83D\uDE02 \uD83D\uDE0D \uD83D\uDE18 \uD83E\uDD70 \uD83D\uDC4D \uD83D\uDC4E \uD83D\uDC4C \uD83E\uDD1D \uD83E\uDD1E \uD83D\uDC4B \uD83D\uDC4F \uD83D\uDE4C \uD83D\uDE4F \uD83D\uDCAA ☝️ \uD83D\uDC47 \uD83D\uDC48 \uD83D\uDC49 \uD83D\uDD95 ✅ ⚠️ \uD83D\uDE80 \uD83D\uDCE2 ✉️ ❤️".split(" "),k=()=>{h(h()+1),o&&v(o.innerText.length)},b=()=>{if(o){let e=o.innerHTML;C(s)?s(e):x.onchange?.(e),k()}},r=(e,i=null)=>{if(o?.focus(),d){let n=window.getSelection();n.removeAllRanges(),n.addRange(d)}document.execCommand(e,0,i),d=0,b()},L=(e,i=null)=>{if(h(),!o||l())return 0;try{if(e=="formatBlock"){let n=window.getSelection().getRangeAt(0).commonAncestorContainer;while(n&&n!==o){if(n.tagName===i)return 1;n=n.parentNode}return 0}return document.queryCommandState(e)}catch(n){return 0}},T=(e)=>{if(e){let i=new FileReader;i.onload=(n)=>{let f=e.type.startsWith("image/"),m=n.target.result;r("insertHTML",f?div({style:"display:inline-block;resize:both;overflow:hidden;vertical-align:bottom;width:200px;border:1px dashed #ccc;padding:2px;cursor:pointer",class:"resizable-img-container"},[img({src:m,style:"width:100%;height:100%;object-fit:contain;pointer-events:none"})]):a({href:m,download:e.name,contenteditable:"false",style:"display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border:1px solid #ccc;border-radius:4px;background:#f9f9f9;text-decoration:none;color:#333;font-size:12px;margin:2px;cursor:pointer"},[span({class:"icon-[lucide--paperclip] w-3 h-3"}),e.name]))},i.readAsDataURL(e)}},t=(e,i,n)=>button({type:"button",class:()=>`btn btn-ghost btn-xs ${L(i,n)?"btn-active bg-primary/20":""}`,onclick:()=>typeof i=="function"?i():r(i,n)},[span({class:`icon-[lucide--${e}]`})]);return div({class:`border border-base-300 rounded-box bg-base-100 overflow-hidden flex flex-col ${z||""}`},[div({class:"flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20"},[div({class:"flex flex-wrap gap-1 flex-1"},[t("bold","bold"),t("italic","italic"),t("underline","underline"),input({type:"color",class:"w-5 h-5 p-0 bg-transparent cursor-pointer",oninput:(e)=>r("foreColor",e.target.value)}),span({class:"w-px h-5 bg-base-300 mx-1"}),t("align-left","justifyLeft"),t("align-center","justifyCenter"),t("align-right","justifyRight"),span({class:"w-px h-5 bg-base-300 mx-1"}),t("list","insertUnorderedList"),t("list-ordered","insertOrderedList"),t("indent-decrease","outdent"),t("indent-increase","indent"),t("quote",()=>r("formatBlock",L("formatBlock","BLOCKQUOTE")?"P":"BLOCKQUOTE"),"BLOCKQUOTE"),span({class:"w-px h-5 bg-base-300 mx-1"}),t("link",()=>{let e=prompt("URL:");e&&r("createLink",e)}),t("paperclip",()=>{let e=document.createElement("input");e.type="file",e.onchange=(i)=>T(i.target.files[0]),e.click()}),div({class:"relative"},[t("smile",()=>{d=w(),c(!c())}),div({class:"absolute top-full left-0 mt-1 p-2 bg-base-100 border shadow-xl rounded-box w-52 z-50 flex flex-wrap gap-1",style:()=>c()?"":"display:none"},R.map((e)=>span({class:"cursor-pointer p-1 text-lg",onclick:()=>{r("insertText",e),c(0)}},e)))]),t("undo-2","undo"),t("redo-2","redo")]),t("code-2",()=>{if(!l())g(o?.innerHTML||"");else if(o)o.innerHTML=g(),b();l(!l())})]),div({class:"relative flex-1 flex flex-col",onclick:()=>c(0)},[div({ref:(e)=>{if(e&&!o)o=e,e.innerHTML=(C(s)?s():s)||"",document.execCommand("defaultParagraphSeparator",0,"br"),e.onclick=(i)=>{let n=i.target.closest(".resizable-img-container");if(n){let f=n.querySelector("img");f&&((m)=>{let p=document.createElement("div");p.style="position:fixed;top:0;left:0;width:100%;height:100%;background:#000e;z-index:9999;display:flex;align-items:center;justify-content:center;cursor:zoom-out",p.onclick=()=>p.remove();let y=document.createElement("img");y.src=m,y.style="max-width:95%;max-height:95%",p.appendChild(y),document.body.appendChild(p)})(f.src)}}},style:()=>`min-height:22rem;${l()?"display:none":""}`,class:"p-4 outline-none text-base-content leading-relaxed [&>div]:m-0 [&>p]:m-0 [&>div]:min-h-[1em] [&_.resizable-img-container]:hover:border-primary [&_blockquote]:border-l-4 [&_blockquote]:border-base-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_ul]:list-disc [&_ul]:pl-8 [&_ol]:list-decimal [&_ol]:pl-8",contenteditable:"true",oninput:b,onkeydown:(e)=>e.key==="Tab"&&(e.preventDefault(),r("indent")),onkeyup:()=>{k(),d=w()},onmouseup:b,onpaste:(e)=>{e.preventDefault(),r("insertText",e.clipboardData.getData("text/plain"))},ondrop:(e)=>{e.preventDefault(),T(e.dataTransfer.files[0])},ondragover:(e)=>e.preventDefault()}),textarea({class:"w-full flex-1 min-h-[22rem] p-4 font-mono text-sm bg-base-200 border-0",style:()=>l()?"":"display:none",value:g,oninput:(e)=>{if(g(e.target.value),o)o.innerHTML=e.target.value;x.onchange?.(e.target.value)}})]),div({class:"px-3 py-1 border-t text-[10px] text-right opacity-60"},[span(()=>v())])])};export{S as Editor}; diff --git a/docs/sigpro.grid.js b/docs/sigpro.grid.js new file mode 100644 index 0000000..2f06c7e --- /dev/null +++ b/docs/sigpro.grid.js @@ -0,0 +1,78 @@ +function y(z){if(!z?.length)return;return z[z.length-1]}function Z0(z,J,Q){if(z===J)return!0;if(!z||!J)return z==null&&J==null;let Z=z.length;if(Z!==J.length)return!1;if(Q){for(let $=0;$=0)z.splice(Q,1)}function P2(z,J){let Q=0,Z=0;for(;Q=0;Z--)z.splice(Q,0,J[Z])}var q0=(z)=>{if(z==null||z==="")return null;return z};function P(z){return z!=null&&z!==""}function d(z){return!P(z)}var p0=(z)=>{return z!=null&&typeof z.toString==="function"?z.toString():null},s6=(z,J)=>{let Q=z?JSON.stringify(z):null,Z=J?JSON.stringify(J):null;return Q===Z},m1=(z,J,Q=!1)=>{if(typeof z==="object"&&z!==null&&typeof z.toNumber==="function")z=z.toNumber();if(typeof J==="object"&&J!==null&&typeof J.toNumber==="function")J=J.toNumber();if(z==null)return J==null?0:-1;if(J==null)return 1;if(!Q||typeof z!=="string"){if(z>J)return 1;if(z{let G=Z?()=>Z.wrapIncoming(q):q;if(J)this.dispatchAsync(G);else G()},X=this.getListeners(Q,J,!1);if((X?.size??0)>0){let q=new Set(X);for(let G of q){if(!X?.has(G))continue;$(()=>G(z))}}let Y=this.getGlobalListeners(J);if(Y.size>0){let q=new Set(Y);for(let G of q)$(()=>G(Q,z))}}getGlobalListeners(z){return z?this.globalAsyncListeners:this.globalSyncListeners}dispatchAsync(z){if(this.asyncFunctionsQueue.push(z),!this.scheduled){let J=()=>{window.setTimeout(this.flushAsyncQueue.bind(this),0)},Q=this.frameworkOverrides;if(Q)Q.wrapIncoming(J);else J();this.scheduled=!0}}flushAsyncQueue(){this.scheduled=!1;let z=this.asyncFunctionsQueue.slice();this.asyncFunctionsQueue=[];for(let J of z)J()}},UG=/[&<>"']/g,_G={"&":"&","<":"<",">":">",'"':""","'":"'"};function T2(z){return z?.toString().toString()??null}function L0(z){return T2(z)?.replace(UG,(J)=>_G[J])??null}function GZ(z){return typeof z==="string"&&z.length>1&&z.codePointAt(0)===61}function HG(z){if(!z||z==null)return null;let J=/([a-z])([A-Z])/g,Q=/([A-Z]+)([A-Z])([a-z])/g;return z.replace(J,"$1 $2").replace(Q,"$1 $2$3").replace(/\./g," ").split(" ").map(($)=>$.substring(0,1).toUpperCase()+($.length>1?$.substring(1,$.length):"")).join(" ")}function m0(z){return z.eRootDiv.getRootNode()}function n(z){return m0(z).activeElement}function Y0(z){let{gos:J,eRootDiv:Q}=z,Z=null,$=J.get("getDocument");if($&&P($))Z=$();else if(Q)Z=Q.ownerDocument;if(Z&&P(Z))return Z;return document}function Vz(z){let J=n(z);return J===null||J===Y0(z).body}function UZ(z){return Y0(z).defaultView||window}function Rz(z){let J=null,Q;try{J=Y0(z).fullscreenElement}catch{}finally{if(!J)J=m0(z);let Z=J.querySelector("body");if(Z)Q=Z;else if(J instanceof ShadowRoot)Q=J;else if(J instanceof Document)Q=J?.documentElement;else Q=J}return Q}function WG(z){return Rz(z)?.clientWidth??(window.innerWidth||-1)}function BG(z){return Rz(z)?.clientHeight??(window.innerHeight||-1)}function t0(z,J,Q){if(Q==null||typeof Q==="string"&&Q=="")_Z(z,J);else W4(z,J,Q)}function W4(z,J,Q){z.setAttribute(N8(J),Q.toString())}function _Z(z,J){z.removeAttribute(N8(J))}function N8(z){return`aria-${z}`}function U0(z,J){if(J)z.setAttribute("role",J);else z.removeAttribute("role")}function EG(z){let J=z?.direction;if(J==="asc")return"ascending";else if(J==="desc")return"descending";else if(J==="mixed")return"other";return"none"}function g8(z){return Number.parseInt(z.getAttribute("aria-posinset"),10)}function KG(z){return z.getAttribute("aria-label")}function _0(z,J){t0(z,"label",J)}function sz(z,J){t0(z,"labelledby",J)}function c1(z,J){t0(z,"describedby",J)}function h8(z,J){t0(z,"live",J)}function FG(z,J){t0(z,"atomic",J)}function LG(z,J){t0(z,"relevant",J)}function HZ(z,J){t0(z,"invalid",J)}function l6(z,J){t0(z,"level",J)}function u8(z,J){t0(z,"disabled",J)}function a6(z,J){t0(z,"hidden",J)}function j0(z,J){W4(z,"expanded",J)}function m8(z){_Z(z,"expanded")}function v2(z,J){W4(z,"setsize",J)}function I2(z,J){W4(z,"posinset",J)}function DG(z,J){W4(z,"multiselectable",J)}function MG(z,J){W4(z,"rowcount",J)}function O6(z,J){W4(z,"rowindex",J)}function kG(z,J){W4(z,"colcount",J)}function c8(z,J){W4(z,"colindex",J)}function fG(z,J){W4(z,"colspan",J)}function SG(z,J){W4(z,"sort",J)}function VG(z){_Z(z,"sort")}function o6(z,J){t0(z,"selected",J)}function e6(z,J){W4(z,"checked",J===void 0?"mixed":J)}function RG(z,J){t0(z,"controls",J)}function WZ(z,J){RG(z,J.id),sz(J,z.id)}function K7(z,J){t0(z,"owns",J)}function i8(z,J){t0(z,"haspopup",J===!1?null:J)}function BZ(z,J){return J===void 0?z("ariaIndeterminate","indeterminate"):J===!0?z("ariaChecked","checked"):z("ariaUnchecked","unchecked")}function EZ(z,J,Q){let Z=z.parentElement,$=Z&&Z.firstChild;while($){if(J)$.classList.toggle(J,$===z);if(Q)$.classList.toggle(Q,$!==z);$=$.nextSibling}}var AG="[tabindex], input, select, button, textarea, [href]",p8="[disabled], .ag-disabled:not(.ag-button), .ag-disabled *";function _2(z){if(!z)return!1;if(!z.matches("input, select, button, textarea"))return!1;if(!z.matches(p8))return!1;return B0(z)}function w(z,J,Q={}){let{skipAriaHidden:Z}=Q;if(z.classList.toggle("ag-hidden",!J),!Z)a6(z,!J)}function jG(z,J,Q={}){let{skipAriaHidden:Z}=Q;if(z.classList.toggle("ag-invisible",!J),!Z)a6(z,!J)}function L2(z,J){let Z=J?(X)=>X.setAttribute("disabled",""):(X)=>X.removeAttribute("disabled");Z(z);let $=z.querySelectorAll("input")??[];for(let X of $)Z(X)}function nz(z,J,Q){let Z=0;while(z){if(z.classList.contains(J))return!0;if(z=z.parentElement,typeof Q=="number"){if(++Z>Q)break}else if(z===Q)break}return!1}function i1(z){let{height:J,width:Q,borderTopWidth:Z,borderRightWidth:$,borderBottomWidth:X,borderLeftWidth:Y,paddingTop:q,paddingRight:G,paddingBottom:U,paddingLeft:_,marginTop:H,marginRight:W,marginBottom:B,marginLeft:E,boxSizing:K}=window.getComputedStyle(z),F=Number.parseFloat;return{height:F(J||"0"),width:F(Q||"0"),borderTopWidth:F(Z||"0"),borderRightWidth:F($||"0"),borderBottomWidth:F(X||"0"),borderLeftWidth:F(Y||"0"),paddingTop:F(q||"0"),paddingRight:F(G||"0"),paddingBottom:F(U||"0"),paddingLeft:F(_||"0"),marginTop:F(H||"0"),marginRight:F(W||"0"),marginBottom:F(B||"0"),marginLeft:F(E||"0"),boxSizing:K}}function C2(z){let J=i1(z);if(J.boxSizing==="border-box")return J.height-J.paddingTop-J.paddingBottom-J.borderTopWidth-J.borderBottomWidth;return J.height}function lz(z){let J=i1(z);if(J.boxSizing==="border-box")return J.width-J.paddingLeft-J.paddingRight-J.borderLeftWidth-J.borderRightWidth;return J.width}function n8(z){let{height:J,marginBottom:Q,marginTop:Z}=i1(z);return Math.floor(J+Q+Z)}function P6(z){let{width:J,marginLeft:Q,marginRight:Z}=i1(z);return Math.floor(J+Q+Z)}function d8(z){let J=z.getBoundingClientRect(),{borderTopWidth:Q,borderLeftWidth:Z,borderRightWidth:$,borderBottomWidth:X}=i1(z);return{top:J.top+(Q||0),left:J.left+(Z||0),right:J.right+($||0),bottom:J.bottom+(X||0)}}function T6(z,J){let Q=z.scrollLeft;if(J)Q=Math.abs(Q);return Q}function v6(z,J,Q){if(Q)J*=-1;z.scrollLeft=J}function J0(z){while(z?.firstChild)z.firstChild.remove()}function R0(z){if(z?.parentNode)z.remove()}function r8(z){return!!z.offsetParent}function B0(z){if(z.checkVisibility)return z.checkVisibility({checkVisibilityCSS:!0});return!(!r8(z)||window.getComputedStyle(z).visibility!=="visible")}function KZ(z){let J=document.createElement("div");return J.innerHTML=(z||"").trim(),J.firstChild}function t8(z,J,Q){if(Q?.nextSibling===J)return;if(!z.firstChild)z.appendChild(J);else if(Q)if(Q.nextSibling)z.insertBefore(J,Q.nextSibling);else z.appendChild(J);else if(z.firstChild&&z.firstChild!==J)z.prepend(J)}function s8(z,J){for(let Q=0;Q`-${J.toLocaleLowerCase()}`)}function y2(z,J){if(!J)return;for(let Q of Object.keys(J)){let Z=J[Q];if(!Q?.length||Z==null)continue;let $=OG(Q),X=Z.toString(),Y=X.replace(/\s*!important/g,""),q=Y.length!=X.length?"important":void 0;z.style.setProperty($,Y,q)}}function y1(z){return()=>{let J=z();if(!J)return!0;return l8(J)||PG(J)}}function l8(z){return z.clientWidthX?.disconnect()}function O4(z,J){let Q=UZ(z);if(Q.requestAnimationFrame)Q.requestAnimationFrame(J);else if(Q.webkitRequestAnimationFrame)Q.webkitRequestAnimationFrame(J);else Q.setTimeout(J,0)}var a8="data-ref",oJ;function F7(){return oJ??(oJ=document.createTextNode(" ")),oJ.cloneNode()}function H0(z){let{attrs:J,children:Q,cls:Z,ref:$,role:X,tag:Y}=z,q=document.createElement(Y);if(Z)q.className=Z;if($)q.setAttribute(a8,$);if(X)q.setAttribute("role",X);if(J)for(let G of Object.keys(J))q.setAttribute(G,J[G]);if(Q)if(typeof Q==="string")q.textContent=Q;else{let G=!0;for(let U of Q)if(U)if(typeof U==="string")q.appendChild(document.createTextNode(U)),G=!1;else if(typeof U==="function")q.appendChild(U());else{if(G)q.appendChild(F7()),G=!1;q.append(H0(U)),q.appendChild(F7())}}return q}var vG=["touchstart","touchend","touchmove","touchcancel","scroll"],IG=["wheel"],eJ={},vQ=(()=>{let z={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return(Q)=>{if(typeof eJ[Q]==="boolean")return eJ[Q];let Z=document.createElement(z[Q]||"div");return Q="on"+Q,eJ[Q]=Q in Z}})();function zJ(z,J){if(!J||!z)return!1;return yG(J).indexOf(z)>=0}function CG(z){let J=[],Q=z.target;while(Q)J.push(Q),Q=Q.parentElement;return J}function yG(z){let J=z;if(J.path)return J.path;if(J.composedPath)return J.composedPath();return CG(J)}function bG(z,J,Q){let Z=xG(J),$;if(Z!=null)$={passive:Z};z.addEventListener(J,Q,$)}var xG=(z)=>{let J=vG.includes(z),Q=IG.includes(z);if(J)return!0;if(Q)return!1};function o8(z,J,Q){if(Q===0)return!1;let Z=Math.abs(z.clientX-J.clientX),$=Math.abs(z.clientY-J.clientY);return Math.max(Z,$)<=Q}var j1=(z,J)=>{let Q=z.identifier;for(let Z=0,$=J.length;Z<$;++Z){let X=J[Z];if(X.identifier===Q)return X}return null};function D2(z,J){return z.gos.isElementInThisInstance(J.target)}function JJ(z,J,Q){let $=z.getBoundingClientRect().height,X=WG(Q)-2,Y=BG(Q)-2;if(!z.offsetParent)return;let G=d8(z.offsetParent),{clientY:U,clientX:_}=J,H=U-G.top-$/2,W=_-G.left-10,B=Y0(Q),E=B.defaultView||window,K=E.pageYOffset||B.documentElement.scrollTop,F=E.pageXOffset||B.documentElement.scrollLeft;if(X>0&&W+z.clientWidth>X+F)W=X+F-z.clientWidth;if(W<0)W=0;if(Y>0&&H+z.clientHeight>Y+K)H=Y+K-z.clientHeight;if(H<0)H=0;z.style.left=`${W}px`,z.style.top=`${H}px`}var L6=(z,...J)=>{for(let Q of J){let[Z,$,X,Y]=Q;Z.addEventListener($,X,Y),z.push(Q)}},LZ=(z)=>{if(z){for(let[J,Q,Z,$]of z)J.removeEventListener(Q,Z,$);z.length=0}},f1=(z)=>{if(z.cancelable)z.preventDefault()};function wG(z,J){return J}function e8(z){return z?.getLocaleTextFunc()??wG}function DZ(z,J,Q,Z){let $=J[Q];return z.getLocaleTextFunc()(Q,typeof $==="function"?$(Z):$,Z)}var k0=class{constructor(){this.destroyFunctions=[],this.destroyed=!1,this.__v_skip=!0,this.propertyListenerId=0,this.lastChangeSetIdLookup={},this.isAlive=()=>!this.destroyed}preWireBeans(z){this.beans=z,this.stubContext=z.context,this.eventSvc=z.eventSvc,this.gos=z.gos}destroy(){let{destroyFunctions:z}=this;for(let J=0;Jnull;let Z;if(NG(z))z.__addEventListener(J,Q),Z=()=>{return z.__removeEventListener(J,Q),null};else{let $=gG(z);if(z instanceof HTMLElement)bG(z,J,Q);else if($)z.addListener(J,Q);else z.addEventListener(J,Q);Z=$?()=>{return z.removeListener(J,Q),null}:()=>{return z.removeEventListener(J,Q),null}}return this.destroyFunctions.push(Z),()=>{return Z(),this.destroyFunctions=this.destroyFunctions.filter(($)=>$!==Z),null}}setupPropertyListener(z,J){let{gos:Q}=this;Q.addPropertyEventListener(z,J);let Z=()=>{return Q.removePropertyEventListener(z,J),null};return this.destroyFunctions.push(Z),()=>{return Z(),this.destroyFunctions=this.destroyFunctions.filter(($)=>$!==Z),null}}addManagedPropertyListener(z,J){if(this.destroyed)return()=>null;return this.setupPropertyListener(z,J)}addManagedPropertyListeners(z,J){if(this.destroyed)return;let Q=z.join("-")+this.propertyListenerId++,Z=($)=>{if($.changeSet){if($.changeSet?.id===this.lastChangeSetIdLookup[Q])return;this.lastChangeSetIdLookup[Q]=$.changeSet.id}let X={type:"propertyChanged",changeSet:$.changeSet,source:$.source};J(X)};for(let $ of z)this.setupPropertyListener($,Z)}getLocaleTextFunc(){return e8(this.beans.localeSvc)}addDestroyFunc(z){if(this.isAlive())this.destroyFunctions.push(z);else z()}createOptionalManagedBean(z,J){return z?this.createManagedBean(z,J):void 0}createManagedBean(z,J){let Q=this.createBean(z,J);return this.addDestroyFunc(this.destroyBean.bind(this,z,J)),Q}createBean(z,J,Q){return(J||this.stubContext).createBean(z,Q)}destroyBean(z,J){return(J||this.stubContext).destroyBean(z)}destroyBeans(z,J){return(J||this.stubContext).destroyBeans(z)}};function NG(z){return z.__addEventListener!==void 0}function gG(z){return z.eventServiceType==="global"}var S=class extends k0{},IQ=new Set,QJ=(z,J)=>{if(!IQ.has(J))IQ.add(J),z()};QJ._set=IQ;var hG={pending:!1,funcs:[]},uG={pending:!1,funcs:[]};function CQ(z,J="setTimeout",Q){let Z=J==="raf"?uG:hG;if(Z.funcs.push(z),Z.pending)return;Z.pending=!0;let $=()=>{let X=Z.funcs.slice();Z.funcs.length=0,Z.pending=!1;for(let Y of X)Y()};if(J==="raf")O4(Q,$);else window.setTimeout($,0)}function i0(z,J,Q){let Z;return function(...$){let X=this;return window.clearTimeout(Z),Z=window.setTimeout(function(){if(z.isAlive())J.apply(X,$)},Q),Z}}function L7(z,J){let Q=0;return function(...Z){let $=this,X=Date.now();if(X-Q{if(X!=null)window.clearInterval(X),X=null};z.addDestroyFunc(q);let G=()=>{let U=Date.now()-$>Z;if(J()||U)Q(),Y=!0,q()};if(G(),!Y)X=window.setInterval(G,10)}var mG=new Set(["__proto__","constructor","prototype"]);function cG(z,J){if(z==null)return;if(Array.isArray(z)){for(let Q=0;Q!mG.has(Z)))J(Q,z[Q])}function D0(z,J,Q=!0,Z=!1){if(!P(J))return;cG(J,($,X)=>{let Y=z[$];if(Y===X)return;if(Z){if(Y==null&&X!=null){if(typeof X==="object"&&X.constructor===Object)Y={},z[$]=Y}}if(D7(X)&&D7(Y)&&!Array.isArray(Y))D0(Y,X,Q,Z);else if(Q||X!==void 0)z[$]=X})}function D7(z){return typeof z==="object"&&z!==null}var kZ=class z{static applyGlobalGridOptions(J){if(!z.gridOptions)return{...J};let Q={};if(D0(Q,z.gridOptions,!0,!0),z.mergeStrategy==="deep")D0(Q,J,!0,!0);else Q={...Q,...J};if(z.gridOptions.context)Q.context=z.gridOptions.context;if(J.context){if(z.mergeStrategy==="deep"&&Q.context)D0(J.context,Q.context,!0,!0);Q.context=J.context}return Q}static applyGlobalGridOption(J,Q){if(z.mergeStrategy==="deep"){let Z=iG(J);if(Z&&typeof Z==="object"&&typeof Q==="object")return z.applyGlobalGridOptions({[J]:Q})[J]}return Q}};kZ.gridOptions=void 0;kZ.mergeStrategy="shallow";var fZ=kZ;function iG(z){return fZ.gridOptions?.[z]}var pG={suppressContextMenu:!1,preventDefaultOnContextMenu:!1,allowContextMenuWithControlKey:!1,suppressMenuHide:!0,enableBrowserTooltips:!1,tooltipTrigger:"hover",tooltipShowDelay:2000,tooltipSwitchShowDelay:200,tooltipHideDelay:1e4,noteTrigger:"hover",noteShowDelay:180,noteHideDelay:220,tooltipMouseTrack:!1,tooltipShowMode:"standard",tooltipInteraction:!1,copyHeadersToClipboard:!1,copyGroupHeadersToClipboard:!1,clipboardDelimiter:"\t",suppressCopyRowsToClipboard:!1,suppressCopySingleCellRanges:!1,suppressLastEmptyLineOnPaste:!1,suppressClipboardPaste:!1,suppressClipboardApi:!1,suppressCutToClipboard:!1,maintainColumnOrder:!1,enableStrictPivotColumnOrder:!1,suppressFieldDotNotation:!1,allowDragFromColumnsToolPanel:!1,suppressMovableColumns:!1,suppressColumnMoveAnimation:!1,suppressMoveWhenColumnDragging:!1,suppressDragLeaveHidesColumns:!1,suppressRowGroupHidesColumns:!1,suppressAutoSize:!1,autoSizePadding:20,skipHeaderOnAutoSize:!1,singleClickEdit:!1,suppressClickEdit:!1,readOnlyEdit:!1,stopEditingWhenCellsLoseFocus:!1,enterNavigatesVertically:!1,enterNavigatesVerticallyAfterEdit:!1,enableCellEditingOnBackspace:!1,undoRedoCellEditing:!1,undoRedoCellEditingLimit:10,suppressCsvExport:!1,suppressExcelExport:!1,cacheQuickFilter:!1,includeHiddenColumnsInQuickFilter:!1,excludeChildrenWhenTreeDataFiltering:!1,enableAdvancedFilter:!1,includeHiddenColumnsInAdvancedFilter:!1,enableCharts:!1,masterDetail:!1,keepDetailRows:!1,keepDetailRowsCount:10,detailRowAutoHeight:!1,tabIndex:0,rowBuffer:10,valueCache:!1,valueCacheNeverExpires:!1,enableCellExpressions:!1,suppressTouch:!1,suppressFocusAfterRefresh:!1,suppressBrowserResizeObserver:!1,suppressPropertyNamesCheck:!1,suppressChangeDetection:!1,debug:!1,suppressLoadingOverlay:!1,suppressNoRowsOverlay:!1,pagination:!1,paginationPageSize:100,paginationPageSizeSelector:!0,paginationAutoPageSize:!1,paginateChildRows:!1,suppressPaginationPanel:!1,pivotMode:!1,pivotPanelShow:"never",pivotDefaultExpanded:0,pivotSuppressAutoColumn:!1,suppressExpandablePivotGroups:!1,functionsReadOnly:!1,suppressAggFuncInHeader:!1,alwaysAggregateAtRootLevel:!1,aggregateOnlyChangedColumns:!1,suppressAggFilteredOnly:!1,removePivotHeaderRowWhenSingleValueColumn:!1,animateRows:!0,cellFlashDuration:500,cellFadeDuration:1000,allowShowChangeAfterFilter:!1,domLayout:"normal",ensureDomOrder:!1,enableRtl:!1,suppressColumnVirtualisation:!1,suppressMaxRenderedRowRestriction:!1,suppressRowVirtualisation:!1,rowDragManaged:!1,refreshAfterGroupEdit:!1,rowDragInsertDelay:500,suppressRowDrag:!1,suppressMoveWhenRowDragging:!1,rowDragEntireRow:!1,rowDragMultiRow:!1,embedFullWidthRows:!1,groupDisplayType:"singleColumn",groupDefaultExpanded:0,groupMaintainOrder:!1,groupSelectsChildren:!1,groupSuppressBlankHeader:!1,groupSelectsFiltered:!1,showOpenedGroup:!1,groupRemoveSingleChildren:!1,groupRemoveLowestSingleChildren:!1,groupHideOpenParents:!1,groupHideColumnsUntilExpanded:!1,groupAllowUnbalanced:!1,rowGroupPanelShow:"never",suppressMakeColumnVisibleAfterUnGroup:!1,treeData:!1,rowGroupPanelSuppressSort:!1,suppressGroupRowsSticky:!1,rowModelType:"clientSide",asyncTransactionWaitMillis:50,suppressModelUpdateAfterUpdateTransaction:!1,cacheOverflowSize:1,infiniteInitialRowCount:1,serverSideInitialRowCount:1,cacheBlockSize:100,maxBlocksInCache:-1,maxConcurrentDatasourceRequests:2,blockLoadDebounceMillis:0,purgeClosedRowNodes:!1,serverSideSortAllLevels:!1,serverSideOnlyRefreshFilteredGroups:!1,serverSidePivotResultFieldSeparator:"_",viewportRowModelPageSize:5,viewportRowModelBufferSize:5,alwaysShowHorizontalScroll:!1,alwaysShowVerticalScroll:!1,debounceVerticalScrollbar:!1,suppressHorizontalScroll:!1,suppressScrollOnNewData:!1,suppressScrollWhenPopupsAreOpen:!1,suppressAnimationFrame:!1,suppressMiddleClickScrolls:!1,suppressPreventDefaultOnMouseWheel:!1,rowMultiSelectWithClick:!1,suppressRowDeselection:!1,suppressRowClickSelection:!1,suppressCellFocus:!1,suppressHeaderFocus:!1,suppressMultiRangeSelection:!1,enableCellTextSelection:!1,enableRangeSelection:!1,enableRangeHandle:!1,enableFillHandle:!1,fillHandleDirection:"xy",suppressClearOnFillReduction:!1,accentedSort:!1,unSortIcon:!1,suppressMultiSort:!1,alwaysMultiSort:!1,suppressMaintainUnsortedOrder:!1,suppressRowHoverHighlight:!1,suppressRowTransform:!1,columnHoverHighlight:!1,deltaSort:!1,enableGroupEdit:!1,groupLockGroupColumns:0,serverSideEnableClientSideSort:!1,suppressServerSideFullWidthLoadingRow:!1,pivotMaxGeneratedColumns:-1,columnMenu:"new",reactiveCustomComponents:!0,suppressSetFilterByDefault:!1,enableFilterHandlers:!1},z9="https://www.ag-grid.com";function M2(z,J,...Q){if(z.get("debug"))console.log("AG Grid: "+J,...Q)}function y4(z,...J){QJ(()=>J9(z,...J),z+J?.join(""))}function O1(z,...J){QJ(()=>nG(z,...J),z+J?.join(""))}function nG(z,...J){console.error("AG Grid: "+z,...J)}function J9(z,...J){console.warn("AG Grid: "+z,...J)}var Q9=new Set,C6={},dz={},D6,Z9=!1,$9=!1,dG=!1;function rG(z){let[J,Q]=z.version.split(".")||[],[Z,$]=D6.split(".")||[];return J===Z&&Q===$}function tG(z){if(!D6)D6=z.version;let J=(Z)=>`You are using incompatible versions of AG Grid modules. Major and minor versions should always match across modules. ${Z} Please update all modules to the same version.`;if(!z.version)O1(J(`'${z.moduleName}' is incompatible.`));else if(!rG(z))O1(J(`'${z.moduleName}' is version ${z.version} but the other modules are version ${D6}.`));let Q=z.validate?.();if(Q&&!Q.isValid)O1(`${Q.message}`)}function k2(z,J,Q=!1){if(!Q)Z9=!0;tG(z);let Z=z.rowModels??["all"];Q9.add(z);let $;if(J!==void 0){if($9=!0,dz[J]===void 0)dz[J]={};$=dz[J]}else $=C6;for(let X of Z){if($[X]===void 0)$[X]={};$[X][z.moduleName]=z}if(z.dependsOn)for(let X of z.dependsOn)k2(X,J,Q)}function sG(z){delete dz[z]}function yQ(z,J,Q){let Z=($)=>!!C6[$]?.[z]||!!dz[J]?.[$]?.[z];return Z(Q)||Z("all")}function SZ(){return $9}function lG(z,J){let Q=dz[z]??{};return[...Object.values(C6.all??{}),...Object.values(Q.all??{}),...Object.values(C6[J]??{}),...Object.values(Q[J]??{})]}function aG(){return new Set(Q9)}function X9(z,J){let Q=dz[z]??{};return[...Object.values(Q.all??{}),...Object.values(Q[J]??{})]}function oG(){return Z9}function VZ(){return dG}var Y9=class{static register(z){k2(z,void 0)}static registerModules(z){for(let J of z)k2(J,void 0)}};var i="35.3.0",M7=2000,k7=100,q9="_version_",G9=null,P1=`${z9}/javascript-data-grid`;function eG(z){G9=z}function zU(z){P1=z}function U9(z,J,Q){return G9?.(z,J)??[$U(z,J,Q)]}function ZJ(z,J,Q,Z,$){z(`${Z?"warning":"error"} #${J}`,...U9(J,Q,$))}function JU(z){if(!z)return String(z);let J={};for(let Q of Object.keys(z))if(typeof z[Q]!=="object"&&typeof z[Q]!=="function")J[Q]=z[Q];return JSON.stringify(J)}function QU(z){let J=z;if(z instanceof Error)J=z.toString();else if(typeof z==="object")J=JU(z);return J}function M6(z){return z===void 0?"undefined":z===null?"null":z}function bQ(z,J){return`${z}?${J.toString()}`}function ZU(z,J,Q){let Z=Array.from(J.entries()).sort((X,Y)=>Y[1].length-X[1].length),$=bQ(z,J);for(let[X,Y]of Z){if(X===q9)continue;let q=$.length-Q;if(q<=0)break;let G="...",U=q+G.length,_=Y.length-U>k7?Y.slice(0,Y.length-U)+G:Y.slice(0,k7)+G;J.set(X,_),$=bQ(z,J)}return $}function _9(z,J){let Q=new URLSearchParams;if(Q.append(q9,i),J)for(let X of Object.keys(J))Q.append(X,QU(J[X]));let Z=`${P1}/errors/${z}`,$=bQ(Z,Q);return $.length<=M7?$:ZU(Z,Q,M7)}var $U=(z,J,Q)=>{let Z=_9(z,J),$=`${Q?Q+` +`:""}Visit ${Z}`;if(VZ())return $;return`${$}${Q?"":` + Alternatively register the ValidationModule to see the full message in the console.`}`};function V(...z){ZJ(y4,z[0],z[1],!0)}function r(...z){ZJ(O1,z[0],z[1],!1)}function G2(z,J,Q){ZJ(O1,z,J,!1,Q)}function H9(z,J,Q){ZJ(y4,z,J,!0,Q)}function XU(z,J){let Q=J[0];return`error #${Q} `+U9(Q,J[1],z).join(" ")}function Y4(...z){return XU(void 0,z)}function W9(z,J){return z.get("rowModelType")===J}function o(z,J){return W9(z,"clientSide")}function Az(z,J){return W9(z,"serverSide")}function A0(z,J){return z.get("domLayout")===J}function s4(z){return y6(z)!==void 0}function B9(z){return typeof z.get("getRowHeight")==="function"}function YU(z,J){if(J)return!z.get("enableStrictPivotColumnOrder");return z.get("maintainColumnOrder")}function qU({gos:z,formula:J}){let Q=z.get("rowNumbers");return Q||!!J?.active&&Q!==!1}function f2(z,J,Q=!1,Z){let{gos:$,environment:X}=z;if(Z==null)Z=X.getDefaultRowHeight();if(B9($)){if(Q)return{height:Z,estimated:!0};let G={node:J,data:J.data},U=$.getCallback("getRowHeight")(G);if(xQ(U)){if(U===0)V(23);return{height:Math.max(1,U),estimated:!1}}}if(J.detail&&$.get("masterDetail"))return GU($);let Y=$.get("rowHeight");return{height:Y&&xQ(Y)?Y:Z,estimated:!1}}function GU(z){if(z.get("detailRowAutoHeight"))return{height:1,estimated:!1};let J=z.get("detailRowHeight");if(xQ(J))return{height:J,estimated:!1};return{height:300,estimated:!1}}function E9(z){let{environment:J,gos:Q}=z,Z=Q.get("rowHeight");if(!Z||d(Z))return J.getDefaultRowHeight();let $=J.refreshRowHeightVariable();if($!==-1)return $;return V(24),J.getDefaultRowHeight()}function xQ(z){return!isNaN(z)&&typeof z==="number"&&isFinite(z)}function K9(z,J,Q){let Z=J[z.getDomDataKey()];return Z?Z[Q]:void 0}function az(z,J,Q,Z){let $=z.getDomDataKey(),X=J[$];if(d(X))X={},J[$]=X;X[Q]=Z}function T1(z){if(z.get("ensureDomOrder"))return!1;return z.get("animateRows")}function p1(z){return!(z.get("paginateChildRows")||z.get("groupHideOpenParents")||A0(z,"print"))}function b4(z){return!z.get("autoGroupColumnDef")?.comparator&&!z.get("treeData")}function u4(z){let J=z.get("groupAggFiltering");if(typeof J==="function")return z.getCallback("groupAggFiltering");if(J===!0)return()=>!0;return}function c4(z){return z.get("grandTotalRow")}function $J(z){let J=z.get("groupTotalRow");if(typeof J==="function")return z.getCallback("groupTotalRow");return()=>J??void 0}function x2(z){if(!!z.get("groupHideOpenParents"))return!0;return z.get("groupDisplayType")==="multipleColumns"}function RZ(z){return x2(z)&&z.get("groupHideColumnsUntilExpanded")&&o(z)}function XJ(z,J){if(J)return!1;return z.get("groupDisplayType")==="groupRows"}function F9(z,J,Q){return!!J.group&&!J.footer&&XJ(z,Q)}function wQ(z){let J=z.getCallback("getRowId");if(J===void 0)return J;return(Q)=>{let Z=J(Q);if(typeof Z!=="string")QJ(()=>V(25,{id:Z}),"getRowIdString"),Z=String(Z);return Z}}function UU(z,J){let Q=z.get("groupHideParentOfSingleChild");if(Q===!0)return!0;if(Q==="leafGroupsOnly"&&J.leafGroup)return!0;if(z.get("groupRemoveSingleChildren"))return!0;if(z.get("groupRemoveLowestSingleChildren")&&J.leafGroup)return!0;return!1}function YJ(z,J){let Q=z.get("suppressGroupChangesColumnVisibility");if(Q===!0)return!1;if(J&&Q==="suppressHideOnGroup")return!1;if(!J&&Q==="suppressShowOnUngroup")return!1;let Z=z.get("suppressRowGroupHidesColumns");if(J&&Z===!0)return!1;let $=z.get("suppressMakeColumnVisibleAfterUnGroup");if(!J&&$===!0)return!1;return!0}function Fz(z){return z?.checkboxes??!0}function k6(z){return z?.mode==="multiRow"&&(z.headerCheckbox??!0)}function b1(z){if(typeof z!=="object")return;return z.checkboxLocation??"selectionColumn"}function zQ(z){return z?.hideDisabledCheckboxes??!1}function _U(z){return typeof z.get("rowSelection")!=="string"}function L9(z){return z.get("cellSelection")!==void 0}function D9(z){let J=z.get("cellSelection");if(J===void 0)return z.get("suppressMultiRangeSelection");return typeof J!=="boolean"?J?.suppressMultiRanges??!1:!1}function n0(z){let J=z.get("cellSelection");return J!==void 0?!!J:z.get("enableRangeSelection")}function qJ(z){let J=z.get("cellSelection");if(J===void 0)return{mode:"fill",setFillValue:z.get("fillOperation"),direction:z.get("fillHandleDirection"),suppressClearOnFillReduction:z.get("suppressClearOnFillReduction")};return typeof J!=="boolean"&&J.handle?.mode==="fill"?J.handle:void 0}function l4(z){let J=z.get("cellSelection")??!1;return(typeof J==="object"&&J.enableColumnSelection)??!1}function M9(z){let J=z.get("rowSelection")??"single";if(typeof J==="string"){let Q=z.get("suppressRowClickSelection"),Z=z.get("suppressRowDeselection");if(Q&&Z)return!1;else if(Q)return"enableDeselection";else if(Z)return"enableSelection";else return!0}return J.mode==="singleRow"||J.mode==="multiRow"?J.enableClickSelection??!1:!1}function HU(z){let J=M9(z);return J===!0||J==="enableSelection"}function WU(z){let J=M9(z);return J===!0||J==="enableDeselection"}function NQ(z){let J=z.get("rowSelection");if(typeof J==="string")return z.get("isRowSelectable");return J?.isRowSelectable}function y6(z){let J="beanName"in z&&z.beanName==="gos"?z.get("rowSelection"):z.rowSelection;if(typeof J==="string")switch(J){case"multiple":return"multiRow";case"single":return"singleRow";default:return}switch(J?.mode){case"multiRow":case"singleRow":return J.mode;default:return}}function S2(z){return y6(z)==="multiRow"}function BU(z){let J=z.get("rowSelection");if(typeof J==="string")return z.get("rowMultiSelectWithClick");return J?.enableSelectionWithoutKeys??!1}function b6(z){let J=z.get("rowSelection");if(typeof J==="string"){let Q=z.get("groupSelectsChildren"),Z=z.get("groupSelectsFiltered");if(Q&&Z)return"filteredDescendants";else if(Q)return"descendants";else return"self"}return J?.mode==="multiRow"?J.groupSelects:void 0}function k9(z,J=!0){let Q=z.get("rowSelection");if(typeof Q!=="object")return J?"all":void 0;return Q.mode==="multiRow"?Q.selectAll:"all"}function EU(z){let J=z.get("rowSelection");if(typeof J==="string")return!1;return J?.mode==="multiRow"?J.ctrlASelectsRows??!1:!1}function V2(z){let J=b6(z);return J==="descendants"||J==="filteredDescendants"}function f7(z){let J=z.get("rowSelection");return typeof J==="object"&&J.masterSelects||"self"}function KU(z){return z.isModuleRegistered("SetFilter")&&!z.get("suppressSetFilterByDefault")}function F0(z){return z.get("columnMenu")==="legacy"}function AZ(z){return!F0(z)}function FU(z){if(!z||z.length<2)return z;return"on"+z[0].toUpperCase()+z.substring(1)}function C(z,J){return z.addCommon(J)}function jZ({gos:z},J){return J.button===2||J.ctrlKey&&z.get("allowContextMenuWithControlKey")}var LU={resizable:!0,sortable:!0},DU=0;function f9(){return DU++}function G4(z){return z instanceof B4}var MU=["asc","desc",null],kU=[{type:"absolute",direction:"asc"},{type:"absolute",direction:"desc"},null],B4=class extends S{constructor(z,J,Q,Z){super();this.colDef=z,this.userProvidedColDef=J,this.colId=Q,this.primary=Z,this.isColumn=!0,this.instanceId=f9(),this.autoHeaderHeight=null,this.sortDef=Z4(),this.moving=!1,this.resizing=!1,this.menuVisible=!1,this.formulaRef=null,this.lastLeftPinned=!1,this.firstRightPinned=!1,this.filterActive=!1,this.colEventSvc=new R4,this.tooltipEnabled=!1,this.rowGroupActive=!1,this.pivotActive=!1,this.aggregationActive=!1,this.flex=null,this.colIdSanitised=L0(Q)}destroy(){super.destroy(),this.beans.rowSpanSvc?.deregister(this)}getInstanceId(){return this.instanceId}initState(){let{colDef:z,beans:{sortSvc:J,pinnedCols:Q,colFlex:Z}}=this;J?.initCol(this);let $=z.hide;if($!==void 0)this.visible=!$;else this.visible=!z.initialHide;Q?.initCol(this),Z?.initCol(this)}setColDef(z,J,Q){let Z=z.spanRows!==this.colDef.spanRows;if(this.colDef=z,this.userProvidedColDef=J,this.initMinAndMaxWidths(),this.initDotNotation(),this.initTooltip(),Z)this.beans.rowSpanSvc?.deregister(this),this.initRowSpan();this.dispatchColEvent("colDefChanged",Q)}getUserProvidedColDef(){return this.userProvidedColDef}getParent(){return this.parent}getOriginalParent(){return this.originalParent}postConstruct(){this.initState(),this.initMinAndMaxWidths(),this.resetActualWidth("gridInitializing"),this.initDotNotation(),this.initTooltip(),this.initRowSpan(),this.addPivotListener()}initDotNotation(){let{gos:z,colDef:{field:J,tooltipField:Q}}=this,Z=z.get("suppressFieldDotNotation");this.fieldContainsDots=P(J)&&J.includes(".")&&!Z,this.tooltipFieldContainsDots=P(Q)&&Q.includes(".")&&!Z}initMinAndMaxWidths(){let z=this.colDef;this.minWidth=z.minWidth??this.beans.environment.getDefaultColumnMinWidth(),this.maxWidth=z.maxWidth??Number.MAX_SAFE_INTEGER}initTooltip(){this.beans.tooltipSvc?.initCol(this)}initRowSpan(){if(this.colDef.spanRows)this.beans.rowSpanSvc?.register(this)}addPivotListener(){let z=this.beans.pivotColDefSvc,J=this.colDef.pivotValueColumn;if(!z||!J)return;this.addManagedListeners(J,{colDefChanged:(Q)=>{let Z=z.recreateColDef(this.colDef);this.setColDef(Z,Z,Q.source)}})}resetActualWidth(z){let J=this.calculateColInitialWidth(this.colDef);this.setActualWidth(J,z,!0)}calculateColInitialWidth(z){let J=z.width??z.initialWidth??200;return Math.max(Math.min(J,this.maxWidth),this.minWidth)}isEmptyGroup(){return!1}isRowGroupDisplayed(z){return this.beans.showRowGroupCols?.isRowGroupDisplayed(this,z)??!1}isPrimary(){return this.primary}isFilterAllowed(){return!!this.colDef.filter}isFieldContainsDots(){return this.fieldContainsDots}isTooltipEnabled(){return this.tooltipEnabled}isTooltipFieldContainsDots(){return this.tooltipFieldContainsDots}getHighlighted(){return this.highlighted}__addEventListener(z,J){this.colEventSvc.addEventListener(z,J)}__removeEventListener(z,J){this.colEventSvc.removeEventListener(z,J)}addEventListener(z,J){this.frameworkEventListenerService=this.beans.frameworkOverrides.createLocalEventListenerWrapper?.(this.frameworkEventListenerService,this.colEventSvc);let Q=this.frameworkEventListenerService?.wrap(z,J)??J;this.colEventSvc.addEventListener(z,Q)}removeEventListener(z,J){let Q=this.frameworkEventListenerService?.unwrap(z,J)??J;this.colEventSvc.removeEventListener(z,Q)}createColumnFunctionCallbackParams(z){return C(this.gos,{node:z,data:z.data,column:this,colDef:this.colDef})}isSuppressNavigable(z){return this.beans.cellNavigation?.isSuppressNavigable(this,z)??!1}isCellEditable(z){return this.beans.editSvc?.isCellEditable({rowNode:z,column:this})??!1}isSuppressFillHandle(){return!!this.colDef.suppressFillHandle}isAutoHeight(){return!!this.colDef.autoHeight}isAutoHeaderHeight(){return!!this.colDef.autoHeaderHeight}isRowDrag(z){return this.isColumnFunc(z,this.colDef.rowDrag)}isDndSource(z){return this.isColumnFunc(z,this.colDef.dndSource)}isCellCheckboxSelection(z){return this.beans.selectionSvc?.isCellCheckboxSelection(this,z)??!1}isSuppressPaste(z){return this.isColumnFunc(z,this.colDef?.suppressPaste??null)}isResizable(){return!!this.getColDefValue("resizable")}getColDefValue(z){return this.colDef[z]??LU[z]}isColumnFunc(z,J){if(typeof J==="boolean")return J;if(typeof J==="function"){let Q=this.createColumnFunctionCallbackParams(z);return J(Q)}return!1}createColumnEvent(z,J){return C(this.gos,{type:z,column:this,columns:[this],source:J})}isMoving(){return this.moving}getSort(){return this.sortDef.direction}getSortDef(){if(!this.sortDef.direction)return null;return this.sortDef}getColDefAllowedSortTypes(){let z=[],{sort:J,initialSort:Q}=this.colDef,Z=J===null?J:A4(J?.type),$=Q===null?Q:A4(Q?.type);if(Z)z.push(Z);if($)z.push($);return z}getSortingOrder(){let z=this.getColDefAllowedSortTypes().includes("absolute")?kU:MU;return(this.colDef.sortingOrder??this.gos.get("sortingOrder")??z).map((J)=>Z4(J))}getAvailableSortTypes(){let z=this.getSortingOrder().reduce((J,Q)=>{if(Q.direction)J.push(Q.type);return J},this.getColDefAllowedSortTypes());return new Set(z)}setSortDef(z){this.sortDef=z}isSortable(){return!!this.getColDefValue("sortable")}isSortAscending(){return this.getSort()==="asc"}isSortDescending(){return this.getSort()==="desc"}isSortNone(){return d(this.getSort())}isSorting(){return P(this.getSort())}getSortIndex(){return this.sortIndex}isMenuVisible(){return this.menuVisible}getAggFunc(){return this.aggFunc}getLeft(){return this.left}getOldLeft(){return this.oldLeft}getRight(){return this.left+this.actualWidth}setLeft(z,J){if(this.oldLeft=this.left,this.left!==z)this.left=z,this.dispatchColEvent("leftChanged",J)}isFilterActive(){return this.filterActive}isHovered(){return V(261),!!this.beans.colHover?.isHovered(this)}setFirstRightPinned(z,J){if(this.firstRightPinned!==z)this.firstRightPinned=z,this.dispatchColEvent("firstRightPinnedChanged",J)}setLastLeftPinned(z,J){if(this.lastLeftPinned!==z)this.lastLeftPinned=z,this.dispatchColEvent("lastLeftPinnedChanged",J)}isFirstRightPinned(){return this.firstRightPinned}isLastLeftPinned(){return this.lastLeftPinned}isPinned(){return this.pinned==="left"||this.pinned==="right"}isPinnedLeft(){return this.pinned==="left"}isPinnedRight(){return this.pinned==="right"}getPinned(){return this.pinned}setVisible(z,J){let Q=z===!0;if(this.visible!==Q)this.visible=Q,this.dispatchColEvent("visibleChanged",J);this.dispatchStateUpdatedEvent("hide")}isVisible(){return this.visible}isSpanHeaderHeight(){return!this.colDef.suppressSpanHeaderHeight}getFirstRealParent(){let z=this.getOriginalParent();while(z?.isPadding())z=z.getOriginalParent();return z}getColumnGroupPaddingInfo(){let z=this.parent;if(!z?.isPadding())return{numberOfParents:0,isSpanningTotal:!1};let J=z.getPaddingLevel()+1,Q=!0;while(z){if(!z.isPadding()){Q=!1;break}z=z.parent}return{numberOfParents:J,isSpanningTotal:Q}}getColDef(){return this.colDef}getDefinition(){return this.colDef}getColumnGroupShow(){return this.colDef.columnGroupShow}getColId(){return this.colId}getId(){return this.colId}getUniqueId(){return this.colId}getActualWidth(){return this.actualWidth}getAutoHeaderHeight(){return this.autoHeaderHeight}setAutoHeaderHeight(z){let J=z!==this.autoHeaderHeight;return this.autoHeaderHeight=z,J}createBaseColDefParams(z){return C(this.gos,{node:z,data:z.data,colDef:this.colDef,column:this})}getColSpan(z){if(d(this.colDef.colSpan))return 1;let J=this.createBaseColDefParams(z),Q=this.colDef.colSpan(J);return Math.max(Q,1)}getRowSpan(z){if(d(this.colDef.rowSpan))return 1;let J=this.createBaseColDefParams(z),Q=this.colDef.rowSpan(J);return Math.max(Q,1)}setActualWidth(z,J,Q=!1){if(z=Math.max(z,this.minWidth),z=Math.min(z,this.maxWidth),this.actualWidth!==z){if(this.actualWidth=z,this.flex!=null&&J!=="flex"&&J!=="gridInitializing")this.flex=null;if(!Q)this.fireColumnWidthChangedEvent(J)}this.dispatchStateUpdatedEvent("width")}fireColumnWidthChangedEvent(z){this.dispatchColEvent("widthChanged",z)}isGreaterThanMax(z){return z>this.maxWidth}getMinWidth(){return this.minWidth}getMaxWidth(){return this.maxWidth}getFlex(){return this.flex}isRowGroupActive(){return this.rowGroupActive}isPivotActive(){return this.pivotActive}isAnyFunctionActive(){return this.isPivotActive()||this.isRowGroupActive()||this.isValueActive()}isAnyFunctionAllowed(){return this.isAllowPivot()||this.isAllowRowGroup()||this.isAllowValue()}isValueActive(){return this.aggregationActive}isAllowPivot(){return this.colDef.enablePivot===!0}isAllowValue(){return this.colDef.enableValue===!0}isAllowRowGroup(){return this.colDef.enableRowGroup===!0}isAllowFormula(){return this.colDef.allowFormula===!0}dispatchColEvent(z,J,Q){let Z=this.createColumnEvent(z,J);if(Q)D0(Z,Q);this.colEventSvc.dispatchEvent(Z)}dispatchStateUpdatedEvent(z){this.colEventSvc.dispatchEvent({type:"columnStateUpdated",key:z})}};function Z4(z){if(v1(z))return{direction:z.direction,type:z.type};return{direction:GJ(z),type:A4(z)}}function Lz(z){return z==="asc"||z==="desc"||z===null}function OZ(z){return z==="default"||z==="absolute"}function v1(z){if(!z||typeof z!=="object")return!1;let J=z;return OZ(J.type)&&Lz(J.direction)}function f6(z,J){if(!z)return J?J.direction===null:!0;if(!J)return z?z.direction===null:!0;return z.type===J.type&&z.direction===J.direction}function GJ(z){return Lz(z)?z:null}function A4(z){return OZ(z)?z:"default"}function PZ(z,J,Q){let $=Q?.()??J.sortSvc.getDisplaySortForColumn(z),X=A4($?.type),Y=GJ($?.direction),q=z.getAvailableSortTypes(),G=q.has("default"),U=q.has("absolute");return{isDefaultSortAllowed:G,isAbsoluteSortAllowed:U,isAbsoluteSort:X==="absolute",isDefaultSort:X==="default",isAscending:Y==="asc",isDescending:Y==="desc",direction:Y}}function G0(z){return z instanceof rz}var rz=class extends S{constructor(z,J,Q,Z){super();this.colGroupDef=z,this.groupId=J,this.padding=Q,this.level=Z,this.isColumn=!1,this.expandable=!1,this.instanceId=f9(),this.expandableListenerRemoveCallback=null,this.expanded=!!z?.openByDefault}destroy(){if(this.expandableListenerRemoveCallback)this.reset(null,void 0);super.destroy()}reset(z,J){if(this.colGroupDef=z,this.level=J,this.originalParent=null,this.expandableListenerRemoveCallback)this.expandableListenerRemoveCallback();this.children=void 0,this.expandable=void 0}getInstanceId(){return this.instanceId}getOriginalParent(){return this.originalParent}getLevel(){return this.level}isVisible(){if(this.children)return this.children.some((z)=>z.isVisible());return!1}isPadding(){return this.padding}setExpanded(z){this.expanded=z===void 0?!1:z,this.dispatchLocalEvent({type:"expandedChanged"})}isExpandable(){return this.expandable}isExpanded(){return this.expanded}getGroupId(){return this.groupId}getId(){return this.getGroupId()}setChildren(z){this.children=z}getChildren(){return this.children}getColGroupDef(){return this.colGroupDef}getLeafColumns(){let z=[];return this.addLeafColumns(z),z}forEachLeafColumn(z){if(!this.children)return;for(let J of this.children)if(G4(J))z(J);else if(G0(J))J.forEachLeafColumn(z)}addLeafColumns(z){if(!this.children)return;for(let J of this.children)if(G4(J))z.push(J);else if(G0(J))J.addLeafColumns(z)}getColumnGroupShow(){let z=this.colGroupDef;if(!z)return;return z.columnGroupShow}setupExpandable(){if(this.setExpandable(),this.expandableListenerRemoveCallback)this.expandableListenerRemoveCallback();let z=this.onColumnVisibilityChanged.bind(this);for(let J of this.getLeafColumns())J.__addEventListener("visibleChanged",z);this.expandableListenerRemoveCallback=()=>{for(let J of this.getLeafColumns())J.__removeEventListener("visibleChanged",z);this.expandableListenerRemoveCallback=null}}setExpandable(){if(this.isPadding())return;let z=!1,J=!1,Q=!1,Z=this.findChildrenRemovingPadding();for(let X=0,Y=Z.length;X{for(let Z of Q)if(G0(Z)&&Z.isPadding())J(Z.children);else z.push(Z)};return J(this.children),z}onColumnVisibilityChanged(){this.setExpandable()}},fU={numericColumn:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"},rightAligned:{headerClass:"ag-right-aligned-header",cellClass:"ag-right-aligned-cell"}};function gQ(z,J,Q){let Z={},$=z.gos;return Object.assign(Z,$.get("defaultColGroupDef")),Object.assign(Z,J),$.validateColDef(Z,Q),Z}var SU=class{constructor(){this.existingKeys={}}addExistingKeys(z){for(let J=0;J0)V(273,{providedId:z,usedId:$});return this.existingKeys[$]=!0,$}Q++}}},S9=(z,J)=>{if(G0(z))z.setupExpandable();z.originalParent=J};function V9(z,J=null,Q,Z,$){let{existingCols:X,existingGroups:Y}=R9(Z),q=new Map(X.map((K)=>[K.getId(),K])),G=new Map(Y.map((K)=>[K.getId(),K])),U=0,_=(K,F)=>{if(U=Math.max(U,F),P9(K)){if(!z.colGroupSvc)return null;let f=K.groupId,A=G.get(f),R=gQ(z,K,f),O=new rz(R,f,!1,F);if(z.context.createBean(O),A)O.setExpanded(A.isExpanded());return O.setChildren(K.children.map((v)=>_(v,F+1))),O}let L=K.colId,D=q.get(L),M=e4(z,K,D?.colId??L);if(!D)D=new B4(M,K,L,Q),z.context.createBean(D);else D.setColDef(M,K,$),O9(z,D,M,$);return z.dataTypeSvc?.addColumnListeners(D),D},H=J?.map((K)=>_(K,0))??[],W=0,B={getUniqueKey:(K,F)=>String(++W)},E=z.colGroupSvc?z.colGroupSvc.balanceColumnTree(H,0,U,B):H;return g4(null,E,S9),{columnTree:E,treeDepth:U}}function TZ(z,J=null,Q,Z,$){let X=new SU,{existingCols:Y,existingGroups:q,existingColKeys:G}=R9(Z);X.addExistingKeys(G);let U=A9(z,J,0,Q,Y,X,q,$),{colGroupSvc:_}=z,H=_?.findMaxDepth(U,0)??0,W=_?_.balanceColumnTree(U,0,H,X):U;return g4(null,W,S9),{columnTree:W,treeDepth:H}}function R9(z){let J=[],Q=[],Z=[];if(z)g4(null,z,($)=>{if(G0($)){let X=$;Q.push(X)}else{let X=$;Z.push(X.getId()),J.push(X)}});return{existingCols:J,existingGroups:Q,existingColKeys:Z}}function A9(z,J,Q,Z,$,X,Y,q){if(!J)return[];let{colGroupSvc:G}=z,U=Array(J.length);for(let _=0;_0)return;if(Q.width!=null)J.setActualWidth(Q.width,Z);else{let X=J.getActualWidth();J.setActualWidth(X,Z)}}function RU(z,J){if(!J)return;for(let Q=0;Q{for(let $=0;$J+Q.getActualWidth(),0)}function U4(z,J,Q){let Z={};if(!J)return;if(g4(null,J,(X)=>{Z[X.getInstanceId()]=X}),Q)g4(null,Q,(X)=>{Z[X.getInstanceId()]=null});let $=Object.values(Z).filter((X)=>X!=null);z.context.destroyBeans($)}function Z1(z){return z.getId().startsWith(Q1)}function i4(z){return(typeof z==="string"?z:("getColId"in z)?z.getColId():z.colId)?.startsWith(T9)??!1}function y0(z){return(typeof z==="string"?z:("getColId"in z)?z.getColId():z.colId)?.startsWith(v9)??!1}function w2(z){return i4(z)||y0(z)}function x6(z){let J=[];if(z instanceof Array)J=z;else if(typeof z==="string")J=z.split(",");return J}function N2(z,J){return Z0(z,J,(Q,Z)=>Q.colId===Z.colId)}function g2(z){z.map={};for(let J of z.list)z.map[J.getId()]=J}function Dz(z){return z==="optionsUpdated"?"gridOptionsChanged":z}function h4(z,J){return z===J||z.colId==J||z.colDef===J}var OU=(z,J)=>(Q,Z)=>{let $={value1:void 0,value2:void 0},X=!1;if(z){if(z[Q]!==void 0)$.value1=z[Q],X=!0;if(P(Z)&&z[Z]!==void 0)$.value2=z[Z],X=!0}if(!X&&J){if(J[Q]!==void 0)$.value1=J[Q];if(P(Z)&&J[Z]!==void 0)$.value2=J[Z]}return $};function vZ(z,J){let Q={...z,sort:void 0,colId:J},Z=C9(z);if(Z)Q.sort=Z.direction,Q.sortType=Z.type;return Q}function C9(z){let{sort:J,initialSort:Q}=z,Z=v1(J)||Lz(J),$=v1(Q)||Lz(Q);if(Z)return Z4(J);if($)return Z4(Q);return null}function y9(z,J){return z+"_"+J}function K0(z){return z instanceof R2}var R2=class extends S{constructor(z,J,Q,Z){super();this.providedColumnGroup=z,this.groupId=J,this.partId=Q,this.pinned=Z,this.isColumn=!1,this.displayedChildren=[],this.autoHeaderHeight=null,this.parent=null,this.colIdSanitised=L0(this.getUniqueId())}reset(){this.parent=null,this.children=null,this.displayedChildren=null}getParent(){return this.parent}getUniqueId(){return y9(this.groupId,this.partId)}isEmptyGroup(){return this.displayedChildren.length===0}isMoving(){let z=this.getProvidedColumnGroup().getLeafColumns();if(!z||z.length===0)return!1;return z.every((J)=>J.isMoving())}checkLeft(){for(let z of this.displayedChildren)if(K0(z))z.checkLeft();if(this.displayedChildren.length>0)if(this.gos.get("enableRtl")){let J=y(this.displayedChildren).getLeft();this.setLeft(J)}else{let z=this.displayedChildren[0].getLeft();this.setLeft(z)}else this.setLeft(null)}getLeft(){return this.left}getOldLeft(){return this.oldLeft}setLeft(z){if(this.oldLeft=this.left,this.left!==z)this.left=z,this.dispatchLocalEvent({type:"leftChanged"})}getPinned(){return this.pinned}getGroupId(){return this.groupId}getPartId(){return this.partId}getActualWidth(){let z=0;for(let J of this.displayedChildren??[])z+=J.getActualWidth();return z}isResizable(){if(!this.displayedChildren)return!1;let z=!1;for(let J of this.displayedChildren)if(J.isResizable())z=!0;return z}getMinWidth(){let z=0;for(let J of this.displayedChildren)z+=J.getMinWidth();return z}addChild(z){if(!this.children)this.children=[];this.children.push(z)}getDisplayedChildren(){return this.displayedChildren}getLeafColumns(){let z=[];return this.addLeafColumns(z),z}getDisplayedLeafColumns(){let z=[];return this.addDisplayedLeafColumns(z),z}getDefinition(){return this.providedColumnGroup.getColGroupDef()}getColGroupDef(){return this.providedColumnGroup.getColGroupDef()}isPadding(){return this.providedColumnGroup.isPadding()}isExpandable(){return this.providedColumnGroup.isExpandable()}isExpanded(){return this.providedColumnGroup.isExpanded()}setExpanded(z){this.providedColumnGroup.setExpanded(z)}isAutoHeaderHeight(){return!!this.getColGroupDef()?.autoHeaderHeight}getAutoHeaderHeight(){return this.autoHeaderHeight}setAutoHeaderHeight(z){let J=z!==this.autoHeaderHeight;return this.autoHeaderHeight=z,J}addDisplayedLeafColumns(z){for(let J of this.displayedChildren??[])if(G4(J))z.push(J);else if(K0(J))J.addDisplayedLeafColumns(z)}addLeafColumns(z){for(let J of this.children??[])if(G4(J))z.push(J);else if(K0(J))J.addLeafColumns(z)}getChildren(){return this.children}getColumnGroupShow(){return this.providedColumnGroup.getColumnGroupShow()}getProvidedColumnGroup(){return this.providedColumnGroup}getPaddingLevel(){let z=this.parent;if(!this.isPadding()||!z?.isPadding())return 0;return 1+z.getPaddingLevel()}calculateDisplayedColumns(){this.displayedChildren=[];let z=this;while(z?.isPadding())z=z.parent;if(!(z?z.getProvidedColumnGroup().isExpandable():!1)){this.displayedChildren=this.children,this.dispatchLocalEvent({type:"displayedChildrenChanged"});return}for(let Q of this.children??[]){if(K0(Q)&&!Q.displayedChildren?.length)continue;switch(Q.getColumnGroupShow()){case"open":if(z.getProvidedColumnGroup().isExpanded())this.displayedChildren.push(Q);break;case"closed":if(!z.getProvidedColumnGroup().isExpanded())this.displayedChildren.push(Q);break;default:this.displayedChildren.push(Q);break}}this.dispatchLocalEvent({type:"displayedChildrenChanged"})}},IZ="ROOT_NODE_ID",hQ="rowGroupFooter_",S7="detail_",PU=hQ+IZ,k={BACKSPACE:"Backspace",TAB:"Tab",ENTER:"Enter",ESCAPE:"Escape",SPACE:" ",LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",DOWN:"ArrowDown",DELETE:"Delete",F2:"F2",PAGE_UP:"PageUp",PAGE_DOWN:"PageDown",PAGE_HOME:"Home",PAGE_END:"End",A:"KeyA",C:"KeyC",D:"KeyD",V:"KeyV",X:"KeyX",Y:"KeyY",Z:"KeyZ"},TU=65,vU=67,IU=86,CU=68,yU=90,bU=89;function b9(z){let{keyCode:J}=z,Q;switch(J){case TU:Q=k.A;break;case vU:Q=k.C;break;case IU:Q=k.V;break;case CU:Q=k.D;break;case yU:Q=k.Z;break;case bU:Q=k.Y;break;default:Q=z.code}return Q}function x9(z){return typeof z.then==="function"}function xU(z,J){return new N((Q)=>{Q(window.setInterval(z,J))})}var N=class z{constructor(J){this.status=0,this.resolution=null,this.waiters=[],J((Q)=>this.onDone(Q),(Q)=>this.onReject(Q))}static all(J){return J.length?new z((Q)=>{let Z=J.length,$=Array(Z);J.forEach((X,Y)=>{X.then((q)=>{if($[Y]=q,Z--,Z===0)Q($)})})}):z.resolve()}static resolve(J=null){return new z((Q)=>Q(J))}then(J){return new z((Q)=>{if(this.status===1)Q(J(this.resolution));else this.waiters.push((Z)=>Q(J(Z)))})}onDone(J){this.status=1,this.resolution=J;for(let Q of this.waiters)Q(J)}onReject(J){}},wU=class extends k0{constructor(){super(...arguments);this.beanName="dragAndDrop",this.dragSourceAndParamsList=[],this.dragItem=null,this.dragInitialSourcePointerOffsetX=0,this.dragInitialSourcePointerOffsetY=0,this.lastMouseEvent=null,this.lastDraggingEvent=null,this.dragSource=null,this.dragImageCompPromise=null,this.dragImageComp=null,this.dragImageLastIcon=void 0,this.dragImageLastLabel=void 0,this.dropTargets=[],this.externalDropZoneCount=0,this.lastDropTarget=null}addDragSource(z,J=!1){let Q={capturePointer:!0,dragSource:z,eElement:z.eElement,dragStartPixels:z.dragStartPixels,onDragStart:(Z)=>this.onDragStart(z,Z),onDragStop:this.onDragStop.bind(this),onDragging:this.onDragging.bind(this),onDragCancel:this.onDragCancel.bind(this),includeTouch:J};this.dragSourceAndParamsList.push(Q),this.beans.dragSvc.addDragSource(Q)}setDragImageCompIcon(z,J=!1){let Q=this.dragImageComp;if(Q&&(J||this.dragImageLastIcon!==z))this.dragImageLastIcon=z,Q.setIcon(z,J)}removeDragSource(z){let{dragSourceAndParamsList:J,beans:Q}=this;for(let Z=0,$=J.length;Z<$;Z++)if(J[Z].dragSource===z){let X=J[Z];Q.dragSvc?.removeDragSource(X),J.splice(Z,1);break}}destroy(){let{dragSourceAndParamsList:z,dropTargets:J,beans:Q}=this,Z=Q.dragSvc;for(let $ of z)Z?.removeDragSource($);z.length=0,J.length=0,this.externalDropZoneCount=0,this.clearDragAndDropProperties(),super.destroy()}nudge(){let z=this.lastMouseEvent;if(z)this.onDragging(z,!0)}onDragStart(z,J){this.lastMouseEvent=J,this.dragSource=z,this.dragItem=z.getDragItem();let Q=z.eElement.getBoundingClientRect();this.dragInitialSourcePointerOffsetX=J.clientX-Q.left,this.dragInitialSourcePointerOffsetY=J.clientY-Q.top,z.onDragStarted?.(),this.createAndUpdateDragImageComp(z)}onDragStop(z){let{dragSource:J,lastDropTarget:Q}=this;if(J?.onDragStopped?.(),Q){let Z=this.dropTargetEvent(Q,z,!1);Q.onDragStop?.(Z)}this.clearDragAndDropProperties()}onDragCancel(){let{dragSource:z,lastDropTarget:J,lastMouseEvent:Q}=this;if(z?.onDragCancelled?.(),J&&Q){let Z=this.dropTargetEvent(J,Q,!1);J.onDragCancel?.(Z)}this.clearDragAndDropProperties()}onDragging(z,J=!1){this.positionDragImageComp(z);let Q=this.findCurrentDropTarget(z),{lastDropTarget:Z,dragSource:$,dragItem:X}=this,Y=!1;if(Q!==Z){if(Y=!0,Z){let q=this.dropTargetEvent(Z,z,J);Z.onDragLeave?.(q)}if(Z!==null&&!Q)this.handleExit($,X);else if(Z===null&&Q)this.handleEnter($,X);if(Q){let q=this.dropTargetEvent(Q,z,J);Q.onDragEnter?.(q)}this.lastDropTarget=Q}else if(Q){let q=this.dropTargetEvent(Q,z,J);if(Q.onDragging?.(q),q?.changed)Y=!0}if(this.lastMouseEvent=z,Y)this.updateDragImageComp()}clearDragAndDropProperties(){this.removeDragImageComp(this.dragImageComp),this.dragImageCompPromise=null,this.dragImageLastIcon=void 0,this.dragImageLastLabel=void 0,this.lastMouseEvent=null,this.lastDraggingEvent=null,this.lastDropTarget=null,this.dragItem=null,this.dragInitialSourcePointerOffsetX=0,this.dragInitialSourcePointerOffsetY=0,this.dragSource=null}getAllContainersFromDropTarget(z){let J=z.getContainer(),Q=z.getSecondaryContainers?.(),Z=Q?.length;if(!Z)return[[J]];let $=Array(Z+1);$[0]=[J];for(let X=0;X{for(let U of G){let{width:_,height:H,left:W,right:B,top:E,bottom:K}=U.getBoundingClientRect();if(_===0||H===0)return!1;let F=q.clientX>=W&&q.clientX=E&&q.clientY0}findExternalZone(z){let J=this.dropTargets;for(let Q=0,Z=J.length;Q0?"down":E<0?"up":null,hDirection:B<0?"left":B>0?"right":null,initialSourcePointerOffsetX:q,initialSourcePointerOffsetY:G,dragSource:Z,fromNudge:Q,dragItem:$,dropZoneTarget:U,dropTarget:X?.dropTarget??null,changed:!!X?.changed});return this.lastDraggingEvent=K,K}positionDragImageComp(z){let J=this.dragImageComp?.getGui();if(J)JJ(J,z,this.beans)}removeDragImageComp(z){if(this.dragImageComp===z)this.dragImageComp=null;if(z)z.getGui()?.remove(),this.destroyBean(z)}createAndUpdateDragImageComp(z){let J=this.createDragImageComp(z)??null;this.dragImageCompPromise=J,J?.then((Q)=>{let Z=this.lastMouseEvent;if(J!==this.dragImageCompPromise||!Z||!this.isAlive()){this.destroyBean(Q);return}this.dragImageCompPromise=null,this.dragImageLastIcon=void 0,this.dragImageLastLabel=void 0;let $=this.dragImageComp;if($!==Q)this.dragImageComp=Q,this.removeDragImageComp($);if(Q)this.appendDragImageComp(Q),this.updateDragImageComp(),this.positionDragImageComp(Z)})}appendDragImageComp(z){let J=z.getGui(),Q=J.style;if(Q.position="absolute",Q.zIndex="9999",this.beans.dragSvc?.hasPointerCapture())Q.pointerEvents="none";this.gos.setInstanceDomData(J),this.beans.environment.applyThemeClasses(J),Q.top="20px",Q.left="20px";let Z=Rz(this.beans);if(!Z)this.warnNoBody();else Z.appendChild(J)}updateDragImageComp(){let{dragImageComp:z,dragSource:J,lastDropTarget:Q,lastDraggingEvent:Z,dragImageLastLabel:$}=this;if(!z)return;this.setDragImageCompIcon(Q?.getIconName?.(Z)??null);let X=J?.dragItemName;if(typeof X==="function")X=X(Z);if(X||(X=""),$!==X)this.dragImageLastLabel=X,z.setLabel(X)}};function w9(z){return typeof z==="object"&&!!z.component}function NU(z){if(!z)return!1;return z.prototype&&"getGui"in z.prototype}function N9(z,J,Q,Z){let{name:$}=Q,X,Y,q,G,U,_;if(J){let H=J,W=H[$+"Selector"],B=W?W(Z):null,E=(K)=>{if(typeof K==="string")X=K;else if(K!=null&&K!==!0)if(z.isFrameworkComponent(K))q=K;else Y=K};if(B)E(B.component),G=B.params,U=B.popup,_=B.popupPosition;else E(H[$])}return{compName:X,jsComp:Y,fwComp:q,paramsFromSelector:G,popupFromSelector:U,popupPositionFromSelector:_}}var gU=class extends S{constructor(){super(...arguments);this.beanName="userCompFactory"}wireBeans(z){this.agCompUtils=z.agCompUtils,this.registry=z.registry,this.frameworkCompWrapper=z.frameworkCompWrapper,this.gridOptions=z.gridOptions}getCompDetailsFromGridOptions(z,J,Q,Z=!1){return this.getCompDetails(this.gridOptions,z,J,Q,Z)}getCompDetails(z,J,Q,Z,$=!1){let{name:X,cellRenderer:Y}=J,{compName:q,jsComp:G,fwComp:U,paramsFromSelector:_,popupFromSelector:H,popupPositionFromSelector:W}=N9(this.beans.frameworkOverrides,z,J,Z),B,E,K=(M)=>{let f=this.registry.getUserComponent(X,M);if(f)G=!f.componentFromFramework?f.component:void 0,U=f.componentFromFramework?f.component:void 0,B=f.params,E=f.processParams};if(q!=null)K(q);if(G==null&&U==null&&Q!=null)K(Q);if(G&&Y&&!NU(G))G=this.agCompUtils?.adaptFunction(J,G);if(!G&&!U){let{validation:M}=this.beans;if($&&(q!==Q||!Q))if(q){if(!M?.isProvidedUserComp(q))r(50,{compName:q})}else if(Q){if(!M)r(260,{...this.gos.getModuleErrorParams(),propName:X,compName:Q})}else r(216,{name:X});else if(Q&&!M)r(146,{comp:Q});return}let F=this.mergeParams(z,J,Z,_,B,E),L=G==null,D=G??U;return{componentFromFramework:L,componentClass:D,params:F,type:J,popupFromSelector:H,popupPositionFromSelector:W,newAgStackInstance:()=>this.newAgStackInstance(D,L,F,J)}}newAgStackInstance(z,J,Q,Z){let $=!J,X;if($)X=new z;else X=this.frameworkCompWrapper.wrap(z,Z.mandatoryMethods,Z.optionalMethods,Z);this.createBean(X);let Y=X.init?.(Q);if(Y==null)return N.resolve(X);return Y.then(()=>X)}mergeParams(z,J,Q,Z=null,$,X){let Y={...Q,...$},G=z?.[J.name+"Params"];if(typeof G==="function"){let U=G(Q);D0(Y,U)}else if(typeof G==="object")D0(Y,G);return D0(Y,Z),X?X(Y):Y}},hU={name:"dateComponent",mandatoryMethods:["getDate","setDate"],optionalMethods:["afterGuiAttached","setInputPlaceholder","setInputAriaLabel","setDisabled","refresh"]},uU={name:"dragAndDropImageComponent",mandatoryMethods:["setIcon","setLabel"]},mU={name:"headerComponent",optionalMethods:["refresh"]},cU={name:"innerHeaderComponent"},iU={name:"innerHeaderGroupComponent"},pU={name:"headerGroupComponent"},nU={name:"innerRenderer",cellRenderer:!0,optionalMethods:["afterGuiAttached"]},dU={name:"cellRenderer",optionalMethods:["refresh","afterGuiAttached"],cellRenderer:!0};var rU={name:"loadingCellRenderer",cellRenderer:!0},tU={name:"cellEditor",mandatoryMethods:["getValue"],optionalMethods:["isPopup","isCancelBeforeStart","isCancelAfterEnd","getPopupPosition","focusIn","focusOut","afterGuiAttached","refresh"]},sU={name:"tooltipComponent"},CZ={name:"filter",mandatoryMethods:["isFilterActive","doesFilterPass","getModel","setModel"],optionalMethods:["afterGuiAttached","afterGuiDetached","onNewRowsLoaded","getModelAsString","onFloatingFilterChanged","onAnyFilterChanged","refresh"]},lU={name:"floatingFilterComponent",mandatoryMethods:["onParentModelChanged"],optionalMethods:["afterGuiAttached","refresh"]},aU={name:"fullWidthCellRenderer",optionalMethods:["refresh","afterGuiAttached"],cellRenderer:!0},oU={name:"loadingCellRenderer",cellRenderer:!0},eU={name:"groupRowRenderer",optionalMethods:["afterGuiAttached"],cellRenderer:!0},z_={name:"detailCellRenderer",optionalMethods:["refresh"],cellRenderer:!0};function J_(z,J){return z.getCompDetailsFromGridOptions(uU,"agDragAndDropImage",J,!0)}function h2(z,J,Q){return z.getCompDetails(J,nU,void 0,Q)}function Q_(z,J,Q){return z.getCompDetails(J,mU,"agColumnHeader",Q)}function Z_(z,J,Q){return z.getCompDetails(J,cU,void 0,Q)}function $_(z,J){let Q=J.columnGroup.getColGroupDef();return z.getCompDetails(Q,pU,"agColumnGroupHeader",J)}function X_(z,J,Q){return z.getCompDetails(J,iU,void 0,Q)}function Y_(z,J){return z.getCompDetailsFromGridOptions(aU,void 0,J,!0)}function q_(z,J){return z.getCompDetailsFromGridOptions(oU,"agLoadingCellRenderer",J,!0)}function G_(z,J){return z.getCompDetailsFromGridOptions(eU,"agGroupRowRenderer",J,!0)}function U_(z,J){return z.getCompDetailsFromGridOptions(z_,"agDetailCellRenderer",J,!0)}function kz(z,J,Q){return z.getCompDetails(J,dU,void 0,Q)}function V7(z,J,Q){return z.getCompDetails(J,rU,"agSkeletonCellRenderer",Q,!0)}function g9(z,J,Q){return z.getCompDetails(J,tU,"agCellEditor",Q,!0)}function yZ(z,J,Q,Z){let $=J.filter;if(w9($))J={filter:$.component,filterParams:J.filterParams};return z.getCompDetails(J,CZ,Z,Q,!0)}function __(z,J,Q){return z.getCompDetails(J,hU,"agDateInput",Q,!0)}function H_(z,J){return z.getCompDetails(J.colDef,sU,"agTooltipComponent",J,!0)}function bZ(z,J,Q,Z){return z.getCompDetails(J,lU,Z,Q)}function h9(z,J){return N9(z,J,CZ)}function JQ(z,J,Q){return z.mergeParams(J,CZ,Q)}var E4=((z)=>{return z[z.ToolPanel=0]="ToolPanel",z[z.HeaderCell=1]="HeaderCell",z[z.RowDrag=2]="RowDrag",z[z.ChartPanel=3]="ChartPanel",z[z.AdvancedFilterBuilder=4]="AdvancedFilterBuilder",z})(E4||{}),W_=class extends wU{createEvent(z){return C(this.gos,z)}createDragImageComp(z){let{gos:J,beans:Q}=this;return J_(Q.userCompFactory,C(J,{dragSource:z}))?.newAgStackInstance()}handleEnter(z,J){z?.onGridEnter?.(J)}handleExit(z,J){z?.onGridExit?.(J)}warnNoBody(){V(54)}isDropZoneWithinThisGrid(z){return this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody.contains(z.dropZoneTarget)}registerGridDropTarget(z,J){let Q={getContainer:z,isInterestedIn:(Z)=>Z===1||Z===0,getIconName:()=>"notAllowed"};this.addDropTarget(Q),J.addDestroyFunc(()=>this.removeDropTarget(Q))}};function u9(z){return!!z.operator}var m9="ag-resizer-wrapper",qz=(z,J)=>({tag:"div",ref:`${z}Resizer`,cls:`ag-resizer ag-resizer-${J}`}),B_={tag:"div",cls:m9,children:[qz("eTopLeft","topLeft"),qz("eTop","top"),qz("eTopRight","topRight"),qz("eRight","right"),qz("eBottomRight","bottomRight"),qz("eBottom","bottom"),qz("eBottomLeft","bottomLeft"),qz("eLeft","left")]},xZ=class extends k0{constructor(z,J){super();this.element=z,this.dragStartPosition={x:0,y:0},this.position={x:0,y:0},this.lastSize={width:-1,height:-1},this.positioned=!1,this.resizersAdded=!1,this.resizeListeners=[],this.boundaryEl=null,this.isResizing=!1,this.isMoving=!1,this.resizable={},this.movable=!1,this.currentResizer=null,this.config={popup:!1,...J}}wireBeans(z){this.popupSvc=z.popupSvc,this.dragSvc=z.dragSvc}center(z){let{clientHeight:J,clientWidth:Q}=this.offsetParent,Z=Q/2-this.getWidth()/2,$=J/2-this.getHeight()/2;this.offsetElement(Z,$,z)}initialisePosition(z){if(this.positioned)return;let{centered:J,forcePopupParentAsOffsetParent:Q,minWidth:Z,width:$,minHeight:X,height:Y,x:q,y:G}=this.config;if(!this.offsetParent)this.setOffsetParent();let U=0,_=0,H=B0(this.element);if(H){let W=this.findBoundaryElement(),B=window.getComputedStyle(W);if(B.minWidth!=null){let E=W.offsetWidth-this.element.offsetWidth;_=Number.parseInt(B.minWidth,10)-E}if(B.minHeight!=null){let E=W.offsetHeight-this.element.offsetHeight;U=Number.parseInt(B.minHeight,10)-E}}if(this.minHeight=X||U,this.minWidth=Z||_,$)this.setWidth($);if(Y)this.setHeight(Y);if(!$||!Y)this.refreshSize();if(J)this.center(z);else if(q||G)this.offsetElement(q,G,z);else if(H&&Q){let W=this.boundaryEl,B=!0;if(!W)W=this.findBoundaryElement(),B=!1;if(W){let E=Number.parseFloat(W.style.top),K=Number.parseFloat(W.style.left);if(B)this.offsetElement(Number.isNaN(K)?0:K,Number.isNaN(E)?0:E,z);else this.setPosition(K,E)}}this.positioned=!!this.offsetParent}isPositioned(){return this.positioned}getPosition(){return this.position}setMovable(z,J){if(!this.config.popup||z===this.movable)return;this.movable=z;let Q=this.moveElementDragListener||{eElement:J,onDragStart:this.onMoveStart.bind(this),onDragging:this.onMove.bind(this),onDragStop:this.onMoveEnd.bind(this)};if(z)this.dragSvc?.addDragSource(Q),this.moveElementDragListener=Q;else this.dragSvc?.removeDragSource(Q),this.moveElementDragListener=void 0}setResizable(z){if(this.clearResizeListeners(),z)this.addResizers();else this.removeResizers();if(typeof z==="boolean"){if(z===!1)return;z={topLeft:z,top:z,topRight:z,right:z,bottomRight:z,bottom:z,bottomLeft:z,left:z}}for(let J of Object.keys(z)){let Q=!!z[J],Z=this.getResizerElement(J),$={dragStartPixels:0,eElement:Z,onDragStart:(X)=>this.onResizeStart(X,J),onDragging:this.onResize.bind(this),onDragStop:(X)=>this.onResizeEnd(X,J)};if(Q||!this.isAlive()&&!Q){if(Q)this.dragSvc?.addDragSource($),this.resizeListeners.push($),Z.style.pointerEvents="all";else Z.style.pointerEvents="none";this.resizable[J]=Q}}}removeSizeFromEl(){this.element.style.removeProperty("height"),this.element.style.removeProperty("width"),this.element.style.removeProperty("flex")}restoreLastSize(){this.element.style.flex="0 0 auto";let{height:z,width:J}=this.lastSize;if(J!==-1)this.element.style.width=`${J}px`;if(z!==-1)this.element.style.height=`${z}px`}getHeight(){return this.element.offsetHeight}setHeight(z){let{popup:J}=this.config,Q=this.element,Z=!1;if(typeof z==="string"&&z.includes("%"))H2(Q,z),z=n8(Q),Z=!0;else if(z=Math.max(this.minHeight,z),this.positioned){let $=this.getAvailableHeight();if($&&z>$)z=$}if(this.getHeight()===z)return;if(Z)Q.style.maxHeight="unset",Q.style.minHeight="unset";else if(J)H2(Q,z);else Q.style.height=`${z}px`,Q.style.flex="0 0 auto",this.lastSize.height=typeof z==="number"?z:Number.parseFloat(z)}getAvailableHeight(){let{popup:z,forcePopupParentAsOffsetParent:J}=this.config;if(!this.positioned)this.initialisePosition();let{clientHeight:Q}=this.offsetParent;if(!Q)return null;let Z=this.element.getBoundingClientRect(),$=this.offsetParent.getBoundingClientRect(),X=z?this.position.y:Z.top,Y=z?0:$.top,q=0;if(J){let U=this.element.parentElement;if(U){let{bottom:_}=U.getBoundingClientRect();q=_-Z.bottom}}return Q+Y-X-q}getWidth(){return this.element.offsetWidth}setWidth(z){let J=this.element,{popup:Q}=this.config,Z=!1;if(typeof z==="string"&&z.includes("%"))N4(J,z),z=P6(J),Z=!0;else if(this.positioned){z=Math.max(this.minWidth,z);let{clientWidth:$}=this.offsetParent,X=Q?this.position.x:this.element.getBoundingClientRect().left;if($&&z+X>$)z=$-X}if(this.getWidth()===z)return;if(Z)J.style.maxWidth="unset",J.style.minWidth="unset";else if(this.config.popup)N4(J,z);else J.style.width=`${z}px`,J.style.flex=" unset",this.lastSize.width=typeof z==="number"?z:Number.parseFloat(z)}offsetElement(z=0,J=0,Q){let{forcePopupParentAsOffsetParent:Z}=this.config,$=Z?this.boundaryEl:this.element;if(!$)return;this.popupSvc?.positionPopup({ePopup:$,keepWithinBounds:!0,skipObserver:this.movable||this.isResizable(),updatePosition:()=>({x:z,y:J}),postProcessCallback:Q}),this.setPosition(Number.parseFloat($.style.left),Number.parseFloat($.style.top))}constrainSizeToAvailableHeight(z){if(!this.config.forcePopupParentAsOffsetParent)return;let J=()=>{let Q=this.getAvailableHeight();this.element.style.setProperty("max-height",`${Q}px`)};if(z&&this.popupSvc)this.resizeObserverSubscriber?.(),this.resizeObserverSubscriber=j4(this.beans,this.popupSvc?.getPopupParent(),J);else if(this.element.style.removeProperty("max-height"),this.resizeObserverSubscriber)this.resizeObserverSubscriber(),this.resizeObserverSubscriber=void 0}setPosition(z,J){this.position.x=z,this.position.y=J}updateDragStartPosition(z,J){this.dragStartPosition={x:z,y:J}}calculateMouseMovement(z){let{e:J,isLeft:Q,isTop:Z,anywhereWithin:$,topBuffer:X}=z,Y=J.clientX-this.dragStartPosition.x,q=J.clientY-this.dragStartPosition.y,G=this.shouldSkipX(J,!!Q,!!$,Y)?0:Y,U=this.shouldSkipY(J,!!Z,X,q)?0:q;return{movementX:G,movementY:U}}shouldSkipX(z,J,Q,Z){let $=this.element.getBoundingClientRect(),X=this.offsetParent.getBoundingClientRect(),Y=this.boundaryEl.getBoundingClientRect(),q=this.config.popup?this.position.x:$.left,G=q<=0&&X.left>=z.clientX||X.right<=z.clientX&&X.right<=Y.right;if(G)return!0;if(J)G=Z<0&&z.clientX>q+X.left||Z>0&&z.clientXY.right||Z>0&&z.clientXY.right||Z>0&&z.clientX=z.clientY||X.bottom<=z.clientY&&X.bottom<=Y.bottom;if(G)return!0;if(J)G=Z<0&&z.clientY>q+X.top+Q||Z>0&&z.clientYY.bottom||Z>0&&z.clientY({element:this.element.querySelector(`[data-ref=${J}Resizer]`)});this.resizerMap={topLeft:z("eTopLeft"),top:z("eTop"),topRight:z("eTopRight"),right:z("eRight"),bottomRight:z("eBottomRight"),bottom:z("eBottom"),bottomLeft:z("eBottomLeft"),left:z("eLeft")}}addResizers(){if(this.resizersAdded)return;let z=this.element;if(!z)return;z.appendChild(H0(B_)),this.createResizeMap(),this.resizersAdded=!0}removeResizers(){this.resizerMap=void 0,this.element.querySelector(`.${m9}`)?.remove(),this.resizersAdded=!1}getResizerElement(z){return this.resizerMap[z].element}onResizeStart(z,J){if(this.boundaryEl=this.findBoundaryElement(),!this.positioned)this.initialisePosition();this.currentResizer={isTop:!!J.match(/top/i),isRight:!!J.match(/right/i),isBottom:!!J.match(/bottom/i),isLeft:!!J.match(/left/i)},this.element.classList.add("ag-resizing"),this.resizerMap[J].element.classList.add("ag-active");let{popup:Q,forcePopupParentAsOffsetParent:Z}=this.config;if(!Q&&!Z)this.applySizeToSiblings(this.currentResizer.isBottom||this.currentResizer.isTop);this.isResizing=!0,this.updateDragStartPosition(z.clientX,z.clientY)}getSiblings(){let J=this.element.parentElement;if(!J)return null;return Array.prototype.slice.call(J.children).filter((Q)=>!Q.classList.contains("ag-hidden"))}getMinSizeOfSiblings(){let z=this.getSiblings()||[],J=0,Q=0;for(let Z of z){let $=!!Z.style.flex&&Z.style.flex!=="0 0 auto";if(Z===this.element)continue;let X=this.minHeight||0,Y=this.minWidth||0;if($){let q=window.getComputedStyle(Z);if(q.minHeight)X=Number.parseInt(q.minHeight,10);if(q.minWidth)Y=Number.parseInt(q.minWidth,10)}else X=Z.offsetHeight,Y=Z.offsetWidth;J+=X,Q+=Y}return{height:J,width:Q}}applySizeToSiblings(z){let J=null,Q=this.getSiblings();if(!Q)return;for(let Z=0;Zz)}onResize(z){if(!this.isResizing||!this.currentResizer)return;let{popup:J,forcePopupParentAsOffsetParent:Q}=this.config,{isTop:Z,isRight:$,isBottom:X,isLeft:Y}=this.currentResizer,q=$||Y,G=X||Z,{movementX:U,movementY:_}=this.calculateMouseMovement({e:z,isLeft:Y,isTop:Z}),H=this.position.x,W=this.position.y,B=0,E=0;if(q&&U){let K=Y?-1:1,F=this.getWidth(),L=F+U*K,D=!1;if(Y){if(B=F-L,H+B<=0||L<=this.minWidth)D=!0,B=0}if(!D)this.setWidth(L)}if(G&&_){let K=Z?-1:1,F=this.getHeight(),L=F+_*K,D=!1;if(Z){if(E=F-L,W+E<=0||L<=this.minHeight)D=!0,E=0}else if(!this.config.popup&&!this.config.forcePopupParentAsOffsetParent&&Fthis.element.parentElement.offsetHeight)D=!0;if(!D)this.setHeight(L)}if(this.updateDragStartPosition(z.clientX,z.clientY),(J||Q)&&B||E)this.offsetElement(H+B,W+E)}onResizeEnd(z,J){this.isResizing=!1,this.currentResizer=null,this.boundaryEl=null,this.element.classList.remove("ag-resizing"),this.resizerMap[J].element.classList.remove("ag-active"),this.dispatchLocalEvent({type:"resize"})}refreshSize(){let z=this.element;if(this.config.popup){if(!this.config.width)this.setWidth(z.offsetWidth);if(!this.config.height)this.setHeight(z.offsetHeight)}}onMoveStart(z){if(this.boundaryEl=this.findBoundaryElement(),!this.positioned)this.initialisePosition();this.isMoving=!0,this.element.classList.add("ag-moving"),this.updateDragStartPosition(z.clientX,z.clientY)}onMove(z){if(!this.isMoving)return;let{x:J,y:Q}=this.position,Z;if(this.config.calculateTopBuffer)Z=this.config.calculateTopBuffer();let{movementX:$,movementY:X}=this.calculateMouseMovement({e:z,isTop:!0,anywhereWithin:!0,topBuffer:Z});this.offsetElement(J+$,Q+X),this.updateDragStartPosition(z.clientX,z.clientY)}onMoveEnd(){this.isMoving=!1,this.boundaryEl=null,this.element.classList.remove("ag-moving")}setOffsetParent(){if(this.config.forcePopupParentAsOffsetParent&&this.popupSvc)this.offsetParent=this.popupSvc.getPopupParent();else this.offsetParent=this.element.offsetParent}findBoundaryElement(){let z=this.element;while(z){if(window.getComputedStyle(z).position!=="static")return z;z=z.parentElement}return this.element}clearResizeListeners(){while(this.resizeListeners.length){let z=this.resizeListeners.pop();this.dragSvc?.removeDragSource(z)}}destroy(){if(super.destroy(),this.moveElementDragListener)this.dragSvc?.removeDragSource(this.moveElementDragListener);this.constrainSizeToAvailableHeight(!1),this.clearResizeListeners(),this.removeResizers()}},u2=class extends xZ{},j=null;function x1(z){return typeof z?.getGui==="function"}var c9=class{constructor(z){this.cssClassStates={},this.getGui=z}toggleCss(z,J){if(!z)return;if(z.includes(" ")){let Z=(z||"").split(" ");if(Z.length>1){for(let $ of Z)this.toggleCss($,J);return}}if(this.cssClassStates[z]!==J&&z.length)this.getGui()?.classList.toggle(z,J),this.cssClassStates[z]=J}},E_=0,I0=class extends k0{constructor(z,J){super();if(this.suppressDataRefValidation=!1,this.displayed=!0,this.visible=!0,this.compId=E_++,this.cssManager=new c9(()=>this.eGui),this.componentSelectors=new Map((J??[]).map((Q)=>[Q.selector,Q])),z)this.setTemplate(z)}preConstruct(){this.wireTemplate(this.getGui()),this.addGlobalCss()}wireTemplate(z,J){if(z&&this.gos)this.applyElementsToComponent(z),this.createChildComponentsFromTags(z,J)}getCompId(){return this.compId}getDataRefAttribute(z){if(z.getAttribute)return z.getAttribute(a8);return null}applyElementsToComponent(z,J,Q,Z=null){if(J===void 0)J=this.getDataRefAttribute(z);if(J){let $=this[J];if($===j)this[J]=Z??z;else{let X=Q?.[J];if(!this.suppressDataRefValidation&&!X)throw Error(`data-ref: ${J} on ${this.constructor.name} with ${$}`)}}}createChildComponentsFromTags(z,J){let Q=[];for(let Z of z.childNodes??[])Q.push(Z);for(let Z of Q){if(!(Z instanceof HTMLElement))continue;let $=this.createComponentFromElement(Z,(X)=>{let Y=X.getGui();if(Y)for(let q of Z.attributes??[])Y.setAttribute(q.name,q.value)},J);if($){if($.addItems&&Z.children.length){this.createChildComponentsFromTags(Z,J);let X=Array.prototype.slice.call(Z.children);$.addItems(X)}this.swapComponentForNode($,z,Z)}else if(Z.childNodes)this.createChildComponentsFromTags(Z,J)}}createComponentFromElement(z,J,Q){let Z=z.nodeName,$=this.getDataRefAttribute(z),X=Z.indexOf("AG-")===0,Y=X?this.componentSelectors.get(Z):null,q=null;if(Y){let G=Q&&$?Q[$]:void 0;q=new Y.component(G),q.setParentComponent(this),this.createBean(q,null,J)}else if(X)throw Error(`selector: ${Z}`);return this.applyElementsToComponent(z,$,Q,q),q}swapComponentForNode(z,J,Q){let Z=z.getGui();J.replaceChild(Z,Q),J.insertBefore(document.createComment(Q.nodeName),Z),this.addDestroyFunc(this.destroyBean.bind(this,z))}activateTabIndex(z,J){let Q=J??this.gos.get("tabIndex");if(!z)z=[];if(!z.length)z.push(this.getGui());for(let Z of z)Z.setAttribute("tabindex",Q.toString())}setTemplate(z,J,Q){let Z;if(typeof z==="string"||z==null)Z=KZ(z);else Z=H0(z);this.setTemplateFromElement(Z,J,Q)}setTemplateFromElement(z,J,Q,Z=!1){if(this.eGui=z,this.suppressDataRefValidation=Z,J)for(let $=0;$this.eGui.removeEventListener(z,J))}addCss(z){this.cssManager.toggleCss(z,!0)}removeCss(z){this.cssManager.toggleCss(z,!1)}toggleCss(z,J){this.cssManager.toggleCss(z,J)}registerCSS(z){if(this.css===R7)this.css=[z],this.addGlobalCss();else this.css||(this.css=[]),this.css.push(z)}addGlobalCss(){if(Array.isArray(this.css)){let z="component-"+Object.getPrototypeOf(this)?.constructor?.name;for(let J of this.css??[])this.beans.environment.addGlobalCSS(J,z)}this.css=R7}},R7=Symbol(),x=class extends I0{},QQ,ZQ,$Q,XQ,uQ,mQ,YQ;function jz(){if(QQ===void 0)QQ=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);return QQ}function oz(){if(ZQ===void 0)ZQ=/(firefox)/i.test(navigator.userAgent);return ZQ}function i9(){if($Q===void 0)$Q=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);return $Q}function a4(){if(XQ===void 0)XQ=/iPad|iPhone|iPod/.test(navigator.platform)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1;return XQ}function cQ(z){if(!z)return null;let J=z.tabIndex,Q=z.getAttribute("tabIndex");if(J===-1&&(Q===null||Q===""&&!oz()))return null;return J.toString()}function K_(){if(YQ!==void 0)return YQ;if(!document.body)return-1;let z=1e6,J=oz()?6000000:1e9,Q=document.createElement("div");document.body.appendChild(Q);while(!0){let Z=z*2;if(Q.style.height=Z+"px",Z>J||Q.clientHeight!==Z)break;else z=Z}return Q.remove(),YQ=z,z}function wZ(){if(mQ==null)p9();return mQ}function p9(){let z=document.body,J=document.createElement("div");J.style.width=J.style.height="100px",J.style.opacity="0",J.style.overflow="scroll",J.style.msOverflowStyle="scrollbar",J.style.position="absolute",z.appendChild(J);let Q=J.offsetWidth-J.clientWidth;if(Q===0&&J.clientWidth===0)Q=null;if(J.parentNode)J.remove();if(Q!=null)mQ=Q,uQ=Q===0}function n9(){if(uQ==null)p9();return uQ}var iQ=!1,w6=0;function F_(z){if(w6>0)return;z.addEventListener("keydown",N6),z.addEventListener("mousedown",N6)}function L_(z){if(w6>0)return;z.removeEventListener("keydown",N6),z.removeEventListener("mousedown",N6)}function N6(z){let J=iQ,Q=z.type==="keydown";if(Q){if(z.ctrlKey||z.metaKey||z.altKey)return}if(J===Q)return;iQ=Q}function D_(z){let J=Y0(z);return F_(J),w6++,()=>{w6--,L_(J)}}function n1(){return iQ}function V4(z,J,Q=!1){let Z=AG,$=p8;if(J)$+=", "+J;if(Q)$+=', [tabindex="-1"]';let X=Array.prototype.slice.apply(z.querySelectorAll(Z)).filter((G)=>{return B0(G)}),Y=Array.prototype.slice.apply(z.querySelectorAll($));if(!Y.length)return X;return((G,U)=>G.filter((_)=>U.indexOf(_)===-1))(X,Y)}function E0(z,J=!1,Q=!1,Z=!1){let $=V4(z,Z?".ag-tab-guard":null,Q),X=J?y($):$[0];if(X)return X.focus({preventScroll:!0}),!0;return!1}function O0(z,J,Q,Z){let $=V4(J,Q?':not([tabindex="-1"])':null),X=n(z),Y;if(Q)Y=$.findIndex((G)=>G.contains(X));else Y=$.indexOf(X);let q=Y+(Z?-1:1);if(q<0||q>=$.length)return null;return $[q]}function _J(z,J=5){let Q=0;while(z&&cQ(z)===null&&++Q<=J)z=z.parentElement;if(cQ(z)===null)return null;return z}var NZ="ag-focus-managed",d9=class extends k0{constructor(z,J={isStopPropagation:()=>!1,stopPropagation:()=>{}},Q={}){super();this.eFocusable=z,this.stopPropagationCallbacks=J,this.callbacks=Q,this.callbacks={shouldStopEventPropagation:()=>!1,onTabKeyDown:(Z)=>{if(Z.defaultPrevented)return;let $=O0(this.beans,this.eFocusable,!1,Z.shiftKey);if(!$)return;$.focus(),Z.preventDefault()},...Q}}postConstruct(){let{eFocusable:z,callbacks:{onFocusIn:J,onFocusOut:Q}}=this;if(z.classList.add(NZ),this.addKeyDownListeners(z),J)this.addManagedElementListeners(z,{focusin:J});if(Q)this.addManagedElementListeners(z,{focusout:Q})}addKeyDownListeners(z){this.addManagedElementListeners(z,{keydown:(J)=>{if(J.defaultPrevented||this.stopPropagationCallbacks.isStopPropagation(J))return;let{callbacks:Q}=this;if(Q.shouldStopEventPropagation(J)){this.stopPropagationCallbacks.stopPropagation(J);return}if(J.key===k.TAB)Q.onTabKeyDown(J);else if(Q.handleKeyDown)Q.handleKeyDown(J)}})}},r9="__ag_Grid_Stop_Propagation";function l0(z){z[r9]=!0}function q4(z){return z[r9]===!0}var Oz={isStopPropagation:q4,stopPropagation:l0},Jz=class extends d9{constructor(z,J){super(z,Oz,J)}},M_={applyFilter:"Apply",clearFilter:"Clear",resetFilter:"Reset",cancelFilter:"Cancel",textFilter:"Text Filter",numberFilter:"Number Filter",bigintFilter:"BigInt Filter",dateFilter:"Date Filter",setFilter:"Set Filter",filterOoo:"Filter...",empty:"Choose one",equals:"Equals",notEqual:"Does not equal",lessThan:"Less than",greaterThan:"Greater than",inRange:"Between",inRangeStart:"From",inRangeEnd:"To",lessThanOrEqual:"Less than or equal to",greaterThanOrEqual:"Greater than or equal to",contains:"Contains",notContains:"Does not contain",startsWith:"Begins with",endsWith:"Ends with",blank:"Blank",notBlank:"Not blank",before:"Before",after:"After",andCondition:"AND",orCondition:"OR",dateFormatOoo:"yyyy-mm-dd",filterSummaryInactive:"is (All)",filterSummaryContains:"contains",filterSummaryNotContains:"does not contain",filterSummaryTextEquals:"equals",filterSummaryTextNotEqual:"does not equal",filterSummaryStartsWith:"begins with",filterSummaryEndsWith:"ends with",filterSummaryBlank:"is blank",filterSummaryNotBlank:"is not blank",filterSummaryEquals:"=",filterSummaryNotEqual:"!=",filterSummaryGreaterThan:">",filterSummaryGreaterThanOrEqual:">=",filterSummaryLessThan:"<",filterSummaryLessThanOrEqual:"<=",filterSummaryInRange:"between",yesterday:"Yesterday",today:"Today",tomorrow:"Tomorrow",last7Days:"Last 7 Days",lastWeek:"Last Week",thisWeek:"This Week",nextWeek:"Next Week",last30Days:"Last 30 Days",lastMonth:"Last Month",thisMonth:"This Month",nextMonth:"Next Month",last90Days:"Last 90 Days",lastQuarter:"Last Quarter",thisQuarter:"This Quarter",nextQuarter:"Next Quarter",lastYear:"Last Year",thisYear:"This Year",yearToDate:"Year To Date",nextYear:"Next Year",last6Months:"Last 6 Months",last12Months:"Last 12 Months",last24Months:"Last 24 Months",filterSummaryInRangeValues:(z)=>`(${z[0]}, ${z[1]})`,filterSummaryTextQuote:(z)=>`"${z[0]}"`,minDateValidation:(z)=>`Date must be after ${z[0]}`,maxDateValidation:(z)=>`Date must be before ${z[0]}`,strictMinValueValidation:(z)=>`Must be greater than ${z[0]}`,strictMaxValueValidation:(z)=>`Must be less than ${z[0]}`};function k4(z,J,Q){return DZ(z,M_,J,Q)}function gZ(z,J){let{debounceMs:Q}=z;if(d1(z)){if(Q!=null)V(71);return 0}return Q??J}function d1(z){return(z.buttons?.indexOf("apply")??-1)>=0}function t9(z,J,Q,Z){let $=k4(z,Q);if(typeof J==="function"){let X=k4(z,Z);$=J({filterOptionKey:Z,filterOption:X,placeholder:$})}else if(typeof J==="string")$=J;return $}var $1=class extends x{constructor(z,J){super();this.filterNameKey=z,this.cssIdentifier=J,this.applyActive=!1,this.debouncePending=!1,this.defaultDebounceMs=0}postConstruct(){let z={tag:"div",cls:`ag-filter-body-wrapper ag-${this.cssIdentifier}-body-wrapper`,children:[this.createBodyTemplate()]};this.setTemplate(z,this.getAgComponents()),this.createManagedBean(new Jz(this.getFocusableElement(),{handleKeyDown:this.handleKeyDown.bind(this)})),this.positionableFeature=this.createBean(new u2(this.getPositionableElement(),{forcePopupParentAsOffsetParent:!0}))}handleKeyDown(z){}init(z){let J=z;this.setParams(J),this.setModelIntoUi(J.state.model,!0).then(()=>this.updateUiVisibility())}areStatesEqual(z,J){return z===J}refresh(z){let J=z,Q=this.params;this.params=J;let{source:Z,state:$,additionalEventAttributes:X}=J;if(Z==="colDef")this.updateParams(J,Q);let Y=this.state;this.state=$;let q=X?.fromAction;if(q&&q!=="apply"||$.model!==Y.model||!this.areStatesEqual($.state,Y.state))this.setModelIntoUi($.model);return!0}setParams(z){this.params=z,this.state=z.state,this.commonUpdateParams(z)}updateParams(z,J){this.commonUpdateParams(z,J)}commonUpdateParams(z,J){this.applyActive=d1(z),this.setupApplyDebounced()}doesFilterPass(z){V(283);let{getHandler:J,model:Q,column:Z}=this.params;return J().doesFilterPass({...z,model:Q,handlerParams:this.beans.colFilter.getHandlerParams(Z)})}getFilterTitle(){return this.translate(this.filterNameKey)}isFilterActive(){return V(284),this.params.model!=null}setupApplyDebounced(){let z=gZ(this.params,this.defaultDebounceMs),J=i0(this,this.checkApplyDebounce.bind(this),z);this.applyDebounced=()=>{this.debouncePending=!0,J()}}checkApplyDebounce(){if(this.debouncePending)this.debouncePending=!1,this.doApplyModel()}getModel(){return V(285),this.params.model}setModel(z){V(286);let{beans:J,params:Q}=this;return J.colFilter.setModelForColumnLegacy(Q.column,z)}applyModel(z="api"){return this.doApplyModel()}canApply(z){return!0}doApplyModel(z){let{params:J,state:{valid:Q=!0,model:Z}}=this;if(!Q)return!1;let $=!this.areModelsEqual(J.model,Z);if($)J.onAction("apply",z);return $}onNewRowsLoaded(){}onUiChanged(z,J=!1){this.updateUiVisibility();let Q=this.getModelFromUi(),Z={model:Q,state:this.getState(),valid:this.canApply(Q)};this.state=Z;let{params:$,gos:X,eventSvc:Y,applyActive:q}=this;if($.onStateChange(Z),$.onUiChange(this.getUiChangeEventParams()),!X.get("enableFilterHandlers"))Y.dispatchEvent({type:"filterModified",column:$.column,filterInstance:this});if(!Z.valid)return;if(z??(z=q?void 0:"debounce"),z==="immediately")this.doApplyModel({afterFloatingFilter:J,afterDataChange:!1});else if(z==="debounce")this.applyDebounced()}getState(){return}getUiChangeEventParams(){return}afterGuiAttached(z){this.lastContainerType=z?.container,this.refreshFilterResizer(z?.container)}refreshFilterResizer(z){let{positionableFeature:J,gos:Q}=this;if(!J)return;let Z=z==="floatingFilter"||z==="columnFilter";if(Z)J.restoreLastSize(),J.setResizable(Q.get("enableRtl")?{bottom:!0,bottomLeft:!0,left:!0}:{bottom:!0,bottomRight:!0,right:!0});else J.removeSizeFromEl(),J.setResizable(!1);J.constrainSizeToAvailableHeight(Z)}afterGuiDetached(){this.checkApplyDebounce(),this.positionableFeature?.constrainSizeToAvailableHeight(!1)}destroy(){this.positionableFeature=this.destroyBean(this.positionableFeature),super.destroy()}translate(z,J){return k4(this,z,J)}getPositionableElement(){return this.getGui()}areModelsEqual(z,J){if(z===J||z==null&&J==null)return!0;if(z==null||J==null)return!1;return this.areNonNullModelsEqual(z,J)}};var hZ=class extends I0{isPopup(){return!0}setParentComponent(z){z.addCss("ag-has-popup"),super.setParentComponent(z)}destroy(){let z=this.parentComponent;if(z?.isAlive())z.getGui().classList.remove("ag-has-popup");super.destroy()}},k_=class extends hZ{constructor(){super(...arguments);this.errorMessages=null}init(z){this.params=z,this.initialiseEditor(z),this.eEditor.onValueChange(()=>z.validate())}destroy(){this.eEditor.destroy(),this.errorMessages=null,super.destroy()}};function uZ(z){let J=z.rowModel;return J.getType()==="clientSide"?J:void 0}var A7="row-group-",f_="t-",S_="b-",V_=0,Pz=class{constructor(z){this.id=void 0,this.destroyed=!1,this._groupData=void 0,this.master=!1,this.detail=void 0,this.rowIndex=null,this.field=null,this.rowGroupColumn=null,this.key=null,this.sourceRowIndex=-1,this._leafs=void 0,this.childrenAfterGroup=null,this.childrenAfterFilter=null,this.childrenAfterAggFilter=null,this.childrenAfterSort=null,this.allChildrenCount=null,this.childrenMapped=null,this.treeParent=null,this.treeNodeFlags=0,this._expanded=void 0,this.displayed=!1,this.rowTop=null,this.oldRowTop=null,this.selectable=!0,this.__objectId=V_++,this.alreadyRendered=!1,this.formulaRowIndex=null,this.hovered=!1,this.__selected=!1,this.beans=z}get groupData(){let z=this._groupData;if(z!==void 0)return z;if(this.footer)return this.sibling?.groupData;return this.beans.groupStage?.loadGroupData(this)??null}set groupData(z){this._groupData=z}get primaryRow(){let z=this.footer&&this.sibling||this;if(z.rowPinned){let J=z.pinnedSibling;if(J){if(z=J,z.footer)z=z.sibling??z}}return z}get allLeafChildren(){let z=this._leafs;return z===void 0?this.beans.groupStage?.loadLeafs?.(this)??null:z}set allLeafChildren(z){this._leafs=z}get expanded(){let z=this.beans.expansionSvc;return z?z.isExpanded(this):this.level===-1?!0:!!this._expanded}set expanded(z){this._expanded=z}setData(z){this.setDataCommon(z,"set")}updateData(z){this.setDataCommon(z,"update")}_updateDataNoSibling(z){this.setDataCommon(z,"updateNoSibling")}setDataCommon(z,J){let{valueCache:Q,eventSvc:Z}=this.beans,$=this.data,X=J!=="set";this.data=z,Q?.onDataChanged(),this.updateDataOnDetailNode(),this.resetQuickFilterAggregateText();let Y=this.createDataChangedEvent(z,$,X);if(this.__localEventService?.dispatchEvent(Y),J!=="updateNoSibling"){let G=this.sibling;if(G){G.data=z;let U=G.createDataChangedEvent(z,$,X);G.__localEventService?.dispatchEvent(U)}}Z.dispatchEvent({type:"rowNodeDataChanged",node:this});let q=this.pinnedSibling;if(q)q.data=z,q.__localEventService?.dispatchEvent(q.createDataChangedEvent(z,$,X)),Z.dispatchEvent({type:"rowNodeDataChanged",node:q})}updateDataOnDetailNode(){let z=this.detailNode;if(z)z.data=this.data}createDataChangedEvent(z,J,Q){return{type:"dataChanged",node:this,oldData:J,newData:z,update:Q}}getRowIndexString(){if(this.rowIndex==null)return r(13),null;if(this.rowPinned==="top")return f_+this.rowIndex;if(this.rowPinned==="bottom")return S_+this.rowIndex;return this.rowIndex.toString()}setDataAndId(z,J){let{selectionSvc:Q}=this.beans,Z=Q?.createDaemonNode?.(this),$=this.data;if(this.data=z,this.updateDataOnDetailNode(),this.setId(J),Q)Q.updateRowSelectable(this),Q.syncInRowNode(this,Z);let X=this.createDataChangedEvent(z,$,!1);this.__localEventService?.dispatchEvent(X)}setId(z){let J=wQ(this.beans.gos);if(J)if(this.data){let Q=this.parent?.getRoute()??[];if(this.id=J({data:this.data,parentKeys:Q.length>0?Q:void 0,level:this.level,rowPinned:this.rowPinned}),this.id.startsWith(A7))r(14,{groupPrefix:A7})}else this.id=void 0;else this.id=z}setRowTop(z){if(this.oldRowTop=this.rowTop,this.rowTop===z)return;this.rowTop=z,this.dispatchRowEvent("topChanged");let J=z!==null;if(this.displayed!==J)this.displayed=J,this.dispatchRowEvent("displayedChanged")}clearRowTopAndRowIndex(){this.oldRowTop=null,this.setRowTop(null),this.setRowIndex(null)}setHovered(z){this.hovered=z}isHovered(){return this.hovered}setRowHeight(z,J=!1){this.rowHeight=z,this.rowHeightEstimated=J,this.dispatchRowEvent("heightChanged")}setExpanded(z,J,Q){this.beans.expansionSvc?.setExpanded(this,z,J,Q)}setDataValue(z,J,Q){let{colModel:Z,valueSvc:$,gos:X,editSvc:Y}=this.beans;if(z==null)return!1;let q=Z.getColOrColDefCol(z);if(!q)return!1;let G=q.colDef.pivotValueColumn;if(!this.group&&!this.rowPinned&&G)q=G;let U=$.getValueForDisplay({column:q,node:this,from:"data"}).value;if(X.get("readOnlyEdit")){let{beans:{eventSvc:H},data:W,rowIndex:B,rowPinned:E}=this;return H.dispatchEvent({type:"cellEditRequest",event:null,rowIndex:B,rowPinned:E,column:q,colDef:q.colDef,data:W,node:this,oldValue:U,newValue:J,value:J,source:Q}),!1}if(Q!=="data"&&Y&&!Y.committing){let H=Y.setDataValue({rowNode:this,column:q},J,Q);if(H!=null)return H}let _=$.setValue(this,q,J,Q);if(this.dispatchCellChangedEvent(q,J,U),_)this.pinnedSibling?.dispatchCellChangedEvent(q,J,U);return _}getDataValue(z,J){let Q=this.beans,Z=Q.colModel.getColOrColDefCol(z);if(!Z)return;let $;if(J==="data"||!J){if($=Q.valueSvc.getValue(Z,this,"data",!1),$==null)return $}else{let X=J==="data-raw",Y=X||J==="value"?"data":J;if($=Q.valueSvc.getValue(Z,this,Y,X),X||$==null)return $;if(typeof $==="object"&&Z.aggFunc){if(typeof $.toNumber==="function")return $.toNumber();if("value"in $)return $.value}if(J!=="value")return $}if(Z.colDef.allowFormula){let X=Q.formula;if(X?.isFormula($)&&Z.isAllowFormula())$=X.resolveValue(Z,this)}return $}updateHasChildren(){let z=this.group&&!this.footer||!!this.childrenAfterGroup?.length,{rowChildrenSvc:J}=this.beans;if(J)z=J.getHasChildrenValue(this);if(z!==this.__hasChildren)this.__hasChildren=!!z,this.dispatchRowEvent("hasChildrenChanged")}hasChildren(){if(this.__hasChildren==null)this.updateHasChildren();return this.__hasChildren}dispatchCellChangedEvent(z,J,Q){let Z={type:"cellChanged",node:this,column:z,newValue:J,oldValue:Q};this.__localEventService?.dispatchEvent(Z)}resetQuickFilterAggregateText(){this.quickFilterAggregateText=null}isExpandable(){return this.beans.expansionSvc?.isExpandable(this)??!1}isSelected(){if(this.footer)return this.sibling.isSelected();let z=this.rowPinned&&this.pinnedSibling;if(z)return z.isSelected();return this.__selected}depthFirstSearch(z){let J=this.childrenAfterGroup;if(J)for(let Q=0,Z=J.length;Q{let Q=new Pz(J);for(let Z of Object.keys(z)){if(R_.has(Z))continue;Q[Z]=z[Z]}return Q.oldRowTop=null,Q},l9=(z,J,Q)=>{if(!Q)return;let Z=Q.rowIndex;if(Z==null)return;Z+=J;let $=z.getRowCount();while(Z>=0&&Z<$){let X=z.getRow(Z);if(!X||!X.footer&&!X.detail)return X;Z+=J}return};var A_=500,j_=550,q6,O_=(z)=>{if(!q6)q6=new WeakSet;else if(q6.has(z))return!1;return q6.add(z),!0},c0=class{constructor(z,J=!1){this.eElement=z,this.preventClick=J,this.startListener=null,this.handlers=[],this.eventSvc=void 0,this.touchStart=null,this.lastTapTime=null,this.longPressTimer=0,this.moved=!1}addEventListener(z,J){let Q=this.eventSvc;if(!Q){if(Q===null)return;this.eventSvc=Q=new R4;let Z=this.onTouchStart.bind(this);this.startListener=Z,this.eElement.addEventListener("touchstart",Z,{passive:!0})}Q.addEventListener(z,J)}removeEventListener(z,J){this.eventSvc?.removeEventListener(z,J)}onTouchStart(z){if(this.touchStart||!O_(z))return;let J=z.touches[0];this.touchStart=J;let Q=this.handlers;if(!Q.length){let Z=this.eElement,$=Z.ownerDocument,X=this.onTouchMove.bind(this),Y=this.onTouchEnd.bind(this),q=this.onTouchCancel.bind(this),G={passive:!0},U={passive:!1};L6(Q,[Z,"touchmove",X,G],[$,"touchcancel",q,G],[$,"touchend",Y,U],[$,"contextmenu",f1,U])}this.clearLongPress(),this.longPressTimer=window.setTimeout(()=>{if(this.longPressTimer=0,this.touchStart===J&&!this.moved)this.moved=!0,this.eventSvc?.dispatchEvent({type:"longTap",touchStart:J,touchEvent:z})},j_)}onTouchMove(z){let{moved:J,touchStart:Q}=this;if(!J&&Q){let Z=j1(Q,z.touches);if(Z&&!o8(Z,Q,4))this.clearLongPress(),this.moved=!0}}onTouchEnd(z){let J=this.touchStart;if(!J||!j1(J,z.changedTouches))return;if(!this.moved)this.eventSvc?.dispatchEvent({type:"tap",touchStart:J}),this.checkDoubleTap(J);if(this.preventClick)f1(z);this.cancel()}onTouchCancel(z){let J=this.touchStart;if(!J||!j1(J,z.changedTouches))return;this.lastTapTime=null,this.cancel()}checkDoubleTap(z){let J=Date.now(),Q=this.lastTapTime;if(Q){if(J-Q>A_)this.eventSvc?.dispatchEvent({type:"doubleTap",touchStart:z}),J=null}this.lastTapTime=J}cancel(){this.clearLongPress(),LZ(this.handlers),this.touchStart=null}clearLongPress(){if(this.longPressTimer!==0)window.clearTimeout(this.longPressTimer),this.longPressTimer=0;this.moved=!1}destroy(){let z=this.startListener;if(z)this.startListener=null,this.eElement.removeEventListener("touchstart",z);this.cancel(),this.eElement=null,this.eventSvc=null}},p4=((z)=>{return z[z.VALUE=0]="VALUE",z[z.DIMENSION=1]="DIMENSION",z})(p4||{}),P_=1,T_=class{constructor(z){if(this.beans={},this.createdBeans=[],this.destroyed=!1,this.instanceId=P_++,!z?.beanClasses)return;this.beanDestroyComparator=z.beanDestroyComparator,this.init(z)}init(z){this.id=z.id,this.beans.context=this,this.destroyCallback=z.destroyCallback;for(let J of Object.keys(z.providedBeanInstances))this.beans[J]=z.providedBeanInstances[J];for(let J of z.beanClasses){let Q=new J;if(Q.beanName)this.beans[Q.beanName]=Q;else console.error(`Bean ${J.name} is missing beanName`);this.createdBeans.push(Q)}for(let J of z.derivedBeans??[]){let{beanName:Q,bean:Z}=J(this);this.beans[Q]=Z,this.createdBeans.push(Z)}if(z.beanInitComparator)this.createdBeans.sort(z.beanInitComparator);this.initBeans(this.createdBeans)}getBeanInstances(){return Object.values(this.beans)}createBean(z,J){return this.initBeans([z],J),z}initBeans(z,J){let Q=this.beans;for(let Z of z)Z.preWireBeans?.(Q),Z.wireBeans?.(Q);for(let Z of z)Z.preConstruct?.();if(J)z.forEach(J);for(let Z of z)Z.postConstruct?.()}getBeans(){return this.beans}getBean(z){return this.beans[z]}getId(){return this.id}destroy(){if(this.destroyed)return;this.destroyed=!0;let z=this.getBeanInstances();if(this.beanDestroyComparator)z.sort(this.beanDestroyComparator);this.destroyBeans(z),this.beans={},this.createdBeans=[],this.destroyCallback?.()}destroyBean(z){z?.destroy?.()}destroyBeans(z){if(z)for(let J=0;J[z,J]));function C_(z,J){let Q=(z.beanName?j7[z.beanName]:void 0)??Number.MAX_SAFE_INTEGER,Z=(J.beanName?j7[J.beanName]:void 0)??Number.MAX_SAFE_INTEGER;return Q-Z}function y_(z,J){if(z?.beanName==="gridDestroySvc")return-1;if(J?.beanName==="gridDestroySvc")return 1;return 0}function n4(z){let{rowIndex:J,rowPinned:Q,column:Z}=z;return`${J}.${Q==null?"null":Q}.${Z.getId()}`}function r1(z,J){let Q=z.column===J.column,Z=z.rowPinned===J.rowPinned,$=z.rowIndex===J.rowIndex;return Q&&Z&&$}function W0(z,J){switch(z.rowPinned){case"top":if(J.rowPinned!=="top")return!0;break;case"bottom":if(J.rowPinned!=="bottom")return!1;break;default:if(P(J.rowPinned))return J.rowPinned!=="top";break}return z.rowIndexH.rowNode.rowIndex===J.rowIndex),G=q?X:Y,U=(Q?-1:1)*(q?-1:1),_;for(let H=0;H{if(!Z.defaultPrevented&&!N_(Z)&&Z.key===k.TAB){let $=Z.shiftKey;if(!O0(z,Q,!1,$)){if(_4(z,$))Z.preventDefault()}}}})}function D4(z){return z.gos.get("suppressHeaderFocus")||!!z.overlays?.exclusive}function g6(z){return z.gos.get("suppressCellFocus")||!!z.overlays?.exclusive}function _4(z,J,Q=!1){let Z=z.ctrlsSvc.get("gridCtrl"),$=Z.focusNextInnerContainer(J);if($===!0)return!0;if($===!1)return $;if(Q||!J&&!Z.isDetailGrid()&&Z.isFocusInsideGridBody())Z.forceFocusOutOfContainer(J);return!1}function iZ(z,J){let Q=z.focusSvc,Z=Q.getFocusedCell();if(Z&&J&&r1(Z,J)){let{rowIndex:$,rowPinned:X,column:Y}=J;if(Vz(z))Q.setFocusedCell({rowIndex:$,column:Y,rowPinned:X,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!n1()})}}function w_(z,J){let Q=z.getFocusableContainerName();if(Q==="gridBody")return J();return o9(z,()=>V4(z.getGui(),".ag-tab-guard").length>0)?Q:null}function o9(z,J){z.setAllowFocus?.(!0);try{return J()}finally{z.setAllowFocus?.(!1)}}var e9="__ag_Grid_Skip_Focusable_Container";function z$(z){z[e9]=!0}function N_(z){return z[e9]===!0}function J$(z){if(!z.cols)return-1;return z.cols.treeDepth+1}function Q4(z){return z.ctrlsSvc.getHeaderRowContainerCtrl()?.getRowCount()??0}function pZ(z){let J=[],Q=z.ctrlsSvc.getHeaderRowContainerCtrls();for(let Z of Q){if(!Z)continue;let $=Z.getGroupRowCount()||0;for(let X=0;X<$;X++){let Y=Z.getGroupRowCtrlAtIndex(X),q=J[X];if(Y){let G=g_(z,Y);if(q==null||G>q)J[X]=G}}}return J}function g_(z,J){let Z=z.colModel.pivotMode?u_(z):Z$(z),$=J.getHeaderCellCtrls();for(let X of $){let{column:Y}=X,q=Y.getAutoHeaderHeight();if(q!=null&&q>Z&&Y.isAutoHeaderHeight())Z=q}return Z}function nZ(z){let Q=z.colModel.pivotMode?h_(z):HJ(z);return z.colModel.forAllCols((Z)=>{let $=Z.getAutoHeaderHeight();if($!=null&&$>Q&&Z.isAutoHeaderHeight())Q=$}),Q}function HJ(z){return z.gos.get("headerHeight")??z.environment.getDefaultHeaderHeight()}function Q$(z){return z.gos.get("floatingFiltersHeight")??HJ(z)}function Z$(z){return z.gos.get("groupHeaderHeight")??HJ(z)}function h_(z){return z.gos.get("pivotHeaderHeight")??HJ(z)}function u_(z){return z.gos.get("pivotGroupHeaderHeight")??Z$(z)}function m_(z,J){return z.headerRowIndex===J.headerRowIndex&&z.column===J.column}function c_(z){return z?.headerRowIndex!=null}var i_=class extends S{setComp(z,J,Q){this.comp=z,this.eGui=J;let{beans:Z}=this,{headerNavigation:$,touchSvc:X,ctrlsSvc:Y}=Z;if($)this.createManagedBean(new Jz(Q,{onTabKeyDown:this.onTabKeyDown.bind(this),handleKeyDown:this.handleKeyDown.bind(this),onFocusOut:this.onFocusOut.bind(this)}));this.addManagedEventListeners({columnPivotModeChanged:this.onPivotModeChanged.bind(this,Z),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this,Z)}),this.onPivotModeChanged(Z),this.setupHeaderHeight();let q=this.onHeaderContextMenu.bind(this);this.addManagedElementListeners(this.eGui,{contextmenu:q}),X?.mockHeaderContextMenu(this,q),Y.register("gridHeaderCtrl",this)}setupHeaderHeight(){let z=this.setHeaderHeight.bind(this);z(),this.addManagedPropertyListeners(["headerHeight","pivotHeaderHeight","groupHeaderHeight","pivotGroupHeaderHeight","floatingFiltersHeight"],z),this.addManagedEventListeners({headerRowsChanged:z,columnHeaderHeightChanged:z,columnGroupHeaderHeightChanged:()=>O4(this.beans,()=>z()),stylesChanged:z,advancedFilterEnabledChanged:z})}setHeaderHeight(){let{beans:z}=this,J=0,Q=pZ(z).reduce((Y,q)=>Y+q,0),Z=nZ(z);if(z.filterManager?.hasFloatingFilters())J+=Q$(z);J+=Q,J+=Z;let $=z.environment.getHeaderRowBorderWidth(),X=J+$;if(this.headerHeightWithBorder!==X){this.headerHeightWithBorder=X;let Y=`${X}px`;this.comp.setHeightAndMinHeight(Y)}if(this.headerHeight!==J)this.headerHeight=J,this.eventSvc.dispatchEvent({type:"headerHeightChanged"})}onPivotModeChanged(z){let J=z.colModel.pivotMode;this.comp.toggleCss("ag-pivot-on",J),this.comp.toggleCss("ag-pivot-off",!J)}onDisplayedColumnsChanged(z){let Q=z.visibleCols.allCols.some((Z)=>Z.isSpanHeaderHeight());this.comp.toggleCss("ag-header-allow-overflow",Q)}onTabKeyDown(z){let J=this.gos.get("enableRtl"),Q=z.shiftKey,Z=Q!==J?"LEFT":"RIGHT",{beans:$}=this,{headerNavigation:X,focusSvc:Y}=$;if(X.navigateHorizontally(Z,!0,z)||!Q&&Y.focusOverlay(!1)||_4($,Q,!0))z.preventDefault()}handleKeyDown(z){let J=null,{headerNavigation:Q}=this.beans;switch(z.key){case k.LEFT:J="LEFT";case k.RIGHT:{if(!P(J))J="RIGHT";if(Q.navigateHorizontally(J,!1,z))z.preventDefault();break}case k.UP:J="UP";case k.DOWN:{if(!P(J))J="DOWN";if(Q.navigateVertically(J,z))z.preventDefault();break}default:return}}onFocusOut(z){let{relatedTarget:J}=z,{eGui:Q,beans:Z}=this;if(!J&&Q.contains(n(Z)))return;if(!Q.contains(J))Z.focusSvc.focusedHeader=null}onHeaderContextMenu(z,J,Q){let{menuSvc:Z,ctrlsSvc:$}=this.beans;if(!z&&!Q||!Z?.isHeaderContextMenuEnabled())return;let{target:X}=z??J;if(X===this.eGui||X===$.getHeaderRowContainerCtrl()?.eViewport)Z.showHeaderContextMenu(void 0,z,Q)}},dZ=class extends x{constructor(z,J){super(z);this.ctrl=J}getCtrl(){return this.ctrl}},p_={tag:"div",cls:"ag-header-cell",role:"columnheader",children:[{tag:"div",ref:"eResize",cls:"ag-header-cell-resize",role:"presentation"},{tag:"div",ref:"eHeaderCompWrapper",cls:"ag-header-cell-comp-wrapper",role:"presentation"}]},n_=class extends dZ{constructor(z){super(p_,z);this.eResize=j,this.eHeaderCompWrapper=j,this.headerCompVersion=0}postConstruct(){let z=this.getGui(),J=()=>{let Z=this.ctrl.getSelectAllGui();if(Z)this.eResize.insertAdjacentElement("afterend",Z),this.addDestroyFunc(()=>Z.remove())},Q={setWidth:(Z)=>z.style.width=Z,toggleCss:(Z,$)=>this.toggleCss(Z,$),setUserStyles:(Z)=>y2(z,Z),setAriaSort:(Z)=>Z?SG(z,Z):VG(z),setUserCompDetails:(Z)=>this.setUserCompDetails(Z),getUserCompInstance:()=>this.headerComp,refreshSelectAllGui:J,removeSelectAllGui:()=>this.ctrl.getSelectAllGui()?.remove()};this.ctrl.setComp(Q,this.getGui(),this.eResize,this.eHeaderCompWrapper,void 0),J()}destroy(){this.destroyHeaderComp(),super.destroy()}destroyHeaderComp(){if(this.headerComp)this.headerCompGui?.remove(),this.headerComp=this.destroyBean(this.headerComp),this.headerCompGui=void 0}setUserCompDetails(z){this.headerCompVersion++;let J=this.headerCompVersion;z.newAgStackInstance().then((Q)=>this.afterCompCreated(J,Q))}afterCompCreated(z,J){if(z!=this.headerCompVersion||!this.isAlive()){this.destroyBean(J);return}this.destroyHeaderComp(),this.headerComp=J,this.headerCompGui=J.getGui(),this.eHeaderCompWrapper.appendChild(this.headerCompGui),this.ctrl.setDragSource(this.getGui())}},d_={tag:"div",cls:"ag-header-group-cell",role:"columnheader",children:[{tag:"div",ref:"eHeaderCompWrapper",cls:"ag-header-cell-comp-wrapper",role:"presentation"},{tag:"div",ref:"eResize",cls:"ag-header-cell-resize",role:"presentation"}]},r_=class extends dZ{constructor(z){super(d_,z);this.eResize=j,this.eHeaderCompWrapper=j}postConstruct(){let z=this.getGui(),J=(Z,$)=>$!=null?z.setAttribute(Z,$):z.removeAttribute(Z),Q={toggleCss:(Z,$)=>this.toggleCss(Z,$),setUserStyles:(Z)=>y2(z,Z),setHeaderWrapperHidden:(Z)=>{if(Z)this.eHeaderCompWrapper.style.setProperty("display","none");else this.eHeaderCompWrapper.style.removeProperty("display")},setHeaderWrapperMaxHeight:(Z)=>{if(Z!=null)this.eHeaderCompWrapper.style.setProperty("max-height",`${Z}px`);else this.eHeaderCompWrapper.style.removeProperty("max-height");this.eHeaderCompWrapper.classList.toggle("ag-header-cell-comp-wrapper-limited-height",Z!=null)},setResizableDisplayed:(Z)=>w(this.eResize,Z),setWidth:(Z)=>z.style.width=Z,setAriaExpanded:(Z)=>J("aria-expanded",Z),setUserCompDetails:(Z)=>this.setUserCompDetails(Z),getUserCompInstance:()=>this.headerGroupComp};this.ctrl.setComp(Q,z,this.eResize,this.eHeaderCompWrapper,void 0)}setUserCompDetails(z){z.newAgStackInstance().then((J)=>this.afterHeaderCompCreated(J))}afterHeaderCompCreated(z){let J=()=>this.destroyBean(z);if(!this.isAlive()){J();return}let Q=this.getGui(),Z=z.getGui();this.eHeaderCompWrapper.appendChild(Z),this.addDestroyFunc(J),this.headerGroupComp=z,this.ctrl.setDragSource(Q)}},t_={tag:"div",cls:"ag-header-cell ag-floating-filter",role:"gridcell",children:[{tag:"div",ref:"eFloatingFilterBody",role:"presentation"},{tag:"div",ref:"eButtonWrapper",cls:"ag-floating-filter-button ag-hidden",role:"presentation",children:[{tag:"button",ref:"eButtonShowMainFilter",cls:"ag-button ag-floating-filter-button-button",attrs:{type:"button",tabindex:"-1"}}]}]},s_=class extends dZ{constructor(z){super(t_,z);this.eFloatingFilterBody=j,this.eButtonWrapper=j,this.eButtonShowMainFilter=j}postConstruct(){let z=this.getGui(),J={toggleCss:(Q,Z)=>this.toggleCss(Q,Z),setUserStyles:(Q)=>y2(z,Q),addOrRemoveBodyCssClass:(Q,Z)=>this.eFloatingFilterBody.classList.toggle(Q,Z),setButtonWrapperDisplayed:(Q)=>w(this.eButtonWrapper,Q),setCompDetails:(Q)=>this.setCompDetails(Q),getFloatingFilterComp:()=>this.compPromise,setWidth:(Q)=>z.style.width=Q,setMenuIcon:(Q)=>this.eButtonShowMainFilter.appendChild(Q)};this.ctrl.setComp(J,z,this.eButtonShowMainFilter,this.eFloatingFilterBody,void 0)}setCompDetails(z){if(!z){this.destroyFloatingFilterComp(),this.compPromise=null;return}this.compPromise=z.newAgStackInstance(),this.compPromise.then((J)=>this.afterCompCreated(J))}destroy(){this.destroyFloatingFilterComp(),super.destroy()}destroyFloatingFilterComp(){this.floatingFilterComp?.getGui().remove(),this.floatingFilterComp=this.destroyBean(this.floatingFilterComp)}afterCompCreated(z){if(!z)return;if(!this.isAlive()){this.destroyBean(z);return}this.destroyFloatingFilterComp(),this.floatingFilterComp=z,this.eFloatingFilterBody.appendChild(z.getGui()),z.afterGuiAttached?.()}},l_=class extends x{constructor(z){super({tag:"div",cls:z.headerRowClass,role:"row"});this.ctrl=z,this.headerComps={}}postConstruct(){this.getGui().setAttribute("tabindex",String(this.gos.get("tabIndex"))),O6(this.getGui(),this.ctrl.getAriaRowIndex());let J={setHeight:(Q)=>this.getGui().style.height=Q,setTop:(Q)=>this.getGui().style.top=Q,setHeaderCtrls:(Q,Z)=>this.setHeaderCtrls(Q,Z),setWidth:(Q)=>this.getGui().style.width=Q,setRowIndex:(Q)=>O6(this.getGui(),Q)};this.ctrl.setComp(J,void 0)}destroy(){this.setHeaderCtrls([],!1),super.destroy()}setHeaderCtrls(z,J){if(!this.isAlive())return;let Q=this.headerComps;this.headerComps={};for(let Z of z){let $=Z.instanceId,X=Q[$];if(delete Q[$],X==null)X=this.createHeaderComp(Z),this.getGui().appendChild(X.getGui());this.headerComps[$]=X}if(Object.values(Q).forEach((Z)=>{Z.getGui().remove(),this.destroyBean(Z)}),J){let Z=Object.values(this.headerComps);Z.sort((X,Y)=>{let q=X.getCtrl().column.getLeft(),G=Y.getCtrl().column.getLeft();return q-G});let $=Z.map((X)=>X.getGui());s8(this.getGui(),$)}}createHeaderComp(z){let J;switch(this.ctrl.type){case"group":J=new r_(z);break;case"filter":J=new s_(z);break;default:J=new n_(z);break}return this.createBean(J),J.setParentComponent(this),J}},rZ=class extends S{constructor(z,J=!1){super();this.callback=z,this.addSpacer=J}postConstruct(){let z=this.setWidth.bind(this);if(this.addManagedPropertyListener("domLayout",z),this.addManagedEventListeners({columnContainerWidthChanged:z,displayedColumnsChanged:z,leftPinnedWidthChanged:z}),this.addSpacer)this.addManagedEventListeners({rightPinnedWidthChanged:z,scrollVisibilityChanged:z,scrollbarWidthChanged:z});this.setWidth()}setWidth(){let z=A0(this.gos,"print"),{visibleCols:J,scrollVisibleSvc:Q}=this.beans,Z=J.bodyWidth,$=J.getColsLeftWidth(),X=J.getDisplayedColumnsRightWidth(),Y;if(z)Y=Z+$+X;else if(Y=Z,this.addSpacer){if((this.gos.get("enableRtl")?$:X)===0&&Q.verticalScrollShowing)Y+=Q.getScrollbarWidth()}this.callback(Y)}};function m2(z,J,Q){if(Q)z.addDestroyFunc(()=>J.destroyBean(Q));return Q??z}var tZ=class extends S{constructor(z,J,Q,Z){super();this.columnOrGroup=z,this.eCell=J,this.colsSpanning=Z,this.columnOrGroup=z,this.ariaEl=J.querySelector("[role=columnheader]")||J,this.beans=Q}setColsSpanning(z){this.colsSpanning=z,this.onLeftChanged()}getColumnOrGroup(){let{beans:z,colsSpanning:J}=this;if(z.gos.get("enableRtl")&&J)return y(J);return this.columnOrGroup}postConstruct(){let z=this.onLeftChanged.bind(this);this.addManagedListeners(this.columnOrGroup,{leftChanged:z}),this.setLeftFirstTime(),this.addManagedEventListeners({displayedColumnsWidthChanged:z}),this.addManagedPropertyListener("domLayout",z)}setLeftFirstTime(){let{gos:z,colAnimation:J}=this.beans,Q=z.get("suppressColumnMoveAnimation"),Z=P(this.columnOrGroup.getOldLeft());if(J?.isActive()&&Z&&!Q)this.animateInLeft();else this.onLeftChanged()}animateInLeft(){let z=this.getColumnOrGroup(),J=this.modifyLeftForPrintLayout(z,z.getOldLeft()),Q=this.modifyLeftForPrintLayout(z,z.getLeft());this.setLeft(J),this.actualLeft=Q,this.beans.colAnimation.executeNextVMTurn(()=>{if(this.actualLeft===Q)this.setLeft(Q)})}onLeftChanged(){let z=this.getColumnOrGroup(),J=z.getLeft();this.actualLeft=this.modifyLeftForPrintLayout(z,J),this.setLeft(this.actualLeft)}modifyLeftForPrintLayout(z,J){let{gos:Q,visibleCols:Z}=this.beans;if(!A0(Q,"print"))return J;if(z.getPinned()==="left")return J;let X=Z.getColsLeftWidth();if(z.getPinned()==="right"){let Y=Z.bodyWidth;return X+Y+J}return X+J}setLeft(z){if(P(z))this.eCell.style.left=`${z}px`;if(K0(this.columnOrGroup)){let J=this.columnOrGroup.getLeafColumns();if(!J.length)return;if(J.length>1)fG(this.ariaEl,J.length)}}},a_="ag-column-first",o_="ag-column-last";function WJ(z,J,Q,Z){if(d(z))return[];return X$(z.headerClass,z,J,Q,Z)}function BJ(z,J,Q,Z){if(d(z))return[];return X$(z.toolPanelClass,z,J,Q,Z)}function $$(z,J,Q){z.toggleCss(a_,Q.isColAtEdge(J,"first")),z.toggleCss(o_,Q.isColAtEdge(J,"last"))}function e_(z,J,Q,Z){return C(J,{colDef:z,column:Q,columnGroup:Z})}function X$(z,J,Q,Z,$){if(d(z))return[];let X;if(typeof z==="function"){let Y=e_(J,Q,Z,$);X=z(Y)}else X=z;if(typeof X==="string")return[X];if(Array.isArray(X))return[...X];return[]}var zH=0,Y$="headerCtrl",sZ=class extends S{constructor(z,J){super();this.column=z,this.rowCtrl=J,this.resizeToggleTimeout=0,this.resizeMultiplier=1,this.resizeFeature=null,this.lastFocusEvent=null,this.dragSource=null,this.reAttemptToFocus=!1,this.instanceId=z.getUniqueId()+"-"+zH++}postConstruct(){let z=this.refreshTabIndex.bind(this);this.addManagedPropertyListeners(["suppressHeaderFocus"],z),this.addManagedEventListeners({overlayExclusiveChanged:z})}setComp(z,J,Q,Z,$){if(J.setAttribute("col-id",this.column.colIdSanitised),this.wireComp(z,J,Q,Z,$),this.reAttemptToFocus)this.reAttemptToFocus=!1,this.focus(this.lastFocusEvent??void 0)}shouldStopEventPropagation(z){let{headerRowIndex:J,column:Q}=this.beans.focusSvc.focusedHeader,Z=Q.getDefinition(),$=Z?.suppressHeaderKeyboardEvent;if(!P($))return!1;let X=C(this.gos,{colDef:Z,column:Q,headerRowIndex:J,event:z});return!!$(X)}getWrapperHasFocus(){return n(this.beans)===this.eGui}setGui(z,J){this.eGui=z,this.addDomData(J),J.addManagedListeners(this.beans.eventSvc,{displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this)}),J.addManagedElementListeners(this.eGui,{focus:this.onGuiFocus.bind(this)}),this.onDisplayedColumnsChanged(),this.refreshTabIndex()}refreshHeaderStyles(){let z=this.column.getDefinition();if(!z)return;let{headerStyle:J}=z,Q;if(typeof J==="function"){let Z=this.getHeaderClassParams();Q=J(Z)}else Q=J;if(Q)this.comp.setUserStyles(Q)}onGuiFocus(){this.eventSvc.dispatchEvent({type:"headerFocused",column:this.column})}setupAutoHeight(z){let{wrapperElement:J,checkMeasuringCallback:Q,compBean:Z}=z,{beans:$}=this,X=(H)=>{if(!this.isAlive()||!Z.isAlive())return;let{paddingTop:W,paddingBottom:B,borderBottomWidth:E,borderTopWidth:K}=i1(this.eGui),F=W+B+E+K,D=J.offsetHeight+F;if(H<5){let f=!Y0($)?.contains(J),A=D==0;if(f||A){CQ(()=>X(H+1),"raf",$);return}}this.setColHeaderHeight(this.column,D)},Y=!1,q,G=()=>{let H=this.column.isAutoHeaderHeight();if(H&&!Y)U();if(!H&&Y)_()},U=()=>{Y=!0,this.comp.toggleCss("ag-header-cell-auto-height",!0),X(0),q=j4(this.beans,J,()=>X(0))},_=()=>{if(Y=!1,q)q();this.comp.toggleCss("ag-header-cell-auto-height",!1),q=void 0};if(G(),Z.addDestroyFunc(()=>_()),Z.addManagedListeners(this.column,{widthChanged:()=>Y&&X(0)}),Z.addManagedEventListeners({sortChanged:()=>{if(Y)window.setTimeout(()=>X(0))}}),Q)Q(G)}onDisplayedColumnsChanged(){let{comp:z,column:J,beans:Q,eGui:Z}=this;if(!z||!J||!Z)return;$$(z,J,Q.visibleCols),c8(Z,Q.visibleCols.getAriaColIndex(J))}addResizeAndMoveKeyboardListeners(z){z.addManagedListeners(this.eGui,{keydown:this.onGuiKeyDown.bind(this),keyup:this.onGuiKeyUp.bind(this)})}refreshTabIndex(){let z=D4(this.beans);if(this.eGui)f4(this.eGui,"tabindex",z?null:"-1")}onGuiKeyDown(z){let J=n(this.beans),Q=z.key===k.LEFT||z.key===k.RIGHT;if(this.isResizing)z.preventDefault(),z.stopImmediatePropagation();if(J!==this.eGui||!z.shiftKey&&!z.altKey&&!z.ctrlKey&&!z.metaKey)return;if(this.isResizing||Q)z.preventDefault(),z.stopImmediatePropagation();if((z.ctrlKey||z.metaKey)&&b9(z)===k.C)return this.beans.clipboardSvc?.copyToClipboard();if(!Q)return;let X=z.key===k.LEFT!==this.gos.get("enableRtl")?"left":"right";if(z.altKey){this.isResizing=!0,this.resizeMultiplier+=1;let Y=this.getViewportAdjustedResizeDiff(z);this.resizeHeader(Y,z.shiftKey),this.resizeFeature?.toggleColumnResizing(!0)}else this.moveHeader(X)}moveHeader(z){this.beans.colMoves?.moveHeader(z,this.eGui,this.column,this.rowCtrl.pinned,this)}getViewportAdjustedResizeDiff(z){let J=this.getResizeDiff(z),{pinnedCols:Q}=this.beans;return Q?Q.getHeaderResizeDiff(J,this.column):J}getResizeDiff(z){let{gos:J,column:Q}=this,Z=z.key===k.LEFT!==J.get("enableRtl"),$=Q.getPinned(),X=J.get("enableRtl");if($){if(X!==($==="right"))Z=!Z}return(Z?-1:1)*this.resizeMultiplier}onGuiKeyUp(){if(!this.isResizing)return;if(this.resizeToggleTimeout)window.clearTimeout(this.resizeToggleTimeout),this.resizeToggleTimeout=0;this.isResizing=!1,this.resizeMultiplier=1,this.resizeToggleTimeout=window.setTimeout(()=>{this.resizeFeature?.toggleColumnResizing(!1)},150)}handleKeyDown(z){let J=this.getWrapperHasFocus();switch(z.key){case k.PAGE_DOWN:case k.PAGE_UP:case k.PAGE_HOME:case k.PAGE_END:if(J)z.preventDefault()}}addDomData(z){let J=Y$,{eGui:Q,gos:Z}=this;az(Z,Q,J,this),z.addDestroyFunc(()=>az(Z,Q,J,null))}focus(z){if(!this.isAlive())return!1;let{eGui:J}=this;if(!J)this.reAttemptToFocus=!0;else this.lastFocusEvent=z||null,J.focus();return!0}focusThis(){this.beans.focusSvc.focusedHeader={headerRowIndex:this.rowCtrl.rowIndex,column:this.column}}removeDragSource(){if(this.dragSource)this.beans.dragAndDrop?.removeDragSource(this.dragSource),this.dragSource=null}handleContextMenuMouseEvent(z,J,Q){let Z=z??J,{menuSvc:$,gos:X}=this.beans;if(X.get("preventDefaultOnContextMenu"))Z.preventDefault();if($?.isHeaderContextMenuEnabled(Q))$.showHeaderContextMenu(Q,z,J);this.dispatchColumnMouseEvent("columnHeaderContextMenu",Q)}dispatchColumnMouseEvent(z,J){this.eventSvc.dispatchEvent({type:z,column:J})}setColHeaderHeight(z,J){if(!z.setAutoHeaderHeight(J))return;let{eventSvc:Q}=this;if(z.isColumn)Q.dispatchEvent({type:"columnHeaderHeightChanged",column:z,columns:[z],source:"autosizeColumnHeaderHeight"});else Q.dispatchEvent({type:"columnGroupHeaderHeightChanged",columnGroup:z,source:"autosizeColumnGroupHeaderHeight"})}clearComponent(){this.removeDragSource(),this.resizeFeature=null,this.comp=null,this.eGui=null}destroy(){super.destroy(),this.column=null,this.lastFocusEvent=null,this.rowCtrl=null}},JH=class extends sZ{constructor(){super(...arguments);this.refreshFunctions={},this.userHeaderClasses=new Set,this.ariaDescriptionProperties=new Map}wireComp(z,J,Q,Z,$){this.comp=z;let{rowCtrl:X,column:Y,beans:q}=this,{colResize:G,context:U,colHover:_,rangeSvc:H}=q,W=m2(this,U,$);if(this.setGui(J,W),this.updateState(),this.setupWidth(W),this.setupMovingCss(W),this.setupMenuClass(W),this.setupSortableClass(W),this.setupWrapTextClass(),this.refreshSpanHeaderHeight(),this.setupAutoHeight({wrapperElement:Z,checkMeasuringCallback:(E)=>this.setRefreshFunction("measuring",E),compBean:W}),this.addColumnHoverListener(W),this.setupFilterClass(W),this.setupStylesFromColDef(),this.setupClassesFromColDef(),this.setupTooltip(),this.addActiveHeaderMouseListeners(W),this.setupSelectAll(W),this.setupUserComp(),this.refreshAria(),G)this.resizeFeature=W.createManagedBean(G.createResizeFeature(X.pinned,Y,Q,z,this));else w(Q,!1);_?.createHoverFeature(W,[Y],J),H?.createRangeHighlightFeature(W,Y,z),W.createManagedBean(new tZ(Y,J,q)),W.createManagedBean(new Jz(J,{shouldStopEventPropagation:(E)=>this.shouldStopEventPropagation(E),onTabKeyDown:()=>null,handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this),onFocusOut:this.onFocusOut.bind(this)})),this.addResizeAndMoveKeyboardListeners(W),W.addManagedPropertyListeners(["suppressMovableColumns","suppressMenuHide","suppressAggFuncInHeader","enableAdvancedFilter"],()=>this.refresh()),W.addManagedPropertyListener("cellSelection",()=>this.refreshAria()),W.addManagedListeners(Y,{colDefChanged:()=>this.refresh(),formulaRefChanged:()=>this.refresh(),headerHighlightChanged:this.onHeaderHighlightChanged.bind(this)});let B=()=>this.checkDisplayName();W.addManagedEventListeners({columnValueChanged:B,columnRowGroupChanged:B,columnPivotChanged:B,headerHeightChanged:this.onHeaderHeightChanged.bind(this)}),W.addDestroyFunc(()=>{this.refreshFunctions={},this.selectAllFeature=null,this.dragSourceElement=void 0,this.userCompDetails=null,this.userHeaderClasses.clear(),this.ariaDescriptionProperties.clear(),this.clearComponent()})}resizeHeader(z,J){this.beans.colResize?.resizeHeader(this.column,z,J)}getHeaderClassParams(){let{column:z,beans:J}=this,Q=z.colDef;return C(J.gos,{colDef:Q,column:z,floatingFilter:!1})}setupUserComp(){let z=this.lookupUserCompDetails();if(z)this.setCompDetails(z)}setCompDetails(z){this.userCompDetails=z,this.comp.setUserCompDetails(z)}lookupUserCompDetails(){let z=this.createParams(),J=this.column.getColDef();return Q_(this.beans.userCompFactory,J,z)}createParams(){let{menuSvc:z,sortSvc:J,colFilter:Q,gos:Z}=this.beans;return C(Z,{column:this.column,displayName:this.displayName,enableSorting:this.column.isSortable(),enableMenu:this.menuEnabled,enableFilterButton:this.openFilterEnabled&&!!z?.isHeaderFilterButtonEnabled(this.column),enableFilterIcon:!!Q&&(!this.openFilterEnabled||F0(this.gos)),showColumnMenu:(X,Y)=>{z?.showColumnMenu({column:this.column,buttonElement:X,positionBy:"button",onClosedCallback:Y})},showColumnMenuAfterMouseClick:(X,Y)=>{z?.showColumnMenu({column:this.column,mouseEvent:X,positionBy:"mouse",onClosedCallback:Y})},showFilter:(X)=>{z?.showFilterMenu({column:this.column,buttonElement:X,containerType:"columnFilter",positionBy:"button"})},progressSort:(X)=>{J?.progressSort(this.column,!!X,"uiColumnSorted")},setSort:(X,Y)=>{J?.setSortForColumn(this.column,Z4(X),!!Y,"uiColumnSorted")},eGridHeader:this.eGui,setTooltip:(X,Y)=>{Z.assertModuleRegistered("Tooltip",3),this.setupTooltip(X,Y)}})}setupSelectAll(z){let{selectionSvc:J}=this.beans;if(!J)return;this.selectAllFeature=z.createOptionalManagedBean(J.createSelectAllFeature(this.column)),this.selectAllFeature?.setComp(this),z.addManagedPropertyListener("rowSelection",()=>{let Q=J.createSelectAllFeature(this.column);if(Q&&!this.selectAllFeature)this.selectAllFeature=z.createManagedBean(Q),this.selectAllFeature?.setComp(this),this.comp.refreshSelectAllGui();else if(this.selectAllFeature&&!Q)this.comp.removeSelectAllGui(),this.selectAllFeature=this.destroyBean(this.selectAllFeature)})}getSelectAllGui(){return this.selectAllFeature?.getCheckboxGui()}handleKeyDown(z){if(super.handleKeyDown(z),z.key===k.SPACE)this.selectAllFeature?.onSpaceKeyDown(z);else if(z.key===k.ENTER)this.onEnterKeyDown(z);else if(z.key===k.DOWN&&z.altKey)this.showMenuOnKeyPress(z,!1)}onEnterKeyDown(z){let{column:J,gos:Q,sortable:Z,beans:$}=this,X=!1;if(z.ctrlKey||z.metaKey)X=this.showMenuOnKeyPress(z,!0);if(!X){if(!z.altKey&&l4(Q))$.rangeSvc?.handleColumnSelection(J,z);else if(Z)$.sortSvc?.progressSort(J,z.shiftKey,"uiColumnSorted")}}showMenuOnKeyPress(z,J){let Q=this.comp.getUserCompInstance();if(!O7(Q))return!1;if(Q.onMenuKeyboardShortcut(J))return z.preventDefault(),!0;return!1}onFocusIn(z){if(!this.eGui.contains(z.relatedTarget))this.focusThis(),this.announceAriaDescription();if(n1())this.setActiveHeader(!0)}onFocusOut(z){if(this.eGui.contains(z.relatedTarget))return;this.setActiveHeader(!1)}setupTooltip(z,J){this.tooltipFeature=this.beans.tooltipSvc?.setupHeaderTooltip(this.tooltipFeature,this,z,J)}setupStylesFromColDef(){this.setRefreshFunction("headerStyles",this.refreshHeaderStyles.bind(this)),this.refreshHeaderStyles()}setupClassesFromColDef(){let z=()=>{let J=this.column.colDef,Q=WJ(J,this.gos,this.column,null),Z=this.userHeaderClasses;this.userHeaderClasses=new Set(Q);for(let $ of Q)if(Z.has($))Z.delete($);else this.comp.toggleCss($,!0);for(let $ of Z)this.comp.toggleCss($,!1)};this.setRefreshFunction("headerClasses",z),z()}setDragSource(z){if(this.dragSourceElement=z,this.removeDragSource(),!z||!this.draggable)return;this.dragSource=this.beans.colMoves?.setDragSourceForHeader(z,this.column,this.displayName)??null}updateState(){let{menuSvc:z}=this.beans;this.menuEnabled=!!z?.isColumnMenuInHeaderEnabled(this.column),this.openFilterEnabled=!!z?.isFilterMenuInHeaderEnabled(this.column),this.sortable=this.column.isSortable(),this.displayName=this.calculateDisplayName(),this.draggable=this.workOutDraggable()}setRefreshFunction(z,J){this.refreshFunctions[z]=J}refresh(){this.updateState(),this.refreshHeaderComp(),this.refreshAria();for(let z of Object.values(this.refreshFunctions))z()}refreshHeaderComp(){let z=this.lookupUserCompDetails();if(!z)return;if(this.comp.getUserCompInstance()!=null&&this.userCompDetails.componentClass==z.componentClass?this.attemptHeaderCompRefresh(z.params):!1)this.setDragSource(this.dragSourceElement);else this.setCompDetails(z)}attemptHeaderCompRefresh(z){let J=this.comp.getUserCompInstance();if(!J)return!1;if(!J.refresh)return!1;return J.refresh(z)}calculateDisplayName(){return this.beans.colNames.getDisplayNameForColumn(this.column,"header",!0)}checkDisplayName(){if(this.displayName!==this.calculateDisplayName())this.refresh()}workOutDraggable(){let z=this.column.colDef;return!this.gos.get("suppressMovableColumns")&&!z.suppressMovable&&!z.lockPosition||!!z.enableRowGroup||!!z.enablePivot}setupWidth(z){let J=()=>{let Q=this.column.getActualWidth();this.comp.setWidth(`${Q}px`)};z.addManagedListeners(this.column,{widthChanged:J}),J()}setupMovingCss(z){let J=()=>{this.comp.toggleCss("ag-header-cell-moving",this.column.isMoving())};z.addManagedListeners(this.column,{movingChanged:J}),J()}setupMenuClass(z){let J=()=>{this.comp?.toggleCss("ag-column-menu-visible",this.column.isMenuVisible())};z.addManagedListeners(this.column,{menuVisibleChanged:J}),J()}setupSortableClass(z){let J=()=>{this.comp.toggleCss("ag-header-cell-sortable",!!this.sortable)};J(),this.setRefreshFunction("updateSortable",J),z.addManagedEventListeners({sortChanged:this.refreshAriaSort.bind(this)})}setupFilterClass(z){let J=()=>{let Q=this.column.isFilterActive();this.comp.toggleCss("ag-header-cell-filtered",Q),this.refreshAria()};z.addManagedListeners(this.column,{filterActiveChanged:J}),J()}setupWrapTextClass(){let z=()=>{let J=!!this.column.getColDef().wrapHeaderText;this.comp.toggleCss("ag-header-cell-wrap-text",J)};z(),this.setRefreshFunction("wrapText",z)}onHeaderHighlightChanged(){let z=this.column.getHighlighted(),J=z===0,Q=z===1;this.comp.toggleCss("ag-header-highlight-before",J),this.comp.toggleCss("ag-header-highlight-after",Q)}onDisplayedColumnsChanged(){if(super.onDisplayedColumnsChanged(),!this.isAlive())return;this.onHeaderHeightChanged()}onHeaderHeightChanged(){this.refreshSpanHeaderHeight()}refreshSpanHeaderHeight(){let{eGui:z,column:J,comp:Q,beans:Z}=this,$=pZ(this.beans),X=$.reduce((W,B)=>W+B,0)===0;if(Q.toggleCss("ag-header-parent-hidden",X),!J.isSpanHeaderHeight()){z.style.removeProperty("top"),z.style.removeProperty("height"),Q.toggleCss("ag-header-span-height",!1),Q.toggleCss("ag-header-span-total",!1);return}let{numberOfParents:Y,isSpanningTotal:q}=this.column.getColumnGroupPaddingInfo();Q.toggleCss("ag-header-span-height",Y>0);let G=nZ(Z);if(Y===0){Q.toggleCss("ag-header-span-total",!1),z.style.setProperty("top","0px"),z.style.setProperty("height",`${G}px`);return}Q.toggleCss("ag-header-span-total",q);let U=(this.column.getFirstRealParent()?.getLevel()??-1)+1,_=$.length-U,H=0;for(let W=0;W<_;W++)H+=$[$.length-1-W];z.style.setProperty("top",`${-H}px`),z.style.setProperty("height",`${G+H}px`)}refreshAriaSort(){let z=null,{beans:J,column:Q,comp:Z,sortable:$,gos:X}=this;if($){let Y=this.getLocaleTextFunc(),q=J.sortSvc?.getDisplaySortForColumn(Q)??null;Z.setAriaSort(EG(q)),z=l4(X)?Y("ariaSortableColumnWithCellSelection","Press ALT ENTER to sort"):Y("ariaSortableColumn","Press ENTER to sort")}else Z.setAriaSort();this.setAriaDescriptionProperty("sort",z)}refreshAriaMenu(){let z=null;if(this.menuEnabled)z=this.getLocaleTextFunc()("ariaMenuColumn","Press ALT DOWN to open column menu");this.setAriaDescriptionProperty("menu",z)}refreshAriaFilterButton(){let z=null,{openFilterEnabled:J,gos:Q}=this;if(J&&!F0(Q))z=this.getLocaleTextFunc()("ariaFilterColumn","Press CTRL ENTER to open filter");this.setAriaDescriptionProperty("filterButton",z)}refreshAriaFiltered(){let z=null;if(this.column.isFilterActive())z=this.getLocaleTextFunc()("ariaColumnFiltered","Column Filtered");this.setAriaDescriptionProperty("filter",z)}refreshAriaCellSelection(){let z=null,{gos:J,column:Q}=this;if(l4(J)&&!y0(Q))z=this.getLocaleTextFunc()("ariaColumnCellSelection","Press Enter to toggle selection for all visible cells in this column");this.setAriaDescriptionProperty("cellSelection",z)}setAriaDescriptionProperty(z,J){let Q=this.ariaDescriptionProperties;if(J!=null)Q.set(z,J);else Q.delete(z)}announceAriaDescription(){let{beans:z,eGui:J,ariaDescriptionProperties:Q}=this;if(!J.contains(n(z)))return;let Z=Array.from(Q.keys()).sort(($,X)=>$==="filter"?-1:X.charCodeAt(0)-$.charCodeAt(0)).map(($)=>Q.get($)).join(". ");z.ariaAnnounce?.announceValue(Z,"columnHeader")}refreshAria(){this.refreshAriaSort(),this.refreshAriaMenu(),this.refreshAriaFilterButton(),this.refreshAriaFiltered(),this.refreshAriaCellSelection()}addColumnHoverListener(z){this.beans.colHover?.addHeaderColumnHoverListener(z,this.comp,this.column)}addActiveHeaderMouseListeners(z){let J=($)=>this.handleMouseOverChange($.type==="mouseenter"),Q=()=>{this.setActiveHeader(!0),this.dispatchColumnMouseEvent("columnHeaderClicked",this.column)},Z=($)=>this.handleContextMenuMouseEvent($,void 0,this.column);z.addManagedListeners(this.eGui,{mouseenter:J,mouseleave:J,click:Q,contextmenu:Z})}handleMouseOverChange(z){this.setActiveHeader(z),this.eventSvc.dispatchEvent({type:z?"columnHeaderMouseOver":"columnHeaderMouseLeave",column:this.column})}setActiveHeader(z){this.comp.toggleCss("ag-header-active",z)}getAnchorElementForMenu(z){let J=this.comp.getUserCompInstance();if(O7(J))return J.getAnchorElementForMenu(z);return this.eGui}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),super.destroy()}};function O7(z){return typeof z?.getAnchorElementForMenu==="function"&&typeof z.onMenuKeyboardShortcut==="function"}var QH=0,qQ=class extends S{constructor(z,J,Q){super();this.rowIndex=z,this.pinned=J,this.type=Q,this.instanceId=QH++,this.comp=null,this.allCtrls=[];let Z="ag-header-row-column";if(Q==="group")Z="ag-header-row-group";else if(Q==="filter")Z="ag-header-row-filter";this.headerRowClass=`ag-header-row ${Z}`}setRowIndex(z){this.rowIndex=z,this.comp?.setRowIndex(this.getAriaRowIndex()),this.onRowHeightChanged()}postConstruct(){this.isPrintLayout=A0(this.gos,"print"),this.isEnsureDomOrder=this.gos.get("ensureDomOrder")}areCellsRendered(){if(!this.comp)return!1;return this.allCtrls.every((z)=>z.eGui!=null)}setComp(z,J,Q=!0){if(this.comp=z,J=m2(this,this.beans.context,J),Q)this.setRowIndex(this.rowIndex),this.onVirtualColumnsChanged();this.setWidth(),this.addEventListeners(J)}getAriaRowIndex(){return this.rowIndex+1}addEventListeners(z){let J=this.onRowHeightChanged.bind(this),Q=this.onDisplayedColumnsChanged.bind(this);z.addManagedEventListeners({columnResized:this.setWidth.bind(this),displayedColumnsChanged:Q,virtualColumnsChanged:(Z)=>this.onVirtualColumnsChanged(Z.afterScroll),columnGroupHeaderHeightChanged:J,columnHeaderHeightChanged:J,stylesChanged:J,advancedFilterEnabledChanged:J}),z.addManagedPropertyListener("domLayout",Q),z.addManagedPropertyListener("ensureDomOrder",(Z)=>this.isEnsureDomOrder=Z.currentValue),z.addManagedPropertyListeners(["headerHeight","pivotHeaderHeight","groupHeaderHeight","pivotGroupHeaderHeight","floatingFiltersHeight"],J)}onDisplayedColumnsChanged(){this.isPrintLayout=A0(this.gos,"print"),this.onVirtualColumnsChanged(),this.setWidth(),this.onRowHeightChanged()}setWidth(){if(!this.comp)return;let z=this.getWidthForRow();this.comp.setWidth(`${z}px`)}getWidthForRow(){let{visibleCols:z}=this.beans;if(this.isPrintLayout){if(this.pinned!=null)return 0;return z.getContainerWidth("right")+z.getContainerWidth("left")+z.getContainerWidth(null)}return z.getContainerWidth(this.pinned)}onRowHeightChanged(){if(!this.comp)return;let{topOffset:z,rowHeight:J}=this.getTopAndHeight();this.comp.setTop(z+"px"),this.comp.setHeight(J+"px")}getTopAndHeight(){let z=0,J=pZ(this.beans);for(let $=0;${let{focusSvc:$,visibleCols:X}=this.beans;if(!$.isHeaderWrapperFocused(Z))return!1;return X.isVisible(Z.column)};if(z)for(let[Z,$]of z)if(Q($))this.ctrlsById.set(Z,$);else this.destroyBean($);return this.allCtrls=Array.from(this.ctrlsById.values()),this.allCtrls}getHeaderCellCtrls(){return this.allCtrls}recycleAndCreateHeaderCtrls(z,J,Q){if(z.isEmptyGroup())return;let Z=z.getUniqueId(),$;if(Q)$=Q.get(Z),Q.delete(Z);if($&&$.column!=z)this.destroyBean($),$=void 0;if($==null)switch(this.type){case"filter":{$=this.createBean(this.beans.registry.createDynamicBean("headerFilterCellCtrl",!0,z,this));break}case"group":$=this.createBean(this.beans.registry.createDynamicBean("headerGroupCellCtrl",!0,z,this));break;default:$=this.createBean(new JH(z,this));break}J.set(Z,$)}getColumnsInViewport(){if(!this.isPrintLayout)return this.getComponentsToRender();if(this.pinned)return[];let z=[];for(let J of["left",null,"right"])z.push(...this.getComponentsToRender(J));return z}getComponentsToRender(z=this.pinned){if(this.type==="group")return this.beans.colViewport.getHeadersToRender(z,this.rowIndex);return this.beans.colViewport.getColumnHeadersToRender(z)}focusHeader(z,J){let Q=this.allCtrls.find(($)=>$.column==z);if(!Q)return!1;return Q.focus(J)}destroy(){this.allCtrls=this.destroyBeans(this.allCtrls),this.ctrlsById=void 0,this.comp=null,super.destroy()}},ZH=class extends S{constructor(z){super();this.pinned=z,this.hidden=!1,this.includeFloatingFilter=!1,this.groupsRowCtrls=[]}setComp(z,J){this.comp=z,this.eViewport=J;let{pinnedCols:Q,ctrlsSvc:Z,colModel:$,colMoves:X}=this.beans;this.setupCenterWidth(),Q?.setupHeaderPinnedWidth(this),this.setupDragAndDrop(X,this.eViewport);let Y=this.refresh.bind(this,!0);this.addManagedEventListeners({displayedColumnsChanged:Y,advancedFilterEnabledChanged:Y});let q=`${typeof this.pinned==="string"?this.pinned:"center"}Header`;if(Z.register(q,this),$.ready)this.refresh()}getAllCtrls(){let z=[...this.groupsRowCtrls];if(this.columnsRowCtrl)z.push(this.columnsRowCtrl);if(this.filtersRowCtrl)z.push(this.filtersRowCtrl);return z}refresh(z=!1){let{focusSvc:J,filterManager:Q,visibleCols:Z}=this.beans,$=0,X=J.getFocusHeaderToUseAfterRefresh(),Y=()=>{let H=Z.headerGroupRowCount;if($=H,!z)this.groupsRowCtrls=this.destroyBeans(this.groupsRowCtrls);let W=this.groupsRowCtrls.length;if(W===H)return;if(W>H){for(let B=H;B{let H=$++;if(this.hidden){this.columnsRowCtrl=this.destroyBean(this.columnsRowCtrl);return}if(this.columnsRowCtrl==null||!z)this.columnsRowCtrl=this.destroyBean(this.columnsRowCtrl),this.columnsRowCtrl=this.createBean(new qQ(H,this.pinned,"column"));else if(this.columnsRowCtrl.rowIndex!==H)this.columnsRowCtrl.setRowIndex(H)},G=()=>{this.includeFloatingFilter=!!Q?.hasFloatingFilters()&&!this.hidden;let H=()=>{this.filtersRowCtrl=this.destroyBean(this.filtersRowCtrl)};if(!this.includeFloatingFilter){H();return}if(!z)H();let W=$++;if(this.filtersRowCtrl){if(this.filtersRowCtrl.rowIndex!==W)this.filtersRowCtrl.setRowIndex(W)}else this.filtersRowCtrl=this.createBean(new qQ(W,this.pinned,"filter"))},U=this.getAllCtrls();Y(),q(),G();let _=this.getAllCtrls();if(this.comp.setCtrls(_),this.restoreFocusOnHeader(J,X),U.length!==_.length)this.beans.eventSvc.dispatchEvent({type:"headerRowsChanged"})}getHeaderCtrlForColumn(z){let J=(Q)=>Q?.getHeaderCellCtrls().find((Z)=>Z.column===z);if(G4(z))return J(this.columnsRowCtrl);if(this.groupsRowCtrls.length===0)return;for(let Q=0;Qthis.comp.setCenterWidth(`${z}px`),!0))}},$H={tag:"div",cls:"ag-pinned-left-header",role:"rowgroup"},XH={tag:"div",cls:"ag-pinned-right-header",role:"rowgroup"},YH={tag:"div",cls:"ag-header-viewport",role:"rowgroup",attrs:{tabindex:"-1"},children:[{tag:"div",ref:"eCenterContainer",cls:"ag-header-container",role:"presentation"}]},GQ=class extends x{constructor(z){super();this.eCenterContainer=j,this.headerRowComps={},this.rowCompsList=[],this.pinned=z}postConstruct(){this.selectAndSetTemplate();let z={setDisplayed:(Q)=>this.setDisplayed(Q),setCtrls:(Q)=>this.setCtrls(Q),setCenterWidth:(Q)=>this.eCenterContainer.style.width=Q,setViewportScrollLeft:(Q)=>this.getGui().scrollLeft=Q,setPinnedContainerWidth:(Q)=>{let Z=this.getGui();Z.style.width=Q,Z.style.maxWidth=Q,Z.style.minWidth=Q}};this.createManagedBean(new ZH(this.pinned)).setComp(z,this.getGui())}selectAndSetTemplate(){let z=this.pinned=="left",J=this.pinned=="right",Q=z?$H:J?XH:YH;this.setTemplate(Q),this.eRowContainer=this.eCenterContainer!==j?this.eCenterContainer:this.getGui()}destroy(){this.setCtrls([]),super.destroy()}destroyRowComp(z){this.destroyBean(z),z.getGui().remove()}setCtrls(z){let J=this.headerRowComps;this.headerRowComps={},this.rowCompsList=[];let Q,Z=($)=>{let X=$.getGui();if(X.parentElement!=this.eRowContainer)this.eRowContainer.appendChild(X);if(Q)t8(this.eRowContainer,X,Q);Q=X};for(let $ of z){let X=$.instanceId,Y=J[X];delete J[X];let q=Y?Y:this.createBean(new l_($));this.headerRowComps[X]=q,this.rowCompsList.push(q),Z(q)}for(let $ of Object.values(J))this.destroyRowComp($)}},qH={tag:"div",cls:"ag-header",role:"presentation"},GH=class extends x{constructor(){super(qH)}postConstruct(){let z={toggleCss:(Z,$)=>this.toggleCss(Z,$),setHeightAndMinHeight:(Z)=>{this.getGui().style.height=Z,this.getGui().style.minHeight=Z}};this.createManagedBean(new i_).setComp(z,this.getGui(),this.getFocusableElement());let Q=(Z)=>{this.createManagedBean(Z),this.appendChild(Z)};Q(new GQ("left")),Q(new GQ(null)),Q(new GQ("right"))}},UH={selector:"AG-HEADER-ROOT",component:GH},M4={AUTO_HEIGHT:"ag-layout-auto-height",NORMAL:"ag-layout-normal",PRINT:"ag-layout-print"},lZ=class extends S{constructor(z){super();this.view=z}postConstruct(){this.addManagedPropertyListener("domLayout",this.updateLayoutClasses.bind(this)),this.updateLayoutClasses()}updateLayoutClasses(){let z=this.gos.get("domLayout"),J={autoHeight:z==="autoHeight",normal:z==="normal",print:z==="print"},Q=J.autoHeight?M4.AUTO_HEIGHT:J.print?M4.PRINT:M4.NORMAL;this.view.updateLayoutClasses(Q,J)}},q$=class extends x{constructor(z,J){super();this.direction=J,this.eViewport=j,this.eContainer=j,this.hideTimeout=0,this.setTemplate(z)}postConstruct(){this.addManagedEventListeners({scrollVisibilityChanged:this.onScrollVisibilityChanged.bind(this)}),this.onScrollVisibilityChanged(),this.toggleCss("ag-apple-scrollbar",i9()||a4())}destroy(){super.destroy(),window.clearTimeout(this.hideTimeout)}initialiseInvisibleScrollbar(){if(this.invisibleScrollbar!==void 0)return;if(this.invisibleScrollbar=n9(),this.invisibleScrollbar)this.hideAndShowInvisibleScrollAsNeeded(),this.addActiveListenerToggles()}addActiveListenerToggles(){let z=this.getGui(),J=()=>this.toggleCss("ag-scrollbar-active",!0),Q=()=>this.toggleCss("ag-scrollbar-active",!1);this.addManagedListeners(z,{mouseenter:J,mousedown:J,touchstart:J,mouseleave:Q,touchend:Q})}onScrollVisibilityChanged(){if(this.invisibleScrollbar===void 0)this.initialiseInvisibleScrollbar();O4(this.beans,()=>this.setScrollVisible())}hideAndShowInvisibleScrollAsNeeded(){this.addManagedEventListeners({bodyScroll:(z)=>{if(z.direction===this.direction){if(this.hideTimeout)window.clearTimeout(this.hideTimeout),this.hideTimeout=0;this.toggleCss("ag-scrollbar-scrolling",!0)}},bodyScrollEnd:()=>{this.hideTimeout=window.setTimeout(()=>{this.toggleCss("ag-scrollbar-scrolling",!1),this.hideTimeout=0},400)}})}attemptSettingScrollPosition(z){let J=this.eViewport;MZ(this,()=>B0(J),()=>this.setScrollPosition(z),100)}onScrollCallback(z){this.addManagedElementListeners(this.eViewport,{scroll:z})}},_H={tag:"div",cls:"ag-body-horizontal-scroll",attrs:{"aria-hidden":"true"},children:[{tag:"div",ref:"eLeftSpacer",cls:"ag-horizontal-left-spacer"},{tag:"div",ref:"eViewport",cls:"ag-body-horizontal-scroll-viewport",children:[{tag:"div",ref:"eContainer",cls:"ag-body-horizontal-scroll-container"}]},{tag:"div",ref:"eRightSpacer",cls:"ag-horizontal-right-spacer"}]},HH=class extends q${constructor(){super(_H,"horizontal");this.eLeftSpacer=j,this.eRightSpacer=j,this.setScrollVisibleDebounce=0}wireBeans(z){this.visibleCols=z.visibleCols,this.scrollVisibleSvc=z.scrollVisibleSvc}postConstruct(){super.postConstruct();let z=this.setFakeHScrollSpacerWidths.bind(this);this.addManagedEventListeners({displayedColumnsChanged:z,displayedColumnsWidthChanged:z,pinnedRowDataChanged:this.refreshCompBottom.bind(this)}),this.addManagedPropertyListener("domLayout",z),this.beans.ctrlsSvc.register("fakeHScrollComp",this),this.createManagedBean(new rZ((J)=>this.eContainer.style.width=`${J}px`)),this.addManagedPropertyListeners(["suppressHorizontalScroll"],this.onScrollVisibilityChanged.bind(this))}destroy(){window.clearTimeout(this.setScrollVisibleDebounce),super.destroy()}initialiseInvisibleScrollbar(){if(this.invisibleScrollbar!==void 0)return;if(this.enableRtl=this.gos.get("enableRtl"),super.initialiseInvisibleScrollbar(),this.invisibleScrollbar)this.refreshCompBottom()}refreshCompBottom(){if(!this.invisibleScrollbar)return;let z=this.beans.pinnedRowModel?.getPinnedBottomTotalHeight()??0;this.getGui().style.bottom=`${z}px`}onScrollVisibilityChanged(){super.onScrollVisibilityChanged(),this.setFakeHScrollSpacerWidths()}setFakeHScrollSpacerWidths(){let z=this.scrollVisibleSvc.verticalScrollShowing,J=this.visibleCols.getDisplayedColumnsRightWidth(),Q=!this.enableRtl&&z,Z=this.scrollVisibleSvc.getScrollbarWidth();if(Q)J+=Z;N4(this.eRightSpacer,J),this.eRightSpacer.classList.toggle("ag-scroller-corner",J<=Z);let $=this.visibleCols.getColsLeftWidth();if(this.enableRtl&&z)$+=Z;N4(this.eLeftSpacer,$),this.eLeftSpacer.classList.toggle("ag-scroller-corner",$<=Z)}setScrollVisible(){let z=this.scrollVisibleSvc.horizontalScrollShowing,J=this.invisibleScrollbar,Q=this.gos.get("suppressHorizontalScroll"),Z=z?this.scrollVisibleSvc.getScrollbarWidth()||0:0,X=!Q?Z===0&&J?16:Z:0,Y=()=>{if(this.setScrollVisibleDebounce=0,this.toggleCss("ag-scrollbar-invisible",J),H2(this.getGui(),X),H2(this.eViewport,X),H2(this.eContainer,X),!X)this.eContainer.style.setProperty("min-height","1px");this.setVisible(z,{skipAriaHidden:!0})};if(window.clearTimeout(this.setScrollVisibleDebounce),!z)Y();else this.setScrollVisibleDebounce=window.setTimeout(Y,100)}getScrollPosition(){return T6(this.eViewport,this.enableRtl)}setScrollPosition(z){if(!B0(this.eViewport))this.attemptSettingScrollPosition(z);v6(this.eViewport,z,this.enableRtl)}},WH={selector:"AG-FAKE-HORIZONTAL-SCROLL",component:HH},G$=class extends S{constructor(z,J){super();this.eContainer=z,this.eViewport=J}postConstruct(){this.addManagedEventListeners({rowContainerHeightChanged:this.onHeightChanged.bind(this,this.beans.rowContainerHeight)})}onHeightChanged(z){let J=z.uiContainerHeight,Q=J!=null?`${J}px`:"";if(this.eContainer.style.height=Q,this.eViewport)this.eViewport.style.height=Q}},BH={tag:"div",cls:"ag-body-vertical-scroll",attrs:{"aria-hidden":"true"},children:[{tag:"div",ref:"eViewport",cls:"ag-body-vertical-scroll-viewport",children:[{tag:"div",ref:"eContainer",cls:"ag-body-vertical-scroll-container"}]}]},EH=class extends q${constructor(){super(BH,"vertical")}postConstruct(){super.postConstruct(),this.createManagedBean(new G$(this.eContainer));let{ctrlsSvc:z}=this.beans;z.register("fakeVScrollComp",this),this.addManagedEventListeners({rowContainerHeightChanged:this.onRowContainerHeightChanged.bind(this,z)})}setScrollVisible(){let{scrollVisibleSvc:z}=this.beans,J=z.verticalScrollShowing,Q=this.invisibleScrollbar,Z=J?z.getScrollbarWidth()||0:0,$=Z===0&&Q?16:Z;this.toggleCss("ag-scrollbar-invisible",Q),N4(this.getGui(),$),N4(this.eViewport,$),N4(this.eContainer,$),this.setDisplayed(J,{skipAriaHidden:!0})}onRowContainerHeightChanged(z){let Q=z.getGridBodyCtrl().eBodyViewport,Z=this.getScrollPosition(),$=Q.scrollTop;if(Z!=$)this.setScrollPosition($,!0)}getScrollPosition(){return this.eViewport.scrollTop}setScrollPosition(z,J){if(!J&&!B0(this.eViewport))this.attemptSettingScrollPosition(z);this.eViewport.scrollTop=z}},KH={selector:"AG-FAKE-VERTICAL-SCROLL",component:EH};var Gz="Viewport",P7="fakeVScrollComp",UQ=["fakeHScrollComp","centerHeader","topCenter","bottomCenter","stickyTopCenter","stickyBottomCenter"],T7=100,_Q=150,FH=class extends S{constructor(z){super();this.clearRetryListenerFncs=[],this.lastScrollSource=[null,null],this.scrollLeft=-1,this.nextScrollTop=-1,this.scrollTop=-1,this.lastOffsetHeight=-1,this.lastScrollTop=-1,this.lastIsHorizontalScrollShowing=!1,this.scrollTimer=0,this.isScrollActive=!1,this.isVerticalPositionInvalidated=!0,this.isHorizontalPositionInvalidated=!0,this.eBodyViewport=z,this.resetLastHScrollDebounced=i0(this,()=>this.lastScrollSource[1]=null,_Q),this.resetLastVScrollDebounced=i0(this,()=>this.lastScrollSource[0]=null,_Q)}wireBeans(z){this.ctrlsSvc=z.ctrlsSvc,this.animationFrameSvc=z.animationFrameSvc,this.visibleCols=z.visibleCols}destroy(){super.destroy(),this.clearRetryListenerFncs=[],window.clearTimeout(this.scrollTimer)}postConstruct(){this.enableRtl=this.gos.get("enableRtl");let z=this.invalidateVerticalScroll.bind(this),J=this.invalidateHorizontalScroll.bind(this);this.addManagedEventListeners({displayedColumnsWidthChanged:this.onDisplayedColumnsWidthChanged.bind(this),bodyHeightChanged:z,scrollGapChanged:J}),this.addManagedElementListeners(this.eBodyViewport,{scroll:z}),this.ctrlsSvc.whenReady(this,(Q)=>{this.centerRowsCtrl=Q.center,this.fakeVScrollComp=Q.fakeVScrollComp,this.fakeHScrollComp=Q.fakeHScrollComp,this.onDisplayedColumnsWidthChanged(),this.addScrollListener()})}invalidateHorizontalScroll(){this.isHorizontalPositionInvalidated=!0}invalidateVerticalScroll(){this.isVerticalPositionInvalidated=!0}addScrollListener(){this.addHorizontalScrollListeners(),this.addVerticalScrollListeners()}addHorizontalScrollListeners(){this.addManagedElementListeners(this.centerRowsCtrl.eViewport,{scroll:this.onHScroll.bind(this,Gz)});for(let z of UQ){let J=this.ctrlsSvc.get(z);this.registerScrollPartner(J,this.onHScroll.bind(this,z))}}addVerticalScrollListeners(){let z=this.gos.get("debounceVerticalScrollbar"),J=z?i0(this,this.onVScroll.bind(this,Gz),T7):this.onVScroll.bind(this,Gz),Q=z?i0(this,this.onVScroll.bind(this,P7),T7):this.onVScroll.bind(this,P7);this.addManagedElementListeners(this.eBodyViewport,{scroll:J}),this.registerScrollPartner(this.fakeVScrollComp,Q)}registerScrollPartner(z,J){z.onScrollCallback(J)}onDisplayedColumnsWidthChanged(){if(this.enableRtl)this.horizontallyScrollHeaderCenterAndFloatingCenter()}horizontallyScrollHeaderCenterAndFloatingCenter(z){if(this.centerRowsCtrl==null)return;if(z===void 0)z=this.centerRowsCtrl.getCenterViewportScrollLeft();this.setScrollLeftForAllContainersExceptCurrent(Math.abs(z))}setScrollLeftForAllContainersExceptCurrent(z){for(let J of[...UQ,Gz]){if(this.lastScrollSource[1]===J)continue;let Q=this.getViewportForSource(J);v6(Q,z,this.enableRtl)}}getViewportForSource(z){if(z===Gz)return this.centerRowsCtrl.eViewport;return this.ctrlsSvc.get(z).eViewport}isControllingScroll(z,J){if(this.lastScrollSource[J]==null){if(J===0)this.lastScrollSource[0]=z;else this.lastScrollSource[1]=z;return!0}return this.lastScrollSource[J]===z}onHScroll(z){if(!this.isControllingScroll(z,1))return;let J=this.centerRowsCtrl.eViewport,{scrollLeft:Q}=J;if(this.shouldBlockScrollUpdate(1,Q,!0))return;let Z=T6(this.getViewportForSource(z),this.enableRtl);this.doHorizontalScroll(Z),this.resetLastHScrollDebounced()}onVScroll(z){if(!this.isControllingScroll(z,0))return;let J=z===Gz?this.eBodyViewport.scrollTop:this.fakeVScrollComp.getScrollPosition(),Q=J;if(this.shouldBlockScrollUpdate(0,Q,!0))return;if(z===Gz)this.fakeVScrollComp.setScrollPosition(Q);else if(this.eBodyViewport.scrollTop=J,Q=this.eBodyViewport.scrollTop,this.invalidateVerticalScroll(),Q!==J)this.fakeVScrollComp.setScrollPosition(Q,!0);let{animationFrameSvc:Z}=this;if(Z?.setScrollTop(Q),this.nextScrollTop=Q,Z?.active)Z.schedule();else this.scrollGridIfNeeded(!0);this.resetLastVScrollDebounced()}doHorizontalScroll(z){let J=this.fakeHScrollComp.getScrollPosition();if(this.scrollLeft===z&&z===J)return;this.scrollLeft=z,this.fireScrollEvent(1),this.horizontallyScrollHeaderCenterAndFloatingCenter(z),this.centerRowsCtrl.onHorizontalViewportChanged(!0)}isScrolling(){return this.isScrollActive}fireScrollEvent(z){let J={type:"bodyScroll",direction:z===1?"horizontal":"vertical",left:this.scrollLeft,top:this.scrollTop};this.isScrollActive=!0,this.eventSvc.dispatchEvent(J),window.clearTimeout(this.scrollTimer),this.scrollTimer=window.setTimeout(()=>{this.scrollTimer=0,this.isScrollActive=!1,this.eventSvc.dispatchEvent({...J,type:"bodyScrollEnd"})},_Q)}shouldBlockScrollUpdate(z,J,Q=!1){if(Q&&!a4())return!1;if(z===0)return this.shouldBlockVerticalScroll(J);return this.shouldBlockHorizontalScroll(J)}shouldBlockVerticalScroll(z){let J=C2(this.eBodyViewport),{scrollHeight:Q}=this.eBodyViewport;return z<0||z+J>Q}shouldBlockHorizontalScroll(z){let J=this.centerRowsCtrl.getCenterWidth(),{scrollWidth:Q}=this.centerRowsCtrl.eViewport;if(this.enableRtl){if(z>0)return!0}else if(z<0)return!0;return Math.abs(z)+J>Q}redrawRowsAfterScroll(){this.fireScrollEvent(0)}checkScrollLeft(){let z=this.scrollLeft,J=!1;for(let Q of UQ)if(this.getViewportForSource(Q).scrollLeft!==z){J=!0;break}if(J)this.onHScroll(Gz)}scrollGridIfNeeded(z=!1){let J=this.scrollTop!=this.nextScrollTop;if(J){if(this.scrollTop=this.nextScrollTop,z)this.invalidateVerticalScroll();this.redrawRowsAfterScroll()}return J}setHorizontalScrollPosition(z,J=!1){let Z=this.centerRowsCtrl.eViewport.scrollWidth-this.centerRowsCtrl.getCenterWidth();if(!J&&this.shouldBlockScrollUpdate(1,z))if(this.enableRtl)z=z>0?0:Z;else z=Math.min(Math.max(z,0),Z);v6(this.centerRowsCtrl.eViewport,Math.abs(z),this.enableRtl),this.doHorizontalScroll(z)}setVerticalScrollPosition(z){this.invalidateVerticalScroll(),this.eBodyViewport.scrollTop=z}getVScrollPosition(){if(!this.isVerticalPositionInvalidated){let{lastOffsetHeight:Q,lastScrollTop:Z}=this;return{top:Z,bottom:Z+Q}}this.isVerticalPositionInvalidated=!1;let{scrollTop:z,offsetHeight:J}=this.eBodyViewport;return this.lastScrollTop=z,this.lastOffsetHeight=J,{top:z,bottom:z+J}}getApproximateVScollPosition(){if(this.lastScrollTop>=0&&this.lastOffsetHeight>=0)return{top:this.scrollTop,bottom:this.scrollTop+this.lastOffsetHeight};return this.getVScrollPosition()}getHScrollPosition(){return this.centerRowsCtrl.getHScrollPosition()}isHorizontalScrollShowing(){if(this.isHorizontalPositionInvalidated)this.lastIsHorizontalScrollShowing=this.centerRowsCtrl.isHorizontalScrollShowing(),this.isHorizontalPositionInvalidated=!1;return this.lastIsHorizontalScrollShowing}scrollHorizontally(z){let J=this.centerRowsCtrl.eViewport.scrollLeft;return this.setHorizontalScrollPosition(J+z),this.centerRowsCtrl.eViewport.scrollLeft-J}scrollToTop(){this.setVerticalScrollPosition(0)}ensureNodeVisible(z,J=null){let{rowModel:Q}=this.beans,Z=Q.getRowCount(),$=-1;for(let X=0;X=0)this.ensureIndexVisible($,J)}ensureIndexVisible(z,J,Q=0){if(A0(this.gos,"print"))return;let{rowModel:Z}=this.beans,$=Z.getRowCount();if(typeof z!=="number"||z<0||z>=$){V(88,{index:z});return}this.clearRetryListeners();let{frameworkOverrides:X,pageBounds:Y,rowContainerHeight:q,rowRenderer:G}=this.beans;X.wrapIncoming(()=>{let U=this.ctrlsSvc.getGridBodyCtrl(),_=Z.getRow(z),H,W,B=0;this.invalidateVerticalScroll();do{let{stickyTopHeight:E,stickyBottomHeight:K}=U,F=_.rowTop,L=_.rowHeight,D=Y.getPixelOffset(),M=_.rowTop-D,f=M+_.rowHeight,A=this.getVScrollPosition(),R=q.divStretchOffset,O=A.top+R,v=A.bottom+R,I=v-O,b=q.getScrollPositionForPixel(M),m=q.getScrollPositionForPixel(f-I),g=Math.min((b+m)/2,M),e=O+E>M,t=v-KI)u=b-E;else u=m+K;if(u!==null)this.setVerticalScrollPosition(u),G.redraw({afterScroll:!0});H=F!==_.rowTop||L!==_.rowHeight,W=E!==U.stickyTopHeight||K!==U.stickyBottomHeight,B++}while((H||W)&&B<10);if(this.animationFrameSvc?.flushAllFrames(),Q<10&&(_?.stub||!this.beans.rowAutoHeight?.areRowsMeasured())){let E=this.getVScrollPosition().top;this.clearRetryListenerFncs=this.addManagedEventListeners({bodyScroll:()=>{let K=this.getVScrollPosition().top;if(E===K)return;this.clearRetryListeners()},modelUpdated:()=>{if(this.clearRetryListeners(),z>=Z.getRowCount())return;this.ensureIndexVisible(z,J,Q+1)}})}})}clearRetryListeners(){for(let z of this.clearRetryListenerFncs)z();this.clearRetryListenerFncs=[]}ensureColumnVisible(z,J="auto"){let{colModel:Q,frameworkOverrides:Z}=this.beans,$=Q.getCol(z);if(!$)return;if($.isPinned())return;if(!this.visibleCols.isColDisplayed($))return;let X=this.getPositionedHorizontalScroll($,J);Z.wrapIncoming(()=>{if(X!==null)this.centerRowsCtrl.setCenterViewportScrollLeft(X);this.centerRowsCtrl.onHorizontalViewportChanged(),this.animationFrameSvc?.flushAllFrames()})}getPositionedHorizontalScroll(z,J){let{columnBeforeStart:Q,columnAfterEnd:Z}=this.isColumnOutsideViewport(z),$=this.centerRowsCtrl.getCenterWidth()$:Q<$,q=X?QZ;return{columnBeforeStart:Y,columnAfterEnd:q}}getColumnBounds(z){let J=this.enableRtl,Q=this.visibleCols.bodyWidth,Z=z.getActualWidth(),$=z.getLeft(),X=J?-1:1,Y=J?Q-$:$,q=Y+Z*X,G=Y+Z/2*X;return{colLeft:Y,colMiddle:G,colRight:q}}getViewportBounds(){let z=this.centerRowsCtrl.getCenterWidth(),J=this.centerRowsCtrl.getCenterViewportScrollLeft(),Q=J,Z=z+J;return{start:Q,end:Z,width:z}}},v7={horizontal:{overflow:(z)=>z.scrollWidth-z.clientWidth,scrollSize:(z)=>z.scrollWidth,clientSize:(z)=>z.clientWidth,opposite:"vertical"},vertical:{overflow:(z)=>z.scrollHeight-z.clientHeight,scrollSize:(z)=>z.scrollHeight,clientSize:(z)=>z.clientHeight,opposite:"horizontal"}};function LH(z,J,Q=wZ()||0,Z,$){return U$(z,J,"horizontal",Q,Z,$)}function DH(z,J,Q=wZ()||0,Z,$){return U$(z,J,"vertical",Q,Z,$)}function U$(z,J,Q,Z,$,X){let Y=v7[Q],q=v7[Y.opposite],G=$?B0($):!0,U=X?B0(X):!0,_=Y.overflow(z);if(_<=0)return!1;if(!J||Z===0)return!0;let H=q.overflow(J);if(H<=0)return!0;if(_<=Z){if(G&&U&&MH({candidateOverflow:H,candidateScrollSize:q.scrollSize(J),candidateClientSize:q.clientSize(J),scrollbarWidth:Z}))return!1;let W=Y.clientSize(z)+Z;return Y.scrollSize(z)<=W}return!0}function MH({candidateOverflow:z,candidateScrollSize:J,candidateClientSize:Q,scrollbarWidth:Z}){if(z<=0||z>Z)return!1;let $=Q+Z;return J>Q&&J<=$}var kH=class extends S{constructor(z){super();this.centerContainerCtrl=z}wireBeans(z){this.scrollVisibleSvc=z.scrollVisibleSvc}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>{this.gridBodyCtrl=z.gridBodyCtrl,this.listenForResize()}),this.addManagedEventListeners({scrollbarWidthChanged:this.onScrollbarWidthChanged.bind(this)}),this.addManagedPropertyListeners(["alwaysShowHorizontalScroll","alwaysShowVerticalScroll"],()=>{this.checkViewportAndScrolls()})}listenForResize(){let{beans:z,centerContainerCtrl:J,gridBodyCtrl:Q}=this,Z=()=>{O4(z,()=>{this.onCenterViewportResized()})};J.registerViewportResizeListener(Z),Q.registerBodyViewportResizeListener(Z)}onScrollbarWidthChanged(){this.checkViewportAndScrolls()}onCenterViewportResized(){if(this.scrollVisibleSvc.updateScrollGap(),this.centerContainerCtrl.isViewportInTheDOMTree()){let{pinnedCols:z,colFlex:J}=this.beans;z?.keepPinnedColumnsNarrowerThanViewport(),this.checkViewportAndScrolls();let Q=this.centerContainerCtrl.getCenterWidth();if(Q!==this.centerWidth)this.centerWidth=Q,J?.refreshFlexedColumns({viewportWidth:this.centerWidth,updateBodyWidths:!0,fireResizedEvent:!0})}else this.bodyHeight=0}checkViewportAndScrolls(){this.updateScrollVisibleService(),this.checkBodyHeight(),this.onHorizontalViewportChanged(),this.gridBodyCtrl.scrollFeature.checkScrollLeft()}getBodyHeight(){return this.bodyHeight}checkBodyHeight(){let z=this.gridBodyCtrl.eBodyViewport,J=C2(z);if(this.bodyHeight!==J)this.bodyHeight=J,this.eventSvc.dispatchEvent({type:"bodyHeightChanged"})}updateScrollVisibleService(){this.updateScrollVisibleServiceImpl(),setTimeout(this.updateScrollVisibleServiceImpl.bind(this),500)}updateScrollVisibleServiceImpl(){if(!this.isAlive())return;let z={horizontalScrollShowing:this.centerContainerCtrl.isHorizontalScrollShowing(),verticalScrollShowing:this.gridBodyCtrl.isVerticalScrollShowing()};this.scrollVisibleSvc.setScrollsVisible(z)}onHorizontalViewportChanged(){let{centerContainerCtrl:z,beans:J}=this,Q=z.getCenterWidth(),Z=z.getViewportScrollLeft();J.colViewport.setScrollPosition(Q,Z)}};function _$(z){if(z.altKey||z.ctrlKey||z.metaKey)return!1;return z.key?.length===1}function S6(z,J,Q,Z){let $=J.getColDef().cellRendererParams?.suppressMouseEventHandling;return H$(z,J,Q,Z,$)}function fH(z,J,Q,Z){let $=J?.suppressMouseEventHandling;return H$(z,void 0,Q,Z,$)}function H$(z,J,Q,Z,$){if(!$)return!1;return $(C(z,{column:J,node:Q,event:Z}))}function W$(z,J,Q){let Z=J;while(Z){let $=K9(z,Z,Q);if($)return $;Z=Z.parentElement}return null}var h6="cellCtrl";function c2(z,J){return W$(z,J,h6)}var u6="renderedRow";function aZ(z,J){return W$(z,J,u6)}function pQ(z,J,Q,Z,$){let X=Z?Z.colDef.suppressKeyboardEvent:void 0;if(!X)return!1;let Y=C(z,{event:J,editing:$,column:Z,node:Q,data:Q.data,colDef:Z.colDef});if(X){if(X(Y))return!0}return!1}function SH(z){let{pinnedRowModel:J,rowModel:Q,rangeSvc:Z,visibleCols:$}=z;if(!Z||$.allCols.length===0)return;let X=J?.isEmpty("top")??!0,Y=J?.isEmpty("bottom")??!0,q=X?null:"top",G,U;if(Y)G=null,U=Q.getRowCount()-1;else G="bottom",U=J?.getPinnedBottomRowCount()??-1;Z.setCellRange({rowStartIndex:0,rowStartPinned:q,rowEndIndex:U,rowEndPinned:G})}var VH=class extends S{constructor(z){super();this.element=z}postConstruct(){this.addKeyboardListeners(),this.addMouseListeners(),this.beans.touchSvc?.mockRowContextMenu(this),this.editSvc=this.beans.editSvc}addKeyboardListeners(){let J=this.processKeyboardEvent.bind(this,"keydown");this.addManagedElementListeners(this.element,{["keydown"]:J})}addMouseListeners(){let z="mousedown";if(vQ("pointerdown"))z="pointerdown";else if(vQ("touchstart"))z="touchstart";let J=["dblclick","contextmenu","mouseover","mouseout","click",z];for(let Q of J){let Z=this.processMouseEvent.bind(this,Q);this.addManagedElementListeners(this.element,{[Q]:Z})}}processMouseEvent(z,J){if(!D2(this.beans,J)||q4(J))return;let{cellCtrl:Q,rowCtrl:Z}=this.getControlsForEventTarget(J.target);if(z==="contextmenu"){if(Q?.column)Q.dispatchCellContextMenuEvent(J);this.beans.contextMenuSvc?.handleContextMenuMouseEvent(J,void 0,Z,Q)}else{if(Q)Q.onMouseEvent(z,J);if(Z)Z.onMouseEvent(z,J)}}getControlsForEventTarget(z){let{gos:J}=this;return{cellCtrl:c2(J,z),rowCtrl:aZ(J,z)}}processKeyboardEvent(z,J){let{cellCtrl:Q,rowCtrl:Z}=this.getControlsForEventTarget(J.target);if(J.defaultPrevented)return;if(Q)this.processCellKeyboardEvent(Q,z,J);else if(Z?.isFullWidth())this.processFullWidthRowKeyboardEvent(Z,z,J)}processCellKeyboardEvent(z,J,Q){let Z=this.editSvc?.isEditing(z,{withOpenEditor:!0})??!1;if(!pQ(this.gos,Q,z.rowNode,z.column,Z)){if(J==="keydown"){if(!(!Z&&this.beans.navigation?.handlePageScrollingKey(Q)))z.onKeyDown(Q);if(this.doGridOperations(Q,Z),_$(Q))z.processCharacter(Q)}}if(J==="keydown")this.eventSvc.dispatchEvent(z.createEvent(Q,"cellKeyDown"))}processFullWidthRowKeyboardEvent(z,J,Q){let{rowNode:Z}=z,{focusSvc:$,navigation:X,notesSvc:Y}=this.beans,G=$.getFocusedCell()?.column;if(!pQ(this.gos,Q,Z,G,!1)&&J==="keydown")this.processFullWidthRowKeyDown(z,Q,G,X,Y);if(J==="keydown")this.eventSvc.dispatchEvent(z.createRowEvent("cellKeyDown",Q))}processFullWidthRowKeyDown(z,J,Q,Z=this.beans.navigation,$=this.beans.notesSvc){switch(J.key){case k.PAGE_HOME:case k.PAGE_END:case k.PAGE_UP:case k.PAGE_DOWN:Z?.handlePageScrollingKey(J,!0);return;case k.LEFT:case k.RIGHT:if(!this.gos.get("embedFullWidthRows"))return;case k.UP:case k.DOWN:z.onKeyboardNavigate(J);return;case k.F2:this.processFullWidthRowNoteShortcut(z,J,Q,$);return;case k.TAB:z.onTabKeyDown(J);return;default:}}processFullWidthRowNoteShortcut(z,J,Q,Z=this.beans.notesSvc){if(!J.shiftKey||!Z?.hasDataSource())return;let $=z.rowNode,X=z.findFullWidthInfoForEvent(J),Y;if(X){let{pinned:G}=X;Y={rowNode:$,location:"fullWidthRow",pinned:G==="left"||G==="right"?G:void 0}}else if(Q)Y={rowNode:$,column:Q};if(!Y)return;let q=Z.getNoteAccess(Y);if(!q)return;if(!q.isSuppressed||q.canView)Z.showNote(q.params,!0),J.preventDefault()}doGridOperations(z,J){if(!z.ctrlKey&&!z.metaKey)return;if(J)return;if(!D2(this.beans,z))return;let Q=b9(z),{clipboardSvc:Z,undoRedo:$}=this.beans;if(Q===k.A)return this.onCtrlAndA(z);if(Q===k.C)return this.onCtrlAndC(Z,z);if(Q===k.D)return this.onCtrlAndD(Z,z);if(Q===k.V)return this.onCtrlAndV(Z,z);if(Q===k.X)return this.onCtrlAndX(Z,z);if(Q===k.Y)return this.onCtrlAndY($);if(Q===k.Z)return this.onCtrlAndZ($,z)}onCtrlAndA(z){let{beans:{rowModel:J,rangeSvc:Q,selectionSvc:Z},gos:$}=this;if(Q&&n0($)&&!EU($)&&J.isRowsToRender())SH(this.beans);else if(Z)Z.selectAllRowNodes({source:"keyboardSelectAll",selectAll:k9($)});z.preventDefault()}onCtrlAndC(z,J){if(!z||this.gos.get("enableCellTextSelection"))return;let{cellCtrl:Q}=this.getControlsForEventTarget(J.target);if(this.editSvc?.isEditing(Q,{withOpenEditor:!0}))return;J.preventDefault(),z.copyToClipboard()}onCtrlAndX(z,J){if(!z||this.gos.get("enableCellTextSelection")||this.gos.get("suppressCutToClipboard"))return;let{cellCtrl:Q}=this.getControlsForEventTarget(J.target);if(this.editSvc?.isEditing(Q,{withOpenEditor:!0}))return;J.preventDefault(),z.cutToClipboard(void 0,"ui")}onCtrlAndV(z,J){let{cellCtrl:Q}=this.getControlsForEventTarget(J.target);if(this.editSvc?.isEditing(Q,{withOpenEditor:!0}))return;if(z&&!this.gos.get("suppressClipboardPaste"))z.pasteFromClipboard()}onCtrlAndD(z,J){if(z&&!this.gos.get("suppressClipboardPaste"))z.copyRangeDown();J.preventDefault()}onCtrlAndZ(z,J){if(!this.gos.get("undoRedoCellEditing")||!z)return;if(J.preventDefault(),J.shiftKey)z.redo("ui");else z.undo("ui")}onCtrlAndY(z){z?.redo("ui")}},G6=(z)=>z.topRowCtrls,U6=(z)=>z.getStickyTopRowCtrls(),_6=(z)=>z.getStickyBottomRowCtrls(),H6=(z)=>z.bottomRowCtrls,W6=(z)=>z.allRowCtrls,HQ=(z)=>z.getCtrls("top"),WQ=(z)=>z.getCtrls("center"),BQ=(z)=>z.getCtrls("bottom"),RH={center:{type:"center",name:"center-cols",getRowCtrls:W6,getSpannedRowCtrls:WQ},left:{type:"left",name:"pinned-left-cols",pinnedType:"left",getRowCtrls:W6,getSpannedRowCtrls:WQ},right:{type:"right",name:"pinned-right-cols",pinnedType:"right",getRowCtrls:W6,getSpannedRowCtrls:WQ},fullWidth:{type:"fullWidth",name:"full-width",fullWidth:!0,getRowCtrls:W6},topCenter:{type:"center",name:"floating-top",getRowCtrls:G6,getSpannedRowCtrls:HQ},topLeft:{type:"left",name:"pinned-left-floating",container:"ag-pinned-left-floating-top",pinnedType:"left",getRowCtrls:G6,getSpannedRowCtrls:HQ},topRight:{type:"right",name:"pinned-right-floating",container:"ag-pinned-right-floating-top",pinnedType:"right",getRowCtrls:G6,getSpannedRowCtrls:HQ},topFullWidth:{type:"fullWidth",name:"floating-top-full-width",fullWidth:!0,getRowCtrls:G6},stickyTopCenter:{type:"center",name:"sticky-top",getRowCtrls:U6},stickyTopLeft:{type:"left",name:"pinned-left-sticky-top",container:"ag-pinned-left-sticky-top",pinnedType:"left",getRowCtrls:U6},stickyTopRight:{type:"right",name:"pinned-right-sticky-top",container:"ag-pinned-right-sticky-top",pinnedType:"right",getRowCtrls:U6},stickyTopFullWidth:{type:"fullWidth",name:"sticky-top-full-width",fullWidth:!0,getRowCtrls:U6},stickyBottomCenter:{type:"center",name:"sticky-bottom",getRowCtrls:_6},stickyBottomLeft:{type:"left",name:"pinned-left-sticky-bottom",container:"ag-pinned-left-sticky-bottom",pinnedType:"left",getRowCtrls:_6},stickyBottomRight:{type:"right",name:"pinned-right-sticky-bottom",container:"ag-pinned-right-sticky-bottom",pinnedType:"right",getRowCtrls:_6},stickyBottomFullWidth:{type:"fullWidth",name:"sticky-bottom-full-width",fullWidth:!0,getRowCtrls:_6},bottomCenter:{type:"center",name:"floating-bottom",getRowCtrls:H6,getSpannedRowCtrls:BQ},bottomLeft:{type:"left",name:"pinned-left-floating-bottom",container:"ag-pinned-left-floating-bottom",pinnedType:"left",getRowCtrls:H6,getSpannedRowCtrls:BQ},bottomRight:{type:"right",name:"pinned-right-floating-bottom",container:"ag-pinned-right-floating-bottom",pinnedType:"right",getRowCtrls:H6,getSpannedRowCtrls:BQ},bottomFullWidth:{type:"fullWidth",name:"floating-bottom-full-width",fullWidth:!0,getRowCtrls:H6}};function B$(z){return`ag-${i2(z).name}-viewport`}function E$(z){let J=i2(z);return J.container??`ag-${J.name}-container`}function AH(z){return`ag-${i2(z).name}-spanned-cells-container`}function i2(z){return RH[z]}var jH=["topCenter","topLeft","topRight"],OH=["bottomCenter","bottomLeft","bottomRight"],PH=["center","left","right"],TH=["center","left","right","fullWidth"],vH=["stickyTopCenter","stickyBottomCenter","center","topCenter","bottomCenter"],IH=["left","bottomLeft","topLeft","stickyTopLeft","stickyBottomLeft"],CH=["right","bottomRight","topRight","stickyTopRight","stickyBottomRight"],K$=["stickyTopCenter","stickyTopLeft","stickyTopRight"],F$=["stickyBottomCenter","stickyBottomLeft","stickyBottomRight"],yH=[...K$,"stickyTopFullWidth",...F$,"stickyBottomFullWidth"],bH=[...jH,...OH,...PH,...K$,...F$],xH=class extends S{constructor(z){super();this.name=z,this.visible=!0,this.EMPTY_CTRLS=[],this.options=i2(z)}postConstruct(){this.enableRtl=this.gos.get("enableRtl"),this.forContainers(["center"],()=>{this.viewportSizeFeature=this.createManagedBean(new kH(this)),this.addManagedEventListeners({stickyTopOffsetChanged:this.onStickyTopOffsetChanged.bind(this)})})}onStickyTopOffsetChanged(z){this.comp.setOffsetTop(`${z.offset}px`)}registerWithCtrlsService(){if(this.options.fullWidth)return;this.beans.ctrlsSvc.register(this.name,this)}forContainers(z,J){if(z.indexOf(this.name)>=0)J()}setComp(z,J,Q,Z){this.comp=z,this.eContainer=J,this.eSpannedContainer=Q,this.eViewport=Z,this.createManagedBean(new VH(this.eViewport??this.eContainer)),this.addPreventScrollWhileDragging(),this.listenOnDomOrder();let{pinnedCols:$,rangeSvc:X}=this.beans,Y=()=>this.onPinnedWidthChanged();if(this.forContainers(IH,()=>{this.pinnedWidthFeature=this.createOptionalManagedBean($?.createPinnedWidthFeature(!0,this.eContainer,this.eSpannedContainer)),this.addManagedEventListeners({leftPinnedWidthChanged:Y})}),this.forContainers(CH,()=>{this.pinnedWidthFeature=this.createOptionalManagedBean($?.createPinnedWidthFeature(!1,this.eContainer,this.eSpannedContainer)),this.addManagedEventListeners({rightPinnedWidthChanged:Y})}),this.forContainers(TH,()=>this.createManagedBean(new G$(this.eContainer,this.name==="center"?Z:void 0))),X)this.forContainers(bH,()=>this.createManagedBean(X.createDragListenerFeature(this.eContainer)));this.forContainers(vH,()=>this.createManagedBean(new rZ((q)=>this.comp.setContainerWidth(`${q}px`)))),this.visible=this.isContainerVisible(),this.addListeners(),this.registerWithCtrlsService()}onScrollCallback(z){this.addManagedElementListeners(this.eViewport,{scroll:z})}addListeners(){let{spannedRowRenderer:z,gos:J}=this.beans,Q=this.onDisplayedColumnsChanged.bind(this);if(this.addManagedEventListeners({displayedColumnsChanged:Q,displayedColumnsWidthChanged:Q,displayedRowsChanged:(Z)=>this.onDisplayedRowsChanged(Z.afterScroll)}),Q(),this.onDisplayedRowsChanged(),z&&this.options.getSpannedRowCtrls&&J.get("enableCellSpan"))this.addManagedListeners(z,{spannedRowsUpdated:()=>{let Z=this.options.getSpannedRowCtrls(z);if(!Z)return;this.comp.setSpannedRowCtrls(Z,!1)}})}listenOnDomOrder(){if(yH.indexOf(this.name)>=0){this.comp.setDomOrder(!0);return}let J=()=>{let Q=this.gos.get("ensureDomOrder"),Z=A0(this.gos,"print");this.comp.setDomOrder(Q||Z)};this.addManagedPropertyListener("domLayout",J),J()}onDisplayedColumnsChanged(){this.forContainers(["center"],()=>this.onHorizontalViewportChanged())}addPreventScrollWhileDragging(){let{dragSvc:z}=this.beans;if(!z)return;let J=(Q)=>{if(z.dragging){if(Q.cancelable)Q.preventDefault()}};this.eContainer.addEventListener("touchmove",J,{passive:!1}),this.addDestroyFunc(()=>this.eContainer.removeEventListener("touchmove",J))}onHorizontalViewportChanged(z=!1){let J=this.getCenterWidth(),Q=this.getCenterViewportScrollLeft();this.beans.colViewport.setScrollPosition(J,Q,z)}hasHorizontalScrollGap(){return this.eContainer.clientWidth-this.eViewport.clientWidth<0}hasVerticalScrollGap(){return this.eContainer.clientHeight-this.eViewport.clientHeight<0}getCenterWidth(){return lz(this.eViewport)}getCenterViewportScrollLeft(){return T6(this.eViewport,this.enableRtl)}registerViewportResizeListener(z){let J=j4(this.beans,this.eViewport,z);this.addDestroyFunc(()=>J())}isViewportInTheDOMTree(){return r8(this.eViewport)}getViewportScrollLeft(){return T6(this.eViewport,this.enableRtl)}isHorizontalScrollShowing(){let{beans:z,gos:J,eViewport:Q}=this,Z=J.get("alwaysShowHorizontalScroll"),{ctrlsSvc:$}=z,X=$.getGridBodyCtrl()?.eBodyViewport,Y=$.get("fakeHScrollComp")?.getGui(),q=$.get("fakeVScrollComp")?.getGui();return Z||LH(Q,X,void 0,Y,q)}setHorizontalScroll(z){this.comp.setHorizontalScroll(z)}getHScrollPosition(){return{left:this.eViewport.scrollLeft,right:this.eViewport.scrollLeft+this.eViewport.offsetWidth}}setCenterViewportScrollLeft(z){v6(this.eViewport,z,this.enableRtl)}isContainerVisible(){return this.options.pinnedType==null||!!this.pinnedWidthFeature&&this.pinnedWidthFeature.getWidth()>0}onPinnedWidthChanged(){let z=this.isContainerVisible();if(this.visible!=z)this.visible=z,this.onDisplayedRowsChanged()}onDisplayedRowsChanged(z=!1){let J=this.options.getRowCtrls(this.beans.rowRenderer);if(!this.visible||J.length===0){this.comp.setRowCtrls({rowCtrls:this.EMPTY_CTRLS});return}let Q=A0(this.gos,"print"),$=this.gos.get("embedFullWidthRows")||Q,X=J.filter((Y)=>{let q=Y.isFullWidth();return this.options.fullWidth?!$&&q:$||!q});this.comp.setRowCtrls({rowCtrls:X,useFlushSync:z})}},L$="ag-force-vertical-scroll",wH="ag-selectable",NH="ag-column-moving",gH=class extends S{constructor(){super(...arguments);this.stickyTopHeight=0,this.stickyBottomHeight=0}wireBeans(z){this.ctrlsSvc=z.ctrlsSvc,this.colModel=z.colModel,this.scrollVisibleSvc=z.scrollVisibleSvc,this.pinnedRowModel=z.pinnedRowModel,this.filterManager=z.filterManager,this.rowGroupColsSvc=z.rowGroupColsSvc}setComp(z,J,Q,Z,$,X,Y){this.comp=z,this.eGridBody=J,this.eBodyViewport=Q,this.eTop=Z,this.eBottom=$,this.eStickyTop=X,this.eStickyBottom=Y,this.eCenterColsViewport=Q.querySelector(`.${B$("center")}`),this.eFullWidthContainer=Q.querySelector(`.${E$("fullWidth")}`),this.setCellTextSelection(this.gos.get("enableCellTextSelection")),this.addManagedPropertyListener("enableCellTextSelection",(q)=>this.setCellTextSelection(q.currentValue)),this.createManagedBean(new lZ(this.comp)),this.scrollFeature=this.createManagedBean(new FH(Q)),this.beans.rowDragSvc?.setupRowDrag(Q,this),this.setupRowAnimationCssClass(),this.addEventListeners(),this.addFocusListeners([Z,Q,$,X,Y]),this.setGridRootRole(),this.onGridColumnsChanged(),this.addBodyViewportListener(),this.setFloatingHeights(),this.disableBrowserDragging(),this.addStopEditingWhenGridLosesFocus(),this.updateScrollingClasses(),this.filterManager?.setupAdvFilterHeaderComp(Z),this.ctrlsSvc.register("gridBodyCtrl",this)}addEventListeners(){let z=this.setFloatingHeights.bind(this),J=this.setGridRootRole.bind(this),Q=this.toggleRowResizeStyles.bind(this);this.addManagedEventListeners({gridColumnsChanged:this.onGridColumnsChanged.bind(this),scrollVisibilityChanged:this.onScrollVisibilityChanged.bind(this),scrollGapChanged:this.updateScrollingClasses.bind(this),pinnedRowDataChanged:z,pinnedHeightChanged:z,pinnedRowsChanged:z,headerHeightChanged:this.setStickyTopOffsetTop.bind(this),columnRowGroupChanged:J,columnPivotChanged:J,rowResizeStarted:Q,rowResizeEnded:Q}),this.addManagedPropertyListener("treeData",J)}toggleRowResizeStyles(z){let J=z.type==="rowResizeStarted";this.eBodyViewport.classList.toggle("ag-prevent-animation",J)}onGridColumnsChanged(){let z=this.beans.colModel.getCols();this.comp.setColumnCount(z.length)}onScrollVisibilityChanged(){let{scrollVisibleSvc:z}=this,J=z.verticalScrollShowing;this.setVerticalScrollPaddingVisible(J),this.setStickyWidth(J),this.setStickyBottomOffsetBottom();let Q=J?z.getScrollbarWidth()||0:0,Z=n9()?16:0,$=`calc(100% + ${Q+Z}px)`;O4(this.beans,()=>this.comp.setBodyViewportWidth($)),this.updateScrollingClasses()}setGridRootRole(){let{rowGroupColsSvc:z,colModel:J,gos:Q}=this,Z=Q.get("treeData");if(!Z){let $=J.pivotMode;Z=(!z?0:z.columns.length)>=($?2:1)}this.comp.setGridRootRole(Z?"treegrid":"grid")}addFocusListeners(z){for(let J of z)this.addManagedElementListeners(J,{focusin:(Q)=>{let{target:Z}=Q,$=nz(Z,"ag-root",J);J.classList.toggle("ag-has-focus",!$)},focusout:(Q)=>{let{target:Z,relatedTarget:$}=Q,X=J.contains($),Y=nz($,"ag-root",J);if(nz(Z,"ag-root",J))return;if(!X||Y)J.classList.remove("ag-has-focus")}})}setColumnMovingCss(z){this.comp.setColumnMovingCss(NH,z)}setCellTextSelection(z=!1){this.comp.setCellSelectableCss(wH,z)}updateScrollingClasses(){let{eGridBody:{classList:z},scrollVisibleSvc:J}=this;z.toggle("ag-body-vertical-content-no-gap",!J.verticalScrollGap),z.toggle("ag-body-horizontal-content-no-gap",!J.horizontalScrollGap)}disableBrowserDragging(){this.addManagedElementListeners(this.eGridBody,{dragstart:(z)=>{if(z.target instanceof HTMLImageElement)return z.preventDefault(),!1}})}addStopEditingWhenGridLosesFocus(){this.beans.editSvc?.addStopEditingWhenGridLosesFocus([this.eBodyViewport,this.eBottom,this.eTop,this.eStickyTop,this.eStickyBottom])}updateRowCount(){let z=(this.ctrlsSvc.getHeaderRowContainerCtrl()?.getRowCount()??0)+(this.filterManager?.getHeaderRowCount()??0),{rowModel:J}=this.beans,Q=J.isLastRowIndexKnown()?J.getRowCount():-1,Z=Q===-1?-1:z+Q;this.comp.setRowCount(Z)}registerBodyViewportResizeListener(z){this.comp.registerBodyViewportResizeListener(z)}setVerticalScrollPaddingVisible(z){let J=z?"scroll":"hidden";this.comp.setPinnedTopBottomOverflowY(J)}isVerticalScrollShowing(){let{gos:z,comp:J,ctrlsSvc:Q}=this,Z=z.get("alwaysShowVerticalScroll"),$=Z?L$:null,X=A0(z,"normal");J.setAlwaysVerticalScrollClass($,Z);let Y=Q.get("center")?.eViewport,q=Q.get("fakeHScrollComp")?.getGui(),G=Q.get("fakeVScrollComp")?.getGui();return Z||X&&DH(this.eBodyViewport,Y,void 0,G,q)}setupRowAnimationCssClass(){let{rowContainerHeight:z,environment:J}=this.beans,Q=J.sizesMeasured,Z=()=>{let $=Q&&T1(this.gos)&&!z.stretching,X=$?"ag-row-animation":"ag-row-no-animation";this.comp.setRowAnimationCssOnBodyViewport(X,$)};Z(),this.addManagedEventListeners({heightScaleChanged:Z}),this.addManagedPropertyListener("animateRows",Z),this.addManagedEventListeners({stylesChanged:()=>{if(!Q&&J.sizesMeasured)Q=!0,Z()}})}addBodyViewportListener(){let{eBodyViewport:z,eStickyTop:J,eStickyBottom:Q,eTop:Z,eBottom:$,beans:{popupSvc:X,touchSvc:Y}}=this,q=this.onBodyViewportContextMenu.bind(this);this.addManagedElementListeners(z,{contextmenu:q}),Y?.mockBodyContextMenu(this,q),this.addManagedElementListeners(z,{wheel:this.onBodyViewportWheel.bind(this,X)});let G=this.onStickyWheel.bind(this);for(let _ of[J,Q,Z,$])this.addManagedElementListeners(_,{wheel:G});let U=this.onHorizontalWheel.bind(this);for(let _ of["left","right","topLeft","topRight","bottomLeft","bottomRight"])this.addManagedElementListeners(this.ctrlsSvc.get(_).eContainer,{wheel:U});this.addFullWidthContainerWheelListener()}addFullWidthContainerWheelListener(){this.addManagedElementListeners(this.eFullWidthContainer,{wheel:(z)=>this.onFullWidthContainerWheel(z)})}onFullWidthContainerWheel(z){let{deltaX:J,deltaY:Q,shiftKey:Z}=z;if((Z||Math.abs(J)>Math.abs(Q))&&D2(this.beans,z))this.scrollGridBodyToMatchEvent(z)}onStickyWheel(z){let{deltaY:J}=z;if(this.scrollVertically(J)>0)z.preventDefault()}onHorizontalWheel(z){let{deltaX:J,deltaY:Q,shiftKey:Z}=z;if(!(Z||Math.abs(J)>Math.abs(Q)))return;this.scrollGridBodyToMatchEvent(z)}scrollGridBodyToMatchEvent(z){let{deltaX:J,deltaY:Q}=z;z.preventDefault(),this.eCenterColsViewport.scrollBy({left:J||Q})}onBodyViewportContextMenu(z,J,Q){if(!z&&!Q)return;if(this.gos.get("preventDefaultOnContextMenu"))(z||Q).preventDefault();let{target:Z}=z||J;if(Z===this.eBodyViewport||Z===this.ctrlsSvc.get("center").eViewport)this.beans.contextMenuSvc?.showContextMenu({mouseEvent:z,touchEvent:Q,value:null,anchorToElement:this.eGridBody,source:"ui"})}onBodyViewportWheel(z,J){if(!this.gos.get("suppressScrollWhenPopupsAreOpen"))return;if(z?.hasAnchoredPopup())J.preventDefault()}scrollVertically(z){let J=this.eBodyViewport.scrollTop;return this.scrollFeature.setVerticalScrollPosition(J+z),this.eBodyViewport.scrollTop-J}setFloatingHeights(){let{pinnedRowModel:z,beans:{environment:J}}=this,Q=z?.getPinnedTopTotalHeight(),Z=z?.getPinnedBottomTotalHeight(),$=J.getPinnedRowBorderWidth(),X=J.getRowBorderWidth(),Y=$-X,q=!Q?0:Y+Q,G=!Z?0:Y+Z;this.comp.setTopHeight(q),this.comp.setBottomHeight(G),this.comp.setTopInvisible(q<=0),this.comp.setBottomInvisible(G<=0),this.setStickyTopOffsetTop(),this.setStickyBottomOffsetBottom()}setStickyTopHeight(z=0){this.comp.setStickyTopHeight(`${z}px`),this.stickyTopHeight=z}setStickyBottomHeight(z=0){this.comp.setStickyBottomHeight(`${z}px`),this.stickyBottomHeight=z}setStickyWidth(z){if(!z)this.comp.setStickyTopWidth("100%"),this.comp.setStickyBottomWidth("100%");else{let J=this.scrollVisibleSvc.getScrollbarWidth();this.comp.setStickyTopWidth(`calc(100% - ${J}px)`),this.comp.setStickyBottomWidth(`calc(100% - ${J}px)`)}}setStickyTopOffsetTop(){let J=this.ctrlsSvc.get("gridHeaderCtrl").headerHeight+(this.filterManager?.getHeaderHeight()??0),Q=this.pinnedRowModel?.getPinnedTopTotalHeight()??0,Z=0;if(J>0)Z+=J;if(Q>0)Z+=Q;if(Z>0)Z+=1;this.comp.setStickyTopTop(`${Z}px`)}setStickyBottomOffsetBottom(){let{pinnedRowModel:z,scrollVisibleSvc:J,comp:Q}=this,Z=z?.getPinnedBottomTotalHeight()??0,X=J.horizontalScrollShowing?J.getScrollbarWidth()||0:0,Y=Z+X;Q.setStickyBottomBottom(`${Y}px`)}};function z0(z){return H0(z)}var hH=class extends x{constructor(z,J,Q,Z,$){super();this.cellCtrl=J,this.rowResizerElement=null,this.rendererVersion=0,this.editorVersion=0,this.beans=z,this.gos=z.gos,this.column=J.column,this.rowNode=J.rowNode,this.eRow=Z;let X=z0({tag:"div",role:J.getCellAriaRole(),attrs:{"comp-id":`${this.getCompId()}`,"col-id":J.column.colIdSanitised}});this.eCell=X;let Y;if(J.isCellSpanning())Y=z0({tag:"div",cls:"ag-spanned-cell-wrapper",role:"presentation"}),Y.appendChild(X),this.setTemplateFromElement(Y);else this.setTemplateFromElement(X);this.cellCssManager=new c9(()=>X),this.forceWrapper=J.isForceWrapper(),this.refreshWrapper(!1);let q={toggleCss:(G,U)=>this.cellCssManager.toggleCss(G,U),setUserStyles:(G)=>y2(X,G),getFocusableElement:()=>X,setIncludeSelection:(G)=>this.includeSelection=G,setIncludeRowDrag:(G)=>this.includeRowDrag=G,setIncludeDndSource:(G)=>this.includeDndSource=G,setRowResizerElement:(G)=>this.setRowResizerElement(G),setRenderDetails:(G,U,_)=>this.setRenderDetails(G,U,_),setEditDetails:(G,U,_)=>this.setEditDetails(G,U,_),getCellEditor:()=>this.cellEditor||null,getCellRenderer:()=>this.cellRenderer||null,getParentOfValue:()=>this.getParentOfValue(),refreshEditStyles:(G,U)=>this.refreshEditStyles(G,U)};J.setComp(q,X,Y,this.eCellWrapper,Q,$,void 0)}getParentOfValue(){return this.eCellValue??this.eCellWrapper??this.eCell}setRowResizerElement(z){if(this.rowResizerElement)R0(this.rowResizerElement);if(this.rowResizerElement=z,z)this.eCell.appendChild(z)}setRenderDetails(z,J,Q){if(this.cellEditor&&!this.cellEditorPopupWrapper)return;this.firstRender=this.firstRender==null;let $=this.refreshWrapper(!1);if(this.refreshEditStyles(!1),z){if(!(Q||$?!1:this.refreshCellRenderer(z)))this.destroyRenderer(),this.createCellRendererInstance(z)}else this.destroyRenderer(),this.insertValueWithoutCellRenderer(J);if(this.rowDraggingComp?.refreshVisibility(),this.rowResizerElement&&!this.rowResizerElement.parentElement)this.eCell.appendChild(this.rowResizerElement)}setEditDetails(z,J,Q){if(z)this.createCellEditorInstance(z,J,Q);else this.destroyEditor()}removeControls(){let z=this.beans.context;this.checkboxSelectionComp=z.destroyBean(this.checkboxSelectionComp),this.dndSourceComp=z.destroyBean(this.dndSourceComp),this.rowDraggingComp=z.destroyBean(this.rowDraggingComp)}refreshWrapper(z){let J=this.includeRowDrag||this.includeDndSource||this.includeSelection,Q=J||this.forceWrapper,Z=Q&&this.eCellWrapper==null;if(Z)this.eCellWrapper=z0({tag:"div",cls:"ag-cell-wrapper",role:"presentation"}),this.eCell.appendChild(this.eCellWrapper);let $=!Q&&this.eCellWrapper!=null;if($)R0(this.eCellWrapper),this.eCellWrapper=void 0;this.cellCssManager.toggleCss("ag-cell-value",!Q);let X=!z&&Q,Y=X&&this.eCellValue==null;if(Y){let U=this.cellCtrl.getCellValueClass();this.eCellValue=z0({tag:"span",cls:U,role:"presentation"}),this.eCellWrapper.appendChild(this.eCellValue)}let q=!X&&this.eCellValue!=null;if(q)R0(this.eCellValue),this.eCellValue=void 0;let G=Z||$||Y||q;if(G)this.removeControls();if(!z&&J)this.addControls();return G}addControls(){let{cellCtrl:z,eCellWrapper:J,eCellValue:Q,includeRowDrag:Z,includeDndSource:$,includeSelection:X}=this,Y=(q)=>{if(q)J.insertBefore(q.getGui(),Q)};if(Z&&this.rowDraggingComp==null)this.rowDraggingComp=z.createRowDragComp(),Y(this.rowDraggingComp);if($&&this.dndSourceComp==null)this.dndSourceComp=z.createDndSource(),Y(this.dndSourceComp);if(X&&this.checkboxSelectionComp==null)this.checkboxSelectionComp=z.createSelectionCheckbox(),Y(this.checkboxSelectionComp)}createCellEditorInstance(z,J,Q){let Z=this.editorVersion,$=z.newAgStackInstance(),{params:X}=z;if($.then((q)=>this.afterCellEditorCreated(Z,q,X,J,Q)),d(this.cellEditor)&&X.cellStartedEdit)this.cellCtrl.focusCell(!0)}insertValueWithoutCellRenderer(z){let J=this.getParentOfValue();J0(J);let Q=T2(z);if(Q!=null)J.textContent=Q}destroyRenderer(){let{context:z}=this.beans;this.cellRenderer=z.destroyBean(this.cellRenderer),R0(this.cellRendererGui),this.cellRendererGui=null,this.rendererVersion++}destroyEditor(){let{context:z}=this.beans;if(this.cellEditorPopupWrapper?.getGui().contains(n(this.beans))||this.cellCtrl.hasBrowserFocus())this.eCell.focus({preventScroll:!0});this.hideEditorPopup?.(),this.hideEditorPopup=void 0,this.cellEditor=z.destroyBean(this.cellEditor),this.cellEditorPopupWrapper=z.destroyBean(this.cellEditorPopupWrapper),R0(this.cellEditorGui),this.cellCtrl.disableEditorTooltipFeature(),this.cellEditorGui=null,this.editorVersion++}refreshCellRenderer(z){if(this.cellRenderer?.refresh==null)return!1;if(this.cellRendererClass!==z.componentClass)return!1;let J=this.cellRenderer.refresh(z.params);return J===!0||J===void 0}createCellRendererInstance(z){let J=this.rendererVersion,Q=(X)=>(Y)=>{if(this.rendererVersion!==J||!this.isAlive())return;let G=X.newAgStackInstance(),U=this.afterCellRendererCreated.bind(this,J,X.componentClass);G?.then(U)},{animationFrameSvc:Z}=this.beans,$;if(Z?.active&&this.firstRender)$=(X,Y=!1)=>{Z.createTask(Q(X),this.rowNode.rowIndex,"p2",X.componentFromFramework,Y)};else $=(X)=>Q(X)();if(z.params?.deferRender&&!this.cellCtrl.rowNode.group){let{loadingComp:X,onReady:Y}=this.cellCtrl.getDeferLoadingCellRenderer();if(X)$(X),Y.then(()=>$(z,!0))}else $(z)}afterCellRendererCreated(z,J,Q){if(!this.isAlive()||z!==this.rendererVersion){this.beans.context.destroyBean(Q);return}this.cellRenderer=Q,this.cellRendererClass=J;let $=Q.getGui();if(this.cellRendererGui=$,$!=null){let X=this.getParentOfValue();J0(X),X.appendChild($)}}afterCellEditorCreated(z,J,Q,Z,$){let X=z!==this.editorVersion,{context:Y}=this.beans;if(X){Y.destroyBean(J);return}if(J.isCancelBeforeStart?.()){Y.destroyBean(J),this.cellCtrl.stopEditing(!0);return}if(!J.getGui){V(97,{colId:this.column.getId()}),Y.destroyBean(J);return}this.cellEditor=J,this.cellEditorGui=J.getGui();let G=Z||J.isPopup?.();if(G)this.addPopupCellEditor(Q,$);else this.addInCellEditor();this.refreshEditStyles(!0,G),J.afterGuiAttached?.(),this.cellCtrl.enableEditorTooltipFeature(J),this.cellCtrl.cellEditorAttached()}refreshEditStyles(z,J){let{cellCssManager:Q}=this;Q.toggleCss("ag-cell-inline-editing",z&&!J),Q.toggleCss("ag-cell-popup-editing",z&&!!J),Q.toggleCss("ag-cell-not-inline-editing",!z||!!J)}addInCellEditor(){let{eCell:z}=this;if(z.contains(n(this.beans)))z.focus();if(this.destroyRenderer(),this.refreshWrapper(!0),J0(this.getParentOfValue()),this.cellEditorGui)this.getParentOfValue().appendChild(this.cellEditorGui)}addPopupCellEditor(z,J){let{gos:Q,context:Z,popupSvc:$,editSvc:X}=this.beans;if(Q.get("editType")==="fullRow")V(98);let Y=this.cellEditorPopupWrapper=Z.createBean(X.createPopupEditorWrapper(z)),{cellEditor:q,cellEditorGui:G,eCell:U,rowNode:_,column:H,cellCtrl:W}=this,B=Y.getGui();if(G)B.appendChild(G);let E=Q.get("stopEditingWhenCellsLoseFocus"),K=J!=null?J:q.getPopupPosition?.()??"over",F=Q.get("enableRtl"),L={ePopup:B,additionalParams:{column:H,rowNode:_},type:"popupCellEditor",eventSource:U,position:K,alignSide:F?"right":"left",keepWithinBounds:!0},D=$.positionPopupByComponent.bind($,L),M=$.addPopup({modal:E,eChild:B,closeOnEsc:!0,closedCallback:(f)=>{W.onPopupEditorClosed(f)},anchorToElement:U,positionCallback:D,ariaOwns:U});if(M)this.hideEditorPopup=M.hideFunc}detach(){this.getGui().remove()}destroy(){this.destroyRenderer(),this.destroyEditor(),this.removeControls(),super.destroy()}},uH=class extends x{constructor(z,J,Q){super();this.cellComps=new Map,this.beans=J,this.rowCtrl=z;let Z=z0({tag:"div",role:"row",attrs:{"comp-id":`${this.getCompId()}`}});this.setInitialStyle(Z,Q),this.setTemplateFromElement(Z);let $=Z.style;this.domOrder=this.rowCtrl.getDomOrder();let X={setDomOrder:(Y)=>this.domOrder=Y,setCellCtrls:(Y)=>this.setCellCtrls(Y),showFullWidth:(Y)=>this.showFullWidth(Y),getFullWidthCellRenderer:()=>this.fullWidthCellRenderer,getFullWidthCellRendererParams:()=>this.fullWidthCellRendererParams,toggleCss:(Y,q)=>this.toggleCss(Y,q),setUserStyles:(Y)=>y2(Z,Y),setTop:(Y)=>$.top=Y,setTransform:(Y)=>$.transform=Y,setRowIndex:(Y)=>Z.setAttribute("row-index",Y),setRowId:(Y)=>Z.setAttribute("row-id",Y),setRowBusinessKey:(Y)=>Z.setAttribute("row-business-key",Y),refreshFullWidth:(Y)=>{let q=Y();return this.fullWidthCellRendererParams=q,this.fullWidthCellRenderer?.refresh?.(q)??!1}};z.setComp(X,this.getGui(),Q,void 0),this.addDestroyFunc(()=>{z.unsetComp(Q)})}setInitialStyle(z,J){let Q=this.rowCtrl.getInitialTransform(J);if(Q)z.style.setProperty("transform",Q);else{let Z=this.rowCtrl.getInitialRowTop(J);if(Z)z.style.setProperty("top",Z)}}showFullWidth(z){let J=(Z)=>{if(this.isAlive()){let $=Z.getGui();this.getGui().appendChild($),this.rowCtrl.setupDetailRowAutoHeight($),this.setFullWidthRowComp(Z,z.params)}else this.beans.context.destroyBean(Z)};z.newAgStackInstance().then(J)}setCellCtrls(z){let J=new Map(this.cellComps);for(let Q of z){let Z=Q.instanceId;if(!this.cellComps.has(Z))this.newCellComp(Q);else J.delete(Z)}this.destroyCells(J),this.ensureDomOrder(z)}ensureDomOrder(z){if(!this.domOrder)return;let J=[];for(let Q of z){let Z=this.cellComps.get(Q.instanceId);if(Z)J.push(Z.getGui())}s8(this.getGui(),J)}newCellComp(z){let J=this.beans.editSvc?.isEditing(z,{withOpenEditor:!0})??!1,Q=new hH(this.beans,z,this.rowCtrl.printLayout,this.getGui(),J);this.cellComps.set(z.instanceId,Q),this.getGui().appendChild(Q.getGui())}destroy(){super.destroy(),this.destroyCells(this.cellComps)}setFullWidthRowComp(z,J){this.fullWidthCellRenderer=z,this.fullWidthCellRendererParams=J,this.addDestroyFunc(()=>{this.fullWidthCellRenderer=this.beans.context.destroyBean(this.fullWidthCellRenderer),this.fullWidthCellRendererParams=void 0})}destroyCells(z){for(let J of z.values()){if(!J)continue;let Q=J.cellCtrl.instanceId;if(this.cellComps.get(Q)!==J)continue;J.detach(),J.destroy(),this.cellComps.delete(Q)}}};function mH(z,J,Q){let Z=!!Q.gos.get("enableCellSpan")&&!!J.getSpannedRowCtrls,$={tag:"div",ref:"eContainer",cls:E$(z),role:"rowgroup"};if(J.type==="center"||Z){let X={tag:"div",ref:"eSpannedContainer",cls:`ag-spanning-container ${AH(z)}`,role:"presentation"};return $.role="presentation",{tag:"div",ref:"eViewport",cls:`ag-viewport ${B$(z)}`,role:"rowgroup",children:[$,Z?X:null]}}return $}var cH=class extends x{constructor(z){super();this.eViewport=j,this.eContainer=j,this.eSpannedContainer=j,this.rowCompsNoSpan={},this.rowCompsWithSpan={},this.name=z?.name,this.options=i2(this.name)}postConstruct(){this.setTemplate(mH(this.name,this.options,this.beans));let z={setHorizontalScroll:(Q)=>this.eViewport.scrollLeft=Q,setViewportHeight:(Q)=>this.eViewport.style.height=Q,setRowCtrls:({rowCtrls:Q})=>this.setRowCtrls(Q),setSpannedRowCtrls:(Q)=>this.setRowCtrls(Q,!0),setDomOrder:(Q)=>{this.domOrder=Q},setContainerWidth:(Q)=>{if(this.eContainer.style.width=Q,this.eSpannedContainer)this.eSpannedContainer.style.width=Q},setOffsetTop:(Q)=>{let Z=`translateY(${Q})`;if(this.eContainer.style.transform=Z,this.eSpannedContainer)this.eSpannedContainer.style.transform=Z}};this.createManagedBean(new xH(this.name)).setComp(z,this.eContainer,this.eSpannedContainer,this.eViewport)}destroy(){this.setRowCtrls([]),this.setRowCtrls([],!0),super.destroy(),this.lastPlacedElement=null}setRowCtrls(z,J){let{beans:Q,options:Z}=this,$=J?this.eSpannedContainer:this.eContainer,X=J?{...this.rowCompsWithSpan}:{...this.rowCompsNoSpan},Y={};if(J)this.rowCompsWithSpan=Y;else this.rowCompsNoSpan=Y;this.lastPlacedElement=null;let q=[];for(let G of z){let U=G.instanceId,_=X[U],H;if(_)H=_,delete X[U];else{if(!G.rowNode.displayed)continue;H=new uH(G,Q,Z.type)}Y[U]=H,q.push([H,!_])}this.removeOldRows(Object.values(X)),this.addRowNodes(q,$)}addRowNodes(z,J){let{domOrder:Q}=this;for(let[Z,$]of z){let X=Z.getGui();if(!Q){if($)J.appendChild(X)}else this.ensureDomOrder(X,J)}}removeOldRows(z){for(let J of z)J.getGui().remove(),J.destroy()}ensureDomOrder(z,J){t8(J,z,this.lastPlacedElement),this.lastPlacedElement=z}},iH={selector:"AG-ROW-CONTAINER",component:cH};function X2(z,J){return J.map((Q)=>{let Z=`e${Q[0].toUpperCase()+Q.substring(1)}RowContainer`;return z[Z]={name:Q},{tag:"ag-row-container",ref:Z,attrs:{name:Q}}})}function pH(z){let J={},Q={tag:"div",ref:"eGridRoot",cls:"ag-root ag-unselectable",children:[{tag:"ag-header-root"},{tag:"div",ref:"eTop",cls:"ag-floating-top",role:"presentation",children:X2(J,["topLeft","topCenter","topRight","topFullWidth"])},{tag:"div",ref:"eBody",cls:"ag-body",role:"presentation",children:[{tag:"div",ref:"eBodyViewport",cls:"ag-body-viewport",role:"presentation",children:X2(J,["left","center","right","fullWidth"])},{tag:"ag-fake-vertical-scroll"}]},{tag:"div",ref:"eStickyTop",cls:"ag-sticky-top",role:"presentation",children:X2(J,["stickyTopLeft","stickyTopCenter","stickyTopRight","stickyTopFullWidth"])},{tag:"div",ref:"eStickyBottom",cls:"ag-sticky-bottom",role:"presentation",children:X2(J,["stickyBottomLeft","stickyBottomCenter","stickyBottomRight","stickyBottomFullWidth"])},{tag:"div",ref:"eBottom",cls:"ag-floating-bottom",role:"presentation",children:X2(J,["bottomLeft","bottomCenter","bottomRight","bottomFullWidth"])},{tag:"ag-fake-horizontal-scroll"},z?{tag:"ag-overlay-wrapper"}:null]};return{paramsMap:J,elementParams:Q}}var nH=class extends x{constructor(){super(...arguments);this.eGridRoot=j,this.eBodyViewport=j,this.eStickyTop=j,this.eStickyBottom=j,this.eTop=j,this.eBottom=j,this.eBody=j}postConstruct(){let{overlays:z,rangeSvc:J}=this.beans,Q=z?.getOverlayWrapperSelector(),{paramsMap:Z,elementParams:$}=pH(!!Q);this.setTemplate($,[...Q?[Q]:[],WH,KH,UH,iH],Z);let X=(q,G)=>{let U=`${q}px`;G.style.minHeight=U,G.style.height=U},Y={setRowAnimationCssOnBodyViewport:(q,G)=>this.setRowAnimationCssOnBodyViewport(q,G),setColumnCount:(q)=>kG(this.getGui(),q),setRowCount:(q)=>MG(this.getGui(),q),setTopHeight:(q)=>X(q,this.eTop),setBottomHeight:(q)=>X(q,this.eBottom),setTopInvisible:(q)=>this.eTop.classList.toggle("ag-invisible",q),setBottomInvisible:(q)=>this.eBottom.classList.toggle("ag-invisible",q),setStickyTopHeight:(q)=>this.eStickyTop.style.height=q,setStickyTopTop:(q)=>this.eStickyTop.style.top=q,setStickyTopWidth:(q)=>this.eStickyTop.style.width=q,setStickyBottomHeight:(q)=>{this.eStickyBottom.style.height=q,this.eStickyBottom.classList.toggle("ag-invisible",q==="0px")},setStickyBottomBottom:(q)=>this.eStickyBottom.style.bottom=q,setStickyBottomWidth:(q)=>this.eStickyBottom.style.width=q,setColumnMovingCss:(q,G)=>this.toggleCss(q,G),updateLayoutClasses:(q,G)=>{let U=[this.eBodyViewport.classList,this.eBody.classList];for(let _ of U)_.toggle(M4.AUTO_HEIGHT,G.autoHeight),_.toggle(M4.NORMAL,G.normal),_.toggle(M4.PRINT,G.print);this.toggleCss(M4.AUTO_HEIGHT,G.autoHeight),this.toggleCss(M4.NORMAL,G.normal),this.toggleCss(M4.PRINT,G.print)},setAlwaysVerticalScrollClass:(q,G)=>this.eBodyViewport.classList.toggle(L$,G),registerBodyViewportResizeListener:(q)=>{let G=j4(this.beans,this.eBodyViewport,q);this.addDestroyFunc(()=>G())},setPinnedTopBottomOverflowY:(q)=>this.eTop.style.overflowY=this.eBottom.style.overflowY=q,setCellSelectableCss:(q,G)=>{for(let U of[this.eTop,this.eBodyViewport,this.eBottom])U.classList.toggle(q,G)},setBodyViewportWidth:(q)=>this.eBodyViewport.style.width=q,setGridRootRole:(q)=>U0(this.eGridRoot,q)};if(this.ctrl=this.createManagedBean(new gH),this.ctrl.setComp(Y,this.getGui(),this.eBodyViewport,this.eTop,this.eBottom,this.eStickyTop,this.eStickyBottom),J&&n0(this.gos)||S2(this.gos))DG(this.getGui(),!0)}setRowAnimationCssOnBodyViewport(z,J){let Q=this.eBodyViewport.classList;Q.toggle("ag-row-animation",J),Q.toggle("ag-row-no-animation",!J)}getFocusableContainerName(){return"gridBody"}},dH={selector:"AG-GRID-BODY",component:nH},W2={TAB_GUARD:"ag-tab-guard",TAB_GUARD_TOP:"ag-tab-guard-top",TAB_GUARD_BOTTOM:"ag-tab-guard-bottom"},rH=class extends k0{constructor(z,J){super();this.stopPropagationCallbacks=J,this.skipTabGuardFocus=!1,this.forcingFocusOut=!1,this.allowFocus=!1;let{comp:Q,eTopGuard:Z,eBottomGuard:$,focusTrapActive:X,forceFocusOutWhenTabGuardsAreEmpty:Y,isFocusableContainer:q,focusInnerElement:G,onFocusIn:U,onFocusOut:_,shouldStopEventPropagation:H,onTabKeyDown:W,handleKeyDown:B,isEmpty:E,eFocusableElement:K}=z;this.comp=Q,this.eTopGuard=Z,this.eBottomGuard=$,this.providedFocusInnerElement=G,this.eFocusableElement=K,this.focusTrapActive=!!X,this.forceFocusOutWhenTabGuardsAreEmpty=!!Y,this.isFocusableContainer=!!q,this.providedFocusIn=U,this.providedFocusOut=_,this.providedShouldStopEventPropagation=H,this.providedOnTabKeyDown=W,this.providedHandleKeyDown=B,this.providedIsEmpty=E}postConstruct(){this.createManagedBean(new d9(this.eFocusableElement,this.stopPropagationCallbacks,{shouldStopEventPropagation:()=>this.shouldStopEventPropagation(),onTabKeyDown:(z)=>this.onTabKeyDown(z),handleKeyDown:(z)=>this.handleKeyDown(z),onFocusIn:(z)=>this.onFocusIn(z),onFocusOut:(z)=>this.onFocusOut(z)})),this.activateTabGuards();for(let z of[this.eTopGuard,this.eBottomGuard])this.addManagedElementListeners(z,{focus:this.onFocus.bind(this)})}handleKeyDown(z){if(this.providedHandleKeyDown)this.providedHandleKeyDown(z)}tabGuardsAreActive(){return!!this.eTopGuard&&this.eTopGuard.hasAttribute("tabIndex")}shouldStopEventPropagation(){if(this.providedShouldStopEventPropagation)return this.providedShouldStopEventPropagation();return!1}activateTabGuards(){if(this.forcingFocusOut)return;let z=this.gos.get("tabIndex");this.comp.setTabIndex(z.toString())}deactivateTabGuards(){this.comp.setTabIndex()}onFocus(z){if(this.isFocusableContainer&&!this.eFocusableElement.contains(z.relatedTarget)){if(!this.allowFocus){this.findNextElementOutsideAndFocus(z.target===this.eBottomGuard);return}}if(this.skipTabGuardFocus){this.skipTabGuardFocus=!1;return}if(this.forceFocusOutWhenTabGuardsAreEmpty){if(this.providedIsEmpty?this.providedIsEmpty():V4(this.eFocusableElement,".ag-tab-guard").length===0){this.findNextElementOutsideAndFocus(z.target===this.eBottomGuard);return}}if(this.isFocusableContainer&&this.eFocusableElement.contains(z.relatedTarget))return;let J=z.target===this.eBottomGuard;if(!(this.providedFocusInnerElement?this.providedFocusInnerElement(J):this.focusInnerElement(J))&&this.forceFocusOutWhenTabGuardsAreEmpty)this.findNextElementOutsideAndFocus(z.target===this.eBottomGuard)}findNextElementOutsideAndFocus(z){let J=Y0(this.beans),Q=V4(J.body,null,!0),Z=Q.indexOf(z?this.eTopGuard:this.eBottomGuard);if(Z===-1)return;let $,X;if(z)$=0,X=Z;else $=Z+1,X=Q.length;let Y=Q.slice($,X),q=this.gos.get("tabIndex");Y.sort((G,U)=>{let _=Number.parseInt(G.getAttribute("tabindex")||"0"),H=Number.parseInt(U.getAttribute("tabindex")||"0");if(H===q)return 1;if(_===q)return-1;if(_===0)return 1;if(H===0)return-1;return _-H}),Y[z?Y.length-1:0]?.focus()}onFocusIn(z){if(this.focusTrapActive||this.forcingFocusOut)return;if(this.providedFocusIn)this.providedFocusIn(z);if(!this.isFocusableContainer)this.deactivateTabGuards()}onFocusOut(z){if(this.focusTrapActive)return;if(this.providedFocusOut)this.providedFocusOut(z);if(!this.eFocusableElement.contains(z.relatedTarget))this.activateTabGuards()}onTabKeyDown(z){if(this.providedOnTabKeyDown){this.providedOnTabKeyDown(z);return}if(this.focusTrapActive)return;if(z.defaultPrevented)return;let J=this.tabGuardsAreActive();if(J)this.deactivateTabGuards();let Q=this.getNextFocusableElement(z.shiftKey);if(J)setTimeout(()=>this.activateTabGuards(),0);if(!Q)return;Q.focus(),z.preventDefault()}focusInnerElement(z=!1){let J=V4(this.eFocusableElement);if(this.tabGuardsAreActive())J.splice(0,1),J.splice(-1,1);if(!J.length)return!1;return J[z?J.length-1:0].focus({preventScroll:!0}),!0}getNextFocusableElement(z){return O0(this.beans,this.eFocusableElement,!1,z)}forceFocusOutOfContainer(z=!1){if(this.forcingFocusOut)return;let J=z?this.eTopGuard:this.eBottomGuard;this.activateTabGuards(),this.skipTabGuardFocus=!0,this.forcingFocusOut=!0,J.focus(),window.setTimeout(()=>{this.forcingFocusOut=!1,this.activateTabGuards()})}isTabGuard(z,J){return z===this.eTopGuard&&!J||z===this.eBottomGuard&&(J??!0)}setAllowFocus(z){this.allowFocus=z}},oZ=class extends k0{constructor(z,J){super();this.comp=z,this.stopPropagationCallbacks=J}initialiseTabGuard(z){this.eTopGuard=this.createTabGuard("top"),this.eBottomGuard=this.createTabGuard("bottom"),this.eFocusableElement=this.comp.getFocusableElement();let{eTopGuard:J,eBottomGuard:Q,eFocusableElement:Z,stopPropagationCallbacks:$}=this,X=[J,Q],Y={setTabIndex:(L)=>{for(let D of X)if(L==null)D.removeAttribute("tabindex");else D.setAttribute("tabindex",L)}};this.addTabGuards(J,Q);let{focusTrapActive:q=!1,onFocusIn:G,onFocusOut:U,focusInnerElement:_,handleKeyDown:H,onTabKeyDown:W,shouldStopEventPropagation:B,isEmpty:E,forceFocusOutWhenTabGuardsAreEmpty:K,isFocusableContainer:F}=z;this.tabGuardCtrl=this.createManagedBean(new rH({comp:Y,focusTrapActive:q,eTopGuard:J,eBottomGuard:Q,eFocusableElement:Z,onFocusIn:G,onFocusOut:U,focusInnerElement:_,handleKeyDown:H,onTabKeyDown:W,shouldStopEventPropagation:B,isEmpty:E,forceFocusOutWhenTabGuardsAreEmpty:K,isFocusableContainer:F},$))}getTabGuardCtrl(){return this.tabGuardCtrl}createTabGuard(z){let J=Y0(this.beans).createElement("div"),Q=z==="top"?W2.TAB_GUARD_TOP:W2.TAB_GUARD_BOTTOM;return J.classList.add(W2.TAB_GUARD,Q),U0(J,"presentation"),J}addTabGuards(z,J){let Q=this.eFocusableElement;Q.prepend(z),Q.append(J)}removeAllChildrenExceptTabGuards(){let z=[this.eTopGuard,this.eBottomGuard];J0(this.comp.getFocusableElement()),this.addTabGuards(...z)}forceFocusOutOfContainer(z=!1){this.tabGuardCtrl.forceFocusOutOfContainer(z)}appendChild(z,J,Q){if(!b2(J))J=J.getGui();let{eBottomGuard:Z}=this;if(Z)Z.before(J);else z(J,Q)}destroy(){let{eTopGuard:z,eBottomGuard:J}=this;R0(z),R0(J),super.destroy()}},Qz=class extends I0{initialiseTabGuard(z,J){this.tabGuardFeature=this.createManagedBean(new oZ(this,J)),this.tabGuardFeature.initialiseTabGuard(z)}forceFocusOutOfContainer(z=!1){this.tabGuardFeature.forceFocusOutOfContainer(z)}appendChild(z,J){this.tabGuardFeature.appendChild(super.appendChild.bind(this),z,J)}},eZ=class extends Qz{initialiseTabGuard(z){super.initialiseTabGuard(z,Oz)}},I7=(z,J)=>{return o9(z,()=>E0(z.getGui(),J,!1,!0))},C7=(z)=>{return z?.getFocusableContainerName()??"external"},tH=(z)=>{if(z==null)return"external";return typeof z==="string"?z:"gridBody"},sH=class extends S{constructor(){super(...arguments);this.additionalFocusableContainers=new Set}setComp(z,J,Q){this.view=z,this.eGridHostDiv=J,this.eGui=Q,this.eGui.setAttribute("grid-id",this.beans.context.getId());let{dragAndDrop:Z,ctrlsSvc:$}=this.beans;if(Z?.registerGridDropTarget(()=>this.eGui,this),this.createManagedBean(new lZ(this.view)),this.view.setRtlClass(this.gos.get("enableRtl")?"ag-rtl":"ag-ltr"),this.gos.get("suppressContentVisibilityAuto"))this.eGui.style.setProperty("content-visibility","visible");let X=j4(this.beans,this.eGridHostDiv,this.onGridSizeChanged.bind(this));this.addDestroyFunc(()=>X()),$.register("gridCtrl",this)}isDetailGrid(){return _J(this.getGui())?.getAttribute("row-id")?.startsWith("detail")||!1}getOptionalSelectors(){let z=this.beans;return{paginationSelector:z.pagination?.getPaginationSelector(),gridHeaderDropZonesSelector:z.registry?.getSelector("AG-GRID-HEADER-DROP-ZONES"),sideBarSelector:z.sideBar?.getSelector(),statusBarSelector:z.registry?.getSelector("AG-STATUS-BAR"),toolbarSelector:z.registry?.getSelector("AG-TOOLBAR"),watermarkSelector:z.licenseManager?.getWatermarkSelector()}}onGridSizeChanged(){this.eventSvc.dispatchEvent({type:"gridSizeChanged",clientWidth:this.eGridHostDiv.clientWidth,clientHeight:this.eGridHostDiv.clientHeight})}destroyGridUi(){this.view.destroyGridUi()}getGui(){return this.eGui}setResizeCursor(z){let{view:J}=this;if(z===!1)J.setCursor(null);else J.setCursor(z===1?"ew-resize":"ns-resize")}disableUserSelect(z){this.view.setUserSelect(z?"none":null)}focusNextInnerContainer(z){let J=this.getFocusableContainers(),{indexWithFocus:Q,nextIndex:Z}=this.getNextFocusableIndex(J,z),$=Q===-1?z?J.length-1:0:Z,{gos:X,beans:{focusSvc:Y,navigation:q}}=this,G=X.getCallback("tabToNextGridContainer");if(G){let U=Y.getDefaultTabToNextGridContainerTarget({backwards:z,focusableContainers:J,nextIndex:$}),_=C7(J[$]),H=U==null&&_==="gridBody"?"gridBody":tH(U),W=G({backwards:z,previousContainer:C7(J[Q]),nextContainer:H,defaultTarget:U});if(W!==void 0){if(typeof W==="boolean")return W;if(typeof W==="string"){if(W==="gridBody")return this.focusGridBodyDefault(z)||void 0;let B=J.find((E)=>E.getFocusableContainerName()===W);if(!B){J9(`tabToNextGridContainer - ${W} container not found`);return}return I7(B,z)?!0:void 0}if(c_(W))return Y.focusHeaderPosition({headerPosition:W})||void 0;return q?.ensureCellVisible(W),Y.setFocusedCell({...W,forceBrowserFocus:!0}),Y.isCellFocused(W)||void 0}}return this.focusNextInnerContainerDefault({backwards:z,focusableContainers:J,indexWithFocus:Q,nextIndex:$})||void 0}focusInnerElement(z){let{gos:J,beans:Q,beans:{focusSvc:Z,visibleCols:$}}=this;if(J.getCallback("focusGridInnerElement")?.({fromBottom:!!z}))return!0;let Y=this.getFocusableContainers();if(z){if(this.focusNextInnerContainerDefault({backwards:!0,focusableContainers:Y,indexWithFocus:Y.length,nextIndex:Y.length-1}))return!0;return Z.focusGridView({column:y($.allCols),backwards:!0})}let q=$.allCols;if(J.get("headerHeight")===0||D4(Q)){if(Z.focusGridView({column:q[0],backwards:z}))return!0;for(let G=1;G$.getGui().contains(Q));return{indexWithFocus:Z,nextIndex:Z+(J?-1:1)}}focusGridBodyDefault(z){let{gos:J,beans:Q,beans:{focusSvc:Z,visibleCols:{allCols:$}}}=this;if(z)return Z.focusGridView({column:y($),backwards:!0});if(J.get("headerHeight")===0||D4(Q))return Z.focusGridView({column:$[0]});return Z.focusFirstHeader()}focusNextInnerContainerDefault(z){let{backwards:J,focusableContainers:Q,indexWithFocus:Z}=z,$=J?-1:1;for(let X=z.nextIndex;X>=0&&XX:Zthis.destroyBean(this),setRtlClass:(X)=>this.addCss(X),forceFocusOutOfContainer:this.forceFocusOutOfContainer.bind(this),updateLayoutClasses:this.updateLayoutClasses.bind(this),getFocusableContainers:this.getFocusableContainers.bind(this),setUserSelect:(X)=>{this.getGui().style.userSelect=X!=null?X:"",this.getGui().style.webkitUserSelect=X!=null?X:""},setCursor:(X)=>{this.getGui().style.cursor=X!=null?X:""}},J=this.createManagedBean(new sH),Q=J.getOptionalSelectors(),Z=this.createTemplate(Q),$=[dH,...Object.values(Q).filter((X)=>!!X)];this.setTemplate(Z,$),J.setComp(z,this.eGridDiv,this.getGui()),this.insertGridIntoDom(),this.initialiseTabGuard({onTabKeyDown:()=>{return},focusInnerElement:(X)=>J.focusInnerElement(X),forceFocusOutWhenTabGuardsAreEmpty:!0,isEmpty:()=>!J.isFocusable()})}insertGridIntoDom(){let z=this.getGui();this.eGridDiv.appendChild(z),this.addDestroyFunc(()=>{z.remove(),M2(this.gos,"Grid removed from DOM")})}updateLayoutClasses(z,J){let Q=this.rootWrapperBody.classList,{AUTO_HEIGHT:Z,NORMAL:$,PRINT:X}=M4,{autoHeight:Y,normal:q,print:G}=J;Q.toggle(Z,Y),Q.toggle($,q),Q.toggle(X,G),this.toggleCss(Z,Y),this.toggleCss($,q),this.toggleCss(X,G)}createTemplate(z){let J=z.toolbarSelector?{tag:"ag-toolbar",ref:"toolbar"}:null,Q=z.gridHeaderDropZonesSelector?{tag:"ag-grid-header-drop-zones",ref:"gridHeaderDropZones"}:null,Z=z.sideBarSelector?{tag:"ag-side-bar",ref:"sideBar"}:null,$=z.statusBarSelector?{tag:"ag-status-bar",ref:"statusBar"}:null,X=z.watermarkSelector?{tag:"ag-watermark"}:null,Y=z.paginationSelector?{tag:"ag-pagination",ref:"pagination"}:null;return{tag:"div",cls:"ag-root-wrapper",role:"presentation",children:[J,Q,{tag:"div",ref:"rootWrapperBody",cls:"ag-root-wrapper-body",role:"presentation",children:[{tag:"ag-grid-body",ref:"gridBody"},Z]},$,Y,X]}}getFocusableElement(){return this.rootWrapperBody}forceFocusOutOfContainer(z=!1){if(!z&&this.pagination?.isDisplayed()){this.pagination.forceFocusOutOfContainer(z);return}super.forceFocusOutOfContainer(z)}getFocusableContainers(){let z=[];if(this.toolbar)z.push(this.toolbar);z.push(...this.gridHeaderDropZones?.getFocusableContainers?.()??[],this.gridBody);for(let J of[this.sideBar,this.statusBar,this.pagination])if(J)z.push(J);return z.filter((J)=>B0(J.getGui()))}},c=(z,J)=>{for(let Q of Object.keys(J))J[Q]=z;return J},y7={dispatchEvent:"CommunityCore",...c("CommunityCore",{destroy:0,getGridId:0,getGridOption:0,isDestroyed:0,setGridOption:0,updateGridOptions:0,isModuleRegistered:0}),...c("GridState",{getState:0,setState:0}),...c("SharedRowSelection",{setNodesSelected:0,selectAll:0,deselectAll:0,selectAllFiltered:0,deselectAllFiltered:0,selectAllOnCurrentPage:0,deselectAllOnCurrentPage:0,getSelectedNodes:0,getSelectedRows:0}),...c("RowApi",{redrawRows:0,setRowNodeExpanded:0,getRowNode:0,addRenderedRowListener:0,getRenderedNodes:0,forEachNode:0,getFirstDisplayedRowIndex:0,getLastDisplayedRowIndex:0,getDisplayedRowAtIndex:0,getDisplayedRowCount:0}),...c("ScrollApi",{getVerticalPixelRange:0,getHorizontalPixelRange:0,ensureColumnVisible:0,ensureIndexVisible:0,ensureNodeVisible:0}),...c("KeyboardNavigation",{getFocusedCell:0,clearFocusedCell:0,setFocusedCell:0,tabToNextCell:0,tabToPreviousCell:0,setFocusedHeader:0}),...c("EventApi",{addEventListener:0,addGlobalListener:0,removeEventListener:0,removeGlobalListener:0}),...c("ValueCache",{expireValueCache:0}),...c("CellApi",{getCellValue:0}),...c("SharedMenu",{showColumnMenu:0,hidePopupMenu:0}),...c("Sort",{onSortChanged:0}),...c("PinnedRow",{getPinnedTopRowCount:0,getPinnedBottomRowCount:0,getPinnedTopRow:0,getPinnedBottomRow:0,forEachPinnedRow:0}),...c("Overlay",{showLoadingOverlay:0,showNoRowsOverlay:0,hideOverlay:0}),...c("RenderApi",{setGridAriaProperty:0,refreshCells:0,refreshHeader:0,isAnimationFrameQueueEmpty:0,flushAllAnimationFrames:0,getSizesForCurrentTheme:0,getCellRendererInstances:0}),...c("HighlightChanges",{flashCells:0}),...c("RowDrag",{addRowDropZone:0,removeRowDropZone:0,getRowDropZoneParams:0,getRowDropPositionIndicator:0,setRowDropPositionIndicator:0}),...c("ColumnApi",{getColumnDefs:0,getColumnDef:0,getDisplayNameForColumn:0,getColumn:0,getColumns:0,applyColumnState:0,getColumnState:0,resetColumnState:0,isPinning:0,isPinningLeft:0,isPinningRight:0,getDisplayedColAfter:0,getDisplayedColBefore:0,setColumnsVisible:0,setColumnsPinned:0,getAllGridColumns:0,getDisplayedLeftColumns:0,getDisplayedCenterColumns:0,getDisplayedRightColumns:0,getAllDisplayedColumns:0,getAllDisplayedVirtualColumns:0}),...c("ColumnAutoSize",{sizeColumnsToFit:0,autoSizeColumns:0,autoSizeAllColumns:0}),...c("ColumnGroup",{setColumnGroupOpened:0,getColumnGroup:0,getProvidedColumnGroup:0,getDisplayNameForColumnGroup:0,getColumnGroupState:0,setColumnGroupState:0,resetColumnGroupState:0,getLeftDisplayedColumnGroups:0,getCenterDisplayedColumnGroups:0,getRightDisplayedColumnGroups:0,getAllDisplayedColumnGroups:0}),...c("ColumnMove",{moveColumnByIndex:0,moveColumns:0}),...c("ColumnResize",{setColumnWidths:0}),...c("ColumnHover",{isColumnHovered:0}),...c("EditCore",{getCellEditorInstances:0,getEditingCells:0,getEditRowValues:0,stopEditing:0,startEditingCell:0,isEditing:0,validateEdit:0}),...c("BatchEdit",{startBatchEdit:0,cancelBatchEdit:0,commitBatchEdit:0,isBatchEditing:0}),...c("UndoRedoEdit",{undoCellEditing:0,redoCellEditing:0,getCurrentUndoSize:0,getCurrentRedoSize:0}),...c("FilterCore",{isAnyFilterPresent:0,onFilterChanged:0}),...c("ColumnFilter",{isColumnFilterPresent:0,getColumnFilterInstance:0,destroyFilter:0,setFilterModel:0,getFilterModel:0,getColumnFilterModel:0,setColumnFilterModel:0,showColumnFilter:0,hideColumnFilter:0,getColumnFilterHandler:0,doFilterAction:0}),...c("QuickFilter",{isQuickFilterPresent:0,getQuickFilter:0,resetQuickFilter:0}),...c("Notes",{getNote:0,setNote:0,refreshNotes:0}),...c("Find",{findGetActiveMatch:0,findGetTotalMatches:0,findGoTo:0,findNext:0,findPrevious:0,findGetNumMatches:0,findGetParts:0,findClearActive:0,findRefresh:0}),...c("Pagination",{paginationIsLastPageFound:0,paginationGetPageSize:0,paginationGetCurrentPage:0,paginationGetTotalPages:0,paginationGetRowCount:0,paginationGoToNextPage:0,paginationGoToPreviousPage:0,paginationGoToFirstPage:0,paginationGoToLastPage:0,paginationGoToPage:0}),...c("CsrmSsrmSharedApi",{expandAll:0,collapseAll:0,resetRowGroupExpansion:0}),...c("SsrmInfiniteSharedApi",{setRowCount:0,getCacheBlockState:0,isLastRowIndexKnown:0}),...c("ClientSideRowModelApi",{onGroupExpandedOrCollapsed:0,refreshClientSideRowModel:0,isRowDataEmpty:0,forEachLeafNode:0,forEachNodeAfterFilter:0,forEachNodeAfterFilterAndSort:0,applyTransaction:0,applyTransactionAsync:0,flushAsyncTransactions:0,getBestCostNodeSelection:0,onRowHeightChanged:0,resetRowHeights:0}),...c("CsvExport",{getDataAsCsv:0,exportDataAsCsv:0}),...c("InfiniteRowModel",{refreshInfiniteCache:0,purgeInfiniteCache:0,getInfiniteRowCount:0}),...c("AdvancedFilter",{getAdvancedFilterModel:0,setAdvancedFilterModel:0,showAdvancedFilterBuilder:0,hideAdvancedFilterBuilder:0}),...c("IntegratedCharts",{getChartModels:0,getChartRef:0,getChartImageDataURL:0,downloadChart:0,openChartToolPanel:0,closeChartToolPanel:0,createRangeChart:0,createPivotChart:0,createCrossFilterChart:0,updateChart:0,restoreChart:0}),...c("Clipboard",{copyToClipboard:0,cutToClipboard:0,copySelectedRowsToClipboard:0,copySelectedRangeToClipboard:0,copySelectedRangeDown:0,pasteFromClipboard:0}),...c("ExcelExport",{getDataAsExcel:0,exportDataAsExcel:0,getSheetDataForExcel:0,getMultipleSheetsAsExcel:0,exportMultipleSheetsAsExcel:0}),...c("SharedMasterDetail",{addDetailGridInfo:0,removeDetailGridInfo:0,getDetailGridInfo:0,forEachDetailGridInfo:0}),...c("Formula",{refreshFormulas:0}),...c("ContextMenu",{showContextMenu:0}),...c("ColumnMenu",{showColumnChooser:0,hideColumnChooser:0}),...c("CellSelection",{getCellRanges:0,addCellRange:0,clearRangeSelection:0,clearCellSelection:0}),...c("SharedRowGrouping",{setRowGroupColumns:0,removeRowGroupColumns:0,addRowGroupColumns:0,getRowGroupColumns:0,moveRowGroupColumn:0}),...c("SharedAggregation",{addAggFuncs:0,clearAggFuncs:0,setColumnAggFunc:0}),...c("SharedPivot",{isPivotMode:0,getPivotResultColumn:0,setValueColumns:0,getValueColumns:0,removeValueColumns:0,addValueColumns:0,setPivotColumns:0,removePivotColumns:0,addPivotColumns:0,getPivotColumns:0,setPivotResultColumns:0,getPivotResultColumns:0}),...c("ServerSideRowModelApi",{getServerSideSelectionState:0,setServerSideSelectionState:0,applyServerSideTransaction:0,applyServerSideTransactionAsync:0,applyServerSideRowData:0,retryServerSideLoads:0,flushServerSideAsyncTransactions:0,refreshServerSide:0,getServerSideGroupLevelState:0,onRowHeightChanged:0,resetRowHeights:0}),...c("SideBar",{isSideBarVisible:0,setSideBarVisible:0,setSideBarPosition:0,openToolPanel:0,closeToolPanel:0,getOpenedToolPanel:0,refreshToolPanel:0,isToolPanelShowing:0,getToolPanelInstance:0,getSideBar:0}),...c("Toolbar",{getToolbarItemInstance:0}),...c("StatusBar",{getStatusPanel:0}),...c("AiToolkit",{getStructuredSchema:0})},EQ={isDestroyed:()=>!0,destroy(){},preConstruct(){},postConstruct(){},preWireBeans(){},wireBeans(){}},aH=(z,J)=>z.eventSvc.dispatchEvent(J),D$=class{};Reflect.defineProperty(D$,"name",{value:"GridApi"});var oH=class extends S{constructor(){super();this.beanName="apiFunctionSvc",this.api=new D$,this.fns={...EQ,dispatchEvent:aH},this.preDestroyLink="";let{api:z}=this;for(let J of Object.keys(y7))z[J]=this.makeApi(J)[J]}postConstruct(){this.preDestroyLink=this.beans.frameworkOverrides.getDocLink("grid-lifecycle/#grid-pre-destroyed")}addFunction(z,J){let{fns:Q,beans:Z}=this;if(Q!==EQ)Q[z]=Z?.validation?.validateApiFunction(z,J)??J}makeApi(z){return{[z]:(...J)=>{let{beans:Q,fns:{[z]:Z}}=this;return Z?Z(Q,...J):this.apiNotFound(z)}}}apiNotFound(z){let{beans:J,gos:Q,preDestroyLink:Z}=this;if(!J)V(26,{fnName:z,preDestroyLink:Z});else{let $=y7[z];if(Q.assertModuleRegistered($,`api.${z}`))V(27,{fnName:z,module:$})}}destroy(){super.destroy(),this.fns=EQ,this.beans=null}};function eH(z){return z.context.getId()}function zW(z){z.gridDestroySvc.destroy()}function JW(z){return z.gridDestroySvc.destroyCalled}function QW(z,J){return z.gos.get(J)}function ZW(z,J,Q){M$(z,{[J]:Q})}function M$(z,J){z.gos.updateGridOptions({options:J})}function $W(z,J){let Q=J.replace(/Module$/,"");return z.gos.isModuleRegistered(Q)}function vz(z,J,Q){let Z=h(z,J,Q);if(Z){let{className:X}=Z;if(typeof X==="string"&&X.includes("ag-icon")||typeof X==="object"&&X["ag-icon"])return Z}let $=z0({tag:"span"});return $.appendChild(Z),$}function h(z,J,Q){let Z=null;if(z==="smallDown")V(262);else if(z==="smallLeft")V(263);else if(z==="smallRight")V(264);let $=Q?.colDef.icons;if($)Z=$[z];if(J.gos&&!Z){let X=J.gos.get("icons");if(X)Z=X[z]}if(Z){let X;if(typeof Z==="function")X=Z();else if(typeof Z==="string")X=Z;else{V(38,{iconName:z});return}if(typeof X==="string")return KZ(X);if(b2(X))return X;V(133,{iconName:z});return}else{let X=J.registry.getIcon(z);if(!X)J.validation?.validateIcon(z);return z0({tag:"span",cls:`ag-icon ag-icon-${X??z}`,role:"presentation",attrs:{unselectable:"on"}})}}var XW=".ag-dnd-ghost{align-items:center;background-color:var(--ag-drag-and-drop-image-background-color);border:var(--ag-drag-and-drop-image-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-drag-and-drop-image-shadow);color:var(--ag-text-color);cursor:move;display:flex;font-weight:500;gap:var(--ag-cell-widget-spacing);height:var(--ag-header-height);overflow:hidden;padding-left:var(--ag-cell-horizontal-padding);padding-right:var(--ag-cell-horizontal-padding);text-overflow:ellipsis;transform:translateY(calc(var(--ag-spacing)*2));white-space:nowrap}.ag-dnd-ghost-not-allowed{border:var(--ag-drag-and-drop-image-not-allowed-border)}",YW={tag:"div",children:[{tag:"div",ref:"eGhost",cls:"ag-dnd-ghost ag-unselectable",children:[{tag:"span",ref:"eIcon",cls:"ag-dnd-ghost-icon ag-shake-left-to-right"},{tag:"div",ref:"eLabel",cls:"ag-dnd-ghost-label"}]}]},qW=class extends x{constructor(){super();this.dragSource=null,this.eIcon=j,this.eLabel=j,this.eGhost=j,this.registerCSS(XW)}postConstruct(){let z=(J)=>vz(J,this.beans,null);this.dropIconMap={pinned:z("columnMovePin"),hide:z("columnMoveHide"),move:z("columnMoveMove"),left:z("columnMoveLeft"),right:z("columnMoveRight"),group:z("columnMoveGroup"),aggregate:z("columnMoveValue"),pivot:z("columnMovePivot"),notAllowed:z("dropNotAllowed")}}init(z){this.dragSource=z.dragSource,this.setTemplate(YW),this.beans.environment.applyThemeClasses(this.eGhost)}destroy(){this.dragSource=null,super.destroy()}setIcon(z,J){let{eGhost:Q,eIcon:Z,dragSource:$,dropIconMap:X,gos:Y}=this;if(J0(Z),!z)z=$?.getDefaultIconName?$.getDefaultIconName():"notAllowed";let q=X[z];if(Q.classList.toggle("ag-dnd-ghost-not-allowed",z==="notAllowed"),Z.classList.toggle("ag-shake-left-to-right",J),q===X.hide&&Y.get("suppressDragLeaveHidesColumns"))return;if(q)Z.appendChild(q)}setLabel(z){this.eLabel.textContent=z}};var k$=(z,J)=>{if(J!=null&&z?.setPointerCapture)try{return z.setPointerCapture(J),z.hasPointerCapture(J)}catch{}return!1},GW=(z,J)=>{if(typeof PointerEvent>"u"||!(J instanceof PointerEvent))return null;let Q=J.pointerId;if(!k$(z,Q))return null;let Z={eElement:z,pointerId:Q,onLost($){_W(Z,$)}};return z.addEventListener("lostpointercapture",Z.onLost),Z},UW=(z)=>{if(!z)return;f$(z);let{eElement:J,pointerId:Q}=z;if(!J)return;try{J.releasePointerCapture(Q)}catch{}z.eElement=null},f$=(z)=>{let{eElement:J,onLost:Q}=z;if(J&&Q)J.removeEventListener("lostpointercapture",Q),z.onLost=null},_W=(z,J)=>{f$(z);let{eElement:Q,pointerId:Z}=z;if(Q&&J.pointerId===Z)k$(Q,Z)},D1,S1,KQ={passive:!0},Uz={passive:!1},T4=(z)=>{if(!S1)S1=new WeakSet;else if(S1.has(z))return!1;return S1.add(z),!0},HW=class extends k0{constructor(){super(...arguments);this.beanName="dragSvc",this.dragging=!1,this.drag=null,this.dragSources=[]}get startTarget(){return this.drag?.start.target??null}isPointer(){return!!D1?.has(m0(this.beans))}hasPointerCapture(){let z=this.drag?.pointerCapture;return!!(z&&this.beans.eRootDiv.hasPointerCapture?.(z.pointerId))}destroy(){if(this.drag)this.cancelDrag();let z=this.dragSources;for(let J of z)b7(J);z.length=0,super.destroy()}removeDragSource(z){let J=this.dragSources;for(let Q=0,Z=J.length;Qthis.onPointerDown(z,U),Uz],[J,"mousedown",(U)=>this.onMouseDown(z,U)]);let G=this.gos.get("suppressTouch");if(Q&&!G)L6(Z,[J,"touchstart",(_)=>this.onTouchStart(z,_),Uz])}cancelDrag(z){let J=this.drag;if(z??(z=J?.eElement),z)this.eventSvc.dispatchEvent({type:"dragCancelled",target:z});J?.params.onDragCancel?.(),this.destroyDrag()}shouldPreventMouseEvent(z){let J=z.type;return(J==="mousemove"||J==="pointermove")&&z.cancelable&&D2(this.beans,z)&&!_2(LQ(z))}initDrag(z,...J){this.drag=z;let Q=this.beans,Z=(q)=>this.onScroll(q),$=(q)=>this.onKeyDown(q),X=m0(Q),Y=Y0(Q);L6(z.handlers,[X,"contextmenu",f1],[X,"keydown",$],[Y,"scroll",Z,{capture:!0}],[Y.defaultView||window,"scroll",Z],...J)}destroyDrag(){this.dragging=!1;let z=this.drag;if(z){let J=z.rootEl;if(D1?.get(J)===z)D1.delete(J);this.drag=null,UW(z.pointerCapture),LZ(z.handlers)}}onPointerDown(z,J){if(this.isPointer())return;let Q=this.beans;if(S1?.has(J))return;let Z=J.pointerType;if(Z==="touch"){if(Q.gos.get("suppressTouch")||!z.includeTouch)return;if(z.stopPropagationForTouch)J.stopPropagation();if(_2(LQ(J)))return}if(!J.isPrimary)return;if(Z==="mouse"&&J.button!==0)return;this.destroyDrag();let $=m0(Q),X=z.eElement,Y=J.pointerId,q=new FQ($,z,J,Y);D1??(D1=new WeakMap),D1.set($,q);let G=(W)=>{if(W.pointerId===Y)this.onMouseOrPointerMove(W)},U=(W)=>{if(W.pointerId===Y)this.onMouseOrPointerUp(W)},_=(W)=>{if(W.pointerId===Y&&T4(W))this.cancelDrag()},H=(W)=>this.draggingPreventDefault(W);if(this.initDrag(q,[$,"pointerup",U],[$,"pointercancel",_],[$,"pointermove",G,Uz],[$,"touchmove",H,Uz],[X,"mousemove",H,Uz]),z.dragStartPixels===0)this.onMouseOrPointerMove(J);else T4(J)}onTouchStart(z,J){if(this.gos.get("suppressTouch")||!z.includeTouch)return;if(!T4(J))return;if(_2(LQ(J)))return;if(z.stopPropagationForTouch)J.stopPropagation();if(this.isPointer()){if(this.dragging)f1(J);return}this.destroyDrag();let Z=this.beans,$=m0(Z),X=new FQ($,z,J.touches[0]),Y=(W)=>this.onTouchMove(W),q=(W)=>this.onTouchUp(W),G=(W)=>this.onTouchCancel(W),U=(W)=>this.draggingPreventDefault(W),_=m0(Z),H=J.target??z.eElement;if(this.initDrag(X,[H,"touchmove",Y,KQ],[H,"touchend",q,KQ],[H,"touchcancel",G,KQ],[_,"touchmove",U,Uz],[_,"touchend",q,Uz],[_,"touchcancel",G,Uz]),z.dragStartPixels===0)this.onMove(X.start)}draggingPreventDefault(z){if(this.dragging)f1(z)}onMouseDown(z,J){if(J.button!==0)return;if(S1?.has(J))return;if(this.isPointer())return;let Q=this.beans;this.destroyDrag();let Z=new FQ(m0(Q),z,J),$=(q)=>this.onMouseOrPointerMove(q),X=(q)=>this.onMouseOrPointerUp(q),Y=m0(Q);if(this.initDrag(Z,[Y,"mousemove",$],[Y,"mouseup",X]),z.dragStartPixels===0)this.onMouseOrPointerMove(J);else T4(J)}onScroll(z){if(!T4(z))return;let J=this.drag,Q=J?.lastDrag;if(Q&&this.dragging)J.params?.onDragging?.(Q)}onMouseOrPointerMove(z){if(!T4(z))return;if(jz())Y0(this.beans).getSelection()?.removeAllRanges();if(this.shouldPreventMouseEvent(z))f1(z);this.onMove(z)}onTouchCancel(z){let J=this.drag;if(!J||!T4(z))return;if(!j1(J.start,z.changedTouches))return;this.cancelDrag()}onTouchMove(z){let J=this.drag;if(!J||!T4(z))return;let Q=j1(J.start,z.touches);if(Q)this.onMove(Q),this.draggingPreventDefault(z)}onMove(z){let J=this.drag;if(!J)return;J.lastDrag=z;let Q=J.params;if(!this.dragging){let Z=J.start,X=Q.dragStartPixels??4;if(o8(z,Z,X))return;if(this.dragging=!0,Q.capturePointer)J.pointerCapture=GW(this.beans.eRootDiv,z);if(this.eventSvc.dispatchEvent({type:"dragStarted",target:Q.eElement}),Q.onDragStart?.(Z),this.drag!==J)return;if(Q.onDragging?.(Z),this.drag!==J)return}Q.onDragging?.(z)}onTouchUp(z){let J=this.drag;if(J&&T4(z))this.onUp(j1(J.start,z.changedTouches))}onMouseOrPointerUp(z){if(T4(z))this.onUp(z)}onUp(z){let J=this.drag;if(!J)return;if(!z)z=J.lastDrag;if(z&&this.dragging)this.dragging=!1,J.params.onDragStop?.(z),this.eventSvc.dispatchEvent({type:"dragStopped",target:J.params.eElement});this.destroyDrag()}onKeyDown(z){if(z.key===k.ESCAPE)this.cancelDrag()}},b7=(z)=>{LZ(z.handlers);let J=z.oldTouchAction;if(J!=null){let Q=z.params.eElement.style;if(Q)Q.touchAction=J}},FQ=class{constructor(z,J,Q,Z=null){this.rootEl=z,this.params=J,this.start=Q,this.pointerId=Z,this.handlers=[],this.lastDrag=null,this.pointerCapture=null,this.eElement=J.eElement}},LQ=(z)=>{let J=z.target;return J instanceof Element?J:null},WW=class extends HW{shouldPreventMouseEvent(z){return this.gos.get("enableCellTextSelection")&&super.shouldPreventMouseEvent(z)}},BW=class extends S{constructor(){super(...arguments);this.beanName="horizontalResizeSvc"}addResizeBar(z){let J={dragStartPixels:z.dragStartPixels||0,eElement:z.eResizeBar,onDragStart:this.onDragStart.bind(this,z),onDragStop:this.onDragStop.bind(this,z),onDragging:this.onDragging.bind(this,z),onDragCancel:this.onDragStop.bind(this,z),includeTouch:!0,stopPropagationForTouch:!0},{dragSvc:Q}=this.beans;return Q.addDragSource(J),()=>Q.removeDragSource(J)}onDragStart(z,J){this.dragStartX=J.clientX,this.setResizeIcons();let Q=J instanceof MouseEvent&&J.shiftKey===!0;z.onResizeStart(Q)}setResizeIcons(){let z=this.beans.ctrlsSvc.get("gridCtrl");z.setResizeCursor(1),z.disableUserSelect(!0)}onDragStop(z){z.onResizeEnd(this.resizeAmount),this.resetIcons()}resetIcons(){let z=this.beans.ctrlsSvc.get("gridCtrl");z.setResizeCursor(!1),z.disableUserSelect(!1)}onDragging(z,J){this.resizeAmount=J.clientX-this.dragStartX,z.onResizing(this.resizeAmount)}};var EJ=class{constructor(z){if(this.tickingInterval=null,this.onScrollCallback=null,this.scrollContainer=z.scrollContainer,this.scrollHorizontally=z.scrollAxis.includes("x"),this.scrollVertically=z.scrollAxis.includes("y"),this.scrollByTick=z.scrollByTick??20,z.onScrollCallback)this.onScrollCallback=z.onScrollCallback;if(this.scrollVertically)this.getVerticalPosition=z.getVerticalPosition,this.setVerticalPosition=z.setVerticalPosition;if(this.scrollHorizontally)this.getHorizontalPosition=z.getHorizontalPosition,this.setHorizontalPosition=z.setHorizontalPosition;this.shouldSkipVerticalScroll=z.shouldSkipVerticalScroll||(()=>!1),this.shouldSkipHorizontalScroll=z.shouldSkipHorizontalScroll||(()=>!1)}get scrolling(){return this.tickingInterval!==null}check(z,J=!1){let Q=!this.scrollVertically||J||this.shouldSkipVerticalScroll(),Z=!this.scrollHorizontally||this.shouldSkipHorizontalScroll();if(Q&&Z)return;let $=this.scrollContainer.getBoundingClientRect(),X=this.scrollByTick;if(this.tickLeft=!Z&&z.clientX<$.left+X,this.tickRight=!Z&&z.clientX>$.right-X,this.tickUp=!Q&&z.clientY<$.top+X,this.tickDown=!Q&&z.clientY>$.bottom-X,this.tickLeft||this.tickRight||this.tickUp||this.tickDown)this.ensureTickingStarted();else this.ensureCleared()}ensureTickingStarted(){if(this.tickingInterval===null)this.tickingInterval=window.setInterval(this.doTick.bind(this),100),this.tickCount=0}doTick(){this.tickCount++;let z=this.tickCount>20?200:this.tickCount>10?80:40;if(this.scrollVertically){let J=this.getVerticalPosition();if(this.tickUp)this.setVerticalPosition(J-z);if(this.tickDown)this.setVerticalPosition(J+z)}if(this.scrollHorizontally){let J=this.getHorizontalPosition();if(this.tickLeft)this.setHorizontalPosition(J-z);if(this.tickRight)this.setHorizontalPosition(J+z)}if(this.onScrollCallback)this.onScrollCallback()}ensureCleared(){if(this.tickingInterval)window.clearInterval(this.tickingInterval),this.tickingInterval=null}},I1=class{constructor(){this.reordered=!1,this.removals=[],this.updates=new Set,this.adds=new Set}},X1=(z)=>{let J=z.childrenAfterGroup;while(J?.length){let Q=J[0];if(Q.sourceRowIndex>=0)return Q;J=Q.childrenAfterGroup}},S$=(z,J,Q,Z)=>{if(!J.size||!z)return!1;let $=!1,X=z.length??0,Y=-1;if(Q){if(Y=Q.sourceRowIndex,Q=Y<0?X1(Q):null,Q)Y=Q.sourceRowIndex}if(Y<0||Y>=X)Y=X;else if(!Z)++Y;let q=Y,G=Math.min(Y,X-1);for(let H of J){let W=H.sourceRowIndex;if(WG)G=W}let U=q;for(let H=q;H=Y;--H){let W=z[H];if(J.has(W))continue;if(W.sourceRowIndex!==_)W.sourceRowIndex=_,z[_]=W,$=!0;--_}for(let H of J){if(H.sourceRowIndex!==U)H.sourceRowIndex=U,z[U]=H,$=!0;++U}return $};function z5(z,J){return c2(z,J.target)?.getFocusedCellPosition()??null}function J5(z,J){let Q=A0(z.gos,"normal"),Z=J,$,X;if(Z.clientX!=null||Z.clientY!=null)$=Z.clientX,X=Z.clientY;else $=Z.x,X=Z.y;let{pageFirstPixel:Y}=z.pageBounds.getCurrentPagePixelRange();if(X+=Y,Q){let q=z.ctrlsSvc.getScrollFeature(),G=q.getVScrollPosition(),U=q.getHScrollPosition();$+=U.left,X+=G.top}return{x:$,y:X}}var KJ={moduleName:"Drag",version:i,beans:[WW]};var p2={moduleName:"SharedDragAndDrop",version:i,beans:[W_],dependsOn:[KJ],userComponents:{agDragAndDropImage:qW},icons:{columnMovePin:"pin",columnMoveHide:"eye-slash",columnMoveMove:"arrows",columnMoveLeft:"left",columnMoveRight:"right",columnMoveGroup:"group",columnMoveValue:"aggregation",columnMovePivot:"pivot",dropNotAllowed:"not-allowed",rowDrag:"grip"}};var Q5={moduleName:"HorizontalResize",version:i,beans:[BW],dependsOn:[KJ]},EW=":where(.ag-ltr) :where(.ag-column-moving){.ag-cell,.ag-header-cell,.ag-spanned-cell-wrapper{transition:left .2s}.ag-header-group-cell{transition:left .2s,width .2s}}:where(.ag-rtl) :where(.ag-column-moving){.ag-cell,.ag-header-cell,.ag-spanned-cell-wrapper{transition:right .2s}.ag-header-group-cell{transition:right .2s,width .2s}}",KW=class extends S{constructor(){super(...arguments);this.beanName="colAnimation",this.executeNextFuncs=[],this.executeLaterFuncs=[],this.active=!1,this.activeNext=!1,this.suppressAnimation=!1,this.animationThreadCount=0}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>this.gridBodyCtrl=z.gridBodyCtrl)}isActive(){return this.active&&!this.suppressAnimation}setSuppressAnimation(z){this.suppressAnimation=z}start(){if(this.active)return;let{gos:z}=this;if(z.get("suppressColumnMoveAnimation"))return;if(z.get("enableRtl"))return;this.ensureAnimationCssClassPresent(),this.active=!0,this.activeNext=!0}finish(){if(!this.active)return;this.flush(()=>this.activeNext=!1,()=>this.active=!1)}executeNextVMTurn(z){if(this.activeNext)this.executeNextFuncs.push(z);else z()}executeLaterVMTurn(z){if(this.active)this.executeLaterFuncs.push(z);else z()}ensureAnimationCssClassPresent(){this.animationThreadCount++;let z=this.animationThreadCount,{gridBodyCtrl:J}=this;J.setColumnMovingCss(!0),this.executeLaterFuncs.push(()=>{if(this.animationThreadCount===z)J.setColumnMovingCss(!1)})}flush(z,J){let{executeNextFuncs:Q,executeLaterFuncs:Z}=this;if(Q.length===0&&Z.length===0){z(),J();return}let $=(X)=>{while(X.length){let Y=X.pop();if(Y)Y()}};this.beans.frameworkOverrides.wrapIncoming(()=>{window.setTimeout(()=>{z(),$(Q)},0),window.setTimeout(()=>{J(),$(Z)},200)})}};function FW(z,J,Q){z.colMoves?.moveColumnByIndex(J,Q,"api")}function LW(z,J,Q){z.colMoves?.moveColumns(J,Q,"api")}var DW=class extends S{constructor(z){super();this.pinned=z,this.columnsToAggregate=[],this.columnsToGroup=[],this.columnsToPivot=[]}onDragEnter(z){if(this.clearColumnsList(),this.gos.get("functionsReadOnly"))return;let J=z.dragItem.columns;if(!J)return;for(let Q of J){if(!Q.primary)continue;if(Q.isAnyFunctionActive())continue;if(Q.isAllowValue())this.columnsToAggregate.push(Q);else if(Q.isAllowRowGroup())this.columnsToGroup.push(Q);else if(Q.isAllowPivot())this.columnsToPivot.push(Q)}}getIconName(){if(this.columnsToAggregate.length+this.columnsToGroup.length+this.columnsToPivot.length>0)return this.pinned?"pinned":"move";return null}onDragLeave(z){this.clearColumnsList()}clearColumnsList(){this.columnsToAggregate.length=0,this.columnsToGroup.length=0,this.columnsToPivot.length=0}onDragging(z){}onDragStop(z){let{valueColsSvc:J,rowGroupColsSvc:Q,pivotColsSvc:Z}=this.beans;if(this.columnsToAggregate.length>0)J?.addColumns(this.columnsToAggregate,"toolPanelDragAndDrop");if(this.columnsToGroup.length>0)Q?.addColumns(this.columnsToGroup,"toolPanelDragAndDrop");if(this.columnsToPivot.length>0)Z?.addColumns(this.columnsToPivot,"toolPanelDragAndDrop")}onDragCancel(){this.clearColumnsList()}};function MW(z,J){if(!J||J.length<=1)return;if(J.filter((Z)=>z.indexOf(Z)<0).length>0)return;J.sort((Z,$)=>{let X=z.indexOf(Z),Y=z.indexOf($);return X-Y})}function kW(z){let J=[...z];for(let Q of z){let Z=null,$=Q.parent;while($?.getDisplayedLeafColumns().length===1)Z=$,$=$.parent;if(Z!=null){let Y=Z.getColGroupDef()?.marryChildren?Z.getProvidedColumnGroup().getLeafColumns():Z.getLeafColumns();for(let q of Y)if(!J.includes(q))J.push(q)}}return J}function fW(z,J,Q,Z){let $=Z.allCols,X=null,Y=null;for(let q=0;q$.includes(W));if(Y===null)Y=_;else if(!Z0(_,Y))break;let H=VW(U);if(X===null||H=E)return;if(Q&&K<=E)return}let L=fW(B,W,U,_);if(!L)return;let D=L.move;if(D>G.getCols().length-W.length)return;return{columns:W,toIndex:D}}function R$(z){let{columns:J,toIndex:Q}=V$(z)||{},{finished:Z,colMoves:$}=z;if(!J||Q==null)return null;return $.moveColumns(J,Q,"uiColumnMoved",Z),Z?null:{columns:J,toIndex:Q}}function SW(z,J){let Q=J.getCols(),Z=z.map((G)=>Q.indexOf(G)).sort((G,U)=>G-U),$=Z[0];return y(Z)-$!==Z.length-1?null:$}function VW(z){function J(Z){let $=[],X=Z.getOriginalParent();while(X!=null)$.push(X),X=X.getOriginalParent();return $}let Q=0;for(let Z=0;ZX.length?[$,X]:[X,$];for(let Y of $)if(X.indexOf(Y)===-1)Q++}return Q}function RW(z,J){switch(J){case"left":return z.leftCols;case"right":return z.rightCols;default:return z.centerCols}}function AW(z){let{movingCols:J,draggingRight:Q,xPosition:Z,pinned:$,gos:X,colModel:Y,visibleCols:q}=z;if(X.get("suppressMovableColumns")||J.some((M)=>M.colDef.suppressMovable))return[];let U=RW(q,$),_=Y.getCols(),H=U.filter((M)=>J.includes(M)),W=U.filter((M)=>!J.includes(M)),B=_.filter((M)=>!J.includes(M)),E=0,K=Z;if(Q){let M=0;for(let f of H)M+=f.getActualWidth();K-=M}if(K>0){for(let M=0;M0){let M=W[E-1];F=B.indexOf(M)+1}else if(F=B.indexOf(W[0]),F===-1)F=0;let L=[F],D=(M,f)=>M-f;if(Q){let M=F+1,f=_.length-1;while(M<=f)L.push(M),M++;L.sort(D)}else{let M=F,f=_.length-1,A=_[M];while(M<=f&&U.indexOf(A)<0)M++,L.push(M),A=_[M];M=F-1;let R=0;while(M>=R)L.push(M),M--;L.sort(D).reverse()}return L}function nQ(z){let{pinned:J,fromKeyboard:Q,gos:Z,ctrlsSvc:$,useHeaderRow:X,skipScrollPadding:Y}=z,q=$.getHeaderRowContainerCtrl(J)?.eViewport,{x:G}=z;if(!q)return 0;if(Q)G-=q.getBoundingClientRect().left;if(Z.get("enableRtl")){if(X)q=q.querySelector(".ag-header-row");G=q.clientWidth-G}if(J==null&&!Y)G+=$.get("center").getCenterViewportScrollLeft();return G}function DQ(z,J){for(let Q of z)Q.moving=J,Q.dispatchColEvent("movingChanged","uiColumnMoved")}var x7=7,dQ=100,B6=dQ/2,jW=5,OW=100,PW=class extends S{constructor(z){super();this.pinned=z,this.needToMoveLeft=!1,this.needToMoveRight=!1,this.lastMovedInfo=null,this.isCenterContainer=!P(z)}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>{this.gridBodyCon=z.gridBodyCtrl})}getIconName(){let{pinned:z,lastDraggingEvent:J}=this,{dragItem:Q}=J||{},Z=Q?.columns??[];for(let $ of Z){let X=$.getPinned();if($.getColDef().lockPinned){if(X==z)return"move";continue}let Y=Q?.containerType;if(Y===z||!z)return"move";if(z&&(!X||Y!==z))return"pinned"}return"notAllowed"}onDragEnter(z){let J=z.dragItem,Q=J.columns;if(z.dragSource.type===0)this.setColumnsVisible(Q,!0,"uiColumnDragged");else{let $=J.visibleState,X=(Q||[]).filter((Y)=>$[Y.getId()]&&!Y.isVisible());this.setColumnsVisible(X,!0,"uiColumnDragged")}if(!this.gos.get("suppressMoveWhenColumnDragging"))this.attemptToPinColumns(Q,this.pinned);this.onDragging(z,!0,!0)}onDragging(z=this.lastDraggingEvent,J=!1,Q=!1,Z=!1){let{gos:$,ctrlsSvc:X}=this.beans,Y=$.get("suppressMoveWhenColumnDragging");if(Z&&!Y){this.finishColumnMoving();return}if(this.lastDraggingEvent=z,!z||!Z&&d(z.hDirection))return;let q=nQ({x:z.x,pinned:this.pinned,gos:$,ctrlsSvc:X});if(!J)this.checkCenterForScrolling(q);if(Y)this.handleColumnDragWhileSuppressingMovement(z,J,Q,q,Z);else this.handleColumnDragWhileAllowingMovement(z,J,Q,q,Z)}onDragLeave(){this.ensureIntervalCleared(),this.clearHighlighted(),this.updateDragItemContainerType(),this.lastMovedInfo=null}onDragStop(){this.onDragging(this.lastDraggingEvent,!1,!0,!0),this.ensureIntervalCleared(),this.lastMovedInfo=null}onDragCancel(){this.clearHighlighted(),this.ensureIntervalCleared(),this.lastMovedInfo=null}setColumnsVisible(z,J,Q){if(!z?.length)return;let Z=z.filter(($)=>!$.getColDef().lockVisible);if(!Z.length)return;this.beans.colModel.setColsVisible(Z,J,Q)}finishColumnMoving(){this.clearHighlighted();let z=this.lastMovedInfo;if(!z)return;let{columns:J,toIndex:Q}=z;this.beans.colMoves.moveColumns(J,Q,"uiColumnMoved",!0)}updateDragItemContainerType(){let{lastDraggingEvent:z}=this;if(this.gos.get("suppressMoveWhenColumnDragging")||!z)return;let J=z.dragItem;if(!J)return;J.containerType=this.pinned}handleColumnDragWhileSuppressingMovement(z,J,Q,Z,$){let X=this.getAllMovingColumns(z,!0);if($){let Y=this.isAttemptingToPin(X);if(Y)this.attemptToPinColumns(X,void 0,!0);let{fromLeft:q,xPosition:G}=this.getNormalisedXPositionInfo(X,Y)||{};if(q==null||G==null){this.finishColumnMoving();return}this.moveColumnsAfterHighlight({allMovingColumns:X,xPosition:G,fromEnter:J,fakeEvent:Q,fromLeft:q})}else{if(!this.beans.dragAndDrop.isDropZoneWithinThisGrid(z))return;this.highlightHoveredColumn(X,Z)}}handleColumnDragWhileAllowingMovement(z,J,Q,Z,$){let X=this.getAllMovingColumns(z),Y=this.normaliseDirection(z.hDirection)==="right",q=z.dragSource.type===1,G=this.getMoveColumnParams({allMovingColumns:X,isFromHeader:q,xPosition:Z,fromLeft:Y,fromEnter:J,fakeEvent:Q}),U=R$({...G,finished:$});if(U)this.lastMovedInfo=U}getAllMovingColumns(z,J=!1){let Q=z.dragSource.getDragItem(),Z;if(J){if(Z=Q.columnsInSplit,!Z)Z=Q.columns}else Z=Q.columns;let $=(X)=>X.colDef.lockPinned?X.getPinned()==this.pinned:!0;if(!Z)return[];return Z.filter($)}getMoveColumnParams(z){let{allMovingColumns:J,isFromHeader:Q,xPosition:Z,fromLeft:$,fromEnter:X,fakeEvent:Y}=z,{gos:q,colModel:G,colMoves:U,visibleCols:_}=this.beans;return{allMovingColumns:J,isFromHeader:Q,fromLeft:$,xPosition:Z,pinned:this.pinned,fromEnter:X,fakeEvent:Y,gos:q,colModel:G,colMoves:U,visibleCols:_}}highlightHoveredColumn(z,J){let{gos:Q,colModel:Z}=this.beans,$=Q.get("enableRtl"),X=Z.getCols().filter((_)=>_.isVisible()&&_.getPinned()===this.pinned),Y=null,q=null,G=null;for(let _ of X){if(q=_.getActualWidth(),Y=this.getNormalisedColumnLeft(_,0,$),Y!=null){let H=Y+q;if(Y<=J&&H>=J){G=_;break}}Y=null,q=null}if(!G){for(let _=X.length-1;_>=0;_--){let H=X[_],W=X[_].parent;if(!W){G=H;break}let B=W?.getDisplayedLeafColumns();if(B.length){G=y(B);break}}if(!G)return;Y=this.getNormalisedColumnLeft(G,0,$),q=G.getActualWidth()}else if(z.indexOf(G)!==-1)G=null;if(G==null||Y==null||q==null){if(this.lastHighlightedColumn?.column!==G)this.clearHighlighted();return}let U;if(J-Yx7;return J&&Q||z.some((Z)=>Z.getPinned()!==this.pinned)}moveColumnsAfterHighlight(z){let{allMovingColumns:J,xPosition:Q,fromEnter:Z,fakeEvent:$,fromLeft:X}=z,Y=this.getMoveColumnParams({allMovingColumns:J,isFromHeader:!0,xPosition:Q,fromLeft:X,fromEnter:Z,fakeEvent:$}),{columns:q,toIndex:G}=V$(Y)||{};if(q&&G!=null)this.lastMovedInfo={columns:q,toIndex:G};this.finishColumnMoving()}clearHighlighted(){let{lastHighlightedColumn:z}=this;if(!z)return;w7(z.column,null),this.lastHighlightedColumn=null}checkCenterForScrolling(z){if(!this.isCenterContainer)return;let J=this.beans.ctrlsSvc.get("center"),Q=J.getCenterViewportScrollLeft(),Z=Q+J.getCenterWidth(),$,X;if(this.gos.get("enableRtl"))$=zZ-B6;else X=zZ-B6;if(this.needToMoveRight=$,this.needToMoveLeft=X,X||$)this.ensureIntervalStarted();else this.ensureIntervalCleared()}ensureIntervalStarted(){if(this.movingIntervalId)return;this.intervalCount=0,this.failedMoveAttempts=0,this.movingIntervalId=window.setInterval(this.moveInterval.bind(this),OW),this.beans.dragAndDrop.setDragImageCompIcon(this.needToMoveLeft?"left":"right",!0)}ensureIntervalCleared(){if(!this.movingIntervalId)return;window.clearInterval(this.movingIntervalId),this.movingIntervalId=null,this.failedMoveAttempts=0,this.beans.dragAndDrop.setDragImageCompIcon(this.getIconName())}moveInterval(){let z;if(this.intervalCount++,z=10+this.intervalCount*jW,z>dQ)z=dQ;let J=null,Q=this.gridBodyCon.scrollFeature;if(this.needToMoveLeft)J=Q.scrollHorizontally(-z);else if(this.needToMoveRight)J=Q.scrollHorizontally(z);if(J!==0)this.onDragging(this.lastDraggingEvent),this.failedMoveAttempts=0;else{this.failedMoveAttempts++;let{pinnedCols:Z,dragAndDrop:$,gos:X}=this.beans;if(this.failedMoveAttempts<=x7+1||!Z)return;if($.setDragImageCompIcon("pinned"),!X.get("suppressMoveWhenColumnDragging")){let Y=this.lastDraggingEvent?.dragItem.columns;this.attemptToPinColumns(Y,void 0,!0)}}}getPinDirection(){if(this.needToMoveLeft||this.pinned==="left")return"left";if(this.needToMoveRight||this.pinned==="right")return"right"}attemptToPinColumns(z,J,Q=!1){let Z=(z||[]).filter((Y)=>!Y.colDef.lockPinned);if(!Z.length)return 0;if(Q)J=this.getPinDirection();let{pinnedCols:$,dragAndDrop:X}=this.beans;if($?.setColsPinned(Z,J,"uiColumnDragged"),Q)X.nudge();return Z.length}destroy(){super.destroy(),this.lastDraggingEvent=null,this.clearHighlighted(),this.lastMovedInfo=null}};function w7(z,J){if(z.highlighted===J)return;z.highlighted=J,z.dispatchColEvent("headerHighlightChanged","uiColumnMoved")}function TW(z){let J=z.length,Q,Z;for(let $=0;${let $,X=Z.gridBodyCtrl.eBodyViewport;switch(Q){case"left":$=[[X,Z.left.eContainer],[Z.bottomLeft.eContainer],[Z.topLeft.eContainer]];break;case"right":$=[[X,Z.right.eContainer],[Z.bottomRight.eContainer],[Z.topRight.eContainer]];break;default:$=[[X,Z.center.eViewport],[Z.bottomCenter.eViewport],[Z.topCenter.eViewport]];break}this.eSecondaryContainers=$}),this.moveColumnFeature=this.createManagedBean(new PW(Q)),this.bodyDropPivotTarget=this.createManagedBean(new DW(Q)),J.addDropTarget(this),this.addDestroyFunc(()=>J.removeDropTarget(this))}isInterestedIn(z){return z===1||z===0&&this.gos.get("allowDragFromColumnsToolPanel")}getSecondaryContainers(){return this.eSecondaryContainers}getContainer(){return this.eContainer}getIconName(){return this.currentDropListener.getIconName()}isDropColumnInPivotMode(z){return this.beans.colModel.pivotMode&&z.dragSource.type===0}onDragEnter(z){this.currentDropListener=this.isDropColumnInPivotMode(z)?this.bodyDropPivotTarget:this.moveColumnFeature,this.currentDropListener.onDragEnter(z)}onDragLeave(z){this.currentDropListener.onDragLeave(z)}onDragging(z){this.currentDropListener.onDragging(z)}onDragStop(z){this.currentDropListener.onDragStop(z)}onDragCancel(){this.currentDropListener.onDragCancel()}};function A$(z,J){let Q=[],Z=[],$=[];if(z.forEach((Y)=>{let q=Y.colDef.lockPosition;if(q==="right")$.push(Y);else if(q==="left"||q===!0)Q.push(Y);else Z.push(Y)}),J.get("enableRtl"))return[...$,...Z,...Q];return[...Q,...Z,...$]}function j$(z,J){let Q=!0;return g4(null,J,(Z)=>{if(!G0(Z))return;let $=Z;if(!$.getColGroupDef()?.marryChildren)return;let q=[];for(let W of $.getLeafColumns()){let B=z.indexOf(W);q.push(B)}let G=Math.max.apply(Math,q),U=Math.min.apply(Math,q),_=G-U,H=$.getLeafColumns().length-1;if(_>H)Q=!1}),Q}var IW=class extends S{constructor(){super(...arguments);this.beanName="colMoves"}moveColumnByIndex(z,J,Q){let Z=this.beans.colModel.getCols();if(!Z)return;let $=Z[z];this.moveColumns([$],J,Q)}moveColumns(z,J,Q,Z=!0){let{colModel:$,colAnimation:X,visibleCols:Y,eventSvc:q}=this.beans,G=$.getCols();if(!G)return;if(J>G.length-z.length){V(30,{toIndex:J});return}X?.start();let U=$.getColsForKeys(z);if(this.doesMovePassRules(U,J))E7($.getCols(),U,J),Y.refresh(Q),q.dispatchEvent({type:"columnMoved",columns:U,column:U.length===1?U[0]:null,toIndex:J,finished:Z,source:Q});X?.finish()}doesMovePassRules(z,J){let Q=this.getProposedColumnOrder(z,J);return this.doesOrderPassRules(Q)}doesOrderPassRules(z){let{colModel:J,gos:Q}=this.beans;if(!j$(z,J.getColTree()))return!1;if(!(($)=>{let X=(U)=>{if(!U)return 0;return U==="left"||U===!0?-1:1},Y=Q.get("enableRtl"),q=Y?1:-1,G=!0;for(let U of $){let _=X(U.colDef.lockPosition);if(Y){if(_>q)G=!1}else if(_q?"hide":"notAllowed",getDragItem:G?()=>bW(J,Y.allCols):()=>yW(J),dragItemName:Q,onDragStarted:()=>{q=!Z.get("suppressDragLeaveHidesColumns"),DQ(U,!0)},onDragStopped:()=>DQ(U,!1),onDragCancelled:()=>DQ(U,!1),onGridEnter:(W)=>{if(q){let{columns:B=[],visibleState:E}=W??{},K=G?(L)=>!E||E[L.getColId()]:()=>!0,F=B.filter((L)=>!L.getColDef().lockVisible&&K(L));$.setColsVisible(F,!0,"uiColumnMoved")}},onGridExit:(W)=>{if(q){let B=W?.columns?.filter((E)=>!E.getColDef().lockVisible)||[];$.setColsVisible(B,!1,"uiColumnMoved")}}};return X.addDragSource(H,!0),H}};function CW(z,J){while(z){if(z.getGroupId()===J)return z;z=z.parent}return}function yW(z){let J={};return J[z.getId()]=z.isVisible(),{columns:[z],visibleState:J,containerType:z.pinned}}function bW(z,J){let Q=z.getProvidedColumnGroup().getLeafColumns(),Z={};for(let q of Q)Z[q.getId()]=q.isVisible();let $=[];for(let q of J)if(Q.indexOf(q)>=0)$.push(q),X0(Q,q);for(let q of Q)$.push(q);let X=[],Y=z.getLeafColumns();for(let q of $)if(Y.indexOf(q)!==-1)X.push(q);return{columns:$,columnsInSplit:X,visibleState:Z,containerType:X[0]?.pinned}}var n2={moduleName:"ColumnMove",version:i,beans:[IW,KW],apiFunctions:{moveColumnByIndex:FW,moveColumns:LW},dependsOn:[p2],css:[EW]},xW=class extends S{constructor(){super(...arguments);this.beanName="autoWidthCalc"}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>{this.centerRowContainerCtrl=z.center})}getPreferredWidthForColumn(z,J){let Q=this.getHeaderCellForColumn(z);if(!Q)return-1;let Z=this.beans.rowRenderer.getAllCellsNotSpanningForColumn(z);if(!J)Z.push(Q);return this.getPreferredWidthForElements(Z)}getPreferredWidthForColumnGroup(z){let J=this.getHeaderCellForColumn(z);if(!J)return-1;return this.getPreferredWidthForElements([J])}getPreferredWidthForElements(z,J){let Q=document.createElement("form");Q.style.position="fixed";let Z=this.centerRowContainerCtrl.eContainer;for(let X of z)this.cloneItemIntoDummy(X,Q);Z.appendChild(Q);let $=Math.ceil(Q.getBoundingClientRect().width);return Q.remove(),J=J??this.gos.get("autoSizePadding"),$+J}getHeaderCellForColumn(z){let J=null;for(let Q of this.beans.ctrlsSvc.getHeaderRowContainerCtrls()){let Z=Q.getHtmlElementForColumnHeader(z);if(Z!=null)J=Z}return J}cloneItemIntoDummy(z,J){let Q=z.cloneNode(!0);Q.style.width="",Q.style.position="static",Q.style.left="";let Z=document.createElement("div"),$=Z.classList;if(["ag-header-cell","ag-header-group-cell"].some((q)=>Q.classList.contains(q)))$.add("ag-header","ag-header-row"),Z.style.position="static";else $.add("ag-row");let Y=z.parentElement;while(Y){if(["ag-header-row","ag-row"].some((G)=>Y.classList.contains(G))){for(let G=0;GX.getPinned());z.dispatchEvent({type:"columnPinned",pinned:$!=null?$:null,columns:J,column:Z,source:Q})}function NW(z,J,Q){if(!J.length)return;let Z=J.length===1?J[0]:null,$=P$(J,(X)=>X.isVisible());z.dispatchEvent({type:"columnVisible",visible:$,columns:J,column:Z,source:Q})}function v$(z,J,Q,Z){z.dispatchEvent({type:J,columns:Q,column:Q?.length==1?Q[0]:null,source:Z})}function N1(z,J,Q,Z,$=null){if(J?.length)z.dispatchEvent({type:"columnResized",columns:J,column:J.length===1?J[0]:null,flexColumns:$,finished:Q,source:Z})}var gW=class extends S{constructor(z,J,Q,Z){super();this.comp=z,this.eResize=J,this.pinned=Q,this.columnGroup=Z}postConstruct(){if(!this.columnGroup.isResizable()){this.comp.setResizableDisplayed(!1);return}let{horizontalResizeSvc:z,gos:J,colAutosize:Q}=this.beans,Z=z.addResizeBar({eResizeBar:this.eResize,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this,!1),onResizeEnd:this.onResizing.bind(this,!0)});if(this.addDestroyFunc(Z),!J.get("suppressAutoSize")&&Q)this.addDestroyFunc(Q.addColumnGroupResize(this.eResize,this.columnGroup,()=>this.resizeLeafColumnsToFit("uiColumnResized")))}onResizeStart(z){let{columnsToResize:J,resizeStartWidth:Q,resizeRatios:Z,groupAfterColumns:$,groupAfterStartWidth:X,groupAfterRatios:Y}=this.getInitialValues(z);this.resizeCols=J,this.resizeStartWidth=Q,this.resizeRatios=Z,this.resizeTakeFromCols=$,this.resizeTakeFromStartWidth=X,this.resizeTakeFromRatios=Y,this.toggleColumnResizing(!0)}onResizing(z,J,Q="uiColumnResized"){let Z=this.normaliseDragChange(J),$=this.resizeStartWidth+Z;this.resizeColumnsFromLocalValues($,Q,z)}getInitialValues(z){let J=(G)=>G.reduce((U,_)=>U+_.getActualWidth(),0),Q=(G,U)=>G.map((_)=>_.getActualWidth()/U),Z=this.getColumnsToResize(),$=J(Z),X=Q(Z,$),Y={columnsToResize:Z,resizeStartWidth:$,resizeRatios:X},q=null;if(z)q=this.beans.colGroupSvc?.getGroupAtDirection(this.columnGroup,"After")??null;if(q){let G=q.getDisplayedLeafColumns(),U=Y.groupAfterColumns=G.filter((H)=>H.isResizable()),_=Y.groupAfterStartWidth=J(U);Y.groupAfterRatios=Q(U,_)}else Y.groupAfterColumns=void 0,Y.groupAfterStartWidth=void 0,Y.groupAfterRatios=void 0;return Y}resizeLeafColumnsToFit(z){let J=this.beans.autoWidthCalc.getPreferredWidthForColumnGroup(this.columnGroup),Q=this.getInitialValues();if(J>Q.resizeStartWidth)this.resizeColumns(Q,J,z,!0)}resizeColumnsFromLocalValues(z,J,Q=!0){if(!this.resizeCols||!this.resizeRatios)return;let Z={columnsToResize:this.resizeCols,resizeStartWidth:this.resizeStartWidth,resizeRatios:this.resizeRatios,groupAfterColumns:this.resizeTakeFromCols,groupAfterStartWidth:this.resizeTakeFromStartWidth,groupAfterRatios:this.resizeTakeFromRatios};this.resizeColumns(Z,z,J,Q)}resizeColumns(z,J,Q,Z=!0){let{columnsToResize:$,resizeStartWidth:X,resizeRatios:Y,groupAfterColumns:q,groupAfterStartWidth:G,groupAfterRatios:U}=z,_=[];if(_.push({columns:$,ratios:Y,width:J}),q){let H=J-X;_.push({columns:q,ratios:U,width:G-H})}if(this.beans.colResize?.resizeColumnSets({resizeSets:_,finished:Z,source:Q}),Z)this.toggleColumnResizing(!1)}toggleColumnResizing(z){this.comp.toggleCss("ag-column-resizing",z)}getColumnsToResize(){return this.columnGroup.getDisplayedLeafColumns().filter((J)=>J.isResizable())}normaliseDragChange(z){let J=z;if(this.gos.get("enableRtl")){if(this.pinned!=="left")J*=-1}else if(this.pinned==="right")J*=-1;return J}destroy(){super.destroy(),this.resizeCols=void 0,this.resizeRatios=void 0,this.resizeTakeFromCols=void 0,this.resizeTakeFromRatios=void 0}},hW=class extends S{constructor(z,J,Q,Z,$){super();this.pinned=z,this.column=J,this.eResize=Q,this.comp=Z,this.ctrl=$}postConstruct(){let z=[],J,Q,Z=()=>{if(w(this.eResize,J),!J)return;let{horizontalResizeSvc:Y,colAutosize:q}=this.beans,G=Y.addResizeBar({eResizeBar:this.eResize,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this,!1),onResizeEnd:this.onResizing.bind(this,!0)});if(z.push(G),Q&&q)z.push(q.addColumnAutosizeListeners(this.eResize,this.column))},$=()=>{for(let Y of z)Y();z.length=0},X=()=>{let Y=this.column.isResizable(),q=!this.gos.get("suppressAutoSize")&&!this.column.colDef.suppressAutoSize;if(Y!==J||q!==Q)J=Y,Q=q,$(),Z()};X(),this.addDestroyFunc($),this.ctrl.setRefreshFunction("resize",X)}onResizing(z,J){let{column:Q,lastResizeAmount:Z,resizeStartWidth:$,beans:X}=this,Y=this.normaliseResizeAmount(J),q=$+Y,G=[{key:Q,newWidth:q}],{pinnedCols:U,ctrlsSvc:_,colResize:H}=X;if(this.column.getPinned()){let W=U?.leftWidth??0,B=U?.rightWidth??0,E=lz(_.getGridBodyCtrl().eBodyViewport)-50;if(W+B+(Y-Z)>E)return}if(this.lastResizeAmount=Y,H?.setColumnWidths(G,this.resizeWithShiftKey,z,"uiColumnResized"),z)this.toggleColumnResizing(!1)}onResizeStart(z){this.resizeStartWidth=this.column.getActualWidth(),this.lastResizeAmount=0,this.resizeWithShiftKey=z,this.toggleColumnResizing(!0)}toggleColumnResizing(z){this.column.resizing=z,this.comp.toggleCss("ag-column-resizing",z)}normaliseResizeAmount(z){let J=z,Q=this.pinned!=="left",Z=this.pinned==="right";if(this.gos.get("enableRtl")){if(Q)J*=-1}else if(Z)J*=-1;return J}},uW=class extends S{constructor(){super(...arguments);this.beanName="colResize"}setColumnWidths(z,J,Q,Z){let $=[],{colModel:X,gos:Y,visibleCols:q}=this.beans;for(let G of z){let U=X.getColDefColOrCol(G.key);if(!U)continue;if($.push({width:G.newWidth,ratios:[1],columns:[U]}),Y.get("colResizeDefault")==="shift")J=!J;if(J){let H=q.getColAfter(U);if(!H)continue;let W=U.getActualWidth()-G.newWidth,B=H.getActualWidth()+W;$.push({width:B,ratios:[1],columns:[H]})}}if($.length===0)return;this.resizeColumnSets({resizeSets:$,finished:Q,source:Z})}resizeColumnSets(z){let{resizeSets:J,finished:Q,source:Z}=z;if(!(!J||J.every((_)=>mW(_)))){if(Q){let _=J&&J.length>0?J[0].columns:null;N1(this.eventSvc,_,Q,Z)}return}let X=[],Y=[];for(let _ of J){let{width:H,columns:W,ratios:B}=_,E={},K={};for(let D of W)Y.push(D);let F=!0,L=0;while(F){if(L++,L>1000){r(31);break}F=!1;let D=[],M=0,f=H;W.forEach((R,O)=>{if(K[R.getId()])f-=E[R.getId()];else{D.push(R);let I=B[O];M+=I}});let A=1/M;D.forEach((R,O)=>{let v=O===D.length-1,I;if(v)I=f;else I=Math.round(B[O]*H*A),f-=I;let b=R.getMinWidth(),m=R.getMaxWidth();if(I0&&I>m)I=m,K[R.getId()]=!0,F=!0;E[R.getId()]=I})}for(let D of W){let M=E[D.getId()];if(D.getActualWidth()!==M)D.setActualWidth(M,Z),X.push(D)}}let q=X.length>0,G=[];if(q){let{colFlex:_,visibleCols:H,colViewport:W}=this.beans;G=_?.refreshFlexedColumns({resizingCols:Y,skipSetLeft:!0})??[],H.setLeftValues(Z),H.updateBodyWidths(),W.checkViewportColumns()}let U=Y.concat(G);if(q||Q)N1(this.eventSvc,U,Q,Z,G)}resizeHeader(z,J,Q){if(!z.isResizable())return;let Z=z.getActualWidth(),$=z.getMinWidth(),X=z.getMaxWidth(),Y=Math.min(Math.max(Z+J,$),X);this.setColumnWidths([{key:z,newWidth:Y}],Q,!0,"uiColumnResized")}createResizeFeature(z,J,Q,Z,$){return new hW(z,J,Q,Z,$)}createGroupResizeFeature(z,J,Q,Z){return new gW(z,J,Q,Z)}};function mW(z){let{columns:J,width:Q}=z,Z=0,$=0,X=!0;for(let G of J){let U=G.getMinWidth();Z+=U||0;let _=G.getMaxWidth();if(_>0)$+=_;else X=!1}let Y=Q>=Z,q=!X||Q<=$;return Y&&q}var cW={moduleName:"ColumnResize",version:i,beans:[uW],apiFunctions:{setColumnWidths:wW},dependsOn:[Q5,O$]},iW=class extends S{constructor(z,J){super();this.removeChildListenersFuncs=[],this.columnGroup=J,this.comp=z}postConstruct(){this.addListenersToChildrenColumns(),this.addManagedListeners(this.columnGroup,{displayedChildrenChanged:this.onDisplayedChildrenChanged.bind(this)}),this.onWidthChanged(),this.addDestroyFunc(this.removeListenersOnChildrenColumns.bind(this))}addListenersToChildrenColumns(){this.removeListenersOnChildrenColumns();let z=this.onWidthChanged.bind(this);for(let J of this.columnGroup.getLeafColumns())J.__addEventListener("widthChanged",z),J.__addEventListener("visibleChanged",z),this.removeChildListenersFuncs.push(()=>{J.__removeEventListener("widthChanged",z),J.__removeEventListener("visibleChanged",z)})}removeListenersOnChildrenColumns(){for(let z of this.removeChildListenersFuncs)z();this.removeChildListenersFuncs=[]}onDisplayedChildrenChanged(){this.addListenersToChildrenColumns(),this.onWidthChanged()}onWidthChanged(){let z=this.columnGroup.getActualWidth();this.comp.setWidth(`${z}px`),this.comp.toggleCss("ag-hidden",z===0)}},pW=class extends sZ{constructor(){super(...arguments);this.onSuppressColMoveChange=()=>{if(!this.isAlive()||this.isSuppressMoving())this.removeDragSource();else if(!this.dragSource)this.setDragSource(this.eGui)}}wireComp(z,J,Q,Z,$){let{column:X,beans:Y}=this,{context:q,colNames:G,colHover:U,rangeSvc:_,colResize:H}=Y;this.comp=z,$=m2(this,q,$),this.setGui(J,$),this.displayName=G.getDisplayNameForColumnGroup(X,"header"),this.refreshHeaderStyles(),this.addClasses(),this.setupMovingCss($),this.setupExpandable($),this.setupTooltip(),this.refreshAnnouncement(),this.setupAutoHeight({wrapperElement:Z,compBean:$}),this.setupUserComp(),this.addHeaderMouseListeners($,Z),this.addManagedPropertyListener("groupHeaderHeight",this.refreshMaxHeaderHeight.bind(this)),this.refreshMaxHeaderHeight();let W=this.rowCtrl.pinned,B=X.getProvidedColumnGroup().getLeafColumns();if(U?.createHoverFeature($,B,J),_?.createRangeHighlightFeature($,X,z),$.createManagedBean(new tZ(X,J,Y)),$.createManagedBean(new iW(z,X)),H)this.resizeFeature=$.createManagedBean(H.createGroupResizeFeature(z,Q,W,X));else z.setResizableDisplayed(!1);$.createManagedBean(new Jz(J,{shouldStopEventPropagation:this.shouldStopEventPropagation.bind(this),onTabKeyDown:()=>{return},handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this)})),this.addHighlightListeners($,B),this.addManagedEventListeners({cellSelectionChanged:()=>this.refreshAnnouncement()}),$.addManagedPropertyListener("cellSelection",()=>this.refreshAnnouncement()),$.addManagedPropertyListener("suppressMovableColumns",this.onSuppressColMoveChange),this.addResizeAndMoveKeyboardListeners($),$.addDestroyFunc(()=>this.clearComponent())}getHeaderClassParams(){let{column:z,beans:J}=this,Q=z.getDefinition();return C(J.gos,{colDef:Q,columnGroup:z,floatingFilter:!1})}refreshMaxHeaderHeight(){let{gos:z,comp:J}=this,Q=z.get("groupHeaderHeight");if(Q!=null)if(Q===0)J.setHeaderWrapperHidden(!0);else J.setHeaderWrapperMaxHeight(Q);else J.setHeaderWrapperHidden(!1),J.setHeaderWrapperMaxHeight(null)}addHighlightListeners(z,J){if(!this.beans.gos.get("suppressMoveWhenColumnDragging"))return;for(let Q of J)z.addManagedListeners(Q,{headerHighlightChanged:this.onLeafColumnHighlightChanged.bind(this,Q)})}onLeafColumnHighlightChanged(z){let J=this.column.getDisplayedLeafColumns(),Q=J[0]===z,Z=y(J)===z;if(!Q&&!Z)return;let $=z.getHighlighted(),X=!!this.rowCtrl.getHeaderCellCtrls().find((G)=>{return G.column.isMoving()}),Y=!1,q=!1;if(X){let G=this.beans.gos.get("enableRtl"),U=$===1,_=$===0;if(Q)if(G)q=U;else Y=_;if(Z)if(G)Y=_;else q=U}this.comp.toggleCss("ag-header-highlight-before",Y),this.comp.toggleCss("ag-header-highlight-after",q)}resizeHeader(z,J){let{resizeFeature:Q}=this;if(!Q)return;let Z=Q.getInitialValues(J);Q.resizeColumns(Z,Z.resizeStartWidth+z,"uiColumnResized",!0)}resizeLeafColumnsToFit(z){this.resizeFeature?.resizeLeafColumnsToFit(z)}setupUserComp(){let{colGroupSvc:z,userCompFactory:J,gos:Q,enterpriseMenuFactory:Z}=this.beans,$=this.column,X=$.getProvidedColumnGroup(),Y=C(Q,{displayName:this.displayName,columnGroup:$,setExpanded:(G)=>{z.setColumnGroupOpened(X,G,"gridInitializing")},setTooltip:(G,U)=>{Q.assertModuleRegistered("Tooltip",3),this.setupTooltip(G,U)},showColumnMenu:(G,U)=>Z?.showMenuAfterButtonClick(X,G,"columnMenu",U),showColumnMenuAfterMouseClick:(G,U)=>Z?.showMenuAfterMouseEvent(X,G,"columnMenu",U),eGridHeader:this.eGui}),q=$_(J,Y);if(q)this.comp.setUserCompDetails(q)}addHeaderMouseListeners(z,J){let{column:Q,comp:Z,beans:{rangeSvc:$},gos:X}=this,Y=(_)=>this.handleMouseOverChange(_.type==="mouseenter"),q=()=>this.dispatchColumnMouseEvent("columnHeaderClicked",Q.getProvidedColumnGroup()),G=(_)=>this.handleContextMenuMouseEvent(_,void 0,Q.getProvidedColumnGroup());z.addManagedListeners(this.eGui,{mouseenter:Y,mouseleave:Y,click:q,contextmenu:G}),Z.toggleCss("ag-header-group-cell-selectable",l4(X));let U=$?.createHeaderGroupCellMouseListenerFeature(this.column,J);if(U)this.createManagedBean(U)}handleMouseOverChange(z){this.eventSvc.dispatchEvent({type:z?"columnHeaderMouseOver":"columnHeaderMouseLeave",column:this.column.getProvidedColumnGroup()})}setupTooltip(z,J){this.tooltipFeature=this.beans.tooltipSvc?.setupHeaderGroupTooltip(this.tooltipFeature,this,z,J)}setupExpandable(z){let J=this.column.getProvidedColumnGroup();this.refreshExpanded();let Q=this.refreshExpanded.bind(this);z.addManagedListeners(J,{expandedChanged:Q,expandableChanged:Q})}refreshExpanded(){let{column:z}=this;this.expandable=z.isExpandable();let J=z.isExpanded();if(this.expandable)this.comp.setAriaExpanded(J?"true":"false");else this.comp.setAriaExpanded(void 0);this.refreshHeaderStyles(),this.refreshAnnouncement()}addClasses(){let{column:z}=this,J=z.getColGroupDef(),Q=WJ(J,this.gos,null,z);if(z.isPadding()){if(Q.push("ag-header-group-cell-no-group"),z.getLeafColumns().every(($)=>$.isSpanHeaderHeight()))Q.push("ag-header-span-height")}else if(Q.push("ag-header-group-cell-with-group"),J?.wrapHeaderText)Q.push("ag-header-cell-wrap-text");for(let Z of Q)this.comp.toggleCss(Z,!0)}setupMovingCss(z){let{column:J}=this,Z=J.getProvidedColumnGroup().getLeafColumns(),$=()=>this.comp.toggleCss("ag-header-cell-moving",J.isMoving());for(let X of Z)z.addManagedListeners(X,{movingChanged:$});$()}onFocusIn(z){if(!this.eGui.contains(z.relatedTarget))this.focusThis(),this.announceAriaDescription()}handleKeyDown(z){if(super.handleKeyDown(z),!this.getWrapperHasFocus())return;let{column:Q,expandable:Z,gos:$,beans:X}=this,Y=l4($);if(z.key!=k.ENTER)return;if(Y&&!z.altKey)X.rangeSvc?.handleColumnSelection(Q,z);else if(Z){let q=!Q.isExpanded();X.colGroupSvc.setColumnGroupOpened(Q.getProvidedColumnGroup(),q,"uiColumnExpanded")}}refreshAnnouncement(){let z,{gos:J,expandable:Q}=this,Z=l4(J),$=this.getLocaleTextFunc();if(Z&&Q)z=$("ariaColumnGroupCellSelectionAndExpansion","Press Enter to toggle selection for all visible cells in this column group. Press ALT ENTER to expand or collapse this column group");else if(Z)z=$("ariaColumnGroupCellSelection","Press Enter to toggle selection for all visible cells in this column group");else if(Q)z=$("ariaColumnGroupExpansion","Press ENTER to expand or collapse this column group");this.ariaAnnouncement=z}announceAriaDescription(){let{beans:z,eGui:J,ariaAnnouncement:Q}=this;if(!Q||!J.contains(n(z)))return;z.ariaAnnounce?.announceValue(Q,"columnHeader")}setDragSource(z){if(!this.isAlive()||this.isSuppressMoving())return;if(this.removeDragSource(),!z)return;this.dragSource=this.beans.colMoves?.setDragSourceForHeader(z,this.column,this.displayName)??null}isSuppressMoving(){return this.gos.get("suppressMovableColumns")||this.column.getLeafColumns().some((z)=>z.colDef.suppressMovable||z.colDef.lockPosition)}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),super.destroy()}};function nW(z,J,Q){z.colGroupSvc?.setColumnGroupOpened(J,Q,"api")}function dW(z,J,Q){return z.colGroupSvc?.getColumnGroup(J,Q)??null}function rW(z,J){return z.colGroupSvc?.getProvidedColGroup(J)??null}function tW(z,J,Q){return z.colNames.getDisplayNameForColumnGroup(J,Q)||""}function sW(z){return z.colGroupSvc?.getColumnGroupState()??[]}function lW(z,J){z.colGroupSvc?.setColumnGroupState(J,"api")}function aW(z){z.colGroupSvc?.resetColumnGroupState("api")}function oW(z){return z.visibleCols.treeLeft}function eW(z){return z.visibleCols.treeCenter}function zB(z){return z.visibleCols.treeRight}function JB(z){return z.visibleCols.getAllTrees()}var I$=class{constructor(){this.existingIds={}}getInstanceIdForKey(z){let J=this.existingIds[z],Q;if(typeof J!=="number")Q=0;else Q=J+1;return this.existingIds[z]=Q,Q}};function QB(z,J){for(let Q=0;Q=0)z[Z]=z[z.length-1],z.pop()}}var ZB=class extends S{constructor(){super(...arguments);this.beanName="visibleCols",this.colsAndGroupsMap={},this.leftCols=[],this.rightCols=[],this.centerCols=[],this.allCols=[],this.headerGroupRowCount=0,this.bodyWidth=0,this.leftWidth=0,this.rightWidth=0,this.isBodyWidthDirty=!0}refresh(z,J=!1){let{colFlex:Q,colModel:Z,colGroupSvc:$,colViewport:X,selectionColSvc:Y}=this.beans;if(!J)this.buildTrees(Z,$);$?.updateOpenClosedVisibility(),this.leftCols=MQ(this.treeLeft),this.centerCols=MQ(this.treeCenter),this.rightCols=MQ(this.treeRight),Y?.refreshVisibility(this.leftCols,this.centerCols,this.rightCols),this.joinColsAriaOrder(Z),this.joinCols(),this.headerGroupRowCount=this.getHeaderRowCount(),this.setLeftValues(z),this.autoHeightCols=this.allCols.filter((q)=>q.isAutoHeight()),Q?.refreshFlexedColumns(),this.updateBodyWidths(),this.setFirstRightAndLastLeftPinned(Z,this.leftCols,this.rightCols,z),X.checkViewportColumns(!1),this.eventSvc.dispatchEvent({type:"displayedColumnsChanged",source:z})}getHeaderRowCount(){if(!this.gos.get("hidePaddedHeaderRows"))return this.beans.colModel.cols.treeDepth;let z=0;for(let J of this.allCols){let Q=J.parent;while(Q){if(!Q.isPadding()){let Z=Q.getProvidedColumnGroup().getLevel()+1;if(Z>z)z=Z;break}Q=Q.parent}}return z}updateBodyWidths(){let z=t4(this.centerCols),J=t4(this.leftCols),Q=t4(this.rightCols);if(this.isBodyWidthDirty=this.bodyWidth!==z,this.bodyWidth!==z||this.leftWidth!==J||this.rightWidth!==Q)this.bodyWidth=z,this.leftWidth=J,this.rightWidth=Q,this.eventSvc.dispatchEvent({type:"columnContainerWidthChanged"}),this.eventSvc.dispatchEvent({type:"displayedColumnsWidthChanged"})}setLeftValues(z){this.setLeftValuesOfCols(z),this.setLeftValuesOfGroups()}setFirstRightAndLastLeftPinned(z,J,Q,Z){let $,X;if(this.gos.get("enableRtl"))$=J?J[0]:null,X=Q?y(Q):null;else $=J?y(J):null,X=Q?Q[0]:null;for(let Y of z.getCols())Y.setLastLeftPinned(Y===$,Z),Y.setFirstRightPinned(Y===X,Z)}buildTrees(z,J){let Q=z.getColsToShow(),Z=Q.filter((G)=>G.getPinned()=="left"),$=Q.filter((G)=>G.getPinned()=="right"),X=Q.filter((G)=>G.getPinned()!="left"&&G.getPinned()!="right"),Y=new I$,q=(G)=>{return J?J.createColumnGroups(G):G.columns};this.treeLeft=q({columns:Z,idCreator:Y,pinned:"left",oldDisplayedGroups:this.treeLeft}),this.treeRight=q({columns:$,idCreator:Y,pinned:"right",oldDisplayedGroups:this.treeRight}),this.treeCenter=q({columns:X,idCreator:Y,pinned:null,oldDisplayedGroups:this.treeCenter}),this.updateColsAndGroupsMap()}clear(){this.leftCols=[],this.rightCols=[],this.centerCols=[],this.allCols=[],this.ariaOrderColumns=[]}joinColsAriaOrder(z){let J=z.getCols(),Q=[],Z=[],$=[];for(let X of J){let Y=X.getPinned();if(!Y)Z.push(X);else if(Y===!0||Y==="left")Q.push(X);else $.push(X)}this.ariaOrderColumns=Q.concat(Z).concat($)}getAriaColIndex(z){let J;if(K0(z))J=z.getLeafColumns()[0];else J=z;return this.ariaOrderColumns.indexOf(J)+1}setLeftValuesOfGroups(){for(let z of[this.treeLeft,this.treeRight,this.treeCenter])for(let J of z)if(K0(J))J.checkLeft()}setLeftValuesOfCols(z){let{colModel:J}=this.beans;if(!J.getColDefCols())return;let Z=J.getCols().slice(0),$=this.gos.get("enableRtl");for(let X of[this.leftCols,this.rightCols,this.centerCols]){if($){let Y=t4(X);for(let q of X)Y-=q.getActualWidth(),q.setLeft(Y,z)}else{let Y=0;for(let q of X)q.setLeft(Y,z),Y+=q.getActualWidth()}QB(Z,X)}for(let X of Z)X.setLeft(null,z)}joinCols(){if(this.gos.get("enableRtl"))this.allCols=this.rightCols.concat(this.centerCols).concat(this.leftCols);else this.allCols=this.leftCols.concat(this.centerCols).concat(this.rightCols)}getAllTrees(){if(this.treeLeft&&this.treeRight&&this.treeCenter)return this.treeLeft.concat(this.treeCenter).concat(this.treeRight);return null}isColDisplayed(z){return this.allCols.indexOf(z)>=0}getLeftColsForRow(z){let{leftCols:J,beans:{colModel:Q}}=this;if(!Q.colSpanActive)return J;return this.getColsForRow(z,J)}getRightColsForRow(z){let{rightCols:J,beans:{colModel:Q}}=this;if(!Q.colSpanActive)return J;return this.getColsForRow(z,J)}getColsForRow(z,J,Q,Z){let $=[],X=null;for(let Y=0;Y1){let W=U-1;for(let B=1;B<=W;B++)_.push(J[Y+B]);Y+=W}let H;if(Q){H=!1;for(let W of _)if(Q(W))H=!0}else H=!0;if(H){if($.length===0&&X){if(Z?Z(q):!1)$.push(X)}$.push(q)}X=q}return $}getContainerWidth(z){switch(z){case"left":return this.leftWidth;case"right":return this.rightWidth;default:return this.bodyWidth}}getColBefore(z){let J=this.allCols,Q=J.indexOf(z);if(Q>0)return J[Q-1];return null}isPinningLeft(){return this.leftCols.length>0}isPinningRight(){return this.rightCols.length>0}updateColsAndGroupsMap(){this.colsAndGroupsMap={};let z=(J)=>{this.colsAndGroupsMap[J.getUniqueId()]=J};tz(this.treeCenter,!1,z),tz(this.treeLeft,!1,z),tz(this.treeRight,!1,z)}isVisible(z){return this.colsAndGroupsMap[z.getUniqueId()]===z}getFirstColumn(){let z=this.gos.get("enableRtl"),J=["leftCols","centerCols","rightCols"];if(z)J.reverse();for(let Q=0;Q{if(G4(Q))J.push(Q)}),J}var $B=class extends S{constructor(){super(...arguments);this.beanName="colGroupSvc"}getColumnGroupState(){let z=[],J=this.beans.colModel.getColTree();return g4(null,J,(Q)=>{if(G0(Q))z.push({groupId:Q.getGroupId(),open:Q.isExpanded()})}),z}resetColumnGroupState(z){let J=this.beans.colModel.getColDefColTree();if(!J)return;let Q=[];g4(null,J,(Z)=>{if(G0(Z)){let $=Z.getColGroupDef(),X={groupId:Z.getGroupId(),open:!$?void 0:$.openByDefault};Q.push(X)}}),this.setColumnGroupState(Q,z)}setColumnGroupState(z,J){let{colModel:Q,colAnimation:Z,visibleCols:$,eventSvc:X}=this.beans;if(!Q.getColTree().length)return;Z?.start();let q=[];for(let G of z){let{groupId:U,open:_}=G,H=this.getProvidedColGroup(U);if(!H)continue;if(H.isExpanded()===_)continue;H.setExpanded(_),q.push(H)}if($.refresh(J,!0),q.length)X.dispatchEvent({type:"columnGroupOpened",columnGroup:q.length===1?q[0]:void 0,columnGroups:q});Z?.finish()}setColumnGroupOpened(z,J,Q){let Z;if(G0(z))Z=z.getId();else Z=z||"";this.setColumnGroupState([{groupId:Z,open:J}],Q)}getProvidedColGroup(z){let J=null;return g4(null,this.beans.colModel.getColTree(),(Q)=>{if(G0(Q)){if(Q.getId()===z)J=Q}}),J}getGroupAtDirection(z,J){let Q=z.getProvidedColumnGroup().getLevel()+z.getPaddingLevel(),Z=z.getDisplayedLeafColumns(),$=J==="After"?y(Z):Z[0],X=`getCol${J}`;while(!0){let Y=this.beans.visibleCols[X]($);if(!Y)return null;let q=this.getColGroupAtLevel(Y,Q);if(q!==z)return q}}getColGroupAtLevel(z,J){let Q=z.parent,Z,$;while(!0){if(Z=Q.getProvidedColumnGroup().getLevel(),$=Q.getPaddingLevel(),Z+$<=J)break;Q=Q.parent}return Q}updateOpenClosedVisibility(){let z=this.beans.visibleCols.getAllTrees();tz(z,!1,(J)=>{if(K0(J))J.calculateDisplayedColumns()})}getColumnGroup(z,J){if(!z)return null;if(K0(z))return z;let Q=this.beans.visibleCols.getAllTrees(),Z=typeof J==="number",$=null;return tz(Q,!1,(X)=>{if(K0(X)){let Y=X,q;if(Z)q=z===Y.getGroupId()&&J===Y.getPartId();else q=z===Y.getGroupId();if(q)$=Y}}),$}createColumnGroups(z){let{columns:J,idCreator:Q,pinned:Z,oldDisplayedGroups:$,isStandaloneStructure:X}=z,Y=this.mapOldGroupsById($),q=[],G=J;while(G.length){let U=G;G=[];let _=0,H=(W)=>{let B=_;_=W;let E=U[B],F=(K0(E)?E.getProvidedColumnGroup():E).getOriginalParent();if(F==null){for(let D=B;DG0(_))){G.setChildren([Y]);continue}else{G.setChildren(z);break}$.push(Y)}}return $}findDepth(z){let J=0,Q=z;while(Q?.[0]&&G0(Q[0]))J++,Q=Q[0].getChildren();return J}findMaxDepth(z,J){let Q=J;for(let Z=0;Z=0;X--){let Y=new rz(null,`FAKE_PATH_${Z.getId()}_${X}`,!0,X);this.createBean(Y),Y.setChildren([$]),$.originalParent=Y,$=Y}if(J===0)Z.originalParent=null;Q.push($)}return Q}findExistingGroup(z,J){if(z.groupId==null)return;for(let Z=0;Z{for(let $ of Z)if(K0($)){let X=$;J[$.getUniqueId()]=X,Q(X.getChildren())}};if(z)Q(z);return J}setupParentsIntoCols(z,J){for(let Q of z??[]){if(Q.parent!==J)this.beans.colViewport.colsWithinViewportHash="";if(Q.parent=J,K0(Q)){let Z=Q;this.setupParentsIntoCols(Z.getChildren(),Z)}}}},Z5={moduleName:"ColumnGroup",version:i,dynamicBeans:{headerGroupCellCtrl:pW},beans:[$B],apiFunctions:{getAllDisplayedColumnGroups:JB,getCenterDisplayedColumnGroups:eW,getColumnGroup:dW,getColumnGroupState:sW,getDisplayNameForColumnGroup:tW,getLeftDisplayedColumnGroups:oW,getProvidedColumnGroup:rW,getRightDisplayedColumnGroups:zB,resetColumnGroupState:aW,setColumnGroupOpened:nW,setColumnGroupState:lW}};function a0(z,J,Q){let{colModel:Z,rowGroupColsSvc:$,pivotColsSvc:X,autoColSvc:Y,selectionColSvc:q,colAnimation:G,visibleCols:U,pivotResultCols:_,environment:H,valueColsSvc:W,eventSvc:B,gos:E}=z,K=Z.getColDefCols()??[],F=q?.getColumns();if(!K.length&&!F?.length)return!1;if(J?.state&&!J.state.forEach)return V(32),!1;let L=(A,R,O,v,I)=>{if(!A)return;let b=OU(R,J.defaultState),m=b("flex").value1,g=b("sort").value1,e=b("sortType").value1,t=Lz(g)||OZ(e),u=A4(e),Q0=GJ(g),s=t?{type:u,direction:Q0}:void 0;if(j9(z,A,b("hide").value1,s,b("sortIndex").value1,b("pinned").value1,m,Q),m==null){let P0=b("width").value1;if(P0!=null){let T0=A.getColDef().minWidth??H.getDefaultColumnMinWidth();if(T0!=null&&P0>=T0)A.setActualWidth(P0,Q)}}if(I||!A.primary)return;W?.syncColumnWithState(A,Q,b),$?.syncColumnWithState(A,Q,b,O),X?.syncColumnWithState(A,Q,b,v)},D=(A,R,O)=>{let v=y$(z,Q),I=R.slice(),b={},m={},g=[],e=[],t=[],u=0,Q0=$?.columns.slice()??[],s=X?.columns.slice()??[];for(let V0 of A){let uz=V0.colId;if(uz.startsWith(Q1)){g.push(V0),t.push(V0);continue}if(i4(uz)){e.push(V0),t.push(V0);continue}let L1=O(uz);if(!L1)t.push(V0),u+=1;else L(L1,V0,b,m,!1),X0(I,L1)}let P0=(V0)=>L(V0,null,b,m,!1);I.forEach(P0),$?.sortColumns(g7.bind($,b,Q0)),X?.sortColumns(g7.bind(X,m,s)),Z.refreshCols(!1,Q);let T0=(V0,uz,aJ=[])=>{for(let L1 of uz){let B7=V0(L1.colId);X0(aJ,B7),L(B7,L1,null,null,!0)}aJ.forEach(P0)};return T0((V0)=>Y?.getColumn(V0)??null,g,Y?.getColumns()?.slice()),T0((V0)=>q?.getColumn(V0)??null,e,q?.getColumns()?.slice()),XB(J,Z,E),U.refresh(Q),B.dispatchEvent({type:"columnEverythingChanged",source:Q}),v(),{unmatchedAndAutoStates:t,unmatchedCount:u}};G?.start();let{unmatchedAndAutoStates:M,unmatchedCount:f}=D(J.state||[],K,(A)=>Z.getColDefCol(A));if(M.length>0||P(J.defaultState)){let A=_?.getPivotResultCols()?.list??[];f=D(M,A,(R)=>_?.getPivotResultCol(R)??null).unmatchedCount}return G?.finish(),f===0}function C$(z,J){let{colModel:Q,autoColSvc:Z,selectionColSvc:$,eventSvc:X,gos:Y}=z;if(!Q.getColDefCols()?.length)return;let G=Q.getColDefColTree(),U=UJ(G),_=[],H=1000,W=1000,B=(D)=>{let M=b$(D);if(d(M.rowGroupIndex)&&M.rowGroup)M.rowGroupIndex=H++;if(d(M.pivotIndex)&&M.pivot)M.pivotIndex=W++;_.push(M)};Z?.getColumns()?.forEach(B),$?.getColumns()?.forEach(B),U?.forEach(B),a0(z,{state:_},J);let E=Z?.getColumns()??[],L=[...$?.getColumns()??[],...E,...U].map((D)=>({colId:D.colId}));a0(z,{state:L,applyOrder:!0},J),X.dispatchEvent(C(Y,{type:"columnsReset",source:J}))}function y$(z,J){let{rowGroupColsSvc:Q,pivotColsSvc:Z,valueColsSvc:$,colModel:X,sortSvc:Y,eventSvc:q}=z,G={rowGroupColumns:Q?.columns.slice()??[],pivotColumns:Z?.columns.slice()??[],valueColumns:$?.columns.slice()??[]},U=N7(z),_={};for(let H of U)_[H.colId]=H;return()=>{let H=(R,O,v,I)=>{let b=O.map(I),m=v.map(I);if(Z0(b,m))return;let e=new Set(O);for(let u of v)if(!e.delete(u))e.add(u);let t=[...e];q.dispatchEvent({type:R,columns:t,column:t.length===1?t[0]:null,source:J})},W=(R)=>{let O=[];return X.forAllCols((v)=>{let I=_[v.colId];if(I&&R(I,v))O.push(v)}),O},B=(R)=>R.colId;H("columnRowGroupChanged",G.rowGroupColumns,Q?.columns??[],B),H("columnPivotChanged",G.pivotColumns,Z?.columns??[],B);let K=W((R,O)=>{let v=R.aggFunc!=null,I=v!=O.isValueActive(),b=v&&R.aggFunc!=O.getAggFunc();return I||b});if(K.length>0)v$(q,"columnValueChanged",K,J);N1(q,W((R,O)=>R.width!=O.getActualWidth()),!0,J),T$(q,W((R,O)=>R.pinned!=O.getPinned()),J),NW(q,W((R,O)=>R.hide==O.isVisible()),J);let f=W((R,O)=>!f6(O.getSortDef(),{type:A4(R.sortType),direction:GJ(R.sort)})||R.sortIndex!=O.getSortIndex());if(f.length>0)Y?.dispatchSortChangedEvents(J,f);let A=N7(z);qB(U,A,J,X,q)}}function N7(z){let{colModel:J,rowGroupColsSvc:Q,pivotColsSvc:Z}=z,$=J.getColDefCols();if(d($)||!J.isAlive())return[];let X=Q?.columns,Y=Z?.columns,q=[],G=(_)=>{let H=_.isRowGroupActive()&&X?X.indexOf(_):null,W=_.isPivotActive()&&Y?Y.indexOf(_):null,B=_.isValueActive()?_.getAggFunc():null,E=_.getSortIndex()!=null?_.getSortIndex():null;q.push({colId:_.colId,width:_.getActualWidth(),hide:!_.isVisible(),pinned:_.getPinned(),sort:_.getSort(),sortType:_.getSortDef()?.type,sortIndex:E,aggFunc:B,rowGroup:_.isRowGroupActive(),rowGroupIndex:H,pivot:_.isPivotActive(),pivotIndex:W,flex:_.getFlex()??null})};J.forAllCols((_)=>G(_));let U=new Map(J.getCols().map((_,H)=>[_.colId,H]));return q.sort((_,H)=>{let W=U.has(_.colId)?U.get(_.colId):-1,B=U.has(H.colId)?U.get(H.colId):-1;return W-B}),q}function b$(z){let J=(F,L)=>F!=null?F:L!=null?L:null,Q=z.colDef,Z=Z4(J(Q.sort,Q.initialSort)),$=Z.direction,X=Z.type,Y=J(Q.sortIndex,Q.initialSortIndex),q=J(Q.hide,Q.initialHide),G=J(Q.pinned,Q.initialPinned),U=J(Q.width,Q.initialWidth),_=J(Q.flex,Q.initialFlex),H=J(Q.rowGroupIndex,Q.initialRowGroupIndex),W=J(Q.rowGroup,Q.initialRowGroup);if(H==null&&!W)H=null,W=null;let B=J(Q.pivotIndex,Q.initialPivotIndex),E=J(Q.pivot,Q.initialPivot);if(B==null&&!E)B=null,E=null;let K=J(Q.aggFunc,Q.initialAggFunc);return{colId:z.colId,sort:$,sortType:X,sortIndex:Y,hide:q,pinned:G,width:U,flex:_,rowGroup:W,rowGroupIndex:H,pivot:E,pivotIndex:B,aggFunc:K}}function XB(z,J,Q){if(!z.applyOrder||!z.state)return;let Z=[];for(let $ of z.state)if($.colId!=null)Z.push($.colId);YB(J.cols,Z,J,Q)}function YB(z,J,Q,Z){if(z==null)return;let $=[],X={};for(let q of J){if(X[q])continue;let G=z.map[q];if(G)$.push(G),X[q]=!0}let Y=0;for(let q of z.list){let G=q.colId;if(X[G]!=null)continue;if(G.startsWith(Q1))$.splice(Y++,0,q);else $.push(q)}if($=A$($,Z),!j$($,Q.getColTree())){V(39);return}z.list=$}function qB(z,J,Q,Z,$){let X={};for(let _ of J)X[_.colId]=_;let Y={};for(let _ of z)if(X[_.colId])Y[_.colId]=!0;let q=z.filter((_)=>Y[_.colId]),G=J.filter((_)=>Y[_.colId]),U=[];if(G.forEach((_,H)=>{let W=q?.[H];if(W&&W.colId!==_.colId){let B=Z.getCol(W.colId);if(B)U.push(B)}}),!U.length)return;$.dispatchEvent({type:"columnMoved",columns:U,column:U.length===1?U[0]:null,finished:!0,source:Q})}var g7=(z,J,Q,Z)=>{let $=z[Q.getId()],X=z[Z.getId()],Y=$!=null,q=X!=null;if(Y&&q)return $-X;if(Y)return-1;if(q)return 1;let G=J.indexOf(Q),U=J.indexOf(Z),_=G>=0,H=U>=0;if(_&&H)return G-U;if(_)return-1;return 1},GB=class extends S{constructor(){super(...arguments);this.beanName="colModel",this.pivotMode=!1,this.ready=!1,this.changeEventsDispatching=!1}postConstruct(){this.pivotMode=this.gos.get("pivotMode"),this.addManagedPropertyListeners(["groupDisplayType","treeData","treeDataDisplayType","groupHideOpenParents","groupHideColumnsUntilExpanded","rowNumbers","hidePaddedHeaderRows"],(z)=>this.refreshAll(Dz(z.source))),this.addManagedPropertyListeners(["defaultColDef","defaultColGroupDef","columnTypes","suppressFieldDotNotation"],this.recreateColumnDefs.bind(this)),this.addManagedPropertyListener("pivotMode",(z)=>this.setPivotMode(this.gos.get("pivotMode"),Dz(z.source)))}createColsFromColDefs(z){let{beans:J}=this,{valueCache:Q,colAutosize:Z,rowGroupColsSvc:$,pivotColsSvc:X,valueColsSvc:Y,visibleCols:q,eventSvc:G,groupHierarchyColSvc:U}=J,_=this.colDefs?y$(J,z):void 0;Q?.expire();let H=this.colDefCols?.list,W=this.colDefCols?.tree,B=TZ(J,this.colDefs,!0,W,z);U4(J,this.colDefCols?.tree,B.columnTree);let{columnTree:E,treeDepth:K}=B,F=UJ(E),L={};for(let D of F)L[D.getId()]=D;if(this.colDefCols={tree:E,treeDepth:K,list:F,map:L},this.createColumnsForService([U],this.colDefCols,z),$?.extractCols(z,H),X?.extractCols(z,H),Y?.extractCols(z,H),this.ready=!0,this.changeEventsDispatching=!0,this.refreshCols(!0,z),this.changeEventsDispatching=!1,q.refresh(z),G.dispatchEvent({type:"columnEverythingChanged",source:z}),_)this.changeEventsDispatching=!0,_(),this.changeEventsDispatching=!1;if(G.dispatchEvent({type:"newColumnsLoaded",source:z}),z==="gridInitializing")Z?.applyAutosizeStrategy()}refreshCols(z,J){if(!this.colDefCols)return;let Q=this.cols?.tree;this.saveColOrder();let{autoColSvc:Z,selectionColSvc:$,rowNumbersSvc:X,quickFilter:Y,pivotResultCols:q,showRowGroupCols:G,rowAutoHeight:U,visibleCols:_,colViewport:H,eventSvc:W,formula:B}=this.beans,E=this.selectCols(q,this.colDefCols);B?.setFormulasActive(E),this.createColumnsForService([Z,$,X],E,J);let K=YU(this.gos,this.showingPivotResult);if(!z||K)this.restoreColOrder(E);if(this.positionLockedCols(E),G?.refresh(),Y?.refreshCols(),this.setColSpanActive(),U?.setAutoHeightActive(E),_.clear(),H.clear(),!Z0(Q,this.cols.tree))W.dispatchEvent({type:"gridColumnsChanged"})}createColumnsForService(z,J,Q){for(let Z of z){if(!Z)continue;Z.createColumns(J,($)=>{this.lastOrder=$(this.lastOrder),this.lastPivotOrder=$(this.lastPivotOrder)},Q),Z.addColumns(J)}}selectCols(z,J){let Q=z?.getPivotResultCols()??null;this.showingPivotResult=Q!=null;let{map:Z,list:$,tree:X,treeDepth:Y}=Q??J;if(this.cols={list:$.slice(),map:{...Z},tree:X.slice(),treeDepth:Y},Q){if(!Q.list.some((G)=>this.cols?.map[G.colId]!==void 0))this.lastPivotOrder=null}return this.cols}getColsToShow(){if(!this.cols)return[];let{beans:z,showingPivotResult:J,cols:Q}=this,{valueColsSvc:Z,selectionColSvc:$,gos:X}=z,Y=this.pivotMode&&!J,q=$?.isSelectionColumnEnabled(),G=qU(z),U=Z?.columns,_=RZ(X);return Q.list.filter((W)=>{let B=Z1(W);if(Y)return U?.includes(W)||B&&(!_||W.isVisible())||q&&i4(W)||G&&y0(W);else return B&&!_||W.isVisible()})}refreshAll(z){if(!this.ready)return;this.refreshCols(!1,z),this.beans.visibleCols.refresh(z)}setColsVisible(z,J=!1,Q){a0(this.beans,{state:z.map((Z)=>({colId:typeof Z==="string"?Z:Z.colId,hide:!J}))},Q)}restoreColOrder(z){let J=this.showingPivotResult?this.lastPivotOrder:this.lastOrder;if(!J)return;let Q=J.filter((H)=>z.map[H.getId()]!=null);if(Q.length===0)return;if(Q.length===z.list.length){z.list=Q;return}let Z=(H)=>{let W=H.getOriginalParent();if(!W)return!1;if(W.getChildren().length>1)return!0;return Z(W)};if(!Q.some((H)=>Z(H))){let H=new Set(Q);for(let W of z.list)if(!H.has(W))Q.push(W);z.list=Q;return}let $=new Map;for(let H=0;H!$.has(H));if(X.length===0){z.list=Q;return}let Y=(H,W)=>{let B=W?W.getOriginalParent():H.getOriginalParent();if(!B)return null;let E=null,K=null;for(let F of B.getChildren()){if(F===W||F===H)continue;if(F instanceof B4){let L=$.get(F);if(L==null)continue;if(E==null||E{let D=$.get(L);if(D==null)return;if(E==null||E=0;H--)U[_--]=q[H];for(let H=Q.length-1;H>=0;H--){let W=Q[H],B=G.get(W);if(B)if(Array.isArray(B))for(let E=B.length-1;E>=0;E--){let K=B[E];U[_--]=K}else U[_--]=B;U[_--]=W}z.list=U}positionLockedCols(z){z.list=A$(z.list,this.gos)}saveColOrder(){if(this.showingPivotResult)this.lastPivotOrder=this.cols?.list??null;else this.lastOrder=this.cols?.list??null}getColumnDefs(z){return this.colDefCols&&this.beans.colDefFactory?.getColumnDefs(this.colDefCols.list,this.showingPivotResult,this.lastOrder,this.cols?.list??[],z)}setColSpanActive(){this.colSpanActive=!!this.cols?.list.some((z)=>z.getColDef().colSpan!=null)}isPivotMode(){return this.pivotMode}setPivotMode(z,J){if(z===this.pivotMode)return;if(this.pivotMode=z,!this.ready)return;this.refreshCols(!1,J);let{visibleCols:Q,eventSvc:Z}=this.beans;Q.refresh(J),Z.dispatchEvent({type:"columnPivotModeChanged"})}isPivotActive(){let z=this.beans.pivotColsSvc?.columns;return this.pivotMode&&!!z?.length}recreateColumnDefs(z){if(!this.cols)return;this.beans.autoColSvc?.updateColumns(z);let J=Dz(z.source);this.createColsFromColDefs(J)}setColumnDefs(z,J){this.colDefs=z,this.createColsFromColDefs(J)}destroy(){U4(this.beans,this.colDefCols?.tree),super.destroy()}getColTree(){return this.cols?.tree??[]}getColDefColTree(){return this.colDefCols?.tree??[]}getColDefCols(){return this.colDefCols?.list??null}getCols(){return this.cols?.list??[]}forAllCols(z){let{pivotResultCols:J,autoColSvc:Q,selectionColSvc:Z,groupHierarchyColSvc:$}=this.beans;if($2(this.colDefCols?.list,z))return;if($2(Q?.columns?.list,z))return;if($2(Z?.columns?.list,z))return;if($2($?.columns?.list,z))return;if($2(J?.getPivotResultCols()?.list,z))return}getColsForKeys(z){if(!z)return[];return z.map((J)=>this.getCol(J)).filter((J)=>J!=null)}getColDefCol(z){return this.getColFromCollection(z,this.colDefCols)??this.getColFromServiceCols(z)}getColDefColOrCol(z){if(z==null)return null;return this.getColFromCollection(z,this.colDefCols)??this.getColFromCollection(z,this.cols)??this.getColFromServiceCols(z)}getColOrColDefCol(z){if(z==null)return null;return this.getColFromCollection(z,this.cols)??this.getColFromCollection(z,this.colDefCols)??this.getColFromServiceCols(z)}getCol(z){if(z==null)return null;return this.getColFromCollection(z,this.cols)??this.getColFromServiceCols(z)}getColById(z){return this.cols?.map[z]??null}getColFromCollection(z,J){if(J==null)return null;let Q=J.map;if(typeof z=="string"&&Q[z])return Q[z];let Z=J.list;for(let $=0,X=Z.length;$z(this.getValue())}),this}getWidth(){return this.getGui().clientWidth}setWidth(z){return N4(this.getGui(),z),this}getPreviousValue(){return this.previousValue}getValue(){return this.value}setValue(z,J){if(this.value===z)return this;if(this.previousValue=this.value,this.value=z,!J)this.dispatchLocalEvent({type:"fieldValueChanged"});return this}};function HB(z){return{tag:"div",role:"presentation",children:[{tag:"div",ref:"eLabel",cls:"ag-input-field-label"},{tag:"div",ref:"eWrapper",cls:"ag-wrapper ag-input-wrapper",role:"presentation",children:[{tag:z,ref:"eInput",cls:"ag-input-field-input"}]}]}}var V1=class extends x${constructor(z,J,Q="text",Z="input"){super(z,z?.template??HB(Z),[],J);this.inputType=Q,this.displayFieldTag=Z,this.eLabel=j,this.eWrapper=j,this.eInput=j}postConstruct(){super.postConstruct(),this.setInputType(this.inputType);let{eLabel:z,eWrapper:J,eInput:Q,className:Z}=this;z.classList.add(`${Z}-label`),J.classList.add(`${Z}-input-wrapper`),Q.classList.add(`${Z}-input`),this.addCss("ag-input-field"),Q.id=Q.id||`ag-${this.getCompId()}-input`;let{inputName:$,inputWidth:X,inputPlaceholder:Y,autoComplete:q,tabIndex:G}=this.config;if($!=null)this.setInputName($);if(X!=null)this.setInputWidth(X);if(Y!=null)this.setInputPlaceholder(Y);if(q!=null)this.setAutoComplete(q);this.addInputListeners(),this.activateTabIndex([Q],G)}addInputListeners(){this.addManagedElementListeners(this.eInput,{input:(z)=>this.setValue(z.target.value)})}setInputType(z){if(this.displayFieldTag==="input")this.inputType=z,f4(this.eInput,"type",z)}getInputElement(){return this.eInput}getWrapperElement(){return this.eWrapper}setInputWidth(z){return I6(this.eWrapper,z),this}setInputName(z){return this.getInputElement().setAttribute("name",z),this}getFocusableElement(){return this.eInput}setMaxLength(z){let J=this.eInput;return J.maxLength=z,this}setInputPlaceholder(z){return f4(this.eInput,"placeholder",z),this}setInputAriaLabel(z){return _0(this.eInput,z),this.refreshAriaLabelledBy(),this}setDisabled(z){return L2(this.eInput,z),super.setDisabled(z)}setAutoComplete(z){if(z===!0)f4(this.eInput,"autocomplete",null);else{let J=typeof z==="string"?z:"off";f4(this.eInput,"autocomplete",J)}return this}},FJ=class extends V1{constructor(z,J="ag-checkbox",Q="checkbox"){super(z,J,Q);this.labelAlignment="right",this.selected=!1,this.readOnly=!1,this.passive=!1}postConstruct(){super.postConstruct();let{readOnly:z,passive:J,name:Q}=this.config;if(typeof z==="boolean")this.setReadOnly(z);if(typeof J==="boolean")this.setPassive(J);if(Q!=null)this.setName(Q)}addInputListeners(){this.addManagedElementListeners(this.eInput,{click:this.onCheckboxClick.bind(this)}),this.addManagedElementListeners(this.eLabel,{click:this.toggle.bind(this)})}getNextValue(){return this.selected===void 0?!0:!this.selected}setPassive(z){this.passive=z}isReadOnly(){return this.readOnly}setReadOnly(z){this.eWrapper.classList.toggle("ag-disabled",z),this.eInput.disabled=z,this.readOnly=z}setDisabled(z){return this.eWrapper.classList.toggle("ag-disabled",z),super.setDisabled(z)}toggle(){if(this.eInput.disabled)return;let z=this.isSelected(),J=this.getNextValue();if(this.passive)this.dispatchChange(J,z);else this.setValue(J)}getValue(){return this.isSelected()}setValue(z,J){return this.refreshSelectedClass(z),this.setSelected(z,J),this}setName(z){let J=this.getInputElement();return J.name=z,this}isSelected(){return this.selected}setSelected(z,J){if(this.isSelected()===z)return;this.previousValue=this.isSelected(),z=this.selected=typeof z==="boolean"?z:void 0;let Q=this.eInput;if(Q.checked=z,Q.indeterminate=z===void 0,!J)this.dispatchChange(this.selected,this.previousValue)}dispatchChange(z,J,Q){this.dispatchLocalEvent({type:"fieldValueChanged",selected:z,previousValue:J,event:Q});let Z=this.getInputElement();this.eventSvc.dispatchEvent({type:"checkboxChanged",id:Z.id,name:Z.name,selected:z,previousValue:J})}onCheckboxClick(z){if(this.passive||this.eInput.disabled)return;let J=this.isSelected(),Q=this.selected=z.target.checked;this.refreshSelectedClass(Q),this.dispatchChange(Q,J,z)}refreshSelectedClass(z){let J=this.eWrapper.classList;J.toggle("ag-checked",z===!0),J.toggle("ag-indeterminate",z==null)}},K4={selector:"AG-CHECKBOX",component:FJ},WB=".ag-checkbox-cell{height:100%}",BB={tag:"div",cls:"ag-cell-wrapper ag-checkbox-cell",role:"presentation",children:[{tag:"ag-checkbox",ref:"eCheckbox",role:"presentation"}]},EB=class extends x{constructor(){super(BB,[K4]);this.eCheckbox=j,this.registerCSS(WB)}init(z){this.refresh(z);let{eCheckbox:J,beans:Q}=this,Z=J.getInputElement();Z.setAttribute("tabindex","-1"),h8(Z,"polite"),this.addManagedListeners(Z,{click:($)=>{if(l0($),J.isDisabled())return;let X=J.getValue();this.onCheckboxChanged(X)},dblclick:($)=>{l0($)}}),this.addManagedElementListeners(z.eGridCell,{keydown:($)=>{if($.key===k.SPACE&&!J.isDisabled()){if(z.eGridCell===n(Q))J.toggle();let X=J.getValue();this.onCheckboxChanged(X),$.preventDefault()}}})}refresh(z){return this.params=z,this.updateCheckbox(z),!0}updateCheckbox(z){let J,Q=!0,{value:Z,column:$,node:X}=z;if(X.group&&$)if(typeof Z==="boolean")J=Z;else{let H=$.getColId();if(H.startsWith(Q1))J=Z==null||Z===""?void 0:Z==="true";else if(X.aggData?.[H]!==void 0)J=Z??void 0;else if(X.sourceRowIndex>=0)J=Z??void 0;else Q=!1}else J=Z??void 0;let{eCheckbox:Y}=this;if(!Q){Y.setDisplayed(!1);return}Y.setValue(J);let q=z.disabled??!$?.isCellEditable(X);Y.setDisabled(q);let G=this.getLocaleTextFunc(),U=BZ(G,J),_=q?U:`${G("ariaToggleCellValue","Press SPACE to toggle cell value")} (${U})`;Y.setInputAriaLabel(_)}onCheckboxChanged(z){let{params:J}=this,{column:Q,node:Z,value:$}=J,{editSvc:X}=this.beans;if(!Q)return;let Y={rowNode:Z,column:Q};X?.dispatchCellEvent(Y,null,"cellEditingStarted",{value:$});let q=Z.setDataValue(Q,z,"ui");if(X?.dispatchCellEvent(Y,null,"cellEditingStopped",{oldValue:$,newValue:z,valueChanged:q}),!q)this.updateCheckbox(J)}},KB={tag:"div",cls:"ag-skeleton-container"},FB=class extends x{constructor(){super(KB)}init(z){let J=`ag-cell-skeleton-renderer-${this.getCompId()}`;if(this.getGui().setAttribute("id",J),this.addDestroyFunc(()=>sz(z.eParentOfValue)),sz(z.eParentOfValue,J),z.deferRender)this.setupLoading(z);else if(z.node.failedLoad)this.setupFailed();else this.setupLoading(z)}setupFailed(){let z=this.getLocaleTextFunc();this.getGui().textContent=z("loadingError","ERR");let J=z("ariaSkeletonCellLoadingFailed","Row failed to load");_0(this.getGui(),J)}setupLoading(z){let J=z0({tag:"div",cls:"ag-skeleton-effect"}),Q=z.node.rowIndex;if(Q!=null){let X=75+25*(Q%2===0?Math.sin(Q):Math.cos(Q));J.style.width=`${X}%`}this.getGui().appendChild(J);let Z=this.getLocaleTextFunc(),$=z.deferRender?Z("ariaDeferSkeletonCellLoading","Cell is loading"):Z("ariaSkeletonCellLoading","Row data is loading");_0(this.getGui(),$)}refresh(z){return!1}},LB={moduleName:"CheckboxCellRenderer",version:i,userComponents:{agCheckboxCellRenderer:EB}},DB={moduleName:"SkeletonCellRenderer",version:i,userComponents:{agSkeletonCellRenderer:FB}};var MB=class extends S{constructor(){super(...arguments);this.beanName="colFlex",this.columnsHidden=!1}refreshFlexedColumns(z={}){let J=z.source??"flex";if(z.viewportWidth!=null)this.flexViewportWidth=z.viewportWidth;let Q=this.flexViewportWidth,{visibleCols:Z,colDelayRenderSvc:$}=this.beans,X=Z.centerCols,Y=-1;if(z.resizingCols){let K=new Set(z.resizingCols);for(let F=X.length-1;F>=0;F--)if(K.has(X[F])){Y=F;break}}let q=!1,G=X.map((K,F)=>{let L=K.getFlex(),D=L!=null&&L>0&&F>Y;return q||(q=D),{col:K,isFlex:D,flex:Math.max(0,L??0),initialSize:K.getActualWidth(),min:K.getMinWidth(),max:K.getMaxWidth(),targetSize:0}});if(q)$?.hideColumns("colFlex"),this.columnsHidden=!0;else if(this.columnsHidden)this.revealColumns($);if(!Q||!q)return[];let U=G.length,_=G.reduce((K,F)=>K+F.flex,0),H=Q,W=(K,F)=>{K.frozenSize=F,K.col.setActualWidth(F,J),H-=F,_-=K.flex,U-=1},B=(K)=>K.frozenSize!=null;for(let K of G)if(!K.isFlex)W(K,K.initialSize);while(U>0){let K=Math.round(_<1?H*_:H),F,L=0,D=0;for(let A of G){if(B(A))continue;F=A,D+=K*(A.flex/_);let R=D-L,O=Math.round(R);A.targetSize=O,L+=O}if(F)F.targetSize+=K-L;let M=0;for(let A of G){if(B(A))continue;let R=A.targetSize,O=Math.min(Math.max(R,A.min),A.max);M+=O-R,A.violationType=O===R?void 0:O0?"min":"max";for(let A of G){if(B(A))continue;if(f==="all"||A.violationType===f)W(A,A.targetSize)}}if(!z.skipSetLeft)Z.setLeftValues(J);if(z.updateBodyWidths)Z.updateBodyWidths();let E=G.filter((K)=>K.isFlex&&!K.violationType).map((K)=>K.col);if(z.fireResizedEvent){let K=G.filter((L)=>L.initialSize!==L.frozenSize).map((L)=>L.col),F=G.filter((L)=>L.flex).map((L)=>L.col);N1(this.eventSvc,K,!0,J,F)}return this.revealColumns($),E}revealColumns(z){if(this.columnsHidden)z?.revealColumns("colFlex"),this.columnsHidden=!1}initCol(z){let{flex:J,initialFlex:Q}=z.colDef;if(J!==void 0)z.flex=J;else if(Q!==void 0)z.flex=Q}setColFlex(z,J){z.flex=J??null,z.dispatchStateUpdatedEvent("flex")}},Sz=(z)=>{if(typeof z==="bigint")return z;let J;if(typeof z==="number")J=z;else if(typeof z==="string"){if(J=z.trim(),J==="")return null;if(J.endsWith("n"))J=J.slice(0,-1);if(!/^[+-]?\d+$/.test(J))return null}if(J==null)return null;try{return BigInt(J)}catch{return null}},$5="T",kB=new RegExp(`[${$5} ]`),fB=new RegExp(`^\\d{4}-\\d{2}-\\d{2}(${$5}\\d{2}:\\d{2}:\\d{2}\\D?)?`);function x4(z,J){return z.toString().padStart(J,"0")}function o4(z,J=!0,Q=$5){if(!z)return null;let Z=[z.getFullYear(),z.getMonth()+1,z.getDate()].map(($)=>x4($,2)).join("-");if(J)Z+=Q+[z.getHours(),z.getMinutes(),z.getSeconds()].map(($)=>x4($,2)).join(":");return Z}function Ez(z,J=!0){if(!z)return null;if(J)return[String(z.getFullYear()),String(z.getMonth()+1),x4(z.getDate(),2),x4(z.getHours(),2),`:${x4(z.getMinutes(),2)}`,`:${x4(z.getSeconds(),2)}`];return[z.getFullYear(),z.getMonth()+1,x4(z.getDate(),2)].map(String)}var kQ=(z)=>{if(z>3&&z<21)return"th";switch(z%10){case 1:return"st";case 2:return"nd";case 3:return"rd"}return"th"},A2=["January","February","March","April","May","June","July","August","September","October","November","December"],fQ=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function SB(z,J){if(J==null)return o4(z,!1);let Q=x4(z.getFullYear(),4),Z={YYYY:()=>Q.slice(Q.length-4,Q.length),YY:()=>Q.slice(Q.length-2,Q.length),Y:()=>`${z.getFullYear()}`,MMMM:()=>A2[z.getMonth()],MMM:()=>A2[z.getMonth()].slice(0,3),MM:()=>x4(z.getMonth()+1,2),Mo:()=>`${z.getMonth()+1}${kQ(z.getMonth()+1)}`,M:()=>`${z.getMonth()+1}`,Do:()=>`${z.getDate()}${kQ(z.getDate())}`,DD:()=>x4(z.getDate(),2),D:()=>`${z.getDate()}`,dddd:()=>fQ[z.getDay()],ddd:()=>fQ[z.getDay()].slice(0,3),dd:()=>fQ[z.getDay()].slice(0,2),do:()=>`${z.getDay()}${kQ(z.getDay())}`,d:()=>`${z.getDay()}`},$=new RegExp(Object.keys(Z).join("|"),"g");return J.replace($,(X)=>{if(X in Z)return Z[X]();return X})}function V6(z,J=!1){return!!g0(z,J)}function VB(z){return V6(z,!0)}function g0(z,J=!1,Q){if(!z)return null;if(!Q&&!fB.test(z))return null;let[Z,$]=z.split(kB);if(!Z)return null;let X=Z.split("-").map((B)=>Number.parseInt(B,10));if(X.filter((B)=>!isNaN(B)).length!==3)return null;let[Y,q,G]=X,U=new Date(Y,q-1,G);if(U.getFullYear()!==Y||U.getMonth()!==q-1||U.getDate()!==G)return null;if(!$&&J)return null;if(!$||$==="00:00:00")return U;let[_,H,W]=$.split(":").map((B)=>Number.parseInt(B,10));if(_>=0&&_<24)U.setHours(_);else if(J)return null;if(H>=0&&H<60)U.setMinutes(H);else if(J)return null;if(W>=0&&W<60)U.setSeconds(W);else if(J)return null;return U}function B2(z,J){let Q=J.split("."),Z=z;for(let $=0;$null,suppressKeyboardEvent:({node:z,event:J,column:Q})=>J.key===k.SPACE&&Q.isCellEditable(z)}},date({formatValue:z}){return{cellEditor:"agDateCellEditor",keyCreator:z}},dateString({formatValue:z}){return{cellEditor:"agDateStringCellEditor",keyCreator:z}},dateTime(z){return this.date(z)},dateTimeString(z){return this.dateString(z)},object({formatValue:z,colModel:J,colId:Q}){return{cellEditorParams:{useFormatter:!0},comparator:(Z,$)=>{let X=J.getColDefCol(Q),Y=X?.colDef;if(!X||!Y)return 0;let q=Z==null?"":z({column:X,node:null,value:Z}),G=$==null?"":z({column:X,node:null,value:$});if(q===G)return 0;return q>G?1:-1},keyCreator:z}},text(){return{}}}}wireBeans(z){this.colModel=z.colModel}postConstruct(){this.processDataTypeDefinitions(),this.addManagedPropertyListener("dataTypeDefinitions",(z)=>{this.processDataTypeDefinitions(),this.colModel.recreateColumnDefs(z)})}processDataTypeDefinitions(){let z=this.getDefaultDataTypes(),J={},Q={},Z=(_)=>{return(H)=>{let{column:W,node:B,value:E}=H,K=W.getColDef().valueFormatter;if(K===_.groupSafeValueFormatter)K=_.valueFormatter;return this.beans.valueSvc.formatValue(W,B,E,K)}};for(let _ of Object.keys(z)){let H=z[_],W={...H,groupSafeValueFormatter:m7(H,this.gos)};J[_]=W,Q[_]=Z(W)}let $=this.gos.get("dataTypeDefinitions")??{},X={};for(let _ of Object.keys($)){let H=$[_],W=this.processDataTypeDefinition(H,$,[_],z);if(W){if(J[_]=W,H.dataTypeMatcher)X[_]=H.dataTypeMatcher;Q[_]=Z(W)}}let{valueParser:Y,valueFormatter:q}=z.object,{valueParser:G,valueFormatter:U}=J.object;this.hasObjectValueParser=G!==Y,this.hasObjectValueFormatter=U!==q,this.formatValueFuncs=Q,this.dataTypeDefinitions=J,this.dataTypeMatchers=this.sortKeysInMatchers(X,z)}sortKeysInMatchers(z,J){let Q={...z};for(let Z of RB)delete Q[Z],Q[Z]=z[Z]??J[Z].dataTypeMatcher;return Q}processDataTypeDefinition(z,J,Q,Z){let $,X=z.extendsDataType;if(z.columnTypes)this.isColumnTypeOverrideInDataTypeDefinitions=!0;if(z.extendsDataType===z.baseDataType){let Y=Z[X],q=J[X];if(Y&&q)Y=q;if(!u7(z,Y,X))return;$=h7(Y,z)}else{if(Q.includes(X)){V(44);return}let Y=J[X];if(!u7(z,Y,X))return;let q=this.processDataTypeDefinition(Y,J,[...Q,X],Z);if(!q)return;$=h7(q,z)}return{...$,groupSafeValueFormatter:m7($,this.gos)}}updateColDefAndGetColumnType(z,J,Q){let{cellDataType:Z}=J;if(Z===void 0)Z=z.cellDataType;let{field:$}=J;if(Z==null||Z===!0)Z=this.canInferCellDataType(z,J)?this.inferCellDataType($,Q):!1;if(this.addFormulaCellEditorToColDef(z,J),!Z){z.cellDataType=!1;return}let X=this.dataTypeDefinitions[Z];if(!X){V(47,{cellDataType:Z});return}if(z.cellDataType=Z,X.groupSafeValueFormatter)z.valueFormatter=X.groupSafeValueFormatter;if(X.valueParser)z.valueParser=X.valueParser;if(!X.suppressDefaultProperties)this.setColDefPropertiesForBaseDataType(z,Z,X,Q);return X.columnTypes}addFormulaCellEditorToColDef(z,J){if(!(J.allowFormula??z.allowFormula)||J.cellEditor)return;z.cellEditor="agFormulaCellEditor"}addColumnListeners(z){if(!this.isPendingInference)return;let J=this.columnStateUpdatesPendingInference[z.colId];if(!J)return;let Q=(Z)=>{J.add(Z.key)};z.__addEventListener("columnStateUpdated",Q),this.columnStateUpdateListenerDestroyFuncs.push(()=>z.__removeEventListener("columnStateUpdated",Q))}canInferCellDataType(z,J){let{gos:Q}=this;if(!o(Q))return!1;let Z={cellRenderer:!0,valueGetter:!0,valueParser:!0,refData:!0};if(SQ(J,Z))return!1;let $=J.type===null?z.type:J.type;if($){let X=Q.get("columnTypes")??{};if(x6($).some((q)=>{let G=X[q.trim()];return G&&SQ(G,Z)}))return!1}return!SQ(z,Z)}inferCellDataType(z,J){if(!z)return;let Q,Z=this.getInitialData();if(Z)Q=z.includes(".")&&!this.gos.get("suppressFieldDotNotation")?B2(Z,z):Z[z];else this.initWaitForRowData(J);if(Q==null)return;return Object.keys(this.dataTypeMatchers).find((X)=>this.dataTypeMatchers[X](Q))??"object"}getInitialData(){let z=this.gos.get("rowData");if(z?.length)return z[0];else if(this.initialData)return this.initialData;else{let J=this.beans.rowModel.rootNode?._leafs;if(J?.length)return J[0].data}return null}initWaitForRowData(z){if(this.columnStateUpdatesPendingInference[z]=new Set,this.isPendingInference)return;this.isPendingInference=!0;let J=this.isColumnTypeOverrideInDataTypeDefinitions,{colAutosize:Q,eventSvc:Z}=this.beans;if(J&&Q)Q.shouldQueueResizeOperations=!0;let[$]=this.addManagedEventListeners({rowDataUpdateStarted:(X)=>{let{firstRowData:Y}=X;if(!Y)return;if($?.(),this.isPendingInference=!1,this.processColumnsPendingInference(Y,J),this.columnStateUpdatesPendingInference={},J)Q?.processResizeOperations();Z.dispatchEvent({type:"dataTypesInferred"})}})}processColumnsPendingInference(z,J){this.initialData=z;let Q=[];this.destroyColumnStateUpdateListeners();let Z={},$={};for(let X of Object.keys(this.columnStateUpdatesPendingInference)){let Y=this.columnStateUpdatesPendingInference[X],q=this.colModel.getCol(X);if(!q)continue;let G=q.colDef;if(!this.resetColDefIntoCol(q,"cellDataTypeInferred"))continue;let U=q.colDef;if(J&&U.type&&U.type!==G.type){let _=IB(q,Y);if(_.rowGroup&&_.rowGroupIndex==null)Z[X]=_;if(_.pivot&&_.pivotIndex==null)$[X]=_;Q.push(_)}}if(J)Q.push(...this.generateColumnStateForRowGroupAndPivotIndexes(Z,$));if(Q.length)a0(this.beans,{state:Q},"cellDataTypeInferred");this.initialData=null}generateColumnStateForRowGroupAndPivotIndexes(z,J){let Q={},{rowGroupColsSvc:Z,pivotColsSvc:$}=this.beans;return Z?.restoreColumnOrder(Q,z),$?.restoreColumnOrder(Q,J),Object.values(Q)}resetColDefIntoCol(z,J){let Q=z.getUserProvidedColDef();if(!Q)return!1;let Z=e4(this.beans,Q,z.colId);return z.setColDef(Z,Q,J),!0}getDateStringTypeDefinition(z){let{dateString:J}=this.dataTypeDefinitions;if(!z)return J;return this.getDataTypeDefinition(z)??J}getDateParserFunction(z){return this.getDateStringTypeDefinition(z).dateParser}getDateFormatterFunction(z){return this.getDateStringTypeDefinition(z).dateFormatter}getDateIncludesTimeFlag(z){return z==="dateTime"||z==="dateTimeString"}getDataTypeDefinition(z){let J=z.colDef;if(!J.cellDataType)return;return this.dataTypeDefinitions[J.cellDataType]}getBaseDataType(z){return this.getDataTypeDefinition(z)?.baseDataType}checkType(z,J){if(J==null)return!0;let Q=this.getDataTypeDefinition(z)?.dataTypeMatcher;if(!Q)return!0;if(z.colDef.allowFormula&&this.beans.formula?.isFormula(J))return!0;return Q(J)}validateColDef(z,J,Q,Z){if(z.cellDataType==="object"){let $=(G)=>{return G?.cellDataType==null||G?.cellDataType===!0},X=$(J)&&$(Q),Y=(G)=>V(48,{property:G,inferred:X,colId:Z}),{object:q}=this.dataTypeDefinitions;if(z.valueFormatter===q.groupSafeValueFormatter&&!this.hasObjectValueFormatter)Y("Formatter");if(z.editable&&z.valueParser===q.valueParser&&!this.hasObjectValueParser)Y("Parser")}}postProcess(z){let J=z.cellDataType;if(!J||typeof J!=="string")return;let{dataTypeDefinitions:Q,beans:Z,formatValueFuncs:$}=this,X=Q[J];if(!X)return;Z.colFilter?.setColDefPropsForDataType(z,X,$[J])}getFormatValue(z){return this.formatValueFuncs[z]}isColPendingInference(z){return this.isPendingInference&&!!this.columnStateUpdatesPendingInference[z]}setColDefPropertiesForBaseDataType(z,J,Q,Z){let $=this.formatValueFuncs[J],X=this.columnDefinitionPropsPerDataType[Q.baseDataType]({colDef:z,cellDataType:J,colModel:this.colModel,dataTypeDefinition:Q,colId:Z,formatValue:$,filterModuleBean:this.beans.filterManager});if(z.cellEditor==="agFormulaCellEditor"&&X.cellEditor!==z.cellEditor)X.cellEditor=z.cellEditor;Object.assign(z,X)}getDateObjectTypeDef(z){let J=this.getLocaleTextFunc(),Q=this.getDateIncludesTimeFlag(z);return{baseDataType:z,valueParser:(Z)=>g0(Z.newValue&&String(Z.newValue)),valueFormatter:(Z)=>{if(Z.value==null)return"";if(!(Z.value instanceof Date)||isNaN(Z.value.getTime()))return J("invalidDate","Invalid Date");return o4(Z.value,Q)??""},dataTypeMatcher:(Z)=>Z instanceof Date}}getDateStringTypeDef(z){let J=this.getDateIncludesTimeFlag(z);return{baseDataType:z,dateParser:(Q)=>g0(Q)??void 0,dateFormatter:(Q)=>o4(Q??null,J)??void 0,valueParser:(Q)=>V6(String(Q.newValue))?Q.newValue:null,valueFormatter:(Q)=>V6(String(Q.value))?String(Q.value):"",dataTypeMatcher:(Q)=>typeof Q==="string"&&V6(Q)}}getDefaultDataTypes(){let z=this.getLocaleTextFunc();return{number:{baseDataType:"number",valueParser:(J)=>J.newValue?.trim?.()===""?null:Number(J.newValue),valueFormatter:(J)=>{if(J.value==null)return"";if(typeof J.value!=="number"||isNaN(J.value))return z("invalidNumber","Invalid Number");return String(J.value)},dataTypeMatcher:(J)=>typeof J==="number"},bigint:{baseDataType:"bigint",valueParser:(J)=>{let{newValue:Q}=J;if(Q==null)return null;if(typeof Q==="string"&&Q.trim()==="")return null;return Sz(Q)},valueFormatter:(J)=>{if(J.value==null)return"";if(typeof J.value!=="bigint")return z("invalidBigInt","Invalid BigInt");return String(J.value)},dataTypeMatcher:(J)=>typeof J==="bigint"},text:{baseDataType:"text",valueParser:(J)=>J.newValue===""?null:p0(J.newValue),dataTypeMatcher:(J)=>typeof J==="string"},boolean:{baseDataType:"boolean",valueParser:(J)=>{if(J.newValue==null)return J.newValue;return J.newValue?.trim?.()===""?null:String(J.newValue).toLowerCase()==="true"},valueFormatter:(J)=>J.value==null?"":String(J.value),dataTypeMatcher:(J)=>typeof J==="boolean"},date:this.getDateObjectTypeDef("date"),dateString:this.getDateStringTypeDef("dateString"),dateTime:this.getDateObjectTypeDef("dateTime"),dateTimeString:{...this.getDateStringTypeDef("dateTimeString"),dataTypeMatcher:(J)=>typeof J==="string"&&VB(J)},object:{baseDataType:"object",valueParser:()=>null,valueFormatter:(J)=>p0(J.value)??""}}}destroyColumnStateUpdateListeners(){for(let z of this.columnStateUpdateListenerDestroyFuncs)z();this.columnStateUpdateListenerDestroyFuncs=[]}destroy(){this.dataTypeDefinitions={},this.dataTypeMatchers={},this.formatValueFuncs={},this.columnStateUpdatesPendingInference={},this.destroyColumnStateUpdateListeners(),super.destroy()}};function h7(z,J){let Q={...z,...J};if(z.columnTypes&&J.columnTypes&&J.appendColumnTypes)Q.columnTypes=[...x6(z.columnTypes),...x6(J.columnTypes)];return Q}function u7(z,J,Q){if(!J)return V(45,{parentCellDataType:Q}),!1;if(J.baseDataType!==z.baseDataType)return V(46),!1;return!0}var jB=(z)=>typeof z==="bigint"||typeof z==="number",OB=(z)=>z==="number"||z==="bigint";function m7(z,J){if(!z.valueFormatter)return;return(Q)=>{let{node:Z,colDef:$,column:X,value:Y}=Q;if(Z?.group){let q=($.pivotValueColumn??X).getAggFunc();if(q){if(q==="first"||q==="last")return z.valueFormatter(Q);let{baseDataType:G}=z;if(OB(G)&&q!=="count"){if(jB(Y))return z.valueFormatter(Q);if(Y==null)return;if(typeof Y==="object"){if(typeof Y.toNumber==="function")return z.valueFormatter({...Q,value:Y.toNumber()});if("value"in Y)return z.valueFormatter({...Q,value:Y.value})}}return}}else if(J.get("groupHideOpenParents")&&Q.column.isRowGroupActive()){if(typeof Q.value==="string"&&!z.dataTypeMatcher?.(Q.value))return}return z.valueFormatter(Q)}}function PB(z,J,Q,Z){if(!J[Q])return!1;let $=z[Q];if($===null)return J[Q]=!1,!1;else return Z===void 0?!!$:$===Z}function TB(z,J){if(z==null)return J==null?0:-1;if(J==null)return 1;let Q=Sz(z),Z=Sz(J);if(Q!=null&&Z!=null){if(Q===Z)return 0;return Q>Z?1:-1}return 0}function vB(z,J){if(z==null)return J==null?0:-1;if(J==null)return 1;let Q=c7(z),Z=c7(J);if(Q!=null&&Z!=null){if(Q===Z)return 0;return Q>Z?1:-1}return 0}function c7(z){let J=Sz(z);if(J==null)return null;return J<0n?-J:J}function SQ(z,J){return[["cellRenderer","agSparklineCellRenderer"],["valueGetter",void 0],["valueParser",void 0],["refData",void 0]].some(([Q,Z])=>PB(z,J,Q,Z))}function IB(z,J){let Q=b$(z);for(let Z of J)if(delete Q[Z],Z==="rowGroup")delete Q.rowGroupIndex;else if(Z==="pivot")delete Q.pivotIndex;return Q}var CB={moduleName:"DataType",version:i,beans:[AB],dependsOn:[LB]},yB={moduleName:"ColumnFlex",version:i,beans:[MB]};var bB=class extends S{constructor(){super(...arguments);this.beanName="colNames"}getDisplayNameForColumn(z,J,Q=!1){if(!z)return null;let Z=this.getHeaderName(z.getColDef(),z,null,null,J),{aggColNameSvc:$}=this.beans;if(Q&&$)return $.getHeaderName(z,Z);return Z}getDisplayNameForProvidedColumnGroup(z,J,Q){let Z=J?.getColGroupDef();if(Z)return this.getHeaderName(Z,null,z,J,Q);return null}getDisplayNameForColumnGroup(z,J){return this.getDisplayNameForProvidedColumnGroup(z,z.getProvidedColumnGroup(),J)}getHeaderName(z,J,Q,Z,$){let X=z.headerValueGetter;if(X){let Y=C(this.gos,{colDef:z,column:J,columnGroup:Q,providedColumnGroup:Z,location:$});if(typeof X==="function")return X(Y);else if(typeof X==="string")return this.beans.expressionSvc?.evaluate(X,Y)??null;return""}else if(z.headerName!=null)return z.headerName;else if(z.field)return HG(z.field);return""}},xB=class extends S{constructor(){super(...arguments);this.beanName="colViewport",this.colsWithinViewport=[],this.headerColsWithinViewport=[],this.colsWithinViewportHash="",this.rowsOfHeadersToRenderLeft={},this.rowsOfHeadersToRenderRight={},this.rowsOfHeadersToRenderCenter={},this.columnsToRenderLeft=[],this.columnsToRenderRight=[],this.columnsToRenderCenter=[]}wireBeans(z){this.visibleCols=z.visibleCols,this.colModel=z.colModel}postConstruct(){this.suppressColumnVirtualisation=this.gos.get("suppressColumnVirtualisation")}getScrollPosition(){return this.scrollPosition}setScrollPosition(z,J,Q=!1){let{visibleCols:Z}=this,$=Z.isBodyWidthDirty;if(z===this.scrollWidth&&J===this.scrollPosition&&!$)return;if(this.scrollWidth=z,this.scrollPosition=J,Z.isBodyWidthDirty=!0,this.gos.get("enableRtl")){let Y=Z.bodyWidth;this.viewportLeft=Y-J-z,this.viewportRight=Y-J}else this.viewportLeft=J,this.viewportRight=z+J;if(this.colModel.ready)this.checkViewportColumns(Q)}getColumnHeadersToRender(z){switch(z){case"left":return this.columnsToRenderLeft;case"right":return this.columnsToRenderRight;default:return this.columnsToRenderCenter}}getHeadersToRender(z,J){let Q;switch(z){case"left":Q=this.rowsOfHeadersToRenderLeft[J];break;case"right":Q=this.rowsOfHeadersToRenderRight[J];break;default:Q=this.rowsOfHeadersToRenderCenter[J];break}return Q??[]}extractViewportColumns(){let z=this.visibleCols.centerCols;if(this.isColumnVirtualisationSuppressed())this.colsWithinViewport=z,this.headerColsWithinViewport=z;else this.colsWithinViewport=z.filter(this.isColumnInRowViewport.bind(this)),this.headerColsWithinViewport=z.filter(this.isColumnInHeaderViewport.bind(this))}isColumnVirtualisationSuppressed(){return this.suppressColumnVirtualisation||this.viewportRight===0}clear(){this.rowsOfHeadersToRenderLeft={},this.rowsOfHeadersToRenderRight={},this.rowsOfHeadersToRenderCenter={},this.colsWithinViewportHash=""}isColumnInHeaderViewport(z){if(z.isAutoHeaderHeight()||wB(z))return!0;return this.isColumnInRowViewport(z)}isColumnInRowViewport(z){if(z.isAutoHeight())return!0;let J=z.getLeft()||0,Q=J+z.getActualWidth(),Z=this.viewportLeft-200,$=this.viewportRight+200,X=J$&&Q>$;return!X&&!Y}getViewportColumns(){let{leftCols:z,rightCols:J}=this.visibleCols;return this.colsWithinViewport.concat(z).concat(J)}getColsWithinViewport(z){if(!this.colModel.colSpanActive)return this.colsWithinViewport;let J=(X)=>{let Y=X.getLeft();return P(Y)&&Y>this.viewportLeft},Q=this.isColumnVirtualisationSuppressed()?void 0:this.isColumnInRowViewport.bind(this),{visibleCols:Z}=this,$=Z.centerCols;return Z.getColsForRow(z,$,Q,J)}checkViewportColumns(z=!1){if(this.extractViewport())this.eventSvc.dispatchEvent({type:"virtualColumnsChanged",afterScroll:z})}calculateHeaderRows(){let{leftCols:z,rightCols:J}=this.visibleCols;this.columnsToRenderLeft=z,this.columnsToRenderRight=J,this.columnsToRenderCenter=this.colsWithinViewport;let Q=(Z)=>{let $=new Set,X={};for(let Y of Z){let q=Y.parent,G=Y.isSpanHeaderHeight();while(q){if($.has(q))break;if(G&&q.isPadding()){q=q.parent;continue}let _=q.getProvidedColumnGroup().getLevel();X[_]??(X[_]=[]),X[_].push(q),$.add(q),q=q.parent}}return X};this.rowsOfHeadersToRenderLeft=Q(z),this.rowsOfHeadersToRenderRight=Q(J),this.rowsOfHeadersToRenderCenter=Q(this.headerColsWithinViewport)}extractViewport(){let z=(Z)=>`${Z.getId()}-${Z.getPinned()||"normal"}`;this.extractViewportColumns();let J=this.getViewportColumns().map(z).join("#"),Q=this.colsWithinViewportHash!==J;if(Q)this.colsWithinViewportHash=J,this.calculateHeaderRows();return Q}};function wB(z){while(z){if(z.isAutoHeaderHeight())return!0;z=z.parent}return!1}var NB=class extends S{constructor(){super(...arguments);this.beanName="agCompUtils"}adaptFunction(z,J){if(!z.cellRenderer)return null;class Q{refresh(){return!1}getGui(){return this.eGui}init(Z){let $=J(Z),X=typeof $;if(X==="string"||X==="number"||X==="boolean"){this.eGui=KZ(""+$+"");return}if($==null){this.eGui=z0({tag:"span"});return}this.eGui=$}}return Q}},gB={moduleName:"CellRendererFunction",version:i,beans:[NB]},hB=class extends k0{constructor(){super(...arguments);this.beanName="registry"}registerDynamicBeans(z){if(z){this.dynamicBeans??(this.dynamicBeans={});for(let J of Object.keys(z))this.dynamicBeans[J]=z[J]}}createDynamicBean(z,J,...Q){if(!this.dynamicBeans)throw Error(this.getDynamicError(z,!0));let Z=this.dynamicBeans[z];if(Z==null){if(J)throw Error(this.getDynamicError(z,!1));return}return new Z(...Q)}};function uB(z){return typeof z==="object"&&!!z.getComp}var mB=class extends hB{constructor(){super(...arguments);this.agGridDefaults={},this.agGridDefaultOverrides={},this.jsComps={},this.selectors={},this.icons={}}postConstruct(){let z=this.gos.get("components");if(z!=null)for(let J of Object.keys(z))this.jsComps[J]=z[J]}registerModule(z){let{icons:J,userComponents:Q,dynamicBeans:Z,selectors:$}=z;if(Q){let X=(Y,q,G,U)=>{if(this.agGridDefaults[Y]=q,G||U)this.agGridDefaultOverrides[Y]={params:G,processParams:U}};for(let Y of Object.keys(Q)){let q=Q[Y];if(uB(q))q=q.getComp(this.beans);if(typeof q==="object"){let{classImp:G,params:U,processParams:_}=q;X(Y,G,U,_)}else X(Y,q)}}this.registerDynamicBeans(Z);for(let X of $??[])this.selectors[X.selector]=X;if(J)for(let X of Object.keys(J))this.icons[X]=J[X]}getUserComponent(z,J){let Q=(q,G,U,_)=>({componentFromFramework:G,component:q,params:U,processParams:_}),{frameworkOverrides:Z}=this.beans,$=Z.frameworkComponent(J,this.gos.get("components"));if($!=null)return Q($,!0);let X=this.jsComps[J];if(X){let q=Z.isFrameworkComponent(X);return Q(X,q)}let Y=this.agGridDefaults[J];if(Y){let q=this.agGridDefaultOverrides[J];return Q(Y,!1,q?.params,q?.processParams)}return this.beans.validation?.missingUserComponent(z,J,this.agGridDefaults,this.jsComps),null}getSelector(z){return this.selectors[z]}getIcon(z){return this.icons[z]}getDynamicError(z,J){if(J)return Y4(279,{name:z});return this.beans.validation?.missingDynamicBean(z)??Y4(256)}},cB=23,iB=class extends S{constructor(){super(...arguments);this.beanName="ctrlsSvc",this.params={},this.ready=!1,this.readyCallbacks=[]}postConstruct(){this.addEventListener("ready",()=>{if(this.updateReady(),this.ready){for(let z of this.readyCallbacks)z(this.params);this.readyCallbacks.length=0}},this.beans.frameworkOverrides.runWhenReadyAsync?.()??!1)}updateReady(){let z=Object.values(this.params);this.ready=z.length===cB&&z.every((J)=>{return J?.isAlive()??!1})}whenReady(z,J){if(this.ready)J(this.params);else this.readyCallbacks.push(J);z.addDestroyFunc(()=>{let Q=this.readyCallbacks.indexOf(J);if(Q>=0)this.readyCallbacks.splice(Q,1)})}register(z,J){if(this.params[z]=J,this.updateReady(),this.ready)this.dispatchLocalEvent({type:"ready"});J.addDestroyFunc(()=>{this.updateReady()})}get(z){return this.params[z]}getGridBodyCtrl(){return this.params.gridBodyCtrl}getHeaderRowContainerCtrls(){let{leftHeader:z,centerHeader:J,rightHeader:Q}=this.params;return[z,Q,J]}getHeaderRowContainerCtrl(z){let J=this.params;switch(z){case"left":return J.leftHeader;case"right":return J.rightHeader;default:return J.centerHeader}}getScrollFeature(){return this.getGridBodyCtrl().scrollFeature}},pB=':where([class^=ag-]),:where([class^=ag-]):after,:where([class^=ag-]):before{box-sizing:border-box}:where([class^=ag-]):where(button){color:inherit}:where([class^=ag-]):where(div,span,label):focus-visible{box-shadow:inset var(--ag-focus-shadow);outline:none;&:where(.invalid){box-shadow:inset var(--ag-focus-error-shadow)}}:where([class^=ag-]) ::-ms-clear{display:none}.ag-hidden{display:none!important}.ag-invisible{visibility:hidden!important}.ag-tab-guard{display:block;height:0;position:absolute;width:0}.ag-tab-guard-top{top:1px}.ag-tab-guard-bottom{bottom:1px}.ag-measurement-container{height:0;overflow:hidden;visibility:hidden;width:0}.ag-measurement-element-border{display:inline-block}.ag-measurement-element-border:before{border-left:var(--ag-internal-measurement-border);content:"";display:block}.ag-popup-child{top:0;z-index:5}.ag-popup-child:where(:not(.ag-tooltip-custom)){box-shadow:var(--ag-popup-shadow)}.ag-input-wrapper,.ag-picker-field-wrapper{align-items:center;display:flex;flex:1 1 auto;line-height:normal;position:relative}.ag-input-field{align-items:center;display:flex;flex-direction:row}.ag-input-field-input:where(:not([type=checkbox],[type=radio])){flex:1 1 auto;min-width:0;width:100%}.ag-chart,.ag-dnd-ghost,.ag-external,.ag-popup,.ag-root-wrapper{cursor:default;line-height:normal;white-space:normal;-webkit-font-smoothing:antialiased;background-color:var(--ag-wrapper-background-color);color:var(--ag-text-color);color-scheme:var(--ag-browser-color-scheme);font-family:var(--ag-font-family);font-size:var(--ag-font-size);font-weight:var(--ag-font-weight);--ag-indentation-level:0}:where(.ag-icon):before{align-items:center;background-color:currentcolor;color:inherit;content:"";display:flex;font-family:inherit;font-size:var(--ag-icon-size);font-style:normal;font-variant:normal;height:var(--ag-icon-size);justify-content:center;line-height:var(--ag-icon-size);-webkit-mask-size:contain;mask-size:contain;text-transform:none;width:var(--ag-icon-size)}.ag-icon{background-position:50%;background-repeat:no-repeat;background-size:contain;color:var(--ag-icon-color);display:block;height:var(--ag-icon-size);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--ag-icon-size)}.ag-disabled .ag-icon,[disabled] .ag-icon{opacity:.5}.ag-icon-grip.ag-disabled,.ag-icon-grip[disabled]{opacity:.35}.ag-icon-loading{animation-duration:1s;animation-iteration-count:infinite;animation-name:spin;animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ag-resizer{pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:1}:where(.ag-resizer){&.ag-resizer-topLeft{cursor:nwse-resize;height:5px;left:0;top:0;width:5px}&.ag-resizer-top{cursor:ns-resize;height:5px;left:5px;right:5px;top:0}&.ag-resizer-topRight{cursor:nesw-resize;height:5px;right:0;top:0;width:5px}&.ag-resizer-right{bottom:5px;cursor:ew-resize;right:0;top:5px;width:5px}&.ag-resizer-bottomRight{bottom:0;cursor:nwse-resize;height:5px;right:0;width:5px}&.ag-resizer-bottom{bottom:0;cursor:ns-resize;height:5px;left:5px;right:5px}&.ag-resizer-bottomLeft{bottom:0;cursor:nesw-resize;height:5px;left:0;width:5px}&.ag-resizer-left{bottom:5px;cursor:ew-resize;left:0;top:5px;width:5px}}.ag-menu{background-color:var(--ag-menu-background-color);border:var(--ag-menu-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-menu-shadow);color:var(--ag-menu-text-color);max-height:100%;overflow-y:auto;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}',X5=typeof window!=="object"||!window?.document?.fonts?.forEach,m6=!1,ez=(z,J,Q,Z,$,X,Y=!1)=>{if(X5||m6)return;let q=z;if(Z)q=`@layer ${CSS.escape(Z).replaceAll("\\.",".")} { ${z} }`;let G=w4.map.get(J);if(!G)G=[],w4.map.set(J,G);if(G.some((W)=>W.injectedCss===q))return;let U=document.createElement("style");if(X)U.setAttribute("nonce",X);U.dataset.agCss=Q,U.dataset.agCssVersion=i,U.textContent=q;let _={rawCss:z,injectedCss:q,el:U,priority:$,isParams:Y},H;for(let W of G){if(W.priority>$)break;H=W}if(H){H.el.after(U);let W=G.indexOf(H);G.splice(W+1,0,_)}else{if(J.nodeName==="STYLE")J.after(U);else J.insertBefore(U,J.querySelector(":not(title, meta)"));G.push(_)}},w$=(z,J,Q,Z)=>{ez(pB,z,"shared",J,0,Q),Z?.forEach(($,X)=>$.forEach((Y)=>ez(Y,z,X,J,0,Q)))},nB=(z,J,Q,Z,$,X)=>{if(X5||m6)return;let Y=w4.grids.get(z);if(!Y)w4.grids.set(z,{styleContainer:Z,paramsCss:J});else Y.paramsCss=J;if(rQ(Z),J&&Q)ez(J,Z,Q,$,2,X,!0)},dB=(z)=>{let J=w4.grids.get(z)?.styleContainer;if(!J)return;if(w4.grids.delete(z),Array.from(w4.grids.values()).some((Z)=>Z.styleContainer===J))rQ(J);else rQ(J,!0),w4.map.delete(J)},rQ=(z,J=!1)=>{let Q=new Set;for(let $ of w4.grids.values())if($.styleContainer===z)Q.add($.paramsCss);let Z=w4.map.get(z)??[];for(let $=Z.length-1;$>=0;$--)if(J||Z[$].isParams&&!Q.has(Z[$].rawCss))Z[$].el.remove(),Z.splice($,1)},N$=()=>{let z=globalThis.agStyleInjectionVersions??(globalThis.agStyleInjectionVersions=new Map),J=z.get(i);if(!J)J={map:new WeakMap,grids:new Map,paramsId:0},z.set(i,J);return J},w4=N$(),H4=(z)=>{return new g$(z)},Wz="$default",rB=0,g$=class{constructor({feature:z,params:J,modeParams:Q={},css:Z,cssImports:$}){this.feature=z,this.css=Z,this.cssImports=$,this.modeParams={[Wz]:{...Q[Wz]??{},...J??{}},...Q}}use(z,J,Q){let Z=this._inject;if(Z==null){let{css:$}=this;if($){let X=`ag-theme-${this.feature??"part"}-${++rB}`;if(typeof $==="function")$=$();$=`:where(.${X}) { +${$} +} +`;for(let Y of this.cssImports??[])$=`@import url(${JSON.stringify(Y)}); +${$}`;Z={css:$,class:X}}else Z=!1;this._inject=Z}if(Z&&z)ez(Z.css,z,Z.class,J,1,Q);return Z?Z.class:!1}},tB=(z)=>z.replace(/[A-Z]|\d+/g,(J)=>`-${J}`).toLowerCase(),Y5=(z)=>`--ag-${tB(z)}`,m4=(z)=>`var(${Y5(z)})`,sB=(z,J,Q)=>Math.max(J,Math.min(Q,z)),lB=(z)=>{let J=new Map;return(Q)=>{let Z=Q;if(!J.has(Z))J.set(Z,z(Q));return J.get(Z)}},I4=(z)=>({ref:"accentColor",mix:z}),J4=(z)=>({ref:"foregroundColor",mix:z}),$4=(z)=>({ref:"foregroundColor",mix:z,onto:"backgroundColor"}),aB=(z)=>({ref:"foregroundColor",mix:z,onto:"headerBackgroundColor"}),x0={ref:"backgroundColor"},pz={ref:"foregroundColor"},C4={ref:"accentColor"},c6={backgroundColor:"#fff",foregroundColor:"#181d1f",borderColor:J4(0.15),chromeBackgroundColor:$4(0.02),browserColorScheme:"light"},h$=()=>["-apple-system","BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue","sans-serif"],oB={...c6,textColor:pz,accentColor:"#2196f3",invalidColor:"#e02525",fontFamily:h$(),subtleTextColor:{ref:"textColor",mix:0.5},borderWidth:1,borderRadius:4,spacing:8,fontSize:14,fontWeight:"inherit",focusShadow:{spread:3,color:I4(0.5)},focusErrorShadow:{spread:3,color:{ref:"invalidColor",onto:"backgroundColor",mix:0.5}},popupShadow:"0 0 16px #00000026",cardShadow:"0 1px 4px 1px #00000018",dropdownShadow:{ref:"cardShadow"},listItemHeight:{calc:"max(iconSize, dataFontSize) + widgetVerticalSpacing"},dragAndDropImageBackgroundColor:x0,dragAndDropImageBorder:!0,dragAndDropImageNotAllowedBorder:{color:{ref:"invalidColor",onto:"dragAndDropImageBackgroundColor",mix:0.5}},dragAndDropImageShadow:{ref:"popupShadow"},iconSize:16,iconColor:"inherit",toggleButtonWidth:28,toggleButtonHeight:18,toggleButtonOnBackgroundColor:C4,toggleButtonOffBackgroundColor:$4(0.3),toggleButtonSwitchBackgroundColor:x0,toggleButtonSwitchInset:2,tooltipBackgroundColor:{ref:"chromeBackgroundColor"},tooltipErrorBackgroundColor:{ref:"invalidColor",onto:"backgroundColor",mix:0.1},tooltipTextColor:{ref:"textColor"},tooltipErrorTextColor:{ref:"invalidColor"},tooltipBorder:!0,tooltipErrorBorder:{color:{ref:"invalidColor",onto:"backgroundColor",mix:0.25}},panelBackgroundColor:x0,panelTitleBarHeight:{ref:"headerHeight"},panelTitleBarBackgroundColor:{ref:"headerBackgroundColor"},panelTitleBarIconColor:{ref:"headerTextColor"},panelTitleBarTextColor:{ref:"headerTextColor"},panelTitleBarFontFamily:{ref:"headerFontFamily"},panelTitleBarFontSize:{ref:"headerFontSize"},panelTitleBarFontWeight:{ref:"headerFontWeight"},panelTitleBarBorder:!0,dialogShadow:{ref:"popupShadow"},dialogBorder:{color:J4(0.2)},widgetContainerHorizontalPadding:{calc:"spacing * 1.5"},widgetContainerVerticalPadding:{calc:"spacing * 1.5"},widgetHorizontalSpacing:{calc:"spacing * 1.5"},widgetVerticalSpacing:{ref:"spacing"},dataFontSize:{ref:"fontSize"},headerBackgroundColor:{ref:"chromeBackgroundColor"},headerFontFamily:{ref:"fontFamily"},headerFontSize:{ref:"fontSize"},headerFontWeight:500,headerTextColor:{ref:"textColor"},headerHeight:{calc:"max(iconSize, dataFontSize) + spacing * 4 * headerVerticalPaddingScale"},headerVerticalPaddingScale:1,menuBorder:{color:J4(0.2)},menuBackgroundColor:$4(0.03),menuTextColor:$4(0.95),menuShadow:{ref:"popupShadow"},menuSeparatorColor:{ref:"borderColor"}},eB=["colorScheme","color","length","scale","borderStyle","border","shadow","image","fontFamily","fontWeight","duration"],zE=lB((z)=>{return z=z.toLowerCase(),eB.find((J)=>z.endsWith(J.toLowerCase()))??"length"}),LJ=(z)=>{if(typeof z==="object"&&z?.ref)return m4(z.ref);if(typeof z==="string")return z;if(typeof z==="number")return String(z);return!1},q5=(z)=>{if(typeof z==="string")return z;if(typeof z==="object"&&z&&"ref"in z){let J=m4(z.ref);if(z.mix==null)return J;return`color-mix(in srgb, ${z.onto?m4(z.onto):"transparent"}, ${J} ${sB(z.mix*100,0,100)}%)`}return!1},JE=LJ,R1=(z)=>{if(typeof z==="string")return z;if(typeof z==="number")return`${z}px`;if(typeof z==="object"&&z&&"calc"in z)return`calc(${z.calc.replace(/ ?[*/+] ?/g," $& ").replace(/-?\b[a-z][a-z0-9]*\b(?![-(])/gi,(Q)=>Q[0]==="-"?Q:" "+m4(Q)+" ")})`;if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);return!1},QE=LJ,tQ=(z,J)=>{if(typeof z==="string")return z;if(z===!0)return tQ({},J);if(z===!1)return J==="columnBorder"?tQ({color:"transparent"},J):"none";if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);return u$(z.style??"solid")+" "+R1(z.width??{ref:"borderWidth"})+" "+q5(z.color??{ref:"borderColor"})},i7=(z)=>{return[R1(z.offsetX??0),R1(z.offsetY??0),R1(z.radius??0),R1(z.spread??0),q5(z.color??{ref:"foregroundColor"}),...z.inset?["inset"]:[]].join(" ")},ZE=(z)=>{if(typeof z==="string")return z;if(z===!1)return"none";if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);if(Array.isArray(z))return z.map(i7).join(", ");return i7(z)},u$=LJ,m$=(z)=>{if(typeof z==="string")return z.includes(",")?z:p7(z);if(typeof z==="object"&&z&&"googleFont"in z)return m$(z.googleFont);if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);if(Array.isArray(z))return z.map((J)=>{if(typeof J==="object"&&"googleFont"in J)J=J.googleFont;return p7(J)}).join(", ");return!1},p7=(z)=>/^[\w-]+$|\w\(/.test(z)?z:JSON.stringify(z),$E=LJ,c$=(z)=>{if(typeof z==="string")return z;if(typeof z==="object"&&z&&"url"in z)return`url(${JSON.stringify(z.url)})`;if(typeof z==="object"&&z&&"svg"in z)return c$({url:`data:image/svg+xml,${encodeURIComponent(z.svg)}`});if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);return!1},XE=(z,J,Q)=>{if(typeof z==="string")return z;if(typeof z==="number"){if(z>=10)Q?.warn(104,{value:z,param:J});return`${z}s`}if(typeof z==="object"&&z&&"ref"in z)return m4(z.ref);return!1},YE={color:q5,colorScheme:JE,length:R1,scale:QE,border:tQ,borderStyle:u$,shadow:ZE,image:c$,fontFamily:m$,fontWeight:$E,duration:XE},qE=(z,J,Q)=>{let Z=zE(z);return YE[Z](J,z,Q)};var GE=(z,J)=>new i$({themeLogger:z,overridePrefix:J}),i$=class z{constructor(J,Q=[]){this.params=J,this.parts=Q}withPart(J){if(typeof J==="function")J=J();if(!(J instanceof g$))return this.params.themeLogger.preInitErr(259,"Invalid part",{part:J}),this;return new z(this.params,[...this.parts,J])}withoutPart(J){return this.withPart(H4({feature:J}))}withParams(J,Q=Wz){return this.withPart(H4({modeParams:{[Q]:J}}))}_startUse({styleContainer:J,cssLayer:Q,nonce:Z,loadThemeGoogleFonts:$,moduleCss:X}){if(X5)return;if(m6)return;_E(),w$(J,Q,Z,X);let Y=UE(this);if(Y.length>0){for(let q of Y)if($)HE(q,Z)}for(let q of this.parts)q.use(J,Q,Z)}_getCssClass(){if(m6)return"ag-theme-quartz";return this._cssClassCache??(this._cssClassCache=n7(this.parts).map((J)=>J.use(void 0,void 0,void 0)).filter(Boolean).concat(this._getParamsClassName()).join(" "))}_getParamsClassName(){return this._paramsClassName??(this._paramsClassName=`ag-theme-params-${++N$().paramsId}`)}_getModeParams(){let J=this._paramsCache;if(!J){let Q={[Wz]:{...oB}};for(let Z of n7(this.parts))for(let $ of Object.keys(Z.modeParams)){let X=Z.modeParams[$];if(X){let Y=Q[$]??(Q[$]={}),q=new Set;for(let G of Object.keys(X)){let U=X[G];if(U!==void 0)Y[G]=U,q.add(G)}if($===Wz)for(let G of Object.keys(Q)){let U=Q[G];if(G!==Wz)for(let _ of q)delete U[_]}}}this._paramsCache=J=Q}return J}_getParamsCss(){if(!this._paramsCssCache){let J="",Q="",Z=this._getModeParams(),{overridePrefix:$,themeLogger:X}=this.params,Y=$?`--ag-${$}-`:void 0;for(let U of Object.keys(Z)){let _=Z[U];if(U!==Wz){let W=`:where([data-ag-theme-mode="${typeof CSS==="object"?CSS.escape(U):U}"]) & { +`;J+=W,Q+=W}for(let H of Object.keys(_).sort()){let W=_[H],B=qE(H,W,X);if(B===!1)X.error(107,{key:H,value:W});else{let E=Y5(H),K=Y?E.replace("--ag-",Y):E,F=E.replace("--ag-","--ag-inherited-");J+=` ${E}: var(${F}, ${B}); +`,Q+=` ${F}: var(${K}); +`}}if(U!==Wz)J+=`} +`,Q+=`} +`}let q=`:where(.${this._getParamsClassName()})`,G=`${q} { +${J}} +`;G+=`:has(> ${q}):not(${q}) { +${Q}} +`,this._paramsCssCache=G}return this._paramsCssCache}},n7=(z)=>{let J=new Map;for(let Z of z)J.set(Z.feature,Z);let Q=[];for(let Z of z)if(!Z.feature||J.get(Z.feature)===Z)Q.push(Z);return Q},UE=(z)=>{let J=new Set,Q=(X)=>{if(Array.isArray(X))X.forEach(Q);else{let Y=X?.googleFont;if(typeof Y==="string")J.add(Y)}};return Object.values(z._getModeParams()).flatMap((X)=>Object.values(X)).forEach(Q),Array.from(J).sort()},d7=!1,_E=()=>{if(d7)return;d7=!0;for(let z of Array.from(document.head.querySelectorAll('style[data-ag-scope="legacy"]')))z.remove()},HE=async(z,J)=>{let Q=`@import url('https://${WE}/css2?family=${encodeURIComponent(z)}:wght@100;200;300;400;500;600;700;800;900&display=swap'); +`;ez(Q,document.head,`googleFont:${z}`,void 0,0,J)},WE="fonts.googleapis.com",r7={changeKey:"listItemHeight",type:"length",defaultValue:24},BE=class extends k0{constructor(){super(...arguments);this.beanName="environment",this.sizeEls=new Map,this.lastKnownValues=new Map,this.sizesMeasured=!1,this.globalCSS=[]}wireBeans(z){this.eRootDiv=z.eRootDiv}postConstruct(){let{gos:z,eRootDiv:J}=this;z.setInstanceDomData(J);let Q=z.get("themeStyleContainer"),Z=typeof ShadowRoot<"u",$=Z&&J.getRootNode()instanceof ShadowRoot;if(this.eStyleContainer=(typeof Q==="function"?Q():Q)??($?J:document.head),!Q&&!$&&Z)EE(J,this.shadowRootError.bind(this),this.addDestroyFunc.bind(this));this.cssLayer=z.get("themeCssLayer"),this.styleNonce=z.get("styleNonce"),this.addManagedPropertyListener("theme",()=>this.handleThemeChange()),this.handleThemeChange(),this.getSizeEl(r7),this.initVariables(),this.addDestroyFunc(()=>dB(this)),this.mutationObserver=new MutationObserver(()=>{this.fireStylesChangedEvent("theme")}),this.addDestroyFunc(()=>this.mutationObserver.disconnect())}applyThemeClasses(z,J=[]){let{theme:Q}=this,Z=Q?Q._getCssClass():this.applyLegacyThemeClasses();for(let $ of Array.from(z.classList))if($.startsWith("ag-theme-"))z.classList.remove($);if(Z){let $=z.className;z.className=`${$}${$?" ":""}${Z}${J?.length?" "+J.join(" "):""}`}}applyLegacyThemeClasses(){let z="";this.mutationObserver.disconnect();let J=this.eRootDiv;while(J){let Q=!1;for(let Z of Array.from(J.classList))if(Z.startsWith("ag-theme-"))Q=!0,z=z?`${z} ${Z}`:Z;if(Q)this.mutationObserver.observe(J,{attributes:!0,attributeFilter:["class"]});J=J.parentElement}return z}addGlobalCSS(z,J){if(this.theme)ez(z,this.eStyleContainer,J,this.cssLayer,0,this.styleNonce);else this.globalCSS.push([z,J])}getDefaultListItemHeight(){return this.getCSSVariablePixelValue(r7)}getCSSVariablePixelValue(z){let J=this.lastKnownValues.get(z);if(J!=null)return J;let Q=this.measureSizeEl(z);if(Q==="detached"||Q==="no-styles"){if(z.cacheDefault)this.lastKnownValues.set(z,z.defaultValue);return z.defaultValue}return this.lastKnownValues.set(z,Q),Q}measureSizeEl(z){let J=this.getSizeEl(z);if(J.offsetParent==null)return"detached";let Q=J.offsetWidth;if(Q===VQ)return"no-styles";return this.sizesMeasured=!0,Q}getMeasurementContainer(){let z=this.eMeasurementContainer;if(!z)z=this.eMeasurementContainer=H0({tag:"div",cls:"ag-measurement-container"}),this.eRootDiv.appendChild(z);return z}getSizeEl(z){let J=this.sizeEls.get(z);if(J)return J;let Q=this.getMeasurementContainer();J=H0({tag:"div"});let Z=this.setSizeElStyles(J,z);Q.appendChild(J),this.sizeEls.set(z,J);let{type:$,noWarn:X}=z;if($!=="length"&&$!=="border")return J;let Y=this.measureSizeEl(z);if(Y==="no-styles"&&!X)this.varError(Z,z.defaultValue);let q=j4(this.beans,J,()=>{let G=this.measureSizeEl(z);if(G==="detached"||G==="no-styles")return;if(this.lastKnownValues.set(z,G),G!==Y)Y=G,this.fireStylesChangedEvent(z.changeKey)});return this.addDestroyFunc(()=>q()),J}setSizeElStyles(z,J){let{changeKey:Q,type:Z}=J,$=Y5(Q);if(Z==="border"){if($.endsWith("-width"))$=$.slice(0,-6);z.className="ag-measurement-element-border",z.style.setProperty("--ag-internal-measurement-border",`var(${$}, solid ${VQ}px)`)}else z.style.width=`var(${$}, ${VQ}px)`;return $}handleThemeChange(){let{gos:z,theme:J}=this,Q=z.get("theme"),Z;if(Q==="legacy")Z=void 0;else{let $=Q??this.getDefaultTheme();if($ instanceof i$)Z=$;else this.themeError($)}if(Z!==J)this.handleNewTheme(Z);this.postProcessThemeChange(Z,Q)}handleNewTheme(z){let{gos:J,eRootDiv:Q,globalCSS:Z}=this,$=this.getAdditionalCss();if(z){w$(this.eStyleContainer,this.cssLayer,this.styleNonce,$);for(let[X,Y]of Z)ez(X,this.eStyleContainer,Y,this.cssLayer,0,this.styleNonce);Z.length=0}this.theme=z,z?._startUse({loadThemeGoogleFonts:J.get("loadThemeGoogleFonts"),styleContainer:this.eStyleContainer,cssLayer:this.cssLayer,nonce:this.styleNonce,moduleCss:$}),nB(this,z?._getParamsCss()??null,z?._getParamsClassName()??null,this.eStyleContainer,this.cssLayer,this.styleNonce),this.applyThemeClasses(Q),this.fireStylesChangedEvent("theme")}fireStylesChangedEvent(z){this.eventSvc.dispatchEvent({type:"stylesChanged",[`${z}Changed`]:!0})}},VQ=15538,EE=(z,J,Q)=>{let Z=60,$=setInterval(()=>{if(typeof ShadowRoot<"u"&&z.getRootNode()instanceof ShadowRoot)J(),clearInterval($);if(z.isConnected||--Z<0)clearInterval($)},1000);Q(()=>clearInterval($))},KE=".ag-aria-description-container{border:0;clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px;z-index:9999}.ag-unselectable{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-selectable{-webkit-user-select:text;-moz-user-select:text;user-select:text}.ag-shake-left-to-right{animation-direction:alternate;animation-duration:.2s;animation-iteration-count:infinite;animation-name:ag-shake-left-to-right}@keyframes ag-shake-left-to-right{0%{padding-left:6px;padding-right:2px}to{padding-left:2px;padding-right:6px}}.ag-body-horizontal-scroll-viewport,.ag-body-vertical-scroll-viewport,.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport{flex:1 1 auto;height:100%;min-width:0;overflow:hidden;position:relative}.ag-viewport{position:relative}.ag-spanning-container{position:absolute;top:0;z-index:1}.ag-body-viewport,.ag-center-cols-viewport,.ag-floating-bottom-viewport,.ag-floating-top-viewport,.ag-header-viewport,.ag-sticky-bottom-viewport,.ag-sticky-top-viewport{overflow-x:auto;-ms-overflow-style:none!important;scrollbar-width:none!important}.ag-body-viewport::-webkit-scrollbar,.ag-center-cols-viewport::-webkit-scrollbar,.ag-floating-bottom-viewport::-webkit-scrollbar,.ag-floating-top-viewport::-webkit-scrollbar,.ag-header-viewport::-webkit-scrollbar,.ag-sticky-bottom-viewport::-webkit-scrollbar,.ag-sticky-top-viewport::-webkit-scrollbar{display:none!important}.ag-body-viewport{display:flex;overflow-x:hidden;&:where(.ag-layout-normal){overflow-y:auto;-webkit-overflow-scrolling:touch}}.ag-floating-bottom-container,.ag-floating-top-container,.ag-sticky-bottom-container,.ag-sticky-top-container{min-height:1px}.ag-center-cols-viewport{min-height:100%;width:100%}.ag-body-horizontal-scroll-viewport{overflow-x:scroll}.ag-body-vertical-scroll-viewport{overflow-y:scroll}.ag-body-container,.ag-body-horizontal-scroll-container,.ag-body-vertical-scroll-container,.ag-center-cols-container,.ag-floating-bottom-container,.ag-floating-bottom-full-width-container,.ag-floating-top-container,.ag-full-width-container,.ag-header-container,.ag-pinned-left-cols-container,.ag-pinned-left-sticky-bottom,.ag-pinned-right-cols-container,.ag-pinned-right-sticky-bottom,.ag-sticky-bottom-container,.ag-sticky-top-container{position:relative}.ag-floating-bottom-container,.ag-floating-top-container,.ag-header-container,.ag-pinned-left-floating-bottom,.ag-pinned-left-floating-top,.ag-pinned-right-floating-bottom,.ag-pinned-right-floating-top,.ag-sticky-bottom-container,.ag-sticky-top-container{height:100%;white-space:nowrap}.ag-center-cols-container,.ag-pinned-right-cols-container{display:block}.ag-body-horizontal-scroll-container{height:100%}.ag-body-vertical-scroll-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container,.ag-full-width-container,.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{pointer-events:none;position:absolute;top:0}:where(.ag-ltr) .ag-floating-bottom-full-width-container,:where(.ag-ltr) .ag-floating-top-full-width-container,:where(.ag-ltr) .ag-full-width-container,:where(.ag-ltr) .ag-sticky-bottom-full-width-container,:where(.ag-ltr) .ag-sticky-top-full-width-container{left:0}:where(.ag-rtl) .ag-floating-bottom-full-width-container,:where(.ag-rtl) .ag-floating-top-full-width-container,:where(.ag-rtl) .ag-full-width-container,:where(.ag-rtl) .ag-sticky-bottom-full-width-container,:where(.ag-rtl) .ag-sticky-top-full-width-container{right:0}.ag-full-width-container{width:100%}.ag-floating-bottom-full-width-container,.ag-floating-top-full-width-container{display:inline-block;height:100%;overflow:hidden;width:100%}.ag-body{display:flex;flex:1 1 auto;flex-direction:row!important;min-height:0;position:relative}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:flex;min-height:0;min-width:0;position:relative;&:where(.ag-scrollbar-invisible){bottom:0;position:absolute;&:where(.ag-apple-scrollbar){opacity:0;transition:opacity .4s;visibility:hidden;&:where(.ag-scrollbar-active),&:where(.ag-scrollbar-scrolling){opacity:1;visibility:visible}}}}.ag-body-horizontal-scroll{width:100%;&:where(.ag-scrollbar-invisible){left:0;right:0}}.ag-body-vertical-scroll{height:100%;&:where(.ag-scrollbar-invisible){top:0;z-index:10}}:where(.ag-ltr) .ag-body-vertical-scroll{&:where(.ag-scrollbar-invisible){right:0}}:where(.ag-rtl) .ag-body-vertical-scroll{&:where(.ag-scrollbar-invisible){left:0}}.ag-force-vertical-scroll{overflow-y:scroll!important}.ag-horizontal-left-spacer,.ag-horizontal-right-spacer{height:100%;min-width:0;overflow-x:scroll;&:where(.ag-scroller-corner){overflow-x:hidden}}:where(.ag-row-animation) .ag-row{transition:transform .4s,top .4s,opacity .2s;&:where(.ag-after-created){transition:transform .4s,top .4s,height .4s,opacity .2s}}:where(.ag-row-animation.ag-prevent-animation) .ag-row{transition:none!important;&:where(.ag-row.ag-after-created){transition:none!important}}:where(.ag-row-no-animation) .ag-row{transition:none}.ag-row-loading{align-items:center;display:flex}.ag-row-position-absolute{position:absolute}.ag-row-position-relative{position:relative}.ag-full-width-row{overflow:hidden;pointer-events:all}.ag-row-inline-editing{z-index:1}.ag-row-dragging{z-index:2}.ag-stub-cell{align-items:center;display:flex}.ag-cell{display:inline-block;height:100%;position:absolute;white-space:nowrap;&:focus-visible{box-shadow:none}}.ag-cell-value{flex:1 1 auto}.ag-cell-value:not(.ag-allow-overflow),.ag-group-value{overflow:hidden;text-overflow:ellipsis}.ag-cell-wrap-text{overflow-wrap:break-word;white-space:normal}:where(.ag-cell) .ag-icon{display:inline-block;vertical-align:middle}.ag-floating-top{display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}:where(.ag-floating-top:not(.ag-invisible)){border-bottom:var(--ag-pinned-row-border)}.ag-floating-bottom{display:flex;overflow:hidden;position:relative;white-space:nowrap;width:100%}:where(.ag-floating-bottom:not(.ag-invisible)){border-top:var(--ag-pinned-row-border)}.ag-sticky-bottom,.ag-sticky-top{background-color:var(--ag-data-background-color);display:flex;height:0;overflow:hidden;position:absolute;width:100%;z-index:1}.ag-sticky-bottom{box-sizing:content-box!important;:where(.ag-pinned-left-sticky-bottom),:where(.ag-pinned-right-sticky-bottom),:where(.ag-sticky-bottom-container){border-top:var(--ag-row-border);box-sizing:border-box}}.ag-opacity-zero{opacity:0!important}.ag-cell-label-container{align-items:center;display:flex;flex-direction:row-reverse;height:100%;justify-content:space-between;width:100%}:where(.ag-right-aligned-header){.ag-cell-label-container{flex-direction:row}.ag-header-cell-text{text-align:end}}.ag-column-group-icons{display:block;:where(.ag-column-group-closed-icon),:where(.ag-column-group-opened-icon){cursor:pointer}}:where(.ag-ltr){direction:ltr;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row}}:where(.ag-rtl){direction:rtl;text-align:right;.ag-body,.ag-body-horizontal-scroll,.ag-body-viewport,.ag-floating-bottom,.ag-floating-top,.ag-header,.ag-sticky-bottom,.ag-sticky-top{flex-direction:row-reverse}.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{display:block}}:where(.ag-rtl){.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(180deg)}}:where(.ag-rtl){.ag-icon-contracted,.ag-icon-expanded,.ag-icon-tree-closed{transform:rotate(-180deg)}}:where(.ag-ltr) .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-left:var(--ag-row-group-indent-size)}:where(.ag-rtl) .ag-row:not(.ag-row-level-0) .ag-pivot-leaf-group{margin-right:var(--ag-row-group-indent-size)}:where(.ag-ltr) .ag-row-group-leaf-indent{margin-left:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}:where(.ag-rtl) .ag-row-group-leaf-indent{margin-right:calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size))}.ag-value-change-delta{padding:0 2px}.ag-value-change-delta-up{color:var(--ag-value-change-delta-up-color)}.ag-value-change-delta-down{color:var(--ag-value-change-delta-down-color)}.ag-value-change-value{background-color:transparent;border-radius:1px;padding-left:1px;padding-right:1px;transition:background-color 1s}.ag-value-change-value-highlight{background-color:var(--ag-value-change-value-highlight-background-color);transition:background-color .1s}.ag-cell-data-changed{background-color:var(--ag-value-change-value-highlight-background-color)!important}.ag-cell-data-changed-animation{background-color:transparent}.ag-cell-highlight{background-color:var(--ag-range-selection-highlight-color)!important}.ag-row,.ag-spanned-row{color:var(--ag-cell-text-color);font-family:var(--ag-cell-font-family);font-size:var(--ag-cell-font-size);font-weight:var(--ag-cell-font-weight);white-space:nowrap;--ag-internal-content-line-height:calc(min(var(--ag-row-height), var(--ag-line-height, 1000px)) - var(--ag-internal-row-border-width, 1px) - 2px)}.ag-row{background-color:var(--ag-data-background-color);border-bottom:var(--ag-row-border);height:var(--ag-row-height);width:100%;&.ag-row-editing-invalid{background-color:var(--ag-full-row-edit-invalid-background-color)}}:where(.ag-body-vertical-content-no-gap>div>div>div,.ag-body-vertical-content-no-gap>div>div>div>div)>.ag-row-last{border-bottom-color:transparent}.ag-group-contracted,.ag-group-expanded{cursor:pointer}.ag-cell,.ag-full-width-row .ag-cell-wrapper.ag-row-group{border:1px solid transparent;line-height:var(--ag-internal-content-line-height);-webkit-font-smoothing:subpixel-antialiased}:where(.ag-ltr) .ag-cell{border-right:var(--ag-column-border)}:where(.ag-rtl) .ag-cell{border-left:var(--ag-column-border)}.ag-spanned-cell-wrapper{background-color:var(--ag-data-background-color);position:absolute}.ag-spanned-cell-wrapper>.ag-spanned-cell{display:block;position:relative}:where(.ag-ltr) :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-right-color:transparent}:where(.ag-rtl) :where(.ag-body-horizontal-content-no-gap) .ag-column-last{border-left-color:transparent}.ag-cell-wrapper{align-items:center;display:flex;>:where(:not(.ag-cell-value,.ag-group-value)){align-items:center;display:flex;height:var(--ag-internal-content-line-height)}&:where(.ag-row-group){align-items:flex-start}:where(.ag-full-width-row) &:where(.ag-row-group){align-items:center;height:100%}}:where(.ag-ltr) .ag-cell-wrapper{padding-left:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}:where(.ag-rtl) .ag-cell-wrapper{padding-right:calc(var(--ag-indentation-level)*var(--ag-row-group-indent-size))}:where(.ag-cell-wrap-text:not(.ag-cell-auto-height)) .ag-cell-wrapper{align-items:normal;height:100%;:where(.ag-cell-value){height:100%}}:where(.ag-ltr) .ag-row>.ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}:where(.ag-rtl) .ag-row>.ag-cell-wrapper.ag-row-group{padding-right:calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-cell-focus:not(.ag-cell-range-selected):focus-within,.ag-cell-range-single-cell,.ag-cell-range-single-cell.ag-cell-range-handle,.ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),.ag-context-menu-open .ag-full-width-row.ag-row-focus .ag-cell-wrapper.ag-row-group,.ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group{border:1px solid;border-color:var(--ag-range-selection-border-color);border-style:var(--ag-range-selection-border-style);outline:initial}.ag-full-width-row.ag-row-focus:focus{box-shadow:none}:where(.ag-ltr) .ag-group-contracted,:where(.ag-ltr) .ag-group-expanded,:where(.ag-ltr) .ag-row-drag,:where(.ag-ltr) .ag-selection-checkbox{margin-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-group-contracted,:where(.ag-rtl) .ag-group-expanded,:where(.ag-rtl) .ag-row-drag,:where(.ag-rtl) .ag-selection-checkbox{margin-left:var(--ag-cell-widget-spacing)}.ag-drag-handle-disabled{opacity:.35;pointer-events:none}:where(.ag-ltr) .ag-group-child-count{margin-left:3px}:where(.ag-rtl) .ag-group-child-count{margin-right:3px}.ag-row-highlight-above:after,.ag-row-highlight-below:after,.ag-row-highlight-inside:after{background-color:var(--ag-row-drag-indicator-color);border-radius:calc(var(--ag-row-drag-indicator-width)/2);content:\"\";height:var(--ag-row-drag-indicator-width);pointer-events:none;position:absolute;width:calc(100% - 1px)}:where(.ag-ltr) .ag-row-highlight-above:after,:where(.ag-ltr) .ag-row-highlight-below:after,:where(.ag-ltr) .ag-row-highlight-inside:after{left:1px}:where(.ag-rtl) .ag-row-highlight-above:after,:where(.ag-rtl) .ag-row-highlight-below:after,:where(.ag-rtl) .ag-row-highlight-inside:after{right:1px}.ag-row-highlight-above:after{top:0}.ag-row-highlight-below:after{bottom:0}.ag-row-highlight-indent:after{display:block;width:auto}:where(.ag-ltr) .ag-row-highlight-indent:after{left:calc((var(--ag-cell-widget-spacing) + var(--ag-icon-size))*2 + var(--ag-cell-horizontal-padding) + var(--ag-row-highlight-level)*var(--ag-row-group-indent-size));right:1px}:where(.ag-rtl) .ag-row-highlight-indent:after{left:1px;right:calc((var(--ag-cell-widget-spacing) + var(--ag-icon-size))*2 + var(--ag-cell-horizontal-padding) + var(--ag-row-highlight-level)*var(--ag-row-group-indent-size))}.ag-row-highlight-inside:after{background-color:var(--ag-selected-row-background-color);border:1px solid var(--ag-range-selection-border-color);display:block;height:auto;inset:0;width:auto}.ag-body,.ag-floating-bottom,.ag-floating-top{background-color:var(--ag-data-background-color)}.ag-row-odd{background-color:var(--ag-odd-row-background-color)}.ag-row-selected:before{background-color:var(--ag-selected-row-background-color);content:\"\";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-full-width-row.ag-row-group:before,.ag-row-hover:not(.ag-full-width-row):before{background-color:var(--ag-row-hover-color);content:\"\";display:block;inset:0;pointer-events:none;position:absolute}.ag-row-hover.ag-row-selected:before{background-color:var(--ag-row-hover-color);background-image:linear-gradient(var(--ag-selected-row-background-color),var(--ag-selected-row-background-color))}.ag-row.ag-full-width-row.ag-row-group>*{position:relative}.ag-column-hover{background-color:var(--ag-column-hover-color)}.ag-header-range-highlight{background-color:var(--ag-range-header-highlight-color)}.ag-right-aligned-cell{font-variant-numeric:tabular-nums}:where(.ag-ltr) .ag-right-aligned-cell{text-align:right}:where(.ag-rtl) .ag-right-aligned-cell{text-align:left}.ag-right-aligned-cell .ag-cell-value,.ag-right-aligned-cell .ag-group-value{margin-left:auto}:where(.ag-ltr) .ag-cell:not(.ag-cell-inline-editing),:where(.ag-ltr) .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level));padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}:where(.ag-rtl) .ag-cell:not(.ag-cell-inline-editing),:where(.ag-rtl) .ag-full-width-row .ag-cell-wrapper.ag-row-group{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px + var(--ag-row-group-indent-size)*var(--ag-indentation-level))}.ag-row>.ag-cell-wrapper{padding-left:calc(var(--ag-cell-horizontal-padding) - 1px);padding-right:calc(var(--ag-cell-horizontal-padding) - 1px)}.ag-row-dragging{cursor:move;opacity:.5}.ag-details-row{background-color:var(--ag-data-background-color);padding:calc(var(--ag-spacing)*3.75)}.ag-layout-auto-height,.ag-layout-print{.ag-center-cols-viewport{min-height:150px}}.ag-overlay-exporting-wrapper,.ag-overlay-loading-wrapper,.ag-overlay-modal-wrapper{background-color:var(--ag-modal-overlay-background-color)}.ag-skeleton-container{align-content:center;height:100%;width:100%}.ag-skeleton-effect{animation:ag-skeleton-loading 1.5s ease-in-out .5s infinite;background-color:var(--ag-row-loading-skeleton-effect-color);border-radius:.25rem;height:1em;width:100%}:where(.ag-ltr) .ag-right-aligned-cell .ag-skeleton-effect{margin-left:auto}:where(.ag-rtl) .ag-right-aligned-cell .ag-skeleton-effect{margin-right:auto}@keyframes ag-skeleton-loading{0%{background-color:var(--ag-row-loading-skeleton-effect-color)}50%{background-color:color-mix(in srgb,transparent,var(--ag-row-loading-skeleton-effect-color) 40%)}to{background-color:var(--ag-row-loading-skeleton-effect-color)}}.ag-loading{align-items:center;display:flex;height:100%}:where(.ag-ltr) .ag-loading{padding-left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-loading{padding-right:var(--ag-cell-horizontal-padding)}:where(.ag-ltr) .ag-loading-icon{padding-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-loading-icon{padding-left:var(--ag-cell-widget-spacing)}.ag-header{background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border);color:var(--ag-header-text-color);display:flex;font-family:var(--ag-header-font-family);font-size:var(--ag-header-font-size);font-weight:var(--ag-header-font-weight);overflow:hidden;white-space:nowrap;width:100%}.ag-header-row{height:var(--ag-header-height);position:absolute}.ag-floating-filter-button-button,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-expand-icon,.ag-panel-title-bar-button,:where(.ag-header-cell-sortable) .ag-header-cell-label,:where(.ag-header-group-cell-selectable) .ag-header-cell-comp-wrapper{cursor:pointer}:where(.ag-ltr) .ag-header-expand-icon{margin-left:4px}:where(.ag-rtl) .ag-header-expand-icon{margin-right:4px}.ag-header-row:where(:not(:first-child)){:where(.ag-header-cell:not(.ag-header-span-height.ag-header-span-total,.ag-header-parent-hidden)),:where(.ag-header-group-cell.ag-header-group-cell-with-group){border-top:var(--ag-header-row-border)}}.ag-header-row:where(:not(.ag-header-row-column-group)){overflow:hidden}:where(.ag-header.ag-header-allow-overflow) .ag-header-row{overflow:visible}.ag-header-cell{display:inline-flex;overflow:hidden}.ag-header-group-cell{contain:paint;display:flex}.ag-header-cell,.ag-header-group-cell{align-items:center;gap:var(--ag-cell-widget-spacing);height:100%;padding:0 var(--ag-cell-horizontal-padding);position:absolute}@property --ag-internal-moving-color{syntax:\"\";inherits:false;initial-value:transparent}@property --ag-internal-hover-color{syntax:\"\";inherits:false;initial-value:transparent}.ag-header-cell:where(:not(.ag-floating-filter)):before,.ag-header-group-cell:before{background-image:linear-gradient(var(--ag-internal-hover-color),var(--ag-internal-hover-color)),linear-gradient(var(--ag-internal-moving-color),var(--ag-internal-moving-color));content:\"\";inset:0;position:absolute;--ag-internal-moving-color:transparent;--ag-internal-hover-color:transparent;transition:--ag-internal-moving-color var(--ag-header-cell-background-transition-duration),--ag-internal-hover-color var(--ag-header-cell-background-transition-duration)}.ag-header-cell:where(:not(.ag-floating-filter)):where(:hover):before,.ag-header-group-cell:where(:hover):before{--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}.ag-header-cell:where(:not(.ag-floating-filter)):where(.ag-header-cell-moving):before,.ag-header-group-cell:where(.ag-header-cell-moving):before{--ag-internal-moving-color:var(--ag-header-cell-moving-background-color);--ag-internal-hover-color:var(--ag-header-cell-hover-background-color)}:where(.ag-header-cell:not(.ag-floating-filter)>*,.ag-header-group-cell>*){position:relative;z-index:1}.ag-header-cell-menu-button:where(:not(.ag-header-menu-always-show)){opacity:0;transition:opacity .2s}.ag-header-cell-filter-button,:where(.ag-header-cell.ag-header-active) .ag-header-cell-menu-button{opacity:1}.ag-header-cell-label,.ag-header-group-cell-label{align-items:center;align-self:stretch;display:flex;flex:1 1 auto;overflow:hidden;padding:5px 0}:where(.ag-ltr) .ag-sort-indicator-icon{padding-left:var(--ag-spacing)}:where(.ag-rtl) .ag-sort-indicator-icon{padding-right:var(--ag-spacing)}.ag-header-cell-label{text-overflow:ellipsis}.ag-header-group-cell-label.ag-sticky-label{flex:none;max-width:100%;overflow:visible;position:sticky}:where(.ag-ltr) .ag-header-group-cell-label.ag-sticky-label{left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-header-group-cell-label.ag-sticky-label{right:var(--ag-cell-horizontal-padding)}.ag-header-cell-text,.ag-header-group-text{overflow:hidden;text-overflow:ellipsis}.ag-header-cell-text{overflow-wrap:break-word}.ag-header-cell-comp-wrapper{width:100%}:where(.ag-header-group-cell) .ag-header-cell-comp-wrapper{display:flex}:where(.ag-header-cell:not(.ag-header-cell-auto-height)) .ag-header-cell-comp-wrapper{align-items:center;display:flex;height:100%}.ag-header-cell-wrap-text .ag-header-cell-comp-wrapper{white-space:normal}.ag-header-cell-comp-wrapper-limited-height>*{overflow:hidden}:where(.ag-right-aligned-header) .ag-header-cell-label{flex-direction:row-reverse}:where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-col-ref{color:var(--ag-subtle-text-color)}}:where(.ag-ltr) :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-col-ref{margin-right:var(--ag-spacing)}.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-header-cell:not(.ag-right-aligned-header)){.ag-header-col-ref{margin-left:var(--ag-spacing)}.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}:where(.ag-header-cell.ag-right-aligned-header){.ag-header-col-ref{color:var(--ag-subtle-text-color)}}:where(.ag-ltr) :where(.ag-header-cell.ag-right-aligned-header){.ag-header-col-ref{margin-left:var(--ag-spacing)}.ag-header-label-icon,.ag-header-menu-icon{margin-right:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-header-cell.ag-right-aligned-header){.ag-header-col-ref{margin-right:var(--ag-spacing)}.ag-header-label-icon,.ag-header-menu-icon{margin-left:var(--ag-spacing)}}.ag-header-cell:after,.ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{content:\"\";height:var(--ag-header-column-border-height);position:absolute;top:calc(50% - var(--ag-header-column-border-height)*.5);z-index:1}:where(.ag-ltr) .ag-header-cell:after,:where(.ag-ltr) .ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{border-right:var(--ag-header-column-border);right:0}:where(.ag-rtl) .ag-header-cell:after,:where(.ag-rtl) .ag-header-group-cell:where(:not(.ag-header-span-height.ag-header-group-cell-no-group)):after{border-left:var(--ag-header-column-border);left:0}.ag-header-highlight-after:after,.ag-header-highlight-before:after{background-color:var(--ag-column-drag-indicator-color);border-radius:calc(var(--ag-column-drag-indicator-width)/2);content:\"\";height:100%;position:absolute;top:0;width:var(--ag-column-drag-indicator-width)}:where(.ag-ltr) .ag-header-highlight-before:after{left:0}:where(.ag-rtl) .ag-header-highlight-before:after{right:0}:where(.ag-ltr) .ag-header-highlight-after:after{right:0;:where(.ag-pinned-left-header) &{right:1px}}:where(.ag-rtl) .ag-header-highlight-after:after{left:0;:where(.ag-pinned-left-header) &{left:1px}}.ag-header-cell-resize{align-items:center;cursor:ew-resize;display:flex;height:100%;position:absolute;top:0;width:8px;z-index:2}:where(.ag-ltr) .ag-header-cell-resize{right:-3px}:where(.ag-rtl) .ag-header-cell-resize{left:-3px}.ag-header-cell-resize:after{background-color:var(--ag-header-column-resize-handle-color);content:\"\";height:var(--ag-header-column-resize-handle-height);position:absolute;top:calc(50% - var(--ag-header-column-resize-handle-height)*.5);width:var(--ag-header-column-resize-handle-width);z-index:1}:where(.ag-ltr) .ag-header-cell-resize:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}:where(.ag-rtl) .ag-header-cell-resize:after{right:calc(50% - var(--ag-header-column-resize-handle-width))}:where(.ag-header-cell.ag-header-span-height) .ag-header-cell-resize:after{height:calc(100% - var(--ag-spacing)*4);top:calc(var(--ag-spacing)*2)}.ag-header-group-cell-no-group:where(.ag-header-span-height){display:none}.ag-sort-indicator-container{display:flex;gap:var(--ag-spacing)}.ag-layout-print{&.ag-body{display:block;height:unset}&.ag-root-wrapper{container-type:normal;display:inline-block}.ag-body-horizontal-scroll,.ag-body-vertical-scroll{display:none}&.ag-force-vertical-scroll{overflow-y:visible!important}}@media print{.ag-root-wrapper.ag-layout-print{container-type:normal;display:table;.ag-body-horizontal-scroll-viewport,.ag-body-viewport,.ag-center-cols-container,.ag-center-cols-viewport,.ag-root,.ag-root-wrapper-body,.ag-virtual-list-viewport{display:block!important;height:auto!important;overflow:hidden!important}.ag-cell,.ag-row{-moz-column-break-inside:avoid;break-inside:avoid}}}ag-grid,ag-grid-angular{display:block}.ag-root-wrapper{border:var(--ag-wrapper-border);border-radius:var(--ag-wrapper-border-radius);container-type:inline-size;display:flex;flex-direction:column;overflow:hidden;position:relative;&.ag-layout-normal{content-visibility:auto;height:100%}}.ag-root-wrapper-body{display:flex;flex-direction:row;&.ag-layout-normal{flex:1 1 auto;height:0;min-height:0}}.ag-root{display:flex;flex-direction:column;position:relative;&.ag-layout-auto-height,&.ag-layout-normal{flex:1 1 auto;overflow:hidden;width:0}&.ag-layout-normal{height:100%}}.ag-drag-handle{color:var(--ag-drag-handle-color);cursor:grab;:where(.ag-icon){color:var(--ag-drag-handle-color)}}.ag-chart-menu-icon,.ag-chart-settings-next,.ag-chart-settings-prev,.ag-column-group-icons,.ag-column-select-header-icon,.ag-filter-toolpanel-expand,.ag-floating-filter-button-button,.ag-group-title-bar-icon,.ag-header-cell-filter-button,.ag-header-cell-menu-button,.ag-header-expand-icon,.ag-panel-title-bar-button,.ag-panel-title-bar-button-icon,.ag-set-filter-group-icons,:where(.ag-group-contracted) .ag-icon,:where(.ag-group-expanded) .ag-icon{background-color:var(--ag-icon-button-background-color);border-radius:var(--ag-icon-button-border-radius);box-shadow:0 0 0 var(--ag-icon-button-background-spread) var(--ag-icon-button-background-color);color:var(--ag-icon-button-color)}.ag-chart-menu-icon:hover,.ag-chart-settings-next:hover,.ag-chart-settings-prev:hover,.ag-column-group-icons:hover,.ag-column-select-header-icon:hover,.ag-filter-toolpanel-expand:hover,.ag-floating-filter-button-button:hover,.ag-group-title-bar-icon:hover,.ag-header-cell-filter-button:hover,.ag-header-cell-menu-button:hover,.ag-header-expand-icon:hover,.ag-panel-title-bar-button-icon:hover,.ag-panel-title-bar-button:hover,.ag-set-filter-group-icons:hover,:where(.ag-group-contracted) .ag-icon:hover,:where(.ag-group-expanded) .ag-icon:hover{background-color:var(--ag-icon-button-hover-background-color);box-shadow:0 0 0 var(--ag-icon-button-background-spread) var(--ag-icon-button-hover-background-color);color:var(--ag-icon-button-hover-color)}:where(.ag-filter-active),:where(.ag-filter-toolpanel-group-instance-header-icon),:where(.ag-filter-toolpanel-instance-header-icon){position:relative}:where(.ag-filter-active):after,:where(.ag-filter-toolpanel-group-instance-header-icon):after,:where(.ag-filter-toolpanel-instance-header-icon):after{background-color:var(--ag-icon-button-active-indicator-color);border-radius:50%;content:\"\";height:6px;position:absolute;top:-1px;width:6px}:where(.ag-ltr) :where(.ag-filter-active):after,:where(.ag-ltr) :where(.ag-filter-toolpanel-group-instance-header-icon):after,:where(.ag-ltr) :where(.ag-filter-toolpanel-instance-header-icon):after{right:-1px}:where(.ag-rtl) :where(.ag-filter-active):after,:where(.ag-rtl) :where(.ag-filter-toolpanel-group-instance-header-icon):after,:where(.ag-rtl) :where(.ag-filter-toolpanel-instance-header-icon):after{left:-1px}.ag-filter-active{background-image:linear-gradient(var(--ag-icon-button-active-background-color),var(--ag-icon-button-active-background-color));border-radius:1px;outline:solid var(--ag-icon-button-background-spread) var(--ag-icon-button-active-background-color);:where(.ag-icon-filter){clip-path:path(\"M8,0C8,4.415 11.585,8 16,8L16,16L0,16L0,0L8,0Z\");color:var(--ag-icon-button-active-color)}}",FE={wrapperBorder:!0,rowBorder:!0,headerRowBorder:!0,footerRowBorder:{ref:"rowBorder"},columnBorder:{style:"solid",width:1,color:"transparent"},headerColumnBorder:!1,headerColumnBorderHeight:"100%",pinnedColumnBorder:!0,pinnedRowBorder:!0,sidePanelBorder:!0,sideBarPanelWidth:250,sideBarPanelAnimationDuration:0,sideBarBackgroundColor:{ref:"chromeBackgroundColor"},sideButtonBarBackgroundColor:{ref:"sideBarBackgroundColor"},sideButtonBarTopPadding:0,sideButtonSelectedUnderlineWidth:2,sideButtonSelectedUnderlineColor:"transparent",sideButtonSelectedUnderlineTransitionDuration:0,sideButtonBackgroundColor:"transparent",sideButtonTextColor:{ref:"textColor"},sideButtonHoverBackgroundColor:{ref:"sideButtonBackgroundColor"},sideButtonHoverTextColor:{ref:"sideButtonTextColor"},sideButtonSelectedBackgroundColor:x0,sideButtonSelectedTextColor:{ref:"sideButtonTextColor"},sideButtonBorder:"solid 1px transparent",sideButtonSelectedBorder:!0,sideButtonLeftPadding:{ref:"spacing"},sideButtonRightPadding:{ref:"spacing"},sideButtonVerticalPadding:{calc:"spacing * 3"},cellFontFamily:{ref:"fontFamily"},cellFontSize:{ref:"dataFontSize"},cellFontWeight:{ref:"fontWeight"},headerCellHoverBackgroundColor:"transparent",headerCellMovingBackgroundColor:{ref:"headerCellHoverBackgroundColor"},headerCellBackgroundTransitionDuration:"0.2s",cellTextColor:{ref:"textColor"},rangeSelectionBorderStyle:"solid",rangeSelectionBorderColor:C4,rangeSelectionBackgroundColor:I4(0.2),rangeSelectionChartBackgroundColor:"#0058FF1A",rangeSelectionChartCategoryBackgroundColor:"#00FF841A",rangeSelectionHighlightColor:I4(0.5),rangeHeaderHighlightColor:aB(0.08),rowNumbersSelectedColor:I4(0.5),rowHoverColor:I4(0.08),columnHoverColor:I4(0.05),selectedRowBackgroundColor:I4(0.12),modalOverlayBackgroundColor:{ref:"backgroundColor",mix:0.66},dataBackgroundColor:x0,oddRowBackgroundColor:{ref:"dataBackgroundColor"},wrapperBackgroundColor:x0,wrapperBorderRadius:8,cellHorizontalPadding:{calc:"spacing * 2 * cellHorizontalPaddingScale"},cellWidgetSpacing:{calc:"spacing * 1.5"},cellHorizontalPaddingScale:1,rowGroupIndentSize:{calc:"cellWidgetSpacing + iconSize"},valueChangeDeltaUpColor:"#43a047",valueChangeDeltaDownColor:"#e53935",valueChangeValueHighlightBackgroundColor:"#16a08580",rowHeight:{calc:"max(iconSize, cellFontSize) + spacing * 3.25 * rowVerticalPaddingScale"},rowVerticalPaddingScale:1,paginationPanelHeight:{ref:"rowHeight",calc:"max(rowHeight, 22px)"},dragHandleColor:J4(0.7),headerColumnResizeHandleHeight:"30%",headerColumnResizeHandleWidth:2,headerColumnResizeHandleColor:{ref:"borderColor"},iconButtonColor:{ref:"iconColor"},iconButtonBackgroundColor:"transparent",iconButtonBackgroundSpread:4,iconButtonBorderRadius:1,iconButtonHoverColor:{ref:"iconButtonColor"},iconButtonHoverBackgroundColor:J4(0.1),iconButtonActiveColor:C4,iconButtonActiveBackgroundColor:I4(0.28),iconButtonActiveIndicatorColor:C4,setFilterIndentSize:{ref:"iconSize"},chartMenuPanelWidth:260,chartMenuLabelColor:J4(0.8),cellEditingBorder:{color:C4},cellEditingShadow:{ref:"cardShadow"},fullRowEditInvalidBackgroundColor:{ref:"invalidColor",onto:"backgroundColor",mix:0.25},columnSelectIndentSize:{ref:"iconSize"},toolbarBackgroundColor:{ref:"headerBackgroundColor"},toolbarTextColor:{ref:"headerTextColor"},toolbarSeparatorBorder:!0,toolPanelSeparatorBorder:!0,columnDropCellBackgroundColor:J4(0.07),columnDropCellTextColor:{ref:"textColor"},columnDropCellDragHandleColor:{ref:"textColor"},columnDropCellBorder:{color:J4(0.13)},selectCellBackgroundColor:J4(0.07),selectCellBorder:{color:J4(0.13)},advancedFilterBuilderButtonBarBorder:!0,advancedFilterBuilderIndentSize:{calc:"spacing * 2 + iconSize"},advancedFilterBuilderJoinPillColor:"#f08e8d",advancedFilterBuilderColumnPillColor:"#a6e194",advancedFilterBuilderOptionPillColor:"#f3c08b",advancedFilterBuilderValuePillColor:"#85c0e4",filterPanelApplyButtonColor:x0,filterPanelApplyButtonBackgroundColor:C4,columnPanelApplyButtonColor:x0,columnPanelApplyButtonBackgroundColor:C4,filterPanelCardSubtleColor:{ref:"textColor",mix:0.7},filterPanelCardSubtleHoverColor:{ref:"textColor"},findMatchColor:pz,findMatchBackgroundColor:"#ffff00",findActiveMatchColor:pz,findActiveMatchBackgroundColor:"#ffa500",filterToolPanelGroupIndent:{ref:"spacing"},rowLoadingSkeletonEffectColor:J4(0.15),statusBarLabelColor:pz,statusBarLabelFontWeight:500,statusBarValueColor:pz,statusBarValueFontWeight:500,pinnedSourceRowTextColor:{ref:"textColor"},pinnedSourceRowBackgroundColor:{ref:"dataBackgroundColor"},pinnedSourceRowFontWeight:600,pinnedRowFontWeight:600,pinnedRowBackgroundColor:{ref:"dataBackgroundColor"},pinnedRowTextColor:{ref:"textColor"},rowDragIndicatorColor:{ref:"rangeSelectionBorderColor"},rowDragIndicatorWidth:2,columnDragIndicatorColor:{ref:"accentColor"},columnDragIndicatorWidth:2},LE=".ag-cell-batch-edit{background-color:var(--ag-cell-batch-edit-background-color);color:var(--ag-cell-batch-edit-text-color);display:inherit}.ag-row-batch-edit{background-color:var(--ag-row-batch-edit-background-color);color:var(--ag-row-batch-edit-text-color)}",p$={cellBatchEditBackgroundColor:"rgba(220 181 139 / 16%)",cellBatchEditTextColor:"#422f00",rowBatchEditBackgroundColor:{ref:"cellBatchEditBackgroundColor"},rowBatchEditTextColor:{ref:"cellBatchEditTextColor"}},DE={...p$,cellBatchEditTextColor:"#f3d0b3"},ME=()=>H4({feature:"batchEditStyle",params:p$,css:LE}),kE=ME(),fE=":where(.ag-button){background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0;text-indent:inherit;text-shadow:inherit;text-transform:inherit;word-spacing:inherit;&:disabled{cursor:default}&:focus-visible{box-shadow:var(--ag-focus-shadow);outline:none}}.ag-standard-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--ag-button-background-color);border:var(--ag-button-border);border-radius:var(--ag-button-border-radius);color:var(--ag-button-text-color);cursor:pointer;font-weight:var(--ag-button-font-weight);padding:var(--ag-button-vertical-padding) var(--ag-button-horizontal-padding);&:active{background-color:var(--ag-button-active-background-color);border:var(--ag-button-active-border);color:var(--ag-button-active-text-color)}&:disabled{background-color:var(--ag-button-disabled-background-color);border:var(--ag-button-disabled-border);color:var(--ag-button-disabled-text-color)}}.ag-standard-button:hover{background-color:var(--ag-button-hover-background-color);border:var(--ag-button-hover-border);color:var(--ag-button-hover-text-color)}",SE={buttonTextColor:"inherit",buttonFontWeight:"normal",buttonBackgroundColor:"transparent",buttonBorder:!1,buttonBorderRadius:{ref:"borderRadius"},buttonHorizontalPadding:{calc:"spacing * 2"},buttonVerticalPadding:{ref:"spacing"},buttonHoverTextColor:{ref:"buttonTextColor"},buttonHoverBackgroundColor:{ref:"buttonBackgroundColor"},buttonHoverBorder:{ref:"buttonBorder"},buttonActiveTextColor:{ref:"buttonHoverTextColor"},buttonActiveBackgroundColor:{ref:"buttonHoverBackgroundColor"},buttonActiveBorder:{ref:"buttonHoverBorder"},buttonDisabledTextColor:{ref:"inputDisabledTextColor"},buttonDisabledBackgroundColor:{ref:"inputDisabledBackgroundColor"},buttonDisabledBorder:{ref:"inputDisabledBorder"}};var VE=()=>H4({feature:"buttonStyle",params:{...SE,buttonBackgroundColor:x0,buttonBorder:!0,buttonHoverBackgroundColor:{ref:"rowHoverColor"},buttonActiveBorder:{color:C4}},css:fE}),RE=VE();var AE=".ag-column-drop-vertical-empty-message{align-items:center;border:dashed var(--ag-border-width);border-color:var(--ag-border-color);display:flex;inset:0;justify-content:center;margin:calc(var(--ag-spacing)*1.5) calc(var(--ag-spacing)*2);overflow:hidden;padding:calc(var(--ag-spacing)*2);position:absolute}";var jE=()=>{return H4({feature:"columnDropStyle",css:AE})},n$=jE();var OE={formulaToken1Color:"#3269c6",formulaToken1BackgroundColor:{ref:"formulaToken1Color",mix:0.08},formulaToken1Border:{color:{ref:"formulaToken1Color"}},formulaToken2Color:"#c0343f",formulaToken2BackgroundColor:{ref:"formulaToken2Color",mix:0.06},formulaToken2Border:{color:{ref:"formulaToken2Color"}},formulaToken3Color:"#8156b8",formulaToken3BackgroundColor:{ref:"formulaToken3Color",mix:0.08},formulaToken3Border:{color:{ref:"formulaToken3Color"}},formulaToken4Color:"#007c1f",formulaToken4BackgroundColor:{ref:"formulaToken4Color",mix:0.06},formulaToken4Border:{color:{ref:"formulaToken4Color"}},formulaToken5Color:"#b03e85",formulaToken5BackgroundColor:{ref:"formulaToken5Color",mix:0.08},formulaToken5Border:{color:{ref:"formulaToken5Color"}},formulaToken6Color:"#b74900",formulaToken6BackgroundColor:{ref:"formulaToken6Color",mix:0.06},formulaToken6Border:{color:{ref:"formulaToken6Color"}},formulaToken7Color:"#247492",formulaToken7BackgroundColor:{ref:"formulaToken7Color",mix:0.08},formulaToken7Border:{color:{ref:"formulaToken7Color"}}},PE=()=>H4({feature:"formulaStyle",params:OE}),TE=PE(),vE={noteIndicatorColor:{ref:"accentColor"},noteIndicatorSize:"8px",notePopupBackgroundColor:{ref:"menuBackgroundColor"},notePopupTextColor:{ref:"menuTextColor",mix:0.75},notePopupInputTextColor:{ref:"inputTextColor"},notePopupInputBackgroundColor:{ref:"inputBackgroundColor"},notePopupBorder:{ref:"dialogBorder"},notePopupPadding:{calc:"spacing * 0.5"}},IE=()=>H4({feature:"noteStyle",params:vE}),CE=IE(),yE={warn:(...z)=>{V(z[0],z[1])},error:(...z)=>{r(z[0],z[1])},preInitErr:(...z)=>{G2(z[0],z[2],z[1])}},bE=()=>GE(yE).withParams(FE).withPart(RE).withPart(n$).withPart(kE).withPart(TE).withPart(CE),xE='.ag-checkbox-input-wrapper,.ag-radio-button-input-wrapper{background-color:var(--ag-checkbox-unchecked-background-color);border:solid var(--ag-checkbox-border-width) var(--ag-checkbox-unchecked-border-color);flex:none;height:var(--ag-icon-size);position:relative;width:var(--ag-icon-size);&:where(.ag-checked){background-color:var(--ag-checkbox-checked-background-color);border-color:var(--ag-checkbox-checked-border-color)}&:where(.ag-checked):after{background-color:var(--ag-checkbox-checked-shape-color)}&:where(.ag-disabled){filter:grayscale();opacity:.5}}.ag-checkbox-input,.ag-radio-button-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;display:block;height:var(--ag-icon-size);margin:0;opacity:0;width:var(--ag-icon-size)}.ag-checkbox-input-wrapper:after,.ag-radio-button-input-wrapper:after{content:"";display:block;inset:0;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;pointer-events:none;position:absolute}.ag-checkbox-input-wrapper:where(:focus-within,:active),.ag-radio-button-input-wrapper:where(:focus-within,:active){box-shadow:var(--ag-focus-shadow)}.ag-checkbox-input-wrapper{border-radius:var(--ag-checkbox-border-radius);&:where(.ag-checked):after{-webkit-mask-image:var(--ag-checkbox-checked-shape-image);mask-image:var(--ag-checkbox-checked-shape-image)}&:where(.ag-indeterminate){background-color:var(--ag-checkbox-indeterminate-background-color);border-color:var(--ag-checkbox-indeterminate-border-color)}&:where(.ag-indeterminate):after{background-color:var(--ag-checkbox-indeterminate-shape-color);-webkit-mask-image:var(--ag-checkbox-indeterminate-shape-image);mask-image:var(--ag-checkbox-indeterminate-shape-image)}}.ag-cell-editing-error .ag-checkbox-input-wrapper:focus-within{box-shadow:var(--ag-focus-error-shadow)}.ag-radio-button-input-wrapper{border-radius:100%;&:where(.ag-checked):after{-webkit-mask-image:var(--ag-radio-checked-shape-image);mask-image:var(--ag-radio-checked-shape-image)}}',wE=()=>H4({feature:"checkboxStyle",params:{checkboxBorderWidth:1,checkboxBorderRadius:{ref:"borderRadius"},checkboxUncheckedBackgroundColor:x0,checkboxUncheckedBorderColor:$4(0.3),checkboxCheckedBackgroundColor:C4,checkboxCheckedBorderColor:{ref:"checkboxCheckedBackgroundColor"},checkboxCheckedShapeImage:{svg:''},checkboxCheckedShapeColor:x0,checkboxIndeterminateBackgroundColor:$4(0.3),checkboxIndeterminateBorderColor:{ref:"checkboxIndeterminateBackgroundColor"},checkboxIndeterminateShapeImage:{svg:''},checkboxIndeterminateShapeColor:x0,radioCheckedShapeImage:{svg:''}},css:xE}),NE=wE();var d$=()=>({...c6,...DE,backgroundColor:"hsl(217, 0%, 17%)",foregroundColor:"#FFF",chromeBackgroundColor:$4(0.05),rowHoverColor:I4(0.15),selectedRowBackgroundColor:I4(0.2),menuBackgroundColor:$4(0.1),browserColorScheme:"dark",popupShadow:"0 0px 20px #000A",cardShadow:"0 1px 4px 1px #000A",advancedFilterBuilderJoinPillColor:"#7a3a37",advancedFilterBuilderColumnPillColor:"#355f2d",advancedFilterBuilderOptionPillColor:"#5a3168",advancedFilterBuilderValuePillColor:"#374c86",filterPanelApplyButtonColor:pz,columnPanelApplyButtonColor:pz,findMatchColor:x0,findActiveMatchColor:x0,checkboxUncheckedBorderColor:$4(0.4),toggleButtonOffBackgroundColor:$4(0.4),rowBatchEditBackgroundColor:$4(0.1),formulaToken1Color:"#4da3e5",formulaToken2Color:"#f55864",formulaToken3Color:"#b688f2",formulaToken4Color:"#24bb4a",formulaToken5Color:"#e772ba",formulaToken6Color:"#f69b5f",formulaToken7Color:"#a3e6ff"});var gE=()=>({...d$(),backgroundColor:"#1f2836"});var hE=()=>H4({feature:"colorScheme",params:c6,modeParams:{light:c6,dark:d$(),"dark-blue":gE()}}),uE=hE();var r$={aggregation:'',arrows:'',asc:'',cancel:'',chart:'',"color-picker":'',columns:'',contracted:'',copy:'',cross:'',csv:'',cut:'',desc:'',down:'',excel:'',expanded:'',eye:'',"eye-slash":'',filter:'',first:'',grip:'',group:'',last:'',left:'',linked:'',loading:'',maximize:'',menu:'',"menu-alt":'',minimize:'',minus:'',next:'',none:'',"not-allowed":'',paste:'',pin:'',pivot:'',plus:'',previous:'',right:'',save:'',search:'',settings:'',"small-left":'',"small-right":'',tick:'',"tree-closed":'',"tree-indeterminate":'',"tree-open":'',unlinked:'',up:''},t$={aasc:'',adesc:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',"column-arrow":'',edit:'',"filter-add":'',"pinned-bottom":'',"pinned-top":'',"small-down":'',"small-up":'',"un-pin":''},mE=(z={})=>{let J="";for(let Q of[...Object.keys(r$),...Object.keys(t$)]){let Z=cE(Q,z.strokeWidth);J+=`.ag-icon-${Q}::before { mask-image: url('data:image/svg+xml,${encodeURIComponent(Z)}'); } +`}return J},cE=(z,J=1.5)=>{let Q=t$[z];if(Q)return Q;let Z=r$[z];if(!Z)throw Error(`Missing icon data for ${z}`);return``+Z+""},iE=(z={})=>{return H4({feature:"iconSet",css:()=>mE(z)})};var pE=iE();var nE=":where(.ag-input-field-input[type=number]:not(.ag-number-field-input-stepper)){-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;&::-webkit-inner-spin-button,&::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}}.ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){background-color:var(--ag-input-background-color);border:var(--ag-input-border);border-radius:var(--ag-input-border-radius);color:var(--ag-input-text-color);font-family:inherit;font-size:inherit;line-height:inherit;margin:0;min-height:var(--ag-input-height);padding:0;&:where(:disabled){background-color:var(--ag-input-disabled-background-color);border:var(--ag-input-disabled-border);color:var(--ag-input-disabled-text-color)}&:where(:focus){background-color:var(--ag-input-focus-background-color);border:var(--ag-input-focus-border);box-shadow:var(--ag-input-focus-shadow);color:var(--ag-input-focus-text-color);outline:none}&:where(:invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}&:where(.invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}&::-moz-placeholder{color:var(--ag-input-placeholder-text-color)}&::placeholder{color:var(--ag-input-placeholder-text-color)}}:where(.ag-ltr) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding-left:var(--ag-input-padding-start)}:where(.ag-rtl) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding-right:var(--ag-input-padding-start)}&:where(.ag-ltr,.ag-rtl) .ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){padding:0 var(--ag-input-padding-start)}:where(.ag-column-select-header-filter-wrapper),:where(.ag-filter-add-select),:where(.ag-filter-filter),:where(.ag-filter-toolpanel-search),:where(.ag-floating-filter-search-icon),:where(.ag-mini-filter){.ag-input-wrapper:before{background-color:currentcolor;color:var(--ag-input-icon-color);content:\"\";display:block;height:12px;-webkit-mask-image:url(\"data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==\");mask-image:url(\"data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMS41Ij48cGF0aCBkPSJNNS4zIDlhMy43IDMuNyAwIDEgMCAwLTcuNSAzLjcgMy43IDAgMCAwIDAgNy41Wk0xMC41IDEwLjUgOC4zIDguMiIvPjwvc3ZnPg==\");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;opacity:.5;position:absolute;width:12px}}:where(.ag-ltr) :where(.ag-column-select-header-filter-wrapper),:where(.ag-ltr) :where(.ag-filter-add-select),:where(.ag-ltr) :where(.ag-filter-filter),:where(.ag-ltr) :where(.ag-filter-toolpanel-search),:where(.ag-ltr) :where(.ag-floating-filter-search-icon),:where(.ag-ltr) :where(.ag-mini-filter){.ag-input-wrapper:before{margin-left:var(--ag-spacing)}.ag-number-field-input,.ag-text-field-input{padding-left:calc(var(--ag-spacing)*1.5 + 12px)}}:where(.ag-rtl) :where(.ag-column-select-header-filter-wrapper),:where(.ag-rtl) :where(.ag-filter-add-select),:where(.ag-rtl) :where(.ag-filter-filter),:where(.ag-rtl) :where(.ag-filter-toolpanel-search),:where(.ag-rtl) :where(.ag-floating-filter-search-icon),:where(.ag-rtl) :where(.ag-mini-filter){.ag-input-wrapper:before{margin-right:var(--ag-spacing)}.ag-number-field-input,.ag-text-field-input{padding-right:calc(var(--ag-spacing)*1.5 + 12px)}}",dE=".ag-input-field-input:where(input:not([type]),input[type=text],input[type=number],input[type=tel],input[type=date],input[type=datetime-local],textarea){&:focus{box-shadow:var(--ag-focus-shadow);&:where(.invalid),&:where(:invalid){box-shadow:var(--ag-focus-error-shadow)}}}";var rE={inputBackgroundColor:"transparent",inputBorder:!1,inputBorderRadius:0,inputTextColor:{ref:"textColor"},inputPlaceholderTextColor:{ref:"inputTextColor",mix:0.5},inputPaddingStart:0,inputHeight:{calc:"max(iconSize, fontSize) + spacing * 2"},inputFocusBackgroundColor:{ref:"inputBackgroundColor"},inputFocusBorder:{ref:"inputBorder"},inputFocusShadow:"none",inputFocusTextColor:{ref:"inputTextColor"},inputDisabledBackgroundColor:{ref:"inputBackgroundColor"},inputDisabledBorder:{ref:"inputBorder"},inputDisabledTextColor:{ref:"inputTextColor"},inputInvalidBackgroundColor:{ref:"inputBackgroundColor"},inputInvalidBorder:{ref:"inputBorder"},inputInvalidTextColor:{ref:"inputTextColor"},inputIconColor:{ref:"inputTextColor"},pickerButtonBorder:!1,pickerButtonFocusBorder:{ref:"inputFocusBorder"},pickerButtonBackgroundColor:{ref:"backgroundColor"},pickerButtonFocusBackgroundColor:{ref:"backgroundColor"},pickerListBorder:!1,pickerListBackgroundColor:{ref:"backgroundColor"},colorPickerThumbSize:18,colorPickerTrackSize:12,colorPickerThumbBorderWidth:3,colorPickerTrackBorderRadius:12,colorPickerColorBorderRadius:4};var tE=()=>H4({feature:"inputStyle",params:{...rE,inputBackgroundColor:x0,inputBorder:!0,inputBorderRadius:{ref:"borderRadius"},inputPaddingStart:{ref:"spacing"},inputFocusBorder:{color:C4},inputFocusShadow:{ref:"focusShadow"},inputDisabledBackgroundColor:$4(0.06),inputDisabledTextColor:{ref:"textColor",mix:0.5},inputInvalidBorder:{color:{ref:"invalidColor"}},pickerButtonBorder:!0,pickerListBorder:!0},css:()=>nE+dE}),sE=tE();var lE=".ag-tabs-header{background-color:var(--ag-tab-bar-background-color);border-bottom:var(--ag-tab-bar-border);display:flex;flex:1;gap:var(--ag-tab-spacing);padding:var(--ag-tab-bar-top-padding) var(--ag-tab-bar-horizontal-padding) 0}.ag-tabs-header-wrapper{display:flex}.ag-tabs-close-button-wrapper{align-items:center;border:0;display:flex;padding:var(--ag-spacing)}:where(.ag-ltr) .ag-tabs-close-button-wrapper{border-right:solid var(--ag-border-width) var(--ag-border-color)}:where(.ag-rtl) .ag-tabs-close-button-wrapper{border-left:solid var(--ag-border-width) var(--ag-border-color)}.ag-tabs-close-button{background-color:unset;border:0;cursor:pointer;padding:0}.ag-tab{align-items:center;background-color:var(--ag-tab-background-color);border-left:var(--ag-tab-selected-border-width) solid transparent;border-right:var(--ag-tab-selected-border-width) solid transparent;color:var(--ag-tab-text-color);cursor:pointer;display:flex;flex:1;justify-content:center;padding:var(--ag-tab-top-padding) var(--ag-tab-horizontal-padding) var(--ag-tab-bottom-padding);position:relative}.ag-tab:hover{background-color:var(--ag-tab-hover-background-color);color:var(--ag-tab-hover-text-color)}.ag-tab.ag-tab-selected{background-color:var(--ag-tab-selected-background-color);color:var(--ag-tab-selected-text-color)}:where(.ag-ltr) .ag-tab.ag-tab-selected:where(:not(:first-of-type)){border-left-color:var(--ag-tab-selected-border-color)}:where(.ag-rtl) .ag-tab.ag-tab-selected:where(:not(:first-of-type)){border-right-color:var(--ag-tab-selected-border-color)}:where(.ag-ltr) .ag-tab.ag-tab-selected:where(:not(:last-of-type)){border-right-color:var(--ag-tab-selected-border-color)}:where(.ag-rtl) .ag-tab.ag-tab-selected:where(:not(:last-of-type)){border-left-color:var(--ag-tab-selected-border-color)}.ag-tab:after{background-color:var(--ag-tab-selected-underline-color);bottom:0;content:\"\";display:block;height:var(--ag-tab-selected-underline-width);left:0;opacity:0;position:absolute;right:0;transition:opacity var(--ag-tab-selected-underline-transition-duration)}.ag-tab.ag-tab-selected:after{opacity:1}";var aE={tabBarBackgroundColor:"transparent",tabBarHorizontalPadding:0,tabBarTopPadding:0,tabBackgroundColor:"transparent",tabTextColor:{ref:"textColor"},tabHorizontalPadding:{ref:"spacing"},tabTopPadding:{ref:"spacing"},tabBottomPadding:{ref:"spacing"},tabSpacing:"0",tabHoverBackgroundColor:{ref:"tabBackgroundColor"},tabHoverTextColor:{ref:"tabTextColor"},tabSelectedBackgroundColor:{ref:"tabBackgroundColor"},tabSelectedTextColor:{ref:"tabTextColor"},tabSelectedBorderWidth:{ref:"borderWidth"},tabSelectedBorderColor:"transparent",tabSelectedUnderlineColor:"transparent",tabSelectedUnderlineWidth:0,tabSelectedUnderlineTransitionDuration:0,tabBarBorder:!1};var oE=()=>H4({feature:"tabStyle",params:{...aE,tabBarBorder:!0,tabBarBackgroundColor:J4(0.05),tabTextColor:{ref:"textColor",mix:0.7},tabSelectedTextColor:{ref:"textColor"},tabHoverTextColor:{ref:"textColor"},tabSelectedBorderColor:{ref:"borderColor"},tabSelectedBackgroundColor:x0},css:lE}),eE=oE();var z3=()=>({fontFamily:[{googleFont:"IBM Plex Sans"},...h$()]}),J3=()=>bE().withPart(NE).withPart(uE).withPart(pE).withPart(eE).withPart(sE).withPart(n$).withParams(z3()),DJ=J3();var Iz=(z,J,Q,Z,$)=>({changeKey:z,type:J,defaultValue:Q,noWarn:Z,cacheDefault:$}),Q3=Iz("cellHorizontalPadding","length",16),Z3=Iz("indentationLevel","length",0,!0,!0),$3=Iz("rowGroupIndentSize","length",0),t7=Iz("rowHeight","length",42),s7=Iz("headerHeight","length",48),RQ=Iz("rowBorderWidth","border",1),l7=Iz("pinnedRowBorderWidth","border",1),X3=Iz("headerRowBorderWidth","border",1);function Y3(z,J){for(let Q of J.sort((Z,$)=>Z.moduleName.localeCompare($.moduleName))){let Z=Q.css;if(Z)z.set(`module-${Q.moduleName}`,Z)}}var q3=class extends BE{initVariables(){this.addManagedPropertyListener("rowHeight",()=>this.refreshRowHeightVariable()),this.getSizeEl(t7),this.getSizeEl(s7),this.getSizeEl(RQ),this.getSizeEl(l7),this.refreshRowBorderWidthVariable()}getPinnedRowBorderWidth(){return this.getCSSVariablePixelValue(l7)}getRowBorderWidth(){return this.getCSSVariablePixelValue(RQ)}getHeaderRowBorderWidth(){return this.getCSSVariablePixelValue(X3)}getDefaultRowHeight(){return this.getCSSVariablePixelValue(t7)}getDefaultHeaderHeight(){return this.getCSSVariablePixelValue(s7)}getDefaultCellHorizontalPadding(){return this.getCSSVariablePixelValue(Q3)}getCellPaddingLeft(){let z=this.getDefaultCellHorizontalPadding(),J=this.getCSSVariablePixelValue(Z3),Q=this.getCSSVariablePixelValue($3);return z-1+Q*J}getCellPadding(){let z=this.getDefaultCellHorizontalPadding()-1;return this.getCellPaddingLeft()+z}getDefaultColumnMinWidth(){return Math.min(36,this.getDefaultRowHeight())}refreshRowHeightVariable(){let{eRootDiv:z}=this,J=z.style.getPropertyValue("--ag-line-height").trim(),Q=this.gos.get("rowHeight");if(Q==null||isNaN(Q)||!isFinite(Q)){if(J!==null)z.style.setProperty("--ag-line-height",null);return-1}let Z=`${Q}px`;if(J!=Z)return z.style.setProperty("--ag-line-height",Z),Q;return J!=""?Number.parseFloat(J):-1}fireStylesChangedEvent(z){if(z==="rowBorderWidth")this.refreshRowBorderWidthVariable();super.fireStylesChangedEvent(z)}refreshRowBorderWidthVariable(){let z=this.getCSSVariablePixelValue(RQ);this.eRootDiv.style.setProperty("--ag-internal-row-border-width",`${z}px`)}postProcessThemeChange(z,J){if(z&&getComputedStyle(this.getMeasurementContainer()).getPropertyValue("--ag-legacy-styles-loaded"))if(J)r(106);else r(239)}getAdditionalCss(){let z=new Map;return z.set("core",[KE]),Y3(z,Array.from(aG())),z}getDefaultTheme(){return DJ}varError(z,J){V(9,{variable:{cssName:z,defaultValue:J}})}themeError(z){r(240,{theme:z})}shadowRootError(){r(293)}},G3=class extends k0{constructor(){super(...arguments);this.beanName="eventSvc",this.eventServiceType="global",this.globalSvc=new R4}addListener(z,J,Q){this.globalSvc.addEventListener(z,J,Q)}removeListener(z,J,Q){this.globalSvc.removeEventListener(z,J,Q)}addGlobalListener(z,J=!1){this.globalSvc.addGlobalListener(z,J)}removeGlobalListener(z,J=!1){this.globalSvc.removeGlobalListener(z,J)}dispatchEvent(z){this.globalSvc.dispatchEvent(this.gos.addCommon(z))}dispatchEventOnce(z){this.globalSvc.dispatchEventOnce(this.gos.addCommon(z))}},U3=class extends G3{postConstruct(){let{globalListener:z,globalSyncListener:J}=this.beans;if(z)this.addGlobalListener(z,!0);if(J)this.addGlobalListener(J,!1)}};function sQ(z,J,Q){let Z=z.visibleCols.headerGroupRowCount;if(Q>=Z)return{column:J,headerRowIndex:Q};let $=J.parent;while($&&$.getProvidedColumnGroup().getLevel()>Q)$=$.parent;let X=J.isSpanHeaderHeight();if(!$||X&&$.isPadding())return{column:J,headerRowIndex:Z};return{column:$,headerRowIndex:$.getProvidedColumnGroup().getLevel()}}var _3=class extends S{constructor(){super(...arguments);this.beanName="headerNavigation",this.currentHeaderRowWithoutSpan=-1}postConstruct(){let z=this.beans;z.ctrlsSvc.whenReady(this,(Q)=>{this.gridBodyCon=Q.gridBodyCtrl});let J=Y0(z);this.addManagedElementListeners(J,{mousedown:()=>{this.currentHeaderRowWithoutSpan=-1}})}getHeaderPositionForColumn(z,J){let Q,{colModel:Z,colGroupSvc:$,ctrlsSvc:X}=this.beans;if(typeof z==="string"){if(Q=Z.getCol(z),!Q)Q=$?.getColumnGroup(z)??null}else Q=z;if(!Q)return null;let q=X.getHeaderRowContainerCtrl()?.getAllCtrls(),G=y(q||[]).type==="filter",U=Q4(this.beans)-1,_=-1,H=Q;while(H)_++,H=H.parent;let W=_;if(J&&G&&W===U-1)W++;return W===-1?null:{headerRowIndex:W,column:Q}}navigateVertically(z,J){let{focusSvc:Q,visibleCols:Z}=this.beans,{focusedHeader:$}=Q;if(!$)return!1;let{headerRowIndex:X}=$,Y=$.column,q=Q4(this.beans),G=this.getHeaderRowType(X),U=Z.headerGroupRowCount,{headerRowIndex:_,column:H,headerRowIndexWithoutSpan:W}=z==="UP"?H3(G,Y,X):W3(Y,X,U),B=!1;if(_<0)_=0,H=Y,B=!0;if(_>=q)_=-1,this.currentHeaderRowWithoutSpan=-1;else if(W!==void 0)this.currentHeaderRowWithoutSpan=W;if(!B&&!H)return!1;return Q.focusHeaderPosition({headerPosition:{headerRowIndex:_,column:H},allowUserOverride:!0,event:J})}navigateHorizontally(z,J=!1,Q){let{focusSvc:Z,gos:$}=this.beans,X={...Z.focusedHeader},Y,q;if(this.currentHeaderRowWithoutSpan!==-1)X.headerRowIndex=this.currentHeaderRowWithoutSpan;else this.currentHeaderRowWithoutSpan=X.headerRowIndex;if(z==="LEFT"!==$.get("enableRtl"))q="Before",Y=this.findHeader(X,q);else q="After",Y=this.findHeader(X,q);let G=$.getCallback("tabToNextHeader");if(J&&G){let U=Z.focusHeaderPositionFromUserFunc({userFunc:G,headerPosition:Y,direction:q});if(U){let{headerRowIndex:_}=Z.focusedHeader||{};if(_!=null&&_!=X.headerRowIndex)this.currentHeaderRowWithoutSpan=_}return U}if(Y||!J)return Z.focusHeaderPosition({headerPosition:Y,direction:q,fromTab:J,allowUserOverride:!0,event:Q});return this.focusNextHeaderRow(X,q,Q)}focusNextHeaderRow(z,J,Q){let Z=this.beans,$=z.headerRowIndex,X,Y,q=Q4(Z),G=this.beans.visibleCols.allCols;if(J==="Before"){if($<=0)return!1;X=y(G),Y=$-1,this.currentHeaderRowWithoutSpan-=1}else if(X=G[0],Y=$+1,this.currentHeaderRowWithoutSpan=q)_=-1;return Z.focusSvc.focusHeaderPosition({headerPosition:{column:U,headerRowIndex:_},direction:J,fromTab:!0,allowUserOverride:!0,event:Q})}scrollToColumn(z,J="After"){if(z.getPinned())return;let Q;if(K0(z)){let Z=z.getDisplayedLeafColumns();Q=J==="Before"?y(Z):Z[0]}else Q=z;this.gridBodyCon.scrollFeature.ensureColumnVisible(Q)}findHeader(z,J){let{colGroupSvc:Q,visibleCols:Z}=this.beans,$=z.column;if($ instanceof R2){let G=$.getDisplayedLeafColumns();$=J==="Before"?G[0]:G[G.length-1]}let X=J==="Before"?Z.getColBefore($):Z.getColAfter($);if(!X)return;let Y=Z.headerGroupRowCount;if(z.headerRowIndex>=Y)return{headerRowIndex:z.headerRowIndex,column:X};let q=Q?.getColGroupAtLevel(X,z.headerRowIndex);if(!q)return{headerRowIndex:X instanceof B4&&X.isSpanHeaderHeight()?Z.headerGroupRowCount:z.headerRowIndex,column:X};if(q.isPadding()&&X.isSpanHeaderHeight())return{headerRowIndex:Z.headerGroupRowCount,column:X};return{headerRowIndex:z.headerRowIndex,column:q??X}}getHeaderRowType(z){let J=this.beans.ctrlsSvc.getHeaderRowContainerCtrl();if(J)return J.getRowType(z)}};function H3(z,J,Q){let Z=Q-1;if(z!=="filter"){let $=J instanceof B4&&J.isSpanHeaderHeight(),X=J.parent;while(X&&(X.getProvidedColumnGroup().getLevel()>Z||$&&X.isPadding()))X=X.parent;if(X)if($)return{column:X,headerRowIndex:X.getProvidedColumnGroup().getLevel(),headerRowIndexWithoutSpan:Z};else return{column:X,headerRowIndex:Z,headerRowIndexWithoutSpan:Z}}return{column:J,headerRowIndex:Z,headerRowIndexWithoutSpan:Z}}function W3(z,J,Q){let Z=J+1,$={column:z,headerRowIndex:Z,headerRowIndexWithoutSpan:Z};if(z instanceof R2){if(Z>=Q)return{column:z.getDisplayedLeafColumns()[0],headerRowIndex:Q,headerRowIndexWithoutSpan:Z};let Y=z.getDisplayedChildren()[0];if(Y instanceof R2&&Y.isPadding()){let G=Y.getDisplayedLeafColumns()[0];if(G.isSpanHeaderHeight())Y=G}if($.column=Y,Y instanceof B4&&Y.isSpanHeaderHeight())$.headerRowIndex=Q,$.headerRowIndexWithoutSpan=Z}return $}var B3=class extends S{constructor(){super(...arguments);this.beanName="focusSvc",this.focusFallbackTimeout=null,this.needsFocusRestored=!1}wireBeans(z){this.colModel=z.colModel,this.visibleCols=z.visibleCols,this.rowRenderer=z.rowRenderer,this.navigation=z.navigation,this.filterManager=z.filterManager,this.overlays=z.overlays}postConstruct(){let z=this.clearFocusedCell.bind(this);this.addManagedEventListeners({columnPivotModeChanged:z,newColumnsLoaded:this.onColumnEverythingChanged.bind(this),columnGroupOpened:z,columnRowGroupChanged:z}),this.addDestroyFunc(D_(this.beans))}attemptToRecoverFocus(){if(this.needsFocusRestored=!0,this.focusFallbackTimeout!=null)clearTimeout(this.focusFallbackTimeout);this.focusFallbackTimeout=window.setTimeout(this.setFocusRecovered.bind(this),100)}setFocusRecovered(){if(this.needsFocusRestored=!1,this.focusFallbackTimeout!=null)clearTimeout(this.focusFallbackTimeout),this.focusFallbackTimeout=null}shouldTakeFocus(){if(this.gos.get("suppressFocusAfterRefresh"))return this.setFocusRecovered(),!1;if(this.needsFocusRestored)return this.setFocusRecovered(),!0;return this.doesRowOrCellHaveBrowserFocus()}onColumnEverythingChanged(){if(!this.focusedCell)return;let z=this.focusedCell.column,J=this.colModel.getCol(z.getId());if(z!==J)this.clearFocusedCell()}getFocusCellToUseAfterRefresh(){let{gos:z,focusedCell:J}=this;if(z.get("suppressFocusAfterRefresh")||z.get("suppressCellFocus")||!J)return null;if(!this.doesRowOrCellHaveBrowserFocus())return null;return J}getFocusHeaderToUseAfterRefresh(){if(this.gos.get("suppressFocusAfterRefresh")||!this.focusedHeader)return null;if(!this.isDomDataPresentInHierarchy(n(this.beans),Y$))return null;return this.focusedHeader}doesRowOrCellHaveBrowserFocus(){let z=n(this.beans);if(this.isDomDataPresentInHierarchy(z,h6,!0))return!0;return this.isDomDataPresentInHierarchy(z,u6,!0)}isDomDataPresentInHierarchy(z,J,Q){let Z=z;while(Z){let $=K9(this.gos,Z,J);if($){if($.destroyed&&Q)return this.attemptToRecoverFocus(),!1;return!0}Z=Z.parentNode}return!1}getFocusedCell(){return this.focusedCell}getFocusEventParams(z){let{rowIndex:J,rowPinned:Q,column:Z}=z,$={rowIndex:J,rowPinned:Q,column:Z,isFullWidthCell:!1},X=this.rowRenderer.getRowByPosition({rowIndex:J,rowPinned:Q});if(X)$.isFullWidthCell=X.isFullWidth();return $}clearFocusedCell(){if(this.focusedCell==null)return;let z=this.getFocusEventParams(this.focusedCell);this.focusedCell=null,this.eventSvc.dispatchEvent({type:"cellFocusCleared",...z})}setFocusedCell(z){this.setFocusRecovered();let{column:J,rowIndex:Q,rowPinned:Z,forceBrowserFocus:$=!1,preventScrollOnBrowserFocus:X=!1,sourceEvent:Y}=z,q=this.colModel.getCol(J);if(!q){this.focusedCell=null;return}this.focusedCell={rowIndex:Q,rowPinned:q0(Z),column:q};let G=this.getFocusEventParams(this.focusedCell);this.eventSvc.dispatchEvent({type:"cellFocused",...G,...this.previousCellFocusParams&&{previousParams:this.previousCellFocusParams},forceBrowserFocus:$,preventScrollOnBrowserFocus:X,sourceEvent:Y}),this.previousCellFocusParams=G}isCellFocused(z){if(this.focusedCell==null)return!1;return r1(z,this.focusedCell)}isHeaderWrapperFocused(z){if(this.focusedHeader==null)return!1;let{column:J,rowCtrl:{rowIndex:Q,pinned:Z}}=z,{column:$,headerRowIndex:X}=this.focusedHeader;return J===$&&Q===X&&Z==$.getPinned()}focusHeaderPosition(z){if(this.setFocusRecovered(),D4(this.beans))return!1;let{direction:J,fromTab:Q,allowUserOverride:Z,event:$,fromCell:X,rowWithoutSpanValue:Y,scroll:q=!0}=z,{headerPosition:G}=z;if(X&&this.filterManager?.isAdvFilterHeaderActive())return this.focusAdvancedFilter(G);if(Z){let U=this.focusedHeader,_=Q4(this.beans);if(Q){let H=this.gos.getCallback("tabToNextHeader");if(H)G=this.getHeaderPositionFromUserFunc({userFunc:H,direction:J,currentPosition:U,headerPosition:G,headerRowCount:_})}else{let H=this.gos.getCallback("navigateToNextHeader");if(H&&$){let W={key:$.key,previousHeaderPosition:U,nextHeaderPosition:G,headerRowCount:_,event:$},B=H(W);G=B===null?U:B}}}if(!G)return!1;return this.focusProvidedHeaderPosition({headerPosition:G,direction:J,event:$,fromCell:X,rowWithoutSpanValue:Y,scroll:q})}focusHeaderPositionFromUserFunc(z){if(D4(this.beans))return!1;let{userFunc:J,headerPosition:Q,direction:Z,event:$}=z,X=this.focusedHeader,Y=Q4(this.beans),q=this.getHeaderPositionFromUserFunc({userFunc:J,direction:Z,currentPosition:X,headerPosition:Q,headerRowCount:Y});return!!q&&this.focusProvidedHeaderPosition({headerPosition:q,direction:Z,event:$})}getHeaderPositionFromUserFunc(z){let{userFunc:J,direction:Q,currentPosition:Z,headerPosition:$,headerRowCount:X}=z,q=J({backwards:Q==="Before",previousHeaderPosition:Z,nextHeaderPosition:$,headerRowCount:X});if(q===!0)return Z;if(q===!1)return null;return q}focusProvidedHeaderPosition(z){let{headerPosition:J,direction:Q,fromCell:Z,rowWithoutSpanValue:$,event:X,scroll:Y=!0}=z,{column:q,headerRowIndex:G}=J,{filterManager:U,ctrlsSvc:_,headerNavigation:H}=this.beans;if(this.focusedHeader&&m_(z.headerPosition,this.focusedHeader))return!1;if(G===-1){if(U?.isAdvFilterHeaderActive())return this.focusAdvancedFilter(J);return this.focusGridView({column:q,event:X})}if(Y)H?.scrollToColumn(q,Q);let B=_.getHeaderRowContainerCtrl(q.getPinned())?.focusHeader(J.headerRowIndex,q,X)||!1;if(H&&B&&($!=null||Z))H.currentHeaderRowWithoutSpan=$??-1;return B}focusFirstHeader(){if(this.overlays?.exclusive&&this.focusOverlay())return!0;let z=this.visibleCols.allCols[0];if(!z)return!1;let J=sQ(this.beans,z,0);return this.focusHeaderPosition({headerPosition:J,rowWithoutSpanValue:0})}focusLastHeader(z){if(this.overlays?.exclusive&&this.focusOverlay(!0))return!0;let J=Q4(this.beans)-1,Q=y(this.visibleCols.allCols);return this.focusHeaderPosition({headerPosition:{headerRowIndex:J,column:Q},rowWithoutSpanValue:-1,event:z})}focusPreviousFromFirstCell(z){if(this.filterManager?.isAdvFilterHeaderActive())return this.focusAdvancedFilter(null);return this.focusLastHeader(z)}isAnyCellFocused(){return!!this.focusedCell}isRowFocused(z,J){if(this.focusedCell==null)return!1;return this.focusedCell.rowIndex===z&&this.focusedCell.rowPinned===q0(J)}focusOverlay(z){let J=this.overlays?.isVisible()&&this.overlays.eWrapper?.getGui();return!!J&&E0(J,z)}getDefaultTabToNextGridContainerTarget(z){let{backwards:J,focusableContainers:Q}=z,Z=J?-1:1,$,X=()=>{if($===void 0)$=this.getGridBodyTabTarget(J);return $};for(let Y=z.nextIndex;Y>=0&&Y{z.executeLaterVMTurn(()=>this.updateScrollVisibleImpl())});else this.updateScrollVisibleImpl()}updateScrollVisibleImpl(){let z=this.ctrlsSvc.get("center");if(!z||this.colAnimation?.isActive())return;let J={horizontalScrollShowing:z.isHorizontalScrollShowing(),verticalScrollShowing:this.verticalScrollShowing};this.setScrollsVisible(J),this.updateScrollGap()}updateScrollGap(){let z=this.ctrlsSvc.get("center"),J=z.hasHorizontalScrollGap(),Q=z.hasVerticalScrollGap();if(this.horizontalScrollGap!==J||this.verticalScrollGap!==Q)this.horizontalScrollGap=J,this.verticalScrollGap=Q,this.eventSvc.dispatchEvent({type:"scrollGapChanged"})}setScrollsVisible(z){if(this.horizontalScrollShowing!==z.horizontalScrollShowing||this.verticalScrollShowing!==z.verticalScrollShowing)this.horizontalScrollShowing=z.horizontalScrollShowing,this.verticalScrollShowing=z.verticalScrollShowing,this.eventSvc.dispatchEvent({type:"scrollVisibilityChanged"})}getScrollbarWidth(){if(this.scrollbarWidth==null){let z=this.gos.get("scrollbarWidth"),Q=typeof z==="number"&&z>=0?z:wZ();if(Q!=null)this.scrollbarWidth=Q,this.eventSvc.dispatchEvent({type:"scrollbarWidthChanged"})}return this.scrollbarWidth}},K3=class extends S{constructor(){super(...arguments);this.beanName="gridDestroySvc",this.destroyCalled=!1}destroy(){if(this.destroyCalled)return;let{stateSvc:z,ctrlsSvc:J,context:Q}=this.beans;this.eventSvc.dispatchEvent({type:"gridPreDestroyed",state:z?.getState()??{}}),this.destroyCalled=!0,J.get("gridCtrl")?.destroyGridUi(),Q.destroy(),super.destroy()}},F3=["columnEverythingChanged","newColumnsLoaded","columnPivotModeChanged","pivotMaxColumnsExceeded","columnRowGroupChanged","expandOrCollapseAll","columnPivotChanged","gridColumnsChanged","columnValueChanged","columnMoved","columnVisible","columnPinned","columnGroupOpened","columnResized","displayedColumnsChanged","virtualColumnsChanged","columnHeaderMouseOver","columnHeaderMouseLeave","columnHeaderClicked","columnHeaderContextMenu","asyncTransactionsFlushed","rowGroupOpened","rowDataUpdated","pinnedRowDataChanged","pinnedRowsChanged","rangeSelectionChanged","cellSelectionChanged","chartCreated","chartRangeSelectionChanged","chartOptionsChanged","chartDestroyed","toolPanelVisibleChanged","toolPanelSizeChanged","modelUpdated","cutStart","cutEnd","pasteStart","pasteEnd","fillStart","fillEnd","cellSelectionDeleteStart","cellSelectionDeleteEnd","rangeDeleteStart","rangeDeleteEnd","undoStarted","undoEnded","redoStarted","redoEnded","cellClicked","cellDoubleClicked","cellMouseDown","cellContextMenu","cellValueChanged","cellEditRequest","rowValueChanged","headerFocused","cellFocused","rowSelected","selectionChanged","tooltipShow","tooltipHide","cellKeyDown","cellMouseOver","cellMouseOut","filterChanged","filterModified","filterUiChanged","filterOpened","floatingFilterUiChanged","advancedFilterBuilderVisibleChanged","sortChanged","virtualRowRemoved","rowClicked","rowDoubleClicked","gridReady","gridPreDestroyed","gridSizeChanged","viewportChanged","firstDataRendered","dragStarted","dragStopped","dragCancelled","rowEditingStarted","rowEditingStopped","cellEditingStarted","cellEditingStopped","bodyScroll","bodyScrollEnd","paginationChanged","componentStateChanged","storeRefreshed","stateUpdated","columnMenuVisibleChanged","contextMenuVisibleChanged","rowDragEnter","rowDragMove","rowDragLeave","rowDragEnd","rowDragCancel","findChanged","rowResizeStarted","rowResizeEnded","columnsReset","bulkEditingStarted","bulkEditingStopped","batchEditingStarted","batchEditingStopped"];var R6=new Set(["gridPreDestroyed","fillStart","pasteStart"]),G5=F3.reduce((z,J)=>{return z[J]=FU(J),z},{}),L3=["__ob__","__v_skip","__metadata__"];function s$(z,J,Q){return new Set([...L3,...Q??[],...Object.keys(J),...z])}var C1={agSetColumnFilter:"SetFilter",agSetColumnFloatingFilter:"SetFilter",agMultiColumnFilter:"MultiFilter",agMultiColumnFloatingFilter:"MultiFilter",agGroupColumnFilter:"GroupFilter",agGroupColumnFloatingFilter:"GroupFilter",agGroupCellRenderer:"GroupCellRenderer",agGroupRowRenderer:"GroupCellRenderer",agRichSelect:"RichSelect",agRichSelectCellEditor:"RichSelect",agDetailCellRenderer:"SharedMasterDetail",agSparklineCellRenderer:"Sparklines",agDragAndDropImage:"SharedDragAndDrop",agColumnHeader:"ColumnHeaderComp",agColumnGroupHeader:"ColumnGroupHeaderComp",agSortIndicator:"Sort",agAnimateShowChangeCellRenderer:"HighlightChanges",agAnimateSlideCellRenderer:"HighlightChanges",agLoadingCellRenderer:"LoadingCellRenderer",agSkeletonCellRenderer:"SkeletonCellRenderer",agCheckboxCellRenderer:"CheckboxCellRenderer",agLoadingOverlay:"Overlay",agExportingOverlay:"Overlay",agNoRowsOverlay:"Overlay",agNoMatchingRowsOverlay:"Overlay",agTooltipComponent:"Tooltip",agReadOnlyFloatingFilter:"CustomFilter",agTextColumnFilter:"TextFilter",agNumberColumnFilter:"NumberFilter",agBigIntColumnFilter:"BigIntFilter",agDateColumnFilter:"DateFilter",agDateInput:"DateFilter",agTextColumnFloatingFilter:"TextFilter",agNumberColumnFloatingFilter:"NumberFilter",agBigIntColumnFloatingFilter:"BigIntFilter",agDateColumnFloatingFilter:"DateFilter",agFormulaCellEditor:"Formula",agCellEditor:"TextEditor",agSelectCellEditor:"SelectEditor",agTextCellEditor:"TextEditor",agNumberCellEditor:"NumberEditor",agDateCellEditor:"DateEditor",agDateStringCellEditor:"DateEditor",agCheckboxCellEditor:"CheckboxEditor",agLargeTextCellEditor:"LargeTextEditor",agMenuItem:"MenuItem",agColumnsToolPanel:"ColumnsToolPanel",agFiltersToolPanel:"FiltersToolPanel",agNewFiltersToolPanel:"NewFiltersToolPanel",agAggregationComponent:"StatusBar",agSelectedRowCountComponent:"StatusBar",agTotalRowCountComponent:"StatusBar",agFilteredRowCountComponent:"StatusBar",agTotalAndFilteredRowCountComponent:"StatusBar",agFindCellRenderer:"Find",agButtonToolbarItem:"Toolbar",agFindToolbarItem:"Toolbar",agMenuToolbarItem:"Toolbar",agPivotPanelToolbarItem:"Toolbar",agQuickFilterToolbarItem:"Toolbar",agRowGroupPanelToolbarItem:"Toolbar"};function a7(z){return`"${z}"`}var D3=()=>({checkboxSelection:{version:"32.2",message:"Use `rowSelection.checkboxes` in `GridOptions` instead."},headerCheckboxSelection:{version:"32.2",message:"Use `rowSelection.headerCheckbox = true` in `GridOptions` instead."},headerCheckboxSelectionFilteredOnly:{version:"32.2",message:'Use `rowSelection.selectAll = "filtered"` in `GridOptions` instead.'},headerCheckboxSelectionCurrentPageOnly:{version:"32.2",message:'Use `rowSelection.selectAll = "currentPage"` in `GridOptions` instead.'},showDisabledCheckboxes:{version:"32.2",message:"Use `rowSelection.hideDisabledCheckboxes = true` in `GridOptions` instead."},rowGroupingHierarchy:{version:"34.3",message:"Use `colDef.groupHierarchy` instead."}}),M3={allowFormula:"Formula",aggFunc:"SharedAggregation",autoHeight:"RowAutoHeight",cellClass:"CellStyle",cellClassRules:"CellStyle",cellEditor:({cellEditor:z,editable:J,groupRowEditable:Q})=>{if(!(!!J||!!Q))return null;if(typeof z==="string")return C1[z]??"CustomEditor";return"CustomEditor"},cellRenderer:({cellRenderer:z})=>{if(typeof z!=="string")return null;return C1[z]},cellStyle:"CellStyle",columnChooserParams:"ColumnMenu",contextMenuItems:"ContextMenu",dndSource:"DragAndDrop",dndSourceOnRowDrag:"DragAndDrop",editable:({editable:z,cellEditor:J})=>{if(z&&!J)return"TextEditor";return null},groupRowEditable:({groupRowEditable:z,cellEditor:J})=>{if(!z)return null;return J?"RowGroupingEdit":["RowGroupingEdit","TextEditor"]},groupRowValueSetter:({groupRowValueSetter:z})=>z?"RowGroupingEdit":null,enableCellChangeFlash:"HighlightChanges",enablePivot:"SharedPivot",enableRowGroup:"SharedRowGrouping",enableValue:"SharedAggregation",filter:({filter:z})=>{if(z&&typeof z!=="string"&&typeof z!=="boolean")return"CustomFilter";if(typeof z==="string")return C1[z]??"ColumnFilter";return"ColumnFilter"},floatingFilter:"ColumnFilter",getQuickFilterText:"QuickFilter",headerTooltip:"Tooltip",headerTooltipValueGetter:"Tooltip",mainMenuItems:"ColumnMenu",menuTabs:(z)=>{let J=["columnsMenuTab","generalMenuTab"];if(z.menuTabs?.some((Q)=>J.includes(Q)))return"ColumnMenu";return null},pivot:"SharedPivot",pivotIndex:"SharedPivot",rowDrag:"RowDrag",rowGroup:"SharedRowGrouping",rowGroupIndex:"SharedRowGrouping",tooltipField:"Tooltip",tooltipValueGetter:"Tooltip",tooltipComponentSelector:"Tooltip",spanRows:"CellSpan",groupHierarchy:"SharedRowGrouping"},k3=()=>{return{autoHeight:{supportedRowModels:["clientSide","serverSide"],validate:(J,{paginationAutoPageSize:Q})=>{if(Q)return"colDef.autoHeight is not supported with paginationAutoPageSize.";return null}},allowFormula:{supportedRowModels:["clientSide"]},cellRendererParams:{validate:(J)=>{if((J.rowGroup!=null||J.rowGroupIndex!=null||J.cellRenderer==="agGroupCellRenderer")&&"checkbox"in J.cellRendererParams)return'Since v33.0, `cellRendererParams.checkbox` has been deprecated. Use `rowSelection.checkboxLocation = "autoGroupColumn"` instead.';return null}},flex:{validate:(J,Q)=>{if(Q.autoSizeStrategy)return"colDef.flex is not supported with gridOptions.autoSizeStrategy";return null}},headerCheckboxSelection:{supportedRowModels:["clientSide","serverSide"],validate:(J,{rowSelection:Q})=>Q==="multiple"?null:"headerCheckboxSelection is only supported with rowSelection=multiple"},headerCheckboxSelectionCurrentPageOnly:{supportedRowModels:["clientSide"],validate:(J,{rowSelection:Q})=>Q==="multiple"?null:"headerCheckboxSelectionCurrentPageOnly is only supported with rowSelection=multiple"},headerCheckboxSelectionFilteredOnly:{supportedRowModels:["clientSide"],validate:(J,{rowSelection:Q})=>Q==="multiple"?null:"headerCheckboxSelectionFilteredOnly is only supported with rowSelection=multiple"},headerValueGetter:{validate:(J)=>{let Q=J.headerValueGetter;if(typeof Q==="function"||typeof Q==="string")return null;return"headerValueGetter must be a function or a valid string expression"}},icons:{validate:({icons:J})=>{if(J){if(J.smallDown)return Y4(262);if(J.smallLeft)return Y4(263);if(J.smallRight)return Y4(264)}return null}},sort:{validate:(J)=>{if(v1(J.sort)||Lz(J.sort))return null;return`sort must be of type (SortDirection | SortDef), currently it is ${typeof J.sort==="object"?JSON.stringify(J.sort):M6(J.sort)}`}},initialSort:{validate:(J)=>{if(v1(J.initialSort)||Lz(J.initialSort))return null;return`initialSort must be of non-null type (SortDirection | SortDef), currently it is ${typeof J.initialSort==="object"?JSON.stringify(J.initialSort):M6(J.initialSort)}`}},sortingOrder:{validate:(J)=>{let Q=J.sortingOrder;if(Array.isArray(Q)&&Q.length>0){let Z=Q.filter(($)=>{return!(v1($)||Lz($))});if(Z.length>0)return`sortingOrder must be an array of type non-null (SortDirection | SortDef)[], incorrect items are: [${Z.map(($)=>typeof $==="string"||$==null?M6($):JSON.stringify($)).join(", ")}]`}else if(!Array.isArray(Q)||!Q.length)return`sortingOrder must be an array with at least one element, currently it is [${Q}]`;return null}},type:{validate:(J)=>{let Q=J.type;if(Q instanceof Array){if(Q.some(($)=>typeof $!=="string"))return"if colDef.type is supplied an array it should be of type 'string[]'";return null}if(typeof Q==="string")return null;return"colDef.type should be of type 'string' | 'string[]'"}},rowSpan:{validate:(J,{suppressRowTransform:Q})=>{if(!Q)return"colDef.rowSpan requires suppressRowTransform to be enabled.";return null}},spanRows:{dependencies:{editable:{required:[!1,void 0]},groupRowEditable:{required:[!1,void 0]},rowDrag:{required:[!1,void 0]},colSpan:{required:[void 0]},rowSpan:{required:[void 0]}},validate:(J,{rowSelection:Q,cellSelection:Z,suppressRowTransform:$,enableCellSpan:X,rowDragEntireRow:Y,enableCellTextSelection:q})=>{if(typeof Q==="object"){if(Q?.mode==="singleRow"&&Q?.enableClickSelection)return"colDef.spanRows is not supported with rowSelection.clickSelection"}if(Z)return"colDef.spanRows is not supported with cellSelection.";if($)return"colDef.spanRows is not supported with suppressRowTransform.";if(!X)return"colDef.spanRows requires enableCellSpan to be enabled.";if(Y)return"colDef.spanRows is not supported with rowDragEntireRow.";if(q)return"colDef.spanRows is not supported with enableCellTextSelection.";return null}},groupHierarchy:{validate(J,{groupHierarchyConfig:Q={}},Z){let $=new Set(["year","quarter","month","formattedMonth","day","hour","minute","second"]),X=[];for(let Y of J.groupHierarchy??[]){if(typeof Y==="object"){Z.validation?.validateColDef(Y);continue}if(!$.has(Y)&&!(Y in Q))X.push(a7(Y))}if(X.length>0){let Y=`The following parts of colDef.groupHierarchy are not recognised: ${X.join(", ")}.`,q=`Choose one of ${[...$].map(a7).join(", ")}, or define your own parts in gridOptions.groupHierarchyConfig.`;return`${Y} +${q}`}return null}}}},f3={headerName:void 0,columnGroupShow:void 0,headerStyle:void 0,headerClass:void 0,toolPanelClass:void 0,headerValueGetter:void 0,pivotKeys:void 0,groupId:void 0,colId:void 0,sort:void 0,initialSort:void 0,field:void 0,type:void 0,cellDataType:void 0,tooltipComponent:void 0,tooltipField:void 0,headerTooltip:void 0,headerTooltipValueGetter:void 0,cellClass:void 0,showRowGroup:void 0,filter:void 0,initialAggFunc:void 0,defaultAggFunc:void 0,aggFunc:void 0,groupRowEditable:void 0,groupRowValueSetter:void 0,pinned:void 0,initialPinned:void 0,chartDataType:void 0,cellAriaRole:void 0,cellEditorPopupPosition:void 0,headerGroupComponent:void 0,headerGroupComponentParams:void 0,cellStyle:void 0,cellRenderer:void 0,cellRendererParams:void 0,cellEditor:void 0,cellEditorParams:void 0,filterParams:void 0,pivotValueColumn:void 0,headerComponent:void 0,headerComponentParams:void 0,floatingFilterComponent:void 0,floatingFilterComponentParams:void 0,tooltipComponentParams:void 0,refData:void 0,columnChooserParams:void 0,children:void 0,sortingOrder:void 0,allowedAggFuncs:void 0,menuTabs:void 0,pivotTotalColumnIds:void 0,cellClassRules:void 0,icons:void 0,sortIndex:void 0,initialSortIndex:void 0,flex:void 0,initialFlex:void 0,width:void 0,initialWidth:void 0,minWidth:void 0,maxWidth:void 0,rowGroupIndex:void 0,initialRowGroupIndex:void 0,pivotIndex:void 0,initialPivotIndex:void 0,suppressColumnsToolPanel:void 0,suppressFiltersToolPanel:void 0,openByDefault:void 0,marryChildren:void 0,suppressStickyLabel:void 0,hide:void 0,initialHide:void 0,rowGroup:void 0,initialRowGroup:void 0,pivot:void 0,initialPivot:void 0,checkboxSelection:void 0,showDisabledCheckboxes:void 0,headerCheckboxSelection:void 0,headerCheckboxSelectionFilteredOnly:void 0,headerCheckboxSelectionCurrentPageOnly:void 0,suppressHeaderMenuButton:void 0,suppressMovable:void 0,lockPosition:void 0,lockVisible:void 0,lockPinned:void 0,unSortIcon:void 0,suppressSizeToFit:void 0,suppressAutoSize:void 0,enableRowGroup:void 0,enablePivot:void 0,enableValue:void 0,editable:void 0,suppressPaste:void 0,suppressNavigable:void 0,enableCellChangeFlash:void 0,rowDrag:void 0,dndSource:void 0,autoHeight:void 0,wrapText:void 0,sortable:void 0,resizable:void 0,singleClickEdit:void 0,floatingFilter:void 0,cellEditorPopup:void 0,suppressFillHandle:void 0,wrapHeaderText:void 0,autoHeaderHeight:void 0,dndSourceOnRowDrag:void 0,valueGetter:void 0,valueSetter:void 0,filterValueGetter:void 0,keyCreator:void 0,valueFormatter:void 0,valueParser:void 0,comparator:void 0,equals:void 0,pivotComparator:void 0,suppressKeyboardEvent:void 0,suppressHeaderKeyboardEvent:void 0,colSpan:void 0,rowSpan:void 0,spanRows:void 0,getQuickFilterText:void 0,onCellValueChanged:void 0,onCellClicked:void 0,onCellDoubleClicked:void 0,onCellContextMenu:void 0,rowDragText:void 0,tooltipValueGetter:void 0,tooltipComponentSelector:void 0,cellRendererSelector:void 0,cellEditorSelector:void 0,suppressSpanHeaderHeight:void 0,useValueFormatterForExport:void 0,useValueParserForImport:void 0,mainMenuItems:void 0,contextMenuItems:void 0,suppressFloatingFilterButton:void 0,suppressHeaderFilterButton:void 0,suppressHeaderContextMenu:void 0,loadingCellRenderer:void 0,loadingCellRendererParams:void 0,loadingCellRendererSelector:void 0,context:void 0,dateComponent:void 0,dateComponentParams:void 0,getFindText:void 0,rowGroupingHierarchy:void 0,groupHierarchy:void 0,allowFormula:void 0,suppressNoteActions:void 0},S3=()=>Object.keys(f3),o7,V3=()=>o7??(o7=(()=>{let z=S3(),J=D3();return{objectName:"colDef",allProperties:z,allValidNames:s$(z,J),docsUrl:"column-properties/",deprecations:J,validations:k3()}})()),R3=["overlayLoadingTemplate","overlayNoRowsTemplate","gridId","quickFilterText","rowModelType","editType","domLayout","clipboardDelimiter","rowGroupPanelShow","multiSortKey","pivotColumnGroupTotals","pivotRowTotals","pivotPanelShow","fillHandleDirection","groupDisplayType","treeDataDisplayType","treeDataChildrenField","treeDataParentIdField","colResizeDefault","tooltipTrigger","noteTrigger","serverSidePivotResultFieldSeparator","columnMenu","tooltipShowMode","invalidEditValueMode","grandTotalRow","themeCssLayer","findSearchValue","styleNonce","renderingMode"],A3=["components","rowStyle","context","autoGroupColumnDef","localeText","icons","datasource","dragAndDropImageComponentParams","serverSideDatasource","viewportDatasource","groupRowRendererParams","aggFuncs","fullWidthCellRendererParams","defaultColGroupDef","defaultColDef","defaultCsvExportParams","defaultExcelExportParams","columnTypes","rowClassRules","detailCellRendererParams","loadingCellRendererParams","overlayComponentParams","loadingOverlayComponentParams","noRowsOverlayComponentParams","activeOverlayParams","popupParent","themeStyleContainer","toolbar","statusBar","chartThemeOverrides","customChartThemes","chartToolPanelsDef","dataTypeDefinitions","advancedFilterParent","advancedFilterBuilderParams","advancedFilterParams","formulaDataSource","formulaFuncs","notesDataSource","initialState","autoSizeStrategy","selectionColumnDef","findOptions","filterHandlers","groupHierarchyConfig"],j3=["sortingOrder","alignedGrids","rowData","columnDefs","excelStyles","pinnedTopRowData","pinnedBottomRowData","chartThemes","rowClass","paginationPageSizeSelector","paginationPanels","suppressOverlays"],l$=["rowHeight","detailRowHeight","rowBuffer","headerHeight","groupHeaderHeight","groupLockGroupColumns","floatingFiltersHeight","pivotHeaderHeight","pivotGroupHeaderHeight","groupDefaultExpanded","pivotDefaultExpanded","viewportRowModelPageSize","viewportRowModelBufferSize","autoSizePadding","maxBlocksInCache","maxConcurrentDatasourceRequests","tooltipShowDelay","tooltipSwitchShowDelay","tooltipHideDelay","noteShowDelay","noteHideDelay","cacheOverflowSize","paginationPageSize","cacheBlockSize","infiniteInitialRowCount","serverSideInitialRowCount","scrollbarWidth","asyncTransactionWaitMillis","blockLoadDebounceMillis","keepDetailRowsCount","undoRedoCellEditingLimit","cellFlashDuration","cellFadeDuration","tabIndex","pivotMaxGeneratedColumns","rowDragInsertDelay"],O3=["theme","rowSelection"],P3=["cellSelection","sideBar","rowNumbers","suppressGroupChangesColumnVisibility","groupAggFiltering","suppressStickyTotalRow","groupHideParentOfSingleChild","enableRowPinning"],a$=["loadThemeGoogleFonts","suppressMakeColumnVisibleAfterUnGroup","suppressRowClickSelection","suppressCellFocus","suppressHeaderFocus","suppressHorizontalScroll","groupSelectsChildren","alwaysShowHorizontalScroll","alwaysShowVerticalScroll","debug","enableBrowserTooltips","enableCellExpressions","groupSuppressBlankHeader","suppressMenuHide","suppressRowDeselection","unSortIcon","suppressMultiSort","alwaysMultiSort","singleClickEdit","suppressLoadingOverlay","suppressNoRowsOverlay","suppressAutoSize","skipHeaderOnAutoSize","suppressColumnMoveAnimation","suppressMoveWhenColumnDragging","suppressMovableColumns","suppressFieldDotNotation","enableRangeSelection","enableRangeHandle","enableFillHandle","suppressClearOnFillReduction","deltaSort","suppressTouch","allowContextMenuWithControlKey","suppressContextMenu","suppressDragLeaveHidesColumns","suppressRowGroupHidesColumns","suppressMiddleClickScrolls","suppressPreventDefaultOnMouseWheel","suppressCopyRowsToClipboard","copyHeadersToClipboard","copyGroupHeadersToClipboard","pivotMode","suppressAggFuncInHeader","suppressColumnVirtualisation","alwaysAggregateAtRootLevel","suppressFocusAfterRefresh","functionsReadOnly","animateRows","groupSelectsFiltered","groupRemoveSingleChildren","groupRemoveLowestSingleChildren","enableRtl","enableCellSpan","suppressClickEdit","rowDragEntireRow","rowDragManaged","refreshAfterGroupEdit","suppressRowDrag","suppressMoveWhenRowDragging","rowDragMultiRow","enableGroupEdit","embedFullWidthRows","suppressPaginationPanel","groupHideOpenParents","groupHideColumnsUntilExpanded","groupAllowUnbalanced","pagination","paginationAutoPageSize","suppressScrollOnNewData","suppressScrollWhenPopupsAreOpen","purgeClosedRowNodes","cacheQuickFilter","includeHiddenColumnsInQuickFilter","ensureDomOrder","accentedSort","suppressChangeDetection","valueCache","valueCacheNeverExpires","aggregateOnlyChangedColumns","suppressAnimationFrame","suppressExcelExport","suppressCsvExport","includeHiddenColumnsInAdvancedFilter","suppressMultiRangeSelection","enterNavigatesVerticallyAfterEdit","enterNavigatesVertically","suppressPropertyNamesCheck","rowMultiSelectWithClick","suppressRowHoverHighlight","suppressRowTransform","suppressContentVisibilityAuto","suppressClipboardPaste","suppressLastEmptyLineOnPaste","enableCharts","suppressMaintainUnsortedOrder","enableCellTextSelection","suppressBrowserResizeObserver","suppressMaxRenderedRowRestriction","excludeChildrenWhenTreeDataFiltering","tooltipMouseTrack","tooltipInteraction","keepDetailRows","paginateChildRows","preventDefaultOnContextMenu","undoRedoCellEditing","allowDragFromColumnsToolPanel","pivotSuppressAutoColumn","suppressExpandablePivotGroups","debounceVerticalScrollbar","detailRowAutoHeight","serverSideSortAllLevels","serverSideEnableClientSideSort","serverSideOnlyRefreshFilteredGroups","suppressAggFilteredOnly","showOpenedGroup","suppressClipboardApi","suppressModelUpdateAfterUpdateTransaction","stopEditingWhenCellsLoseFocus","groupMaintainOrder","columnHoverHighlight","readOnlyEdit","suppressRowVirtualisation","enableCellEditingOnBackspace","resetRowDataOnUpdate","removePivotHeaderRowWhenSingleValueColumn","suppressCopySingleCellRanges","suppressGroupRowsSticky","suppressCutToClipboard","rowGroupPanelSuppressSort","allowShowChangeAfterFilter","enableAdvancedFilter","masterDetail","treeData","reactiveCustomComponents","applyQuickFilterBeforePivotOrAgg","suppressServerSideFullWidthLoadingRow","suppressAdvancedFilterEval","loading","maintainColumnOrder","enableStrictPivotColumnOrder","suppressSetFilterByDefault","enableFilterHandlers","suppressStartEditOnTab","hidePaddedHeaderRows","ssrmExpandAllAffectsAllRows","animateColumnResizing"],T3=["doesExternalFilterPass","processPivotResultColDef","processPivotResultColGroupDef","getBusinessKeyForNode","isRowSelectable","rowDragText","groupRowRenderer","dragAndDropImageComponent","fullWidthCellRenderer","loadingCellRenderer","overlayComponent","loadingOverlayComponent","noRowsOverlayComponent","overlayComponentSelector","activeOverlay","detailCellRenderer","quickFilterParser","quickFilterMatcher","getLocaleText","isExternalFilterPresent","getRowHeight","getRowClass","getRowStyle","getFullRowEditValidationErrors","getContextMenuItems","getMainMenuItems","processRowPostCreate","processCellForClipboard","getGroupRowAgg","isFullWidthRow","sendToClipboard","focusGridInnerElement","navigateToNextHeader","tabToNextHeader","navigateToNextCell","tabToNextCell","tabToNextGridContainer","processCellFromClipboard","getDocument","postProcessPopup","getChildCount","getDataPath","isRowMaster","postSortRows","processHeaderForClipboard","processUnpinnedColumns","processGroupHeaderForClipboard","paginationNumberFormatter","processDataFromClipboard","getServerSideGroupKey","isServerSideGroup","createChartContainer","getChartToolbarItems","fillOperation","isApplyServerSideTransaction","getServerSideGroupLevelParams","isServerSideGroupOpenByDefault","isGroupOpenByDefault","initialGroupOrderComparator","loadingCellRendererSelector","getRowId","chartMenuItems","groupTotalRow","alwaysPassFilter","isRowPinnable","isRowPinned","isRowValidDropPosition"],v3=()=>[...j3,...A3,...R3,...l$,...T3,...a$,...P3,...O3];var I3=()=>({suppressLoadingOverlay:{version:"32",message:"Use `loading`=false instead."},enableFillHandle:{version:"32.2",message:"Use `cellSelection.handle` instead."},enableRangeHandle:{version:"32.2",message:"Use `cellSelection.handle` instead."},enableRangeSelection:{version:"32.2",message:"Use `cellSelection = true` instead."},suppressMultiRangeSelection:{version:"32.2",message:"Use `cellSelection.suppressMultiRanges` instead."},suppressClearOnFillReduction:{version:"32.2",message:"Use `cellSelection.handle.suppressClearOnFillReduction` instead."},fillHandleDirection:{version:"32.2",message:"Use `cellSelection.handle.direction` instead."},fillOperation:{version:"32.2",message:"Use `cellSelection.handle.setFillValue` instead."},suppressRowClickSelection:{version:"32.2",message:"Use `rowSelection.enableClickSelection` instead."},suppressRowDeselection:{version:"32.2",message:"Use `rowSelection.enableClickSelection` instead."},rowMultiSelectWithClick:{version:"32.2",message:"Use `rowSelection.enableSelectionWithoutKeys` instead."},groupSelectsChildren:{version:"32.2",message:'Use `rowSelection.groupSelects = "descendants"` instead.'},groupSelectsFiltered:{version:"32.2",message:'Use `rowSelection.groupSelects = "filteredDescendants"` instead.'},isRowSelectable:{version:"32.2",message:"Use `selectionOptions.isRowSelectable` instead."},suppressCopySingleCellRanges:{version:"32.2",message:"Use `rowSelection.copySelectedRows` instead."},suppressCopyRowsToClipboard:{version:"32.2",message:"Use `rowSelection.copySelectedRows` instead."},onRangeSelectionChanged:{version:"32.2",message:"Use `onCellSelectionChanged` instead."},onRangeDeleteStart:{version:"32.2",message:"Use `onCellSelectionDeleteStart` instead."},onRangeDeleteEnd:{version:"32.2",message:"Use `onCellSelectionDeleteEnd` instead."},suppressBrowserResizeObserver:{version:"32.2",message:"The grid always uses the browser's ResizeObserver, this grid option has no effect."},onColumnEverythingChanged:{version:"32.2",message:"Either use `onDisplayedColumnsChanged` which is fired at the same time, or use one of the more specific column events."},groupRemoveSingleChildren:{version:"33",message:"Use `groupHideParentOfSingleChild` instead."},groupRemoveLowestSingleChildren:{version:"33",message:'Use `groupHideParentOfSingleChild: "leafGroupsOnly"` instead.'},suppressRowGroupHidesColumns:{version:"33",message:'Use `suppressGroupChangesColumnVisibility: "suppressHideOnGroup"` instead.'},suppressMakeColumnVisibleAfterUnGroup:{version:"33",message:'Use `suppressGroupChangesColumnVisibility: "suppressShowOnUngroup"` instead.'},unSortIcon:{version:"33",message:"Use `defaultColDef.unSortIcon` instead."},sortingOrder:{version:"33",message:"Use `defaultColDef.sortingOrder` instead."},suppressPropertyNamesCheck:{version:"33",message:"`gridOptions` and `columnDefs` both have a `context` property that should be used for arbitrary user data. This means that column definitions and gridOptions should only contain valid properties making this property redundant."},suppressAdvancedFilterEval:{version:"34",message:"Advanced filter no longer uses function evaluation, so this option has no effect."}});function v4(z,J,Q){if(typeof J==="number"||J==null){if(J==null)return null;return J>=Q?null:`${z}: value should be greater than or equal to ${Q}`}return`${z}: value should be a number`}var C3={alignedGrids:"AlignedGrids",allowContextMenuWithControlKey:"ContextMenu",autoSizeStrategy:"ColumnAutoSize",cellSelection:"CellSelection",columnHoverHighlight:"ColumnHover",datasource:"InfiniteRowModel",doesExternalFilterPass:"ExternalFilter",editType:"EditCore",invalidEditValueMode:"EditCore",enableAdvancedFilter:"AdvancedFilter",enableCellSpan:"CellSpan",enableCharts:"IntegratedCharts",enableRangeSelection:"CellSelection",enableRowPinning:"PinnedRow",findSearchValue:"Find",getFullRowEditValidationErrors:"EditCore",getContextMenuItems:"ContextMenu",getLocaleText:"Locale",getMainMenuItems:"ColumnMenu",getRowClass:"RowStyle",getRowStyle:"RowStyle",groupTotalRow:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"RowGrouping",grandTotalRow:["CsrmHierarchy","ServerSideRowModel"],initialState:"GridState",isExternalFilterPresent:"ExternalFilter",isRowPinnable:"PinnedRow",isRowPinned:"PinnedRow",localeText:"Locale",masterDetail:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"MasterDetail",notesDataSource:"Notes",pagination:"Pagination",pinnedBottomRowData:"PinnedRow",pinnedTopRowData:"PinnedRow",pivotMode:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"Pivot",pivotPanelShow:"RowGroupingPanel",quickFilterText:"QuickFilter",rowClass:"RowStyle",rowClassRules:"RowStyle",rowData:"ClientSideRowModel",rowDragManaged:"RowDrag",refreshAfterGroupEdit:["RowGrouping","TreeData"],rowGroupPanelShow:"RowGroupingPanel",rowNumbers:"RowNumbers",rowSelection:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"RowSelection",rowStyle:"RowStyle",serverSideDatasource:"ServerSideRowModel",sideBar:"SideBar",statusBar:"StatusBar",treeData:(z,J)=>J.rowModelType==="serverSide"?"ServerSideRowModel":"TreeData",toolbar:"Toolbar",undoRedoCellEditing:"UndoRedoEdit",valueCache:"ValueCache",viewportDatasource:"ViewportRowModel"},y3=()=>{let z={autoSizePadding:{validate({autoSizePadding:Q}){return v4("autoSizePadding",Q,0)}},cacheBlockSize:{supportedRowModels:["serverSide","infinite"],validate({cacheBlockSize:Q}){return v4("cacheBlockSize",Q,1)}},cacheOverflowSize:{validate({cacheOverflowSize:Q}){return v4("cacheOverflowSize",Q,1)}},datasource:{supportedRowModels:["infinite"]},domLayout:{validate:(Q)=>{let Z=Q.domLayout,$=["autoHeight","normal","print"];if(Z&&!$.includes(Z))return`domLayout must be one of [${$.join()}], currently it's ${Z}`;return null}},enableFillHandle:{dependencies:{enableRangeSelection:{required:[!0]}}},enableRangeHandle:{dependencies:{enableRangeSelection:{required:[!0]}}},enableCellSpan:{supportedRowModels:["clientSide","serverSide"]},enableRangeSelection:{dependencies:{rowDragEntireRow:{required:[!1,void 0]}}},enableRowPinning:{supportedRowModels:["clientSide"],validate({enableRowPinning:Q,pinnedTopRowData:Z,pinnedBottomRowData:$}){if(Q&&(Z||$))return"Manual row pinning cannot be used together with pinned row data. Either set `enableRowPinning` to `false`, or remove `pinnedTopRowData` and `pinnedBottomRowData`.";return null}},isRowPinnable:{supportedRowModels:["clientSide"],validate({enableRowPinning:Q,isRowPinnable:Z,pinnedTopRowData:$,pinnedBottomRowData:X}){if(Z&&($||X))return"Manual row pinning cannot be used together with pinned row data. Either remove `isRowPinnable`, or remove `pinnedTopRowData` and `pinnedBottomRowData`.";if(!Q&&Z)return"`isRowPinnable` requires `enableRowPinning` to be set.";return null}},isRowPinned:{supportedRowModels:["clientSide"],validate({enableRowPinning:Q,isRowPinned:Z,pinnedTopRowData:$,pinnedBottomRowData:X}){if(Z&&($||X))return"Manual row pinning cannot be used together with pinned row data. Either remove `isRowPinned`, or remove `pinnedTopRowData` and `pinnedBottomRowData`.";if(!Q&&Z)return"`isRowPinned` requires `enableRowPinning` to be set.";return null}},groupDefaultExpanded:{supportedRowModels:["clientSide"]},groupHideColumnsUntilExpanded:{supportedRowModels:["clientSide"],validate({groupHideColumnsUntilExpanded:Q,groupHideOpenParents:Z,groupDisplayType:$}){if(Q&&!Z&&$!=="multipleColumns")return"`groupHideColumnsUntilExpanded = true` requires either `groupDisplayType = 'multipleColumns'` or `groupHideOpenParents = true`";return null}},groupHideOpenParents:{supportedRowModels:["clientSide","serverSide"],dependencies:{groupTotalRow:{required:[void 0,"bottom"]},groupDisplayType:{required:[void 0,"multipleColumns"]},treeData:{required:[void 0,!1],reason:"Tree Data has values at the group level so it doesn't make sense to hide them."}}},groupHideParentOfSingleChild:{dependencies:{groupHideOpenParents:{required:[void 0,!1]}}},groupRemoveLowestSingleChildren:{dependencies:{groupHideOpenParents:{required:[void 0,!1]},groupRemoveSingleChildren:{required:[void 0,!1]}}},groupRemoveSingleChildren:{dependencies:{groupHideOpenParents:{required:[void 0,!1]},groupRemoveLowestSingleChildren:{required:[void 0,!1]}}},groupSelectsChildren:{dependencies:{rowSelection:{required:["multiple"]}}},groupHierarchyConfig:{validate({groupHierarchyConfig:Q={}},Z,$){for(let X of Object.keys(Q))$.validation?.validateColDef(Q[X]);return null}},icons:{validate:({icons:Q})=>{if(Q){if(Q.smallDown)return Y4(262);if(Q.smallLeft)return Y4(263);if(Q.smallRight)return Y4(264)}return null}},infiniteInitialRowCount:{validate({infiniteInitialRowCount:Q}){return v4("infiniteInitialRowCount",Q,1)}},initialGroupOrderComparator:{supportedRowModels:["clientSide"]},ssrmExpandAllAffectsAllRows:{validate:(Q)=>{if(typeof Q.ssrmExpandAllAffectsAllRows==="boolean"){if(Q.rowModelType!=="serverSide")return"'ssrmExpandAllAffectsAllRows' is only supported with the Server Side Row Model.";if(Q.ssrmExpandAllAffectsAllRows&&typeof Q.getRowId!=="function")return"'getRowId' callback must be provided for Server Side Row Model grouping to work correctly."}return null}},keepDetailRowsCount:{validate({keepDetailRowsCount:Q}){return v4("keepDetailRowsCount",Q,1)}},paginationPageSize:{validate({paginationPageSize:Q}){return v4("paginationPageSize",Q,1)}},paginationPageSizeSelector:{validate:(Q)=>{let Z=Q.paginationPageSizeSelector;if(typeof Z==="boolean"||Z==null)return null;if(!Z.length)return`'paginationPageSizeSelector' cannot be an empty array. + If you want to hide the page size selector, set paginationPageSizeSelector to false.`;return null}},paginationPanels:{validate:({paginationPanels:Q})=>{let Z=new Set(["pageSize","rowSummary","pageSummary"]);if(Q!=null&&(!Array.isArray(Q)||Q.some(($)=>!Z.has($))))return"'paginationPanels' expects an array of panel names: ['pageSize', 'rowSummary', 'pageSummary']";return null}},pivotMode:{dependencies:{treeData:{required:[!1,void 0],reason:"Pivot Mode is not supported with Tree Data."}}},quickFilterText:{supportedRowModels:["clientSide"]},rowBuffer:{validate({rowBuffer:Q}){return v4("rowBuffer",Q,0)}},rowClass:{validate:(Q)=>{if(typeof Q.rowClass==="function")return"rowClass should not be a function, please use getRowClass instead";return null}},rowData:{supportedRowModels:["clientSide"]},rowDragManaged:{supportedRowModels:["clientSide"],dependencies:{pagination:{required:[!1,void 0]}}},rowSelection:{validate({rowSelection:Q}){if(Q&&typeof Q==="string")return'As of version 32.2.1, using `rowSelection` with the values "single" or "multiple" has been deprecated. Use the object value instead.';if(Q&&typeof Q!=="object")return"Expected `RowSelectionOptions` object for the `rowSelection` property.";if(Q&&Q.mode!=="multiRow"&&Q.mode!=="singleRow")return`Selection mode "${Q.mode}" is invalid. Use one of 'singleRow' or 'multiRow'.`;return null}},rowStyle:{validate:(Q)=>{let Z=Q.rowStyle;if(Z&&typeof Z==="function")return"rowStyle should be an object of key/value styles, not be a function, use getRowStyle() instead";return null}},notesDataSource:{validate:({getRowId:Q})=>{if(!Q)return"'getRowId' callback must be provided for Notes to work correctly.";return null}},noteHideDelay:{validate:(Q)=>{if(Q.noteHideDelay!=null&&Q.noteHideDelay<0)return"noteHideDelay should not be lower than 0";return null}},noteShowDelay:{validate:(Q)=>{if(Q.noteShowDelay!=null&&Q.noteShowDelay<0)return"noteShowDelay should not be lower than 0";return null}},serverSideDatasource:{supportedRowModels:["serverSide"]},serverSideInitialRowCount:{supportedRowModels:["serverSide"],validate({serverSideInitialRowCount:Q}){return v4("serverSideInitialRowCount",Q,1)}},serverSideOnlyRefreshFilteredGroups:{supportedRowModels:["serverSide"]},serverSideSortAllLevels:{supportedRowModels:["serverSide"]},sortingOrder:{validate:(Q)=>{let Z=Q.sortingOrder;if(Array.isArray(Z)&&Z.length>0){let $=Z.filter((X)=>!Z4(X));if($.length>0)return`sortingOrder must be an array of type (SortDirection | SortDef)[], incorrect items are: ${$.map((X)=>typeof X==="string"||X==null?M6(X):JSON.stringify(X))}]`}else if(!Array.isArray(Z)||!Z.length)return`sortingOrder must be an array with at least one element, currently it's ${Z}`;return null}},tooltipHideDelay:{validate:(Q)=>{if(Q.tooltipHideDelay&&Q.tooltipHideDelay<0)return"tooltipHideDelay should not be lower than 0";return null}},tooltipShowDelay:{validate:(Q)=>{if(Q.tooltipShowDelay&&Q.tooltipShowDelay<0)return"tooltipShowDelay should not be lower than 0";return null}},tooltipSwitchShowDelay:{validate:(Q)=>{if(Q.tooltipSwitchShowDelay&&Q.tooltipSwitchShowDelay<0)return"tooltipSwitchShowDelay should not be lower than 0";return null}},treeData:{supportedRowModels:["clientSide","serverSide"],validate:(Q)=>{let Z=Q.rowModelType??"clientSide";switch(Z){case"clientSide":{let{treeDataChildrenField:$,treeDataParentIdField:X,getDataPath:Y,getRowId:q}=Q;if(!$&&!X&&!Y)return"treeData requires either 'treeDataChildrenField' or 'treeDataParentIdField' or 'getDataPath' in the clientSide row model.";if($){if(Y)return"Cannot use both 'treeDataChildrenField' and 'getDataPath' at the same time.";if(X)return"Cannot use both 'treeDataChildrenField' and 'treeDataParentIdField' at the same time."}if(X){if(!q)return"getRowId callback not provided, tree data with parent id cannot be built.";if(Y)return"Cannot use both 'treeDataParentIdField' and 'getDataPath' at the same time."}return null}case"serverSide":{let $=`treeData requires 'isServerSideGroup' and 'getServerSideGroupKey' in the ${Z} row model.`;return Q.isServerSideGroup&&Q.getServerSideGroupKey?null:$}}return null}},viewportDatasource:{supportedRowModels:["viewport"]},viewportRowModelBufferSize:{validate({viewportRowModelBufferSize:Q}){return v4("viewportRowModelBufferSize",Q,0)}},viewportRowModelPageSize:{validate({viewportRowModelPageSize:Q}){return v4("viewportRowModelPageSize",Q,1)}},rowDragEntireRow:{dependencies:{cellSelection:{required:[void 0]}}},autoGroupColumnDef:{validate({autoGroupColumnDef:Q,showOpenedGroup:Z}){if(Q?.field&&Z)return"autoGroupColumnDef.field and showOpenedGroup are not supported when used together.";if(Q?.valueGetter&&Z)return"autoGroupColumnDef.valueGetter and showOpenedGroup are not supported when used together.";return null}},renderingMode:{validate:(Q)=>{let Z=Q.renderingMode,$=["default","legacy"];if(Z&&!$.includes(Z))return`renderingMode must be one of [${$.join()}], currently it's ${Z}`;return null}},autoSizeStrategy:{validate:({autoSizeStrategy:Q})=>{if(!Q)return null;let Z=["fitCellContents","fitGridWidth","fitProvidedWidth"],$=Q.type;if($!=="fitCellContents"&&$!=="fitGridWidth"&&$!=="fitProvidedWidth")return`Invalid Auto-size strategy. \`autoSizeStrategy\` must be one of ${Z.map((X)=>'"'+X+'"').join(", ")}, currently it's ${$}`;if($==="fitProvidedWidth"&&typeof Q.width!="number")return`When using the 'fitProvidedWidth' auto-size strategy, must provide a numeric \`width\`. You provided ${Q.width}`;return null}}},J={};for(let Q of a$)J[Q]={expectedType:"boolean"};for(let Q of l$)J[Q]={expectedType:"number"};return D0(J,z),J},e7,b3=()=>e7??(e7=(()=>{let z=[...v3(),...Object.values(G5)],J=I3(),Q=["api"];return{objectName:"gridOptions",allProperties:z,allValidNames:s$(z,J,Q),propertyExceptions:Q,docsUrl:"grid-options/",deprecations:J,validations:y3()}})()),x3=0,w3=0,z8="__ag_grid_instance",N3=class extends S{constructor(){super(...arguments);this.beanName="gos",this.domDataKey="__AG_"+Math.random().toString(),this.instanceId=w3++,this.gridReadyFired=!1,this.queueEvents=[],this.propEventSvc=new R4,this.globalEventHandlerFactory=(z)=>{return(J,Q)=>{if(!this.isAlive())return;let Z=R6.has(J);if(Z&&!z||!Z&&z)return;if(!g3(J))return;let $=(X,Y)=>{let q=G5[X],G=this.gridOptions[q];if(typeof G==="function")this.beans.frameworkOverrides.wrapOutgoing(()=>G(Y))};if(this.gridReadyFired)$(J,Q);else if(J==="gridReady"){$(J,Q),this.gridReadyFired=!0;for(let X of this.queueEvents)$(X.eventName,X.event);this.queueEvents=[]}else this.queueEvents.push({eventName:J,event:Q})}}}wireBeans(z){this.gridOptions=z.gridOptions,this.validation=z.validation,this.api=z.gridApi,this.gridId=z.context.getId()}get gridOptionsContext(){return this.gridOptions.context}postConstruct(){this.validateGridOptions(this.gridOptions),this.eventSvc.addGlobalListener(this.globalEventHandlerFactory().bind(this),!0),this.eventSvc.addGlobalListener(this.globalEventHandlerFactory(!0).bind(this),!1),this.propEventSvc.setFrameworkOverrides(this.beans.frameworkOverrides),this.addManagedEventListeners({gridOptionsChanged:({options:z})=>{this.updateGridOptions({options:z,force:!0,source:"optionsUpdated"})}})}destroy(){super.destroy(),this.queueEvents=[]}get(z){return this.gridOptions[z]??pG[z]}getCallback(z){return this.mergeGridCommonParams(this.gridOptions[z])}exists(z){return P(this.gridOptions[z])}mergeGridCommonParams(z){if(z)return(Q)=>{return z(this.addCommon(Q))};return z}updateGridOptions({options:z,force:J,source:Q="api"}){let Z={id:x3++,properties:[]},$=[],{gridOptions:X,validation:Y}=this;for(let q of Object.keys(z)){let G=fZ.applyGlobalGridOption(q,z[q]);Y?.warnOnInitialPropertyUpdate(Q,q);let U=J||typeof G==="object"&&Q==="api",_=X[q];if(U||_!==G){X[q]=G;let H={type:q,currentValue:G,previousValue:_,changeSet:Z,source:Q};$.push(H)}}this.validateGridOptions(this.gridOptions),Z.properties=$.map((q)=>q.type);for(let q of $)M2(this,`Updated property ${q.type} from`,q.previousValue," to ",q.currentValue),this.propEventSvc.dispatchEvent(q)}addPropertyEventListener(z,J){this.propEventSvc.addEventListener(z,J)}removePropertyEventListener(z,J){this.propEventSvc.removeEventListener(z,J)}getDomDataKey(){return this.domDataKey}addCommon(z){return z.api=this.api,z.context=this.gridOptionsContext,z}validateOptions(z,J){for(let Q of Object.keys(z)){let Z=z[Q];if(Z==null||Z===!1)continue;let $=J[Q];if(typeof $==="function")$=$(z,this.gridOptions,this.beans);if($)this.assertModuleRegistered($,Q)}}validateGridOptions(z){this.validateOptions(z,C3),this.validation?.processGridOptions(z)}validateColDef(z,J,Q){if(Q||!this.beans.dataTypeSvc?.isColPendingInference(J))this.validateOptions(z,M3),this.validation?.validateColDef(z)}assertModuleRegistered(z,J){let Q=Array.isArray(z)?z.some((Z)=>this.isModuleRegistered(Z)):this.isModuleRegistered(z);if(!Q)r(200,{...this.getModuleErrorParams(),moduleName:z,reasonOrId:J});return Q}getModuleErrorParams(){return{gridId:this.gridId,gridScoped:SZ(),rowModelType:this.get("rowModelType"),isUmd:VZ(),usesAgGridProvider:this.beans.frameworkOverrides.usesAgGridProvider??!1}}isModuleRegistered(z){return yQ(z,this.gridId,this.get("rowModelType"))}setInstanceDomData(z){z[z8]=this.instanceId}isElementInThisInstance(z){let J=z;while(J){let Q=J[z8];if(P(Q))return Q===this.instanceId;J=J.parentElement}return!1}};function g3(z){return!!G5[z]}var h3=class extends S{constructor(z,J){super();this.column=z,this.eGui=J,this.lastMovingChanged=0}postConstruct(){this.addManagedElementListeners(this.eGui,{click:(z)=>z&&this.onClick(z)}),this.addManagedListeners(this.column,{movingChanged:()=>{this.lastMovingChanged=Date.now()}})}onClick(z){let{sortSvc:J,rangeSvc:Q,gos:Z}=this.beans;if(!(l4(Z)?z.altKey:!0))Q?.handleColumnSelection(this.column,z);else if(this.column.isSortable()){let X=this.column.isMoving(),q=Date.now()-this.lastMovingChanged<50;if(!(X||q))J?.progressSortFromEvent(this.column,z)}}};function u3(z,J){let Q={"aria-hidden":"true"};return{tag:"div",cls:"ag-cell-label-container",role:"presentation",children:[{tag:"span",ref:"eMenu",cls:"ag-header-icon ag-header-cell-menu-button",attrs:Q},{tag:"span",ref:"eFilterButton",cls:"ag-header-icon ag-header-cell-filter-button",attrs:Q},{tag:"div",ref:"eLabel",cls:"ag-header-cell-label",role:"presentation",children:[z?{tag:"span",ref:"eColRef",cls:"ag-header-col-ref"}:null,{tag:"span",ref:"eText",cls:"ag-header-cell-text"},{tag:"span",ref:"eFilter",cls:"ag-header-icon ag-header-label-icon ag-filter-icon",attrs:Q},J?{tag:"ag-sort-indicator",ref:"eSortIndicator"}:null]}]}}var m3=class extends x{constructor(){super(...arguments);this.eFilter=j,this.eFilterButton=j,this.eSortIndicator=j,this.eMenu=j,this.eLabel=j,this.eText=j,this.eColRef=j,this.eSortOrder=j,this.eSortAsc=j,this.eSortDesc=j,this.eSortMixed=j,this.eSortNone=j,this.eSortAbsoluteAsc=j,this.eSortAbsoluteDesc=j,this.isLoadingInnerComponent=!1}refresh(z){let J=this.params;if(this.params=z,this.workOutTemplate(z,!!this.beans?.sortSvc)!=this.currentTemplate||this.workOutShowMenu()!=this.currentShowMenu||z.enableSorting!=this.currentSort||z.column.formulaRef!=this.currentRef||this.currentSuppressMenuHide!=null&&this.shouldSuppressMenuHide()!=this.currentSuppressMenuHide||J.enableFilterButton!=z.enableFilterButton||J.enableFilterIcon!=z.enableFilterIcon)return!1;if(this.innerHeaderComponent){let Q={...z};D0(Q,z.innerHeaderComponentParams),this.innerHeaderComponent.refresh?.(Q)}else this.setDisplayName(z);return!0}workOutTemplate(z,J){let{formula:Q}=this.beans,Z=z.template;if(Z)return Z?.trim?Z.trim():Z;return u3(!!Q?.active,J)}init(z){this.params=z;let{sortSvc:J,touchSvc:Q,rowNumbersSvc:Z,userCompFactory:$}=this.beans,X=J?.getSortIndicatorSelector();if(this.currentTemplate=this.workOutTemplate(z,!!X),this.setTemplate(this.currentTemplate,X?[X]:void 0),this.eLabel)this.mouseListener??(this.mouseListener=this.createManagedBean(new h3(z.column,this.eLabel)));Q?.setupForHeader(this),this.setMenu(),this.setupSort(),this.setupColumnRefIndicator(),Z?.setupForHeader(this),this.setupFilterIcon(),this.setupFilterButton(),this.workOutInnerHeaderComponent($,z),this.setDisplayName(z)}workOutInnerHeaderComponent(z,J){let Q=Z_(z,J,J);if(!Q)return;this.isLoadingInnerComponent=!0,Q.newAgStackInstance().then((Z)=>{if(this.isLoadingInnerComponent=!1,!Z)return;if(this.isAlive()){if(this.innerHeaderComponent=Z,this.eText)this.eText.appendChild(Z.getGui())}else this.destroyBean(Z)})}setDisplayName(z){let{displayName:J}=z,Q=this.currentDisplayName;if(this.currentDisplayName=J,!this.eText||Q===J||this.innerHeaderComponent||this.isLoadingInnerComponent)return;this.eText.textContent=T2(J)}addInIcon(z,J,Q){let Z=h(z,this.beans,Q);if(Z)J.appendChild(Z)}workOutShowMenu(){return this.params.enableMenu&&!!this.beans.menuSvc?.isHeaderMenuButtonEnabled()}shouldSuppressMenuHide(){return!!this.beans.menuSvc?.isHeaderMenuButtonAlwaysShowEnabled()}setMenu(){if(!this.eMenu)return;if(this.currentShowMenu=this.workOutShowMenu(),!this.currentShowMenu){R0(this.eMenu),this.eMenu=void 0;return}let{gos:z,eMenu:J,params:Q}=this,Z=F0(z);this.addInIcon(Z?"menu":"menuAlt",J,Q.column),J.classList.toggle("ag-header-menu-icon",!Z);let $=this.shouldSuppressMenuHide();this.currentSuppressMenuHide=$,this.addManagedElementListeners(J,{click:()=>this.showColumnMenu(this.eMenu)}),this.toggleMenuAlwaysShow($)}toggleMenuAlwaysShow(z){this.eMenu?.classList.toggle("ag-header-menu-always-show",z)}showColumnMenu(z){let{currentSuppressMenuHide:J,params:Q}=this;if(!J)this.toggleMenuAlwaysShow(!0);Q.showColumnMenu(z,()=>{if(!J)this.toggleMenuAlwaysShow(!1)})}onMenuKeyboardShortcut(z){let{params:J,gos:Q,beans:Z,eMenu:$,eFilterButton:X}=this,Y=J.column,q=F0(Q);if(z&&!q){if(Z.menuSvc?.isFilterMenuInHeaderEnabled(Y))return J.showFilter(X??$??this.getGui()),!0}else if(J.enableMenu)return this.showColumnMenu($??X??this.getGui()),!0;return!1}setupSort(){let{sortSvc:z}=this.beans;if(!z)return;let{enableSorting:J,column:Q}=this.params;if(this.currentSort=J,!this.eSortIndicator){this.eSortIndicator=this.createBean(z.createSortIndicator(!0));let{eSortIndicator:Z,eSortOrder:$,eSortAsc:X,eSortDesc:Y,eSortMixed:q,eSortNone:G,eSortAbsoluteAsc:U,eSortAbsoluteDesc:_}=this;Z.attachCustomElements($,X,Y,q,G,U,_)}if(this.eSortIndicator.setupSort(Q),!this.currentSort)return;z.setupHeader(this,Q)}setupColumnRefIndicator(){let{eColRef:z,beans:{editModelSvc:J},params:Q}=this;if(!z)return;this.currentRef=Q.column.formulaRef,z.textContent=this.currentRef,w(z,!1),this.addManagedEventListeners({cellEditingStarted:()=>{let Z=J?.getEditPositions(),$=!!this.currentRef&&!!Z?.some((X)=>X.column.isAllowFormula());w(z,$)},cellEditingStopped:()=>{w(z,!1)}})}setupFilterIcon(){let{eFilter:z,params:J}=this;if(!z)return;let Q=()=>{let Z=J.column.isFilterActive();w(z,Z,{skipAriaHidden:!0})};this.configureFilter(J.enableFilterIcon,z,Q,"filterActive")}setupFilterButton(){let{eFilterButton:z,params:J}=this;if(!z)return;if(this.configureFilter(J.enableFilterButton,z,this.onFilterChangedButton.bind(this),"filter"))this.addManagedElementListeners(z,{click:()=>J.showFilter(z)});else this.eFilterButton=void 0}configureFilter(z,J,Q,Z){if(!z)return R0(J),!1;let $=this.params.column;return this.addInIcon(Z,J,$),this.addManagedListeners($,{filterChanged:Q}),Q(),!0}onFilterChangedButton(){let z=this.params.column.isFilterActive();this.eFilterButton.classList.toggle("ag-filter-active",z)}getAnchorElementForMenu(z){let{eFilterButton:J,eMenu:Q}=this;if(z)return J??Q??this.getGui();return Q??J??this.getGui()}destroy(){super.destroy(),this.innerHeaderComponent=this.destroyBean(this.innerHeaderComponent),this.mouseListener=this.destroyBean(this.mouseListener)}},c3=class extends S{constructor(z,J){super();this.eLabel=z,this.columnGroup=J,this.isSticky=!1,this.left=null,this.right=null}postConstruct(){let{columnGroup:z,beans:J}=this,{ctrlsSvc:Q}=J;Q.whenReady(this,()=>{let Z=this.refreshPosition.bind(this);if(z.getPinned()==null)this.addManagedEventListeners({bodyScroll:($)=>{if($.direction==="horizontal")this.updateSticky($.left)}});this.addManagedListeners(z,{leftChanged:Z,displayedChildrenChanged:Z}),this.addManagedEventListeners({columnResized:Z}),this.refreshPosition()})}refreshPosition(){let{columnGroup:z,beans:J}=this,Q=z.getLeft(),Z=z.getActualWidth();if(Q==null||Z===0){this.left=null,this.right=null,this.setSticky(!1);return}this.left=Q,this.right=Q+Z;let $=J.colViewport.getScrollPosition();if($!=null)this.updateSticky($)}updateSticky(z){let{beans:J,left:Q,right:Z}=this;if(Q==null||Z==null){this.setSticky(!1);return}let{gos:$,visibleCols:X}=J,q=$.get("enableRtl")?X.bodyWidth-z:z;this.setSticky(Qq)}setSticky(z){let{isSticky:J,eLabel:Q}=this;if(J===z)return;this.isSticky=z,Q.classList.toggle("ag-sticky-label",z)}},i3={tag:"div",cls:"ag-header-group-cell-label",role:"presentation",children:[{tag:"span",ref:"agLabel",cls:"ag-header-group-text",role:"presentation"},{tag:"span",ref:"agOpened",cls:"ag-header-icon ag-header-expand-icon ag-header-expand-icon-expanded"},{tag:"span",ref:"agClosed",cls:"ag-header-icon ag-header-expand-icon ag-header-expand-icon-collapsed"}]},p3=class extends x{constructor(){super(i3);this.agOpened=j,this.agClosed=j,this.agLabel=j,this.isLoadingInnerComponent=!1}init(z){let{userCompFactory:J,touchSvc:Q}=this.beans;this.params=z,this.checkWarnings(),this.workOutInnerHeaderGroupComponent(J,z),this.setupLabel(z),this.addGroupExpandIcon(z),this.setupExpandIcons(),Q?.setupForHeaderGroup(this)}checkWarnings(){if(this.params.template)V(89)}workOutInnerHeaderGroupComponent(z,J){let Q=X_(z,J,J);if(!Q)return;this.isLoadingInnerComponent=!0,Q.newAgStackInstance().then((Z)=>{if(this.isLoadingInnerComponent=!1,!Z)return;if(this.isAlive())this.innerHeaderGroupComponent=Z,this.agLabel.appendChild(Z.getGui());else this.destroyBean(Z)})}setupExpandIcons(){let{agOpened:z,agClosed:J,params:{columnGroup:Q},beans:{colGroupSvc:Z}}=this;this.addInIcon("columnGroupOpened",z),this.addInIcon("columnGroupClosed",J);let $=(G)=>{if(q4(G))return;let U=!Q.isExpanded();Z.setColumnGroupOpened(Q.getProvidedColumnGroup(),U,"uiColumnExpanded")};this.addTouchAndClickListeners(J,$),this.addTouchAndClickListeners(z,$);let X=(G)=>{l0(G)};this.addManagedElementListeners(J,{dblclick:X}),this.addManagedElementListeners(z,{dblclick:X}),this.addManagedElementListeners(this.getGui(),{dblclick:$}),this.updateIconVisibility();let Y=Q.getProvidedColumnGroup(),q=this.updateIconVisibility.bind(this);this.addManagedListeners(Y,{expandedChanged:q,expandableChanged:q})}addTouchAndClickListeners(z,J){this.beans.touchSvc?.setupForHeaderGroupElement(this,z,J),this.addManagedElementListeners(z,{click:J})}updateIconVisibility(){let{agOpened:z,agClosed:J,params:{columnGroup:Q}}=this;if(Q.isExpandable()){let Z=Q.isExpanded();w(z,Z),w(J,!Z)}else w(z,!1),w(J,!1)}addInIcon(z,J){let Q=h(z,this.beans,null);if(Q)J.appendChild(Q)}addGroupExpandIcon(z){if(!z.columnGroup.isExpandable()){let{agOpened:J,agClosed:Q}=this;w(J,!1),w(Q,!1)}}setupLabel(z){let{displayName:J,columnGroup:Q}=z,{innerHeaderGroupComponent:Z,isLoadingInnerComponent:$}=this,X=Z||$;if(P(J)&&!X)this.agLabel.textContent=T2(J);if(!Q.getColGroupDef()?.suppressStickyLabel)this.createManagedBean(new c3(this.getGui(),Q))}destroy(){if(super.destroy(),this.innerHeaderGroupComponent)this.destroyBean(this.innerHeaderGroupComponent),this.innerHeaderGroupComponent=void 0}},n3={moduleName:"ColumnHeaderComp",version:i,userComponents:{agColumnHeader:m3},icons:{menu:"menu",menuAlt:"menu-alt"}},d3={moduleName:"ColumnGroupHeaderComp",version:i,userComponents:{agColumnGroupHeader:p3},icons:{columnGroupOpened:"expanded",columnGroupClosed:"contracted"}},r3=class extends S{constructor(){super(...arguments);this.beanName="animationFrameSvc",this.p1={list:[],sorted:!1},this.p2={list:[],sorted:!1},this.f1={list:[],sorted:!1},this.destroyTasks=[],this.ticking=!1,this.scrollGoingDown=!0,this.lastScrollTop=0,this.taskCount=0}setScrollTop(z){if(this.scrollGoingDown=z>=this.lastScrollTop,z===0)this.scrollGoingDown=!0;this.lastScrollTop=z}postConstruct(){this.active=!this.gos.get("suppressAnimationFrame"),this.batchFrameworkComps=this.beans.frameworkOverrides.batchFrameworkComps}verify(){if(this.active===!1)V(92)}createTask(z,J,Q,Z,$=!1){this.verify();let X=Q;if(Z&&this.batchFrameworkComps)X="f1";let Y={task:z,index:J,createOrder:++this.taskCount,deferred:$};this.addTaskToList(this[X],Y),this.schedule()}addTaskToList(z,J){z.list.push(J),z.sorted=!1}sortTaskList(z){if(z.sorted)return;let J=this.scrollGoingDown?1:-1;z.list.sort((Q,Z)=>{if(Q.deferred!==Z.deferred)return Q.deferred?-1:1;if(Q.index!==Z.index)return J*(Z.index-Q.index);return Z.createOrder-Q.createOrder}),z.sorted=!0}addDestroyTask(z){this.verify(),this.destroyTasks.push(z),this.schedule()}executeFrame(z){let{p1:J,p2:Q,f1:Z,destroyTasks:$,beans:X}=this,{ctrlsSvc:Y,frameworkOverrides:q}=X,G=J.list,U=Q.list,_=Z.list,H=Date.now(),W=0,B=z<=0,E=Y.getScrollFeature();while(B||W{while(B||W{};else if($.length)F=$.pop();else break;F()}W=Date.now()-H}if(G.length||U.length||_.length||$.length)this.requestFrame();else this.ticking=!1}flushAllFrames(){if(!this.active)return;this.executeFrame(-1)}schedule(){if(!this.active)return;if(!this.ticking)this.ticking=!0,this.requestFrame()}requestFrame(){let z=this.executeFrame.bind(this,60);O4(this.beans,z)}isQueueEmpty(){return!this.ticking}},t3={moduleName:"AnimationFrame",version:i,beans:[r3]},s3=class extends S{constructor(){super(...arguments);this.beanName="iconSvc"}createIconNoSpan(z,J){return h(z,this.beans,J?.column)}},l3=(z,J,Q)=>J||z&&Q,a3=class extends S{constructor(){super(...arguments);this.beanName="touchSvc"}mockBodyContextMenu(z,J){this.mockContextMenu(z,z.eBodyViewport,J)}mockHeaderContextMenu(z,J){this.mockContextMenu(z,z.eGui,J)}mockRowContextMenu(z){if(!a4())return;let J=(Q,Z,$)=>{let{rowCtrl:X,cellCtrl:Y}=z.getControlsForEventTarget($?.target??null);if(Y?.column)Y.dispatchCellContextMenuEvent($??null);this.beans.contextMenuSvc?.handleContextMenuMouseEvent(void 0,$,X,Y)};this.mockContextMenu(z,z.element,J)}handleCellDoubleClick(z,J){if((()=>{if(!a4()||vQ("dblclick"))return!1;let Z=Date.now(),$=Z-z.lastIPadMouseClickEvent<200;return z.lastIPadMouseClickEvent=Z,$})())return z.onCellDoubleClicked(J),J.preventDefault(),!0;return!1}setupForHeader(z){let{gos:J,sortSvc:Q,menuSvc:Z}=this.beans;if(J.get("suppressTouch"))return;let{params:$,eMenu:X,eFilterButton:Y}=z,q=new c0(z.getGui(),!0);z.addDestroyFunc(()=>q.destroy());let G=z.shouldSuppressMenuHide(),U=G&&P(X)&&$.enableMenu,_=!!Z?.isHeaderContextMenuEnabled($.column),H=l3($.enableMenu,_,F0(J)),W=q;if(U)W=new c0(X,!0),z.addDestroyFunc(()=>W.destroy());let B=(E)=>$.showColumnMenuAfterMouseClick(E.touchStart);if(U&&$.enableMenu)z.addManagedListeners(W,{tap:B});if(H)z.addManagedListeners(q,{longTap:B});if($.enableSorting){let E=(K)=>{let F=K.touchStart.target;if(G&&(X?.contains(F)||Y?.contains(F)))return;Q?.progressSort($.column,!1,"uiColumnSorted")};z.addManagedListeners(q,{tap:E})}if($.enableFilterButton&&Y){let E=new c0(Y,!0);z.addManagedListeners(E,{tap:()=>$.showFilter(Y)}),z.addDestroyFunc(()=>E.destroy())}}setupForHeaderGroup(z){let J=z.params;if(this.beans.menuSvc?.isHeaderContextMenuEnabled(J.columnGroup.getProvidedColumnGroup())){let Q=new c0(J.eGridHeader,!0),Z=($)=>J.showColumnMenuAfterMouseClick($.touchStart);z.addManagedListeners(Q,{longTap:Z}),z.addDestroyFunc(()=>Q.destroy())}}setupForHeaderGroupElement(z,J,Q){let Z=new c0(J,!0);z.addManagedListeners(Z,{tap:Q}),z.addDestroyFunc(()=>Z.destroy())}mockContextMenu(z,J,Q){if(!a4())return;let Z=new c0(J),$=(X)=>{if(!D2(this.beans,X.touchEvent))return;Q(void 0,X.touchStart,X.touchEvent)};z.addManagedListeners(Z,{longTap:$}),z.addDestroyFunc(()=>Z.destroy())}},o3={moduleName:"Touch",version:i,beans:[a3]},e3=class extends S{constructor(){super(...arguments);this.beanName="cellNavigation"}getNextCellToFocus(z,J,Q=!1){if(Q)return this.getNextCellToFocusWithCtrlPressed(z,J);return this.getNextCellToFocusWithoutCtrlPressed(z,J)}getNextCellToFocusWithCtrlPressed(z,J){let Q=z===k.UP,Z=z===k.DOWN,$=z===k.LEFT,X,Y,{pageBounds:q,gos:G,visibleCols:U,pinnedRowModel:_}=this.beans,{rowPinned:H}=J;if(Q||Z){if(H&&_)if(Q)Y=0;else Y=H==="top"?_.getPinnedTopRowCount()-1:_.getPinnedBottomRowCount()-1;else Y=Q?q.getFirstRow():q.getLastRow();X=J.column}else{let W=G.get("enableRtl");Y=J.rowIndex,X=($!==W?U.allCols:[...U.allCols].reverse()).find((E)=>!y0(E)&&this.isCellGoodToFocusOn({rowIndex:Y,rowPinned:null,column:E}))}return X?{rowIndex:Y,rowPinned:H,column:X}:null}getNextCellToFocusWithoutCtrlPressed(z,J){let Q=J,Z=!1;while(!Z){switch(z){case k.UP:Q=this.getCellAbove(Q);break;case k.DOWN:Q=this.getCellBelow(Q);break;case k.RIGHT:Q=this.gos.get("enableRtl")?this.getCellToLeft(Q):this.getCellToRight(Q);break;case k.LEFT:Q=this.gos.get("enableRtl")?this.getCellToRight(Q):this.getCellToLeft(Q);break;default:Q=null,V(8,{key:z});break}if(Q)Z=this.isCellGoodToFocusOn(Q);else Z=!0}return Q}isCellGoodToFocusOn(z){let J=z.column,Q,{pinnedRowModel:Z,rowModel:$}=this.beans;switch(z.rowPinned){case"top":Q=Z?.getPinnedTopRow(z.rowIndex);break;case"bottom":Q=Z?.getPinnedBottomRow(z.rowIndex);break;default:Q=$.getRow(z.rowIndex);break}if(!Q)return!1;return!this.isSuppressNavigable(J,Q)}getCellToLeft(z){if(!z)return null;let J=this.beans.visibleCols.getColBefore(z.column);if(!J)return null;return{rowIndex:z.rowIndex,column:J,rowPinned:z.rowPinned}}getCellToRight(z){if(!z)return null;let J=this.beans.visibleCols.getColAfter(z.column);if(!J)return null;return{rowIndex:z.rowIndex,column:J,rowPinned:z.rowPinned}}getCellBelow(z){if(!z)return null;let{beans:J}=this,Q=J.rowSpanSvc?.getCellEnd(z)??z,Z=M0(J,Q,!0);if(Z)return{rowIndex:Z.rowIndex,column:z.column,rowPinned:Z.rowPinned};return null}getCellAbove(z){if(!z)return null;let{beans:J}=this,Q=J.rowSpanSvc?.getCellStart(z)??z,Z=d0(J,{rowIndex:Q.rowIndex,rowPinned:Q.rowPinned},!0);if(Z)return{rowIndex:Z.rowIndex,column:z.column,rowPinned:Z.rowPinned};return null}getNextTabbedCell(z,J){if(J)return this.getNextTabbedCellBackwards(z);return this.getNextTabbedCellForwards(z)}getNextTabbedCellForwards(z){let{visibleCols:J,pagination:Q}=this.beans,Z=J.allCols,$=z.rowIndex,X=z.rowPinned,Y=J.getColAfter(z.column);if(!Y){Y=Z[0];let q=M0(this.beans,z,!0);if(d(q))return null;if(!q.rowPinned&&!(Q?.isRowInPage(q.rowIndex)??!0))return null;$=q?q.rowIndex:null,X=q?q.rowPinned:null}return{rowIndex:$,column:Y,rowPinned:X}}getNextTabbedCellBackwards(z){let{beans:J}=this,{visibleCols:Q,pagination:Z}=J,$=Q.allCols,X=z.rowIndex,Y=z.rowPinned,q=Q.getColBefore(z.column);if(!q){q=y($);let G=d0(J,{rowIndex:z.rowIndex,rowPinned:z.rowPinned},!0);if(d(G))return null;if(!G.rowPinned&&!(Z?.isRowInPage(G.rowIndex)??!0))return null;X=G?G.rowIndex:null,Y=G?G.rowPinned:null}return{rowIndex:X,column:q,rowPinned:Y}}isSuppressNavigable(z,J){let{suppressNavigable:Q}=z.colDef;if(typeof Q==="boolean")return Q;if(typeof Q==="function"){let Z=z.createColumnFunctionCallbackParams(J);return Q(Z)}return!1}};function zK(z){return z.focusSvc.getFocusedCell()}function JK(z){return z.focusSvc.clearFocusedCell()}function QK(z,J,Q,Z){z.focusSvc.setFocusedCell({rowIndex:J,column:Q,rowPinned:Z,forceBrowserFocus:!0})}function ZK(z,J){return z.navigation?.tabToNextCell(!1,J)??!1}function $K(z,J){return z.navigation?.tabToNextCell(!0,J)??!1}function XK(z,J,Q=!1){let Z=z.headerNavigation?.getHeaderPositionForColumn(J,Q);if(!Z)return;z.focusSvc.focusHeaderPosition({headerPosition:Z})}function zz(z){let J=z;return J?.getFrameworkComponentInstance!=null?J.getFrameworkComponentInstance():z}var YK=class extends S{constructor(){super(...arguments);this.beanName="editModelSvc",this.edits=new Map,this.cellValidations=new o$,this.rowValidations=new e$,this.suspendEdits=!1}suspend(z){this.suspendEdits=z}removeEdits({rowNode:z,column:J}){if(!this.hasEdits({rowNode:z})||!z)return;let Q=this.getEditRow(z);if(J)Q.delete(J);else Q.clear();if(Q.size===0)this.edits.delete(z)}getEditRow(z,J={}){if(this.suspendEdits)return;if(this.edits.size===0)return;let Q=z&&this.edits.get(z);if(Q)return Q;if(J.checkSiblings){let Z=z.pinnedSibling;if(Z)return this.getEditRow(Z)}return}getEditRowDataValue(z,{checkSiblings:J}={}){if(!z||this.edits.size===0)return;let Q=this.getEditRow(z),Z=z.pinnedSibling,$=J&&Z&&this.getEditRow(Z);if(!Q&&!$)return;let X={...z.data},Y=(q,G)=>q.forEach(({editorValue:U,pendingValue:_},H)=>{let W=U===void 0?_:U;if(W!==v0)G[H.getColId()]=W});if(Q)Y(Q,X);if($)Y($,X);return X}getEdit(z={},J){let{rowNode:Q,column:Z}=z,$=this.edits;if(this.suspendEdits||$.size===0||!Q||!Z)return;let X=$.get(Q)?.get(Z);if(X)return X;if(J?.checkSiblings){let Y=Q.pinnedSibling;if(Y)return $.get(Y)?.get(Z)}return}getEditMap(z=!0){if(this.suspendEdits||this.edits.size===0)return new Map;if(!z)return this.edits;let J=new Map;return this.edits.forEach((Q,Z)=>{let $=new Map;Q.forEach(({editorState:X,...Y},q)=>$.set(q,{...Y})),J.set(Z,$)}),J}setEditMap(z){this.edits.clear(),z.forEach((J,Q)=>{let Z=new Map;J.forEach(($,X)=>Z.set(X,{...$})),this.edits.set(Q,Z)})}setEdit(z,J){let Q=this.edits;if(Q.size===0||!Q.has(z.rowNode))Q.set(z.rowNode,new Map);let Z=this.getEdit(z),$={editorState:{isCancelAfterEnd:void 0,isCancelBeforeStart:void 0},...Z,...J};return this.getEditRow(z.rowNode).set(z.column,$),$}clearEditValue(z){let{rowNode:J,column:Q}=z;if(!J)return;let Z=(X)=>{X.editorValue=void 0,X.pendingValue=X.sourceValue,X.state="changed"};if(!Q){this.getEditRow(J)?.forEach(Z);return}let $=this.getEdit(z);if($)Z($)}getState(z){if(this.suspendEdits)return;return this.getEdit(z)?.state}getEditPositions(z){if(this.suspendEdits||(z??this.edits).size===0)return[];let J=[];return(z??this.edits).forEach((Q,Z)=>{for(let $ of Q.keys()){let{editorState:X,...Y}=Q.get($);J.push({rowNode:Z,column:$,...Y})}}),J}hasRowEdits(z,J){if(this.suspendEdits)return!1;if(this.edits.size===0)return!1;return!!this.getEditRow(z,J)}hasEdits(z={},J={}){if(this.suspendEdits)return!1;if(this.edits.size===0)return!1;let{rowNode:Q,column:Z}=z,{withOpenEditor:$}=J;if(Q){let X=this.getEditRow(Q,J);if(!X)return!1;if(Z){if($)return this.getEdit(z)?.state==="editing";return X.has(Z)}if(X.size!==0){if($)return Array.from(X.values()).some(({state:Y})=>Y==="editing");return!0}return!1}if($)return this.getEditPositions().some(({state:X})=>X==="editing");return this.edits.size>0}start(z){let J=this.getEditRow(z.rowNode)??new Map,{rowNode:Q,column:Z}=z;if(Z&&!J.has(Z))J.set(Z,{editorValue:void 0,pendingValue:v0,sourceValue:this.beans.valueSvc.getValue(Z,Q,"data"),state:"editing",editorState:{isCancelAfterEnd:void 0,isCancelBeforeStart:void 0}});this.edits.set(Q,J)}stop(z,J,Q){if(!this.hasEdits(z))return;if(J){let Z=this.getEditRow(z.rowNode)?.get(z.column);if(Z&&(Z.pendingValue===v0||Z.pendingValue===Z.sourceValue))this.removeEdits(z);else if(Z&&Q)Z.editorValue=void 0}else this.removeEdits(z)}clear(){for(let z of this.edits.values())z.clear();this.edits.clear()}getCellValidationModel(){return this.cellValidations}getRowValidationModel(){return this.rowValidations}setCellValidationModel(z){this.cellValidations=z}setRowValidationModel(z){this.rowValidations=z}destroy(){super.destroy(),this.clear()}},o$=class{constructor(){this.cellValidations=new Map}getCellValidation(z){let{rowNode:J,column:Q}=z||{};return this.cellValidations?.get(J)?.get(Q)}hasCellValidation(z){if(!z?.rowNode||!z.column)return this.cellValidations.size>0;return!!this.getCellValidation(z)}setCellValidation(z,J){let{rowNode:Q,column:Z}=z;if(!this.cellValidations.has(Q))this.cellValidations.set(Q,new Map);this.cellValidations.get(Q).set(Z,J)}clearCellValidation(z){let{rowNode:J,column:Q}=z;this.cellValidations.get(J)?.delete(Q)}setCellValidationMap(z){this.cellValidations=z}getCellValidationMap(){return this.cellValidations}clearCellValidationMap(){this.cellValidations.clear()}},e$=class{constructor(){this.rowValidations=new Map}getRowValidation(z){let{rowNode:J}=z||{};return this.rowValidations.get(J)}hasRowValidation(z){if(!z?.rowNode)return this.rowValidations.size>0;return!!this.getRowValidation(z)}setRowValidation({rowNode:z},J){this.rowValidations.set(z,J)}clearRowValidation({rowNode:z}){this.rowValidations.delete(z)}setRowValidationMap(z){this.rowValidations=z}getRowValidationMap(){return this.rowValidations}clearRowValidationMap(){this.rowValidations.clear()}};function i6(z,J={}){let{rowIndex:Q,rowId:Z,rowCtrl:$,rowPinned:X}=J;if($)return $;let{rowModel:Y,rowRenderer:q}=z,{rowNode:G}=J;if(!G){if(Z)G=b_(z,Z,X);else if(Q!=null)G=Y.getRow(Q)}return G?q.getRowCtrlByNode(G):void 0}function l(z,J={}){let{cellCtrl:Q,colId:Z,columnId:$,column:X}=J;if(Q)return Q;let Y=z.colModel.getCol(Z??$??lQ(X)),q=J.rowCtrl??i6(z,J),G=q?.getCellCtrl(Y)??void 0;if(G)return G;let U=J.rowNode??q?.rowNode;if(U)return z.rowRenderer.getCellCtrls([U],[Y])?.[0];return}function J8(z){let{editSvc:J}=z;if(J?.isBatchEditing())Kz(z,{persist:!0}),Bz(z);else J?.stopEditing(void 0,{source:"api"})}function qK(z,J,Q){let{gos:Z,popupSvc:$}=J;if(!Z.get("stopEditingWhenCellsLoseFocus"))return;let X=(Y)=>{let q=Y.relatedTarget;if(cQ(q)===null){J8(J);return}let G=Q.some((U)=>U.contains(q))&&Z.isElementInThisInstance(q);if(!G)G=!!$&&($.getActivePopups().some((U)=>U.contains(q))||$.isElementWithinCustomPopup(q));if(!G)J8(J)};for(let Y of Q)z.addManagedElementListeners(Y,{focusout:X})}function lQ(z){if(!z)return;if(typeof z==="string")return z;return z.getColId()}var v0=Symbol("unedited"),GK=(z,J={})=>{let Q=z.rowRenderer.getCellCtrls(J.rowNodes,J.columns),Z=Array(Q.length),$=0;for(let X=0,Y=Q.length;X0)J.set(Q,$)}return J}function z1(z,J,Q){let{key:Z,event:$,cellStartedEdit:X,silent:Y}=Q??{},{editModelSvc:q,gos:G,userCompFactory:U}=z,_=l(z,J),H=_?.comp?.getCellEditor(),W=JX(z,J,Z,X&&!Y),B=q?.getEdit(J),E=W.value??B?.sourceValue;if(H){q?.setEdit(J,{editorValue:g1(z,E,!0,J.column),state:"editing"}),H.refresh?.(W);return}let K=J.column.getColDef(),F=g9(U,K,W);if(!F)return;let{popupFromSelector:L,popupPositionFromSelector:D}=F,M=L??!!K.cellEditorPopup,f=D??K.cellEditorPopupPosition;if(QX(F.params,$),!_)return;let{rangeFeature:A,rowCtrl:R,comp:O,onEditorAttachedFuncs:v}=_;q?.setEdit(J,{editorValue:g1(z,E,!0,J.column),state:"editing",editorState:{cellStartedEditing:void 0,cellStoppedEditing:void 0}}),_.editCompDetails=F,v.push(()=>A?.unsetComp()),O?.setEditDetails(F,M,f,G.get("reactiveCustomComponents")),R?.refreshRow({suppressFlash:!0}),_.refreshNoteState(),HK(z,J,$,E,Y)}function HK(z,J,Q,Z,$){let{editSvc:X,editModelSvc:Y}=z,q=Y?.getEdit(J);if(!$&&q?.state==="editing"&&!q?.editorState?.cellStartedEditing)X?.dispatchCellEvent(J,Q,"cellEditingStarted",{value:Z}),Y?.setEdit(J,{editorState:{cellStartedEditing:!0}})}function zX(z,J,Q){let Z={editorValueExists:!1};if(U5(z)){if((J.getValidationErrors?.()?.length??0)>0)return Z}if(Q?.isCancelling)return Z;if(Q?.isStopping){let X=J?.isCancelAfterEnd?.();if(X)return{...Z,isCancelAfterEnd:X}}return{editorValue:J.getValue(),editorValueExists:!0}}function JX(z,J,Q,Z){let{valueSvc:$,gos:X,editSvc:Y}=z,q=z.gos.get("enableGroupEdit"),G=l(z,J),U=J.rowNode?.rowIndex??void 0,_=Y?.isBatchEditing(),H=z.colModel.getCol(J.column.getId()),{rowNode:W,column:B}=J,E=G.comp?.getCellEditor(),K=Y?.getCellDataValue(J),F=K===void 0?E?zX(z,E)?.editorValue:void 0:K,L=F===v0?$.getValueForDisplay({column:H,node:W,from:"edit"})?.value:F,D=q?F:L;if(B.isAllowFormula()&&z.formula?.isFormula(D))D=z.formula?.normaliseFormula(D,!0)??D;return C(X,{value:D,eventKey:Q??null,column:B,colDef:B.getColDef(),rowIndex:U,node:W,data:W.data,cellStartedEdit:!!Z,onKeyDown:G?.onKeyDown.bind(G),stopEditing:(M)=>{Y.stopEditing(J,{source:_?"ui":"api",suppressNavigateAfterEdit:M}),j2(z,J,{})},eGridCell:G?.eGui,parseValue:(M)=>$.parseValue(H,W,M,G?.value),formatValue:G?.formatValue.bind(G),validate:()=>{Y?.validateEdit()}})}function U2(z,J){let{editModelSvc:Q}=z;Q?.getEditMap().forEach((Z,$)=>{Z.forEach((X,Y)=>{if(!J&&(X.state==="editing"||X.pendingValue===v0))return;if(!S4(X)&&(X.state!=="editing"||J))Q?.removeEdits({rowNode:$,column:Y})})})}function WK(z,J){let Q=J.comp?.getCellEditor();if(!Q?.refresh)return;let{eventKey:Z,cellStartedEdit:$}=J.editCompDetails.params,{column:X}=J,Y=JX(z,J,Z,$),q=X.getColDef(),G=g9(z.userCompFactory,q,Y);Q.refresh(QX(G.params,Z))}function QX(z,J){if(J instanceof KeyboardEvent&&z.column.getColDef().cellEditor==="agNumberCellEditor")z.suppressPreventDefault=["-","+",".","e"].includes(J?.key??"")||z.suppressPreventDefault;else J?.preventDefault?.();return z}function Kz(z,J){for(let Q of z.editModelSvc?.getEditPositions()??[]){let Z=l(z,Q);if(!Z)continue;let $=Z.comp?.getCellEditor();if(!$)continue;let{editorValue:X,editorValueExists:Y,isCancelAfterEnd:q}=zX(z,$,J);if(q){let{cellStartedEditing:G,cellStoppedEditing:U}=z.editModelSvc?.getEdit(Q)?.editorState||{};z.editModelSvc?.setEdit(Q,{editorState:{isCancelAfterEnd:q,cellStartedEditing:G,cellStoppedEditing:U}})}k1(z,Q,X,void 0,!Y,J)}}function k1(z,J,Q,Z,$,X){let{editModelSvc:Y,valueSvc:q}=z;if(!Y)return;let{rowNode:G,column:U}=J;if(!(G&&U))return;let _=Y.getEdit(J);if(_?.sourceValue===void 0){let H=_?g1(z,_.editorValue,!1,U):v0,W={sourceValue:q.getValue(U,G,"data"),pendingValue:H};if(X?.persist)W.state="changed";_=Y.setEdit(J,W)}if(Y.setEdit(J,{editorValue:$?g1(z,_.sourceValue,!0,U):Q}),X?.persist)BK(z,J)}function g1(z,J,Q,Z){let{formula:$}=z;if(Z.isAllowFormula()&&$?.isFormula(J))return $?.normaliseFormula(J,Q)??J;return J}function BK(z,J){let{editModelSvc:Q}=z,Z=Q?.getEdit(J),X={pendingValue:g1(z,Z?.editorValue,!1,J.column)};if(!Z?.editorState?.cellStoppedEditing&&Z?.state!=="editing")X.state="changed";Q?.setEdit(J,X)}function Bz(z,J,Q={}){if(!J)J=z.editModelSvc?.getEditPositions();if(J)for(let Z of J)j2(z,Z,Q)}function j2(z,J,Q,Z=l(z,J)){let $=z.editModelSvc,X=$?.getEdit(J),Y;if(X&&X.state!=="editing"&&X.editorState?.cellStoppedEditing)Y=X.state;else Y="changed";if(!Z){if(X)$?.setEdit(J,{state:Y});return}let q=Z.comp,G=q?.getCellEditor();if(q&&!G){if(Z?.refreshCell(),X){$?.setEdit(J,{state:Y});let _=z.gos.get("enableGroupEdit")?Q8(X,Q?.cancel):{valueChanged:!1,newValue:void 0,oldValue:X.sourceValue};Z8(z,J,_,Q)}return}if(U5(z)){let _=X&&G?.getValidationErrors?.(),H=$?.getCellValidationModel();if(_?.length)H?.setCellValidation(J,{errorMessages:_});else H?.clearCellValidation(J)}if(X)$?.setEdit(J,{state:Y});q?.setEditDetails(),q?.refreshEditStyles(!1,!1),Z?.refreshCell({force:!0,suppressFlash:!0});let U=$?.getEdit(J);if(U&&U.state!=="editing"){let _=Q?.cancel,H=z.gos.get("enableGroupEdit")?Q8(U,_):EK(U,X,_);Z8(z,J,H,Q)}}function Q8(z,J){let{sourceValue:Q,pendingValue:Z}=z,$;if(!J&&Z!==v0)$=Z;return{valueChanged:!J&&S4(z),newValue:$,oldValue:Q,value:Q}}function EK(z,J,Q){if(Q||z.editorState.isCancelAfterEnd)return{valueChanged:!1,newValue:void 0,oldValue:z.sourceValue};let Z=z.editorValue;if(Z==null||Z===v0)Z=J?.pendingValue;if(Z===v0)Z=void 0;return{valueChanged:S4(z),newValue:Z,oldValue:z.sourceValue}}function Z8(z,J,Q,{silent:Z,event:$}={}){let{editSvc:X,editModelSvc:Y}=z,q=Y?.getEdit(J),{editorState:G}=q||{},{isCancelBeforeStart:U,cellStartedEditing:_,cellStoppedEditing:H}=G||{};if(!Z&&!U&&_&&!H)X?.dispatchCellEvent(J,$,"cellEditingStopped",Q),Y?.setEdit(J,{editorState:{cellStoppedEditing:!0}})}function KK(z){if(!z)return!1;for(let J=0,Q=z.length;J0,M=D?F.join(". "):"";if(HZ(L,D),D)Z.announceValue(`${U} ${F}`,"editorValidation");if(L instanceof HTMLInputElement)L.setCustomValidity(M);else L.classList.toggle("invalid",D)}if(F?.length>0)Q.setCellValidation({rowNode:E,column:K},{errorMessages:F});_.add(H.rowCtrl)}if(Kz(z,{persist:!1}),X?.setCellValidationModel(Q),q){let H=LK(z);X?.setRowValidationModel(H)}for(let H of _.values()){H.rowEditStyleFeature?.applyRowStyles();for(let W of H.getAllCellCtrls())W.tooltipFeature?.refreshTooltip(!0),W.editorTooltipFeature?.refreshTooltip(!0),W.editStyleFeature?.applyCellStyles?.()}}var LK=(z)=>{let J=new e$,Q=z.gos.get("getFullRowEditValidationErrors"),Z=z.editModelSvc?.getEditMap();if(!Z)return J;for(let $ of Z.keys()){let X=Z.get($);if(!X)continue;let Y=[],{rowIndex:q,rowPinned:G}=$;for(let _ of X.keys()){let H=X.get(_);if(!H)continue;let{editorValue:W,pendingValue:B,sourceValue:E}=H,K=W??(B===v0?void 0:B)??E;Y.push({column:_,colId:_.getColId(),rowIndex:q,rowPinned:G,oldValue:E,newValue:K})}let U=Q?.({editorsState:Y})??[];if(U.length>0)J.setRowValidation({rowNode:$},{errorMessages:U})}return J};function DK(z){Mz(z,!0);let J=z.editModelSvc?.getCellValidationModel().getCellValidationMap();if(!J)return null;let Q=[];return J.forEach((Z,$)=>{Z.forEach(({errorMessages:X},Y)=>{Q.push({column:Y,rowIndex:$.rowIndex,rowPinned:$.rowPinned,messages:X??null})})}),Q}function MJ(z){return!!(z.rowPinned&&z.pinnedSibling)}function z4(z,J,Q,Z){let $=J==="top";if(!Q)return z4(z,J,$?z.getPinnedTopRow(0):z.getPinnedBottomRow(0),Z);if(!Z){let G=$?z.getPinnedTopRowCount():z.getPinnedBottomRowCount();return z4(z,J,Q,$?z.getPinnedTopRow(G-1):z.getPinnedBottomRow(G-1))}let X=!1,Y=!1,q=[];return z.forEachPinnedRow(J,(G)=>{if(G===Q&&!X){X=!0,q.push(G);return}if(X&&G===Z){Y=!0,q.push(G);return}if(X&&!Y)q.push(G)}),q}function MK(z,J,Q,{rowNode:Z,column:$},X){return C(z.gos,{type:Q,node:Z,data:Z.data,value:X,column:$,colDef:$.getColDef(),rowPinned:Z.rowPinned,event:J,rowIndex:Z.rowIndex})}function kK(z,J=!1){if(z===k.DELETE)return!0;if(!J&&z===k.BACKSPACE)return i9();return!1}var fK=class extends S{constructor(z,J,Q,Z){super();this.cellCtrl=z,this.rowNode=Q,this.rowCtrl=Z,this.beans=J}init(){this.eGui=this.cellCtrl.eGui}onKeyDown(z){let J=z.key;if(J===k.ENTER&&y0(this.cellCtrl.column)&&this.beans.rowNumbersSvc?.handleKeyDownOnCell(this.cellCtrl.cellPosition,z))return;switch(J){case k.ENTER:this.onEnterKeyDown(z);break;case k.F2:this.onF2KeyDown(z);break;case k.ESCAPE:this.onEscapeKeyDown(z);break;case k.TAB:this.onTabKeyDown(z);break;case k.BACKSPACE:case k.DELETE:this.onBackspaceOrDeleteKeyDown(J,z);break;case k.DOWN:case k.UP:case k.RIGHT:case k.LEFT:this.onNavigationKeyDown(z,J);break}}onNavigationKeyDown(z,J){let{cellCtrl:Q,beans:Z}=this;if(Z.editSvc?.isEditing(Q,{withOpenEditor:!0}))return;if(z.shiftKey&&Q.isRangeSelectionEnabled())this.onShiftRangeSelect(z);else{let $=Q.getFocusedCellPosition();Z.navigation?.navigateToNextCell(z,J,$,!0)}z.preventDefault()}onShiftRangeSelect(z){let{rangeSvc:J,navigation:Q}=this.beans;if(!J)return;let Z=J.extendLatestRangeInDirection(z);if(!Z)return;if(z.key===k.LEFT||z.key===k.RIGHT)Q?.ensureColumnVisible(Z.column);else Q?.ensureRowVisible(Z.rowIndex)}onTabKeyDown(z){this.beans.navigation?.onTabKeyDown(this.cellCtrl,z)}onBackspaceOrDeleteKeyDown(z,J){let{cellCtrl:Q,beans:Z,rowNode:$}=this,{gos:X,rangeSvc:Y,eventSvc:q,editSvc:G}=Z;if(q.dispatchEvent({type:"keyShortcutChangedCellStart"}),kK(z,X.get("enableCellEditingOnBackspace"))&&!G?.isEditing(Q,{withOpenEditor:!0})){if(Y&&n0(X))Y.clearCellRangeCellValues({dispatchWrapperEvents:!0,wrapperEventSource:"deleteKey"});else if(Q.isCellEditable()){let U=Z.valueSvc.getDeleteValue(Q.column,$);$.setDataValue(Q.column,U,"cellClear")}}else if(!G?.isEditing(Q,{withOpenEditor:!0}))Z.editSvc?.startEditing(Q,{startedEdit:!0,event:J});q.dispatchEvent({type:"keyShortcutChangedCellEnd"})}onEnterKeyDown(z){let{cellCtrl:J,beans:Q}=this,{editSvc:Z,navigation:$}=Q,X=Z?.isEditing(J,{withOpenEditor:!0}),Y=J.rowNode,q=Z?.isRowEditing(Y,{withOpenEditor:!0}),G=(U)=>{if(Z?.startEditing(U,{startedEdit:!0,event:z,source:"edit"}))z.preventDefault()};if(X||q){if(this.isCtrlEnter(z)){Z?.applyBulkEdit(J,Q?.rangeSvc?.getCellRanges()||[]);return}if(Mz(Q),Z?.checkNavWithValidation(void 0,z)==="block-stop")return;if(Z?.isEditing(J,{withOpenEditor:!0}))Z?.stopEditing(J,{event:z,source:"edit"});else if(q&&!J.isCellEditable())Z?.stopEditing({rowNode:Y},{event:z,source:"edit"});else G(J)}else if(Q.gos.get("enterNavigatesVertically")){let U=z.shiftKey?k.UP:k.DOWN;$?.navigateToNextCell(null,U,J.cellPosition,!1)}else{if(Z?.hasValidationErrors())return;if(Z?.hasValidationErrors(J))Z.revertSingleCellEdit(J,!0);G(J)}}isCtrlEnter(z){return(z.ctrlKey||z.metaKey)&&z.key===k.ENTER}onF2KeyDown(z){let{cellCtrl:J,beans:{editSvc:Q,notesSvc:Z}}=this,$=Q?.isEditing();if(z.shiftKey&&Z?.hasDataSource()&&!$){let X=Z.getNoteAccess({rowNode:this.rowNode,column:J.column});if(X){if(!X.isSuppressed||X.canView){Z.showNote(X.params,!0),z.preventDefault();return}}}if($){if(Mz(this.beans),Q?.checkNavWithValidation(void 0,z)==="block-stop")return}Q?.startEditing(J,{startedEdit:!0,event:z})}onEscapeKeyDown(z){let{cellCtrl:J,beans:{editSvc:Q}}=this;if(Q?.checkNavWithValidation(J,z)==="block-stop")Q.revertSingleCellEdit(J);setTimeout(()=>{Q?.stopEditing(J,{event:z,cancel:!0})})}processCharacter(z){let Q=z.target!==this.eGui,{beans:{editSvc:Z},cellCtrl:$}=this;if(Q)return;if(Z?.isEditing($,{withOpenEditor:!0}))return;if(z.key===k.SPACE)this.onSpaceKeyDown(z);else if(Z?.isCellEditable($,"ui")){if(Z?.hasValidationErrors()&&!Z?.hasValidationErrors($))return;if(Z?.startEditing($,{startedEdit:!0,event:z,source:"api",editable:!0}),!$.editCompDetails?.params?.suppressPreventDefault)z.preventDefault()}}onSpaceKeyDown(z){let{gos:J,editSvc:Q}=this.beans,{rowNode:Z}=this.cellCtrl;if(!Q?.isEditing(this.cellCtrl,{withOpenEditor:!0})&&s4(J))this.beans.selectionSvc?.handleSelectionEvent(z,Z,"spaceKey");z.preventDefault()}},SK=class extends S{constructor(z,J,Q){super();this.cellCtrl=z,this.column=Q,this.beans=J}onMouseEvent(z,J){if(q4(J))return;switch(z){case"click":this.onCellClicked(J);break;case"pointerdown":case"mousedown":case"touchstart":this.onMouseDown(J);break;case"dblclick":this.onCellDoubleClicked(J);break;case"mouseout":this.onMouseOut(J);break;case"mouseover":this.onMouseOver(J);break}}onCellClicked(z){if(this.beans.touchSvc?.handleCellDoubleClick(this,z))return;let{eventSvc:J,rangeSvc:Q,editSvc:Z,editModelSvc:$,frameworkOverrides:X,gos:Y}=this.beans,q=z.ctrlKey||z.metaKey,{cellCtrl:G}=this,{column:U,cellPosition:_,rowNode:H}=G,W=S6(Y,U,H,z);if(Q&&q&&!W){if(Q.getCellRangeCount(_)>1)Q.intersectLastRange(!0)}let B=G.createEvent(z,"cellClicked");B.isEventHandlingSuppressed=W,J.dispatchEvent(B);let E=U.colDef;if(E.onCellClicked)window.setTimeout(()=>{X.wrapOutgoing(()=>{E.onCellClicked(B)})},0);if(W)return;if($?.getState(G)!=="editing"){let K=Z?.isEditing(),F=Z?.isRangeSelectionEnabledWhileEditing(),L=$?.getCellValidationModel().getCellValidationMap().size??0,D=$?.getRowValidationModel().getRowValidationMap().size??0;if(K&&(F||L>0||D>0))return;if(Z?.shouldStartEditing(G,z))Z?.startEditing(G,{event:z});else if(Z?.shouldStopEditing(G,z))if(this.beans.gos.get("editType")==="fullRow")Z?.stopEditing(G,{event:z,source:"edit"});else Z?.stopEditing(void 0,{event:z,source:"edit"})}}onCellDoubleClicked(z){let{column:J,beans:Q,cellCtrl:Z}=this,{eventSvc:$,frameworkOverrides:X,editSvc:Y,editModelSvc:q,gos:G}=Q,U=S6(G,Z.column,Z.rowNode,z),_=J.colDef,H=Z.createEvent(z,"cellDoubleClicked");if(H.isEventHandlingSuppressed=U,$.dispatchEvent(H),typeof _.onCellDoubleClicked==="function")window.setTimeout(()=>{X.wrapOutgoing(()=>{_.onCellDoubleClicked(H)})},0);if(U)return;if(Y?.shouldStartEditing(Z,z)&&q?.getState(Z)!=="editing"){let W=Y?.isEditing(),B=Y?.isRangeSelectionEnabledWhileEditing(),E=q?.getCellValidationModel().getCellValidationMap().size??0,K=q?.getRowValidationModel().getRowValidationMap().size??0;if(W&&(B||E>0||K>0))return;Y?.startEditing(Z,{event:z})}}onMouseDown(z){let{shiftKey:J}=z,Q=z.target,{cellCtrl:Z,beans:$}=this,{eventSvc:X,rangeSvc:Y,rowNumbersSvc:q,focusSvc:G,gos:U,editSvc:_}=$,{column:H,rowNode:W,cellPosition:B}=Z,E=S6(U,H,W,z),K=()=>{let M=Z.createEvent(z,"cellMouseDown");M.isEventHandlingSuppressed=E,X.dispatchEvent(M)};if(E){K();return}if(this.isRightClickInExistingRange(z))return;let F=Y&&!Y.isEmpty(),L=this.containsWidget(Q),D=y0(H);if(q&&D&&!q.handleMouseDownOnCell(B,z))return;if(!J||!F){let M=_?.isEditing(Z),A=U.get("enableCellTextSelection")&&z.defaultPrevented,R=(jz()||A)&&!M&&!_2(Q)&&!L;Z.focusCell(R,z)}if(J&&F&&!G.isCellFocused(B)){z.preventDefault();let M=G.getFocusedCell();if(M){let{column:f,rowIndex:A,rowPinned:R}=M,O=!!_?.isRangeSelectionEnabledWhileEditing?.();if(_?.isEditing(M)&&!O)_?.stopEditing(M);if(!O)G.setFocusedCell({column:f,rowIndex:A,rowPinned:R,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0,sourceEvent:z})}}if(L)return;Y?.handleCellMouseDown(z,B),K()}isRightClickInExistingRange(z){let{rangeSvc:J}=this.beans;if(J){let Q=J.isCellInAnyRange(this.cellCtrl.cellPosition),Z=jZ(this.beans,z);if(Q&&Z)return!0}return!1}containsWidget(z){return nz(z,"ag-selection-checkbox",3)||nz(z,"ag-drag-handle",3)}onMouseOut(z){if(this.mouseStayingInsideCell(z))return;let{eventSvc:J,colHover:Q}=this.beans;J.dispatchEvent(this.cellCtrl.createEvent(z,"cellMouseOut")),Q?.clearMouseOver()}onMouseOver(z){if(this.mouseStayingInsideCell(z))return;let{eventSvc:J,colHover:Q}=this.beans;J.dispatchEvent(this.cellCtrl.createEvent(z,"cellMouseOver")),Q?.setMouseOver([this.column])}mouseStayingInsideCell(z){if(!z.target||!z.relatedTarget)return!1;let J=this.cellCtrl.eGui,Q=J.contains(z.target),Z=J.contains(z.relatedTarget);return Q&&Z}},VK=class extends S{constructor(z,J){super();this.cellCtrl=z,this.beans=J,this.column=z.column,this.rowNode=z.rowNode;let Q=z.getCellSpan();if(Q){let Z=this.refreshSpanHeight.bind(this,Q);this.addManagedListeners(this.beans.eventSvc,{paginationChanged:Z,recalculateRowBounds:Z,pinnedHeightChanged:Z})}else this.setupColSpan(),this.setupRowSpan()}setupRowSpan(){this.rowSpan=this.column.getRowSpan(this.rowNode),this.addManagedListeners(this.beans.eventSvc,{newColumnsLoaded:()=>this.onNewColumnsLoaded()})}init(){this.onLeftChanged(),this.onWidthChanged();let z=this.cellCtrl.getCellSpan();if(z)this.refreshSpanHeight(z);else this._legacyApplyRowSpan()}refreshSpanHeight(z){let J=z.getCellHeight(),Q=this.cellCtrl.eGui;if(J!=null&&Q)Q.style.height=`${J}px`}onNewColumnsLoaded(){let z=this.column.getRowSpan(this.rowNode);if(this.rowSpan===z)return;this.rowSpan=z,this._legacyApplyRowSpan(!0)}onDisplayColumnsChanged(){let z=this.getColSpanningList();if(!Z0(this.colsSpanning,z))this.colsSpanning=z,this.onWidthChanged(),this.onLeftChanged()}setupColSpan(){if(this.column.colDef.colSpan==null)return;this.colsSpanning=this.getColSpanningList(),this.addManagedListeners(this.beans.eventSvc,{displayedColumnsChanged:this.onDisplayColumnsChanged.bind(this),displayedColumnsWidthChanged:this.onWidthChanged.bind(this)})}onWidthChanged(){let z=this.cellCtrl.eGui;if(!z)return;z.style.width=`${this.getCellWidth()}px`}getCellWidth(){if(!this.colsSpanning)return this.column.getActualWidth();return this.colsSpanning.reduce((z,J)=>z+J.getActualWidth(),0)}getColSpanningList(){let{column:z,rowNode:J}=this,Q=z.getColSpan(J),Z=[];if(Q===1)Z.push(z);else{let $=z,X=z.getPinned();for(let Y=0;$&&Ythis.removeFeatures()),this.onSuppressCellFocusChanged(this.beans.gos.get("suppressCellFocus")),this.setupFocus(),this.applyStaticCssClasses(),this.setWrapText(),this.onFirstRightPinnedChanged(),this.onLastLeftPinnedChanged(),this.onColumnHover(),this.setupControlComps(),this.setupAutoHeight(Z,Y),this.refreshFirstAndLastStyles(),this.checkFormulaError(),this.refreshAriaRowIndex(),this.refreshAriaColIndex(),this.positionFeature?.init(),this.customStyleFeature?.setComp(z),this.editStyleFeature?.setComp(z),this.tooltipFeature?.refreshTooltip(),this.keyboardListener?.init(),this.rangeFeature?.setComp(z),this.rowResizeFeature?.refreshRowResizer();let q=X?this.isCellEditable():void 0,G=!q&&this.hasEdit&&this.editSvc?.isEditing(this,{withOpenEditor:!0});if(q||G)this.editSvc?.startEditing(this,{startedEdit:!1,source:"api",silent:!0,continueEditing:!0,editable:q});else this.showValue(!1,!0);if(this.onCompAttachedFuncs.length){for(let U of this.onCompAttachedFuncs)U();this.onCompAttachedFuncs=[]}}checkFormulaError(){if(!this.beans.formula)return;this.eGui.classList.toggle("formula-error",this.hasFormulaError())}hasFormulaError(){let{formula:z}=this.beans;if(!z)return!1;return!!z.getFormulaError(this.column,this.rowNode)}hasCellValidationError(){let{editModelSvc:z}=this.beans;if(!z)return!1;return z.getCellValidationModel().hasCellValidation(this)}setupAutoHeight(z,J){this.isAutoHeight=this.beans.rowAutoHeight?.setupCellAutoHeight(this,z,J)??!1}getCellAriaRole(){return this.column.colDef.cellAriaRole??"gridcell"}isCellRenderer(){let z=this.column.colDef;return z.cellRenderer!=null||z.cellRendererSelector!=null}getValueToDisplay(){return this.valueFormatted??this.value}getDeferLoadingCellRenderer(){let{beans:z,column:J}=this,{userCompFactory:Q,ctrlsSvc:Z,eventSvc:$}=z,X=J.colDef,Y=this.createCellRendererParams();Y.deferRender=!0;let q=V7(Q,X,Y);if(Z.getGridBodyCtrl()?.scrollFeature?.isScrolling()){let G,U=new N((H)=>{G=H}),[_]=this.addManagedListeners($,{bodyScrollEnd:()=>{G(),_()}});return{loadingComp:q,onReady:U}}return{loadingComp:q,onReady:N.resolve()}}showValue(z,J){let{beans:Q,column:Z,rowNode:$,rangeFeature:X}=this,{userCompFactory:Y}=Q,q=this.getValueToDisplay(),G,U=$.stub&&$.groupData?.[Z.getId()]==null,_=Z.colDef;if(U||this.isCellRenderer()){let H=this.createCellRendererParams();if(!U||y0(Z))G=kz(Y,_,H);else G=V7(Y,_,H)}if(!G&&!U&&Q.findSvc?.isMatch($,Z)){let H=this.createCellRendererParams();G=kz(Y,{...Z.colDef,cellRenderer:"agFindCellRenderer"},H)}if(this.hasEdit&&this.editSvc.isBatchEditing()&&this.editSvc.isRowEditing($,{checkSiblings:!0})){let H=this.editSvc.prepDetailsDuringBatch(this,{compDetails:G,valueToDisplay:q});if(H){if(H.compDetails)G=H.compDetails;else if(H.valueToDisplay)q=H.valueToDisplay}}if(this.comp.setRenderDetails(G,q,z),this.customRowDragComp?.refreshVisibility(),!J&&X)X.scheduleRefreshRangeStyleAndHandle();this.rowResizeFeature?.refreshRowResizer()}setupControlComps(){let z=this.column.colDef;this.includeSelection=this.isIncludeControl(this.isCheckboxSelection(z),!0),this.includeRowDrag=this.isIncludeControl(z.rowDrag),this.includeDndSource=this.isIncludeControl(z.dndSource),this.comp.setIncludeSelection(this.includeSelection),this.comp.setIncludeDndSource(this.includeDndSource),this.comp.setIncludeRowDrag(this.includeRowDrag)}isForceWrapper(){return this.beans.gos.get("enableCellTextSelection")||this.column.isAutoHeight()}getCellValueClass(){let J=this.column.colDef.cellRenderer==="agCheckboxCellRenderer",Q="";if(J)Q=" ag-allow-overflow";return`ag-cell-value${Q}`}isIncludeControl(z,J=!1){return(this.rowNode.rowPinned==null||J&&MJ(this.rowNode))&&!!z}isCheckboxSelection(z){let{rowSelection:J,groupDisplayType:Q}=this.beans.gridOptions,Z=b1(J),$=i4(this.column);if(Q==="custom"&&Z!=="selectionColumn"&&$)return!1;return z.checkboxSelection||$&&typeof J==="object"&&Fz(J)}refreshShouldDestroy(){let z=this.column.colDef,J=this.includeSelection!=this.isIncludeControl(this.isCheckboxSelection(z),!0),Q=this.includeRowDrag!=this.isIncludeControl(z.rowDrag),Z=this.includeDndSource!=this.isIncludeControl(z.dndSource),$=this.isAutoHeight!=this.column.isAutoHeight();return J||Q||Z||$}onPopupEditorClosed(z){let{editSvc:J}=this.beans;if(!J?.isEditing(this,{withOpenEditor:!0}))return;let Q=z instanceof KeyboardEvent,Z=z instanceof MouseEvent,$=Q&&z.key===k.ESCAPE;if(J.stopEditing(this,{source:J.isBatchEditing()?"ui":"api",cancel:$,event:Q||Z?z:void 0}),$)this.focusCell(!0,z)}stopEditing(z=!1){let{editSvc:J}=this.beans;return J?.stopEditing(this,{cancel:z,source:J?.isBatchEditing()?"ui":"api"})??!1}createCellRendererParams(){let{value:z,valueFormatted:J,column:Q,rowNode:Z,comp:$,eGui:X,beans:{valueSvc:Y,gos:q,editSvc:G}}=this;return C(q,{value:z,valueFormatted:J,getValue:()=>Y.getValueForDisplay({column:Q,node:Z,from:"edit"}).value,setValue:(_)=>G?.setDataValue({rowNode:Z,column:Q},_)||Z.setDataValue(Q,_),formatValue:this.formatValue.bind(this),data:Z.data,node:Z,pinned:Q.getPinned(),colDef:Q.colDef,column:Q,refreshCell:this.refreshCell.bind(this),eGridCell:X,eParentOfValue:$.getParentOfValue(),registerRowDragger:(_,H,W,B)=>this.registerRowDragger(_,H,B),setTooltip:(_,H)=>{if(q.assertModuleRegistered("Tooltip",3),this.tooltipFeature)this.disableTooltipFeature();this.enableTooltipFeature(_,H),this.tooltipFeature?.refreshTooltip()}})}onCellChanged(z){if(z.column===this.column)this.refreshCell()}refreshOrDestroyCell(z){if(this.refreshShouldDestroy())this.rowCtrl?.recreateCell(this);else this.refreshCell(z);if(this.hasEdit&&this.editCompDetails){let{editSvc:J,comp:Q}=this;if(!Q?.getCellEditor()&&J.isEditing(this,{withOpenEditor:!0}))J.startEditing(this,{startedEdit:!1,source:"api",silent:!0})}}refreshCell(z){let{editStyleFeature:J,customStyleFeature:Q,rowCtrl:{rowEditStyleFeature:Z},beans:{cellFlashSvc:$,filterManager:X},column:Y,comp:q,suppressRefreshCell:G,tooltipFeature:U}=this;if(G)return;let{field:_,valueGetter:H,showRowGroup:W,enableCellChangeFlash:B}=Y.colDef,E=_==null&&H==null&&W==null,K=z?.newData??!1,F=E||z&&(z.force||K),L=!!q,D=this.updateAndFormatValue(L),M=F||D;if(!L)return;if(M){this.showValue(!!K,!1);let f=X?.isSuppressFlashingCellsBecauseFiltering();if(!z?.suppressFlash&&!f&&B)$?.flashCell(this);J?.applyCellStyles?.(),Q?.applyUserStyles(),Q?.applyClassesFromColDef(),Z?.applyRowStyles(),this.checkFormulaError()}U?.refreshTooltip(),this.refreshNoteState(),Q?.applyCellClassRules()}showNote(z=!1){this.notesFeature?.show({focusEditor:z})}refreshNoteState(){this.notesFeature?.refresh()}isNoteHoverSuppressed(){return!!this.editSvc?.isEditing(this)||this.hasFormulaError()||this.hasCellValidationError()}isCellEditable(){return this.column.isCellEditable(this.rowNode)}formatValue(z){return this.callValueFormatter(z)??z}callValueFormatter(z){return this.beans.valueSvc.formatValue(this.column,this.rowNode,z)}updateAndFormatValue(z){let J=this.value,Q=this.valueFormatted,{value:Z,valueFormatted:$}=this.beans.valueSvc.getValueForDisplay({column:this.column,node:this.rowNode,includeValueFormatted:!0,from:"edit"});if(this.value=Z,this.valueFormatted=$,z)return!this.valuesAreEqual(J,this.value)||this.valueFormatted!=Q;return!0}valuesAreEqual(z,J){let Q=this.column.colDef;return Q.equals?Q.equals(z,J):z===J}addDomData(z){let J=this.eGui;az(this.beans.gos,J,h6,this),z.addDestroyFunc(()=>az(this.beans.gos,J,h6,null))}createEvent(z,J){let{rowNode:Q,column:Z,value:$,beans:X}=this;return MK(X,z,J,{rowNode:Q,column:Z},$)}processCharacter(z){this.keyboardListener?.processCharacter(z)}onKeyDown(z){this.keyboardListener?.onKeyDown(z)}onMouseEvent(z,J){this.mouseListener?.onMouseEvent(z,J)}getColSpanningList(){return this.positionFeature?.getColSpanningList()??[]}onLeftChanged(){if(!this.comp)return;this.positionFeature?.onLeftChanged()}onDisplayedColumnsChanged(){if(!this.eGui)return;this.refreshAriaColIndex(),this.refreshFirstAndLastStyles()}refreshFirstAndLastStyles(){let{comp:z,column:J,beans:Q}=this;$$(z,J,Q.visibleCols)}refreshAriaColIndex(){let z=this.beans.visibleCols.getAriaColIndex(this.column);c8(this.eGui,z)}onWidthChanged(){return this.positionFeature?.onWidthChanged()}getRowPosition(){let{rowIndex:z,rowPinned:J}=this.cellPosition;return{rowIndex:z,rowPinned:J}}updateRangeBordersIfRangeCount(){if(!this.comp)return;this.rangeFeature?.updateRangeBordersIfRangeCount()}onCellSelectionChanged(){if(!this.comp)return;this.rangeFeature?.onCellSelectionChanged()}isRangeSelectionEnabled(){return this.rangeFeature!=null}focusCell(z=!1,J){let Q=this.editSvc?.allowedFocusTargetOnValidation(this);if(Q&&Q!==this)return;this.beans.focusSvc.setFocusedCell({...this.getFocusedCellPosition(),forceBrowserFocus:z,sourceEvent:J})}restoreFocus(z=!1){let{beans:{editSvc:J,focusSvc:Q},comp:Z}=this;if(!Z||J?.isEditing(this)||!this.isCellFocused()||!Q.shouldTakeFocus())return;let $=()=>{if(!this.isAlive())return;let X=Z.getFocusableElement();if(this.isCellFocused())X.focus({preventScroll:!0})};if(z){setTimeout($,0);return}$()}onRowIndexChanged(){this.createCellPosition(),this.refreshAriaRowIndex(),this.onCellFocused(),this.restoreFocus(),this.rangeFeature?.onCellSelectionChanged(),this.rowResizeFeature?.refreshRowResizer()}onSuppressCellFocusChanged(z){let J=this.eGui;if(!J)return;f4(J,"tabindex",z?void 0:-1)}onFirstRightPinnedChanged(){if(!this.comp)return;let z=this.column.isFirstRightPinned();this.comp.toggleCss(PK,z)}onLastLeftPinnedChanged(){if(!this.comp)return;let z=this.column.isLastLeftPinned();this.comp.toggleCss(TK,z)}checkCellFocused(){return this.beans.focusSvc.isCellFocused(this.cellPosition)}isCellFocused(){let z=this.checkCellFocused();return this.hasBeenFocused||(this.hasBeenFocused=z),z}setupFocus(){this.restoreFocus(!0),this.onCellFocused(this.focusEventWhileNotReady??void 0)}onCellFocused(z){let{beans:J}=this;if(g6(J))return;if(!this.comp){if(z)this.focusEventWhileNotReady=z;return}let Q=this.isCellFocused(),Z=J.editSvc?.isEditing(this)??!1;if(this.comp.toggleCss(OK,Q),Q&&(z?.forceBrowserFocus||!this.hasBrowserFocus()&&this.beans.focusSvc.shouldTakeFocus())){let $=this.comp.getFocusableElement();if(Z){let Y=V4($,null,!0);if(Y.length)$=Y[0]}let X=z?z.preventScrollOnBrowserFocus:!0;$.focus({preventScroll:X}),TG(J,$)}if(Q&&this.focusEventWhileNotReady)this.focusEventWhileNotReady=null;if(Q&&z)this.rowCtrl.announceDescription(this)}createCellPosition(){let{rowIndex:z,rowPinned:J}=this.rowNode;this.cellPosition={rowIndex:z,rowPinned:q0(J),column:this.column}}applyStaticCssClasses(){let{comp:z}=this;z.toggleCss(RK,!0),z.toggleCss(vK,!0);let J=this.column.isAutoHeight()==!0;z.toggleCss(AK,J),z.toggleCss(jK,!J)}onColumnHover(){this.beans.colHover?.onCellColumnHover(this.column,this.comp)}onColDefChanged(){if(!this.comp)return;if(this.column.isTooltipEnabled())this.disableTooltipFeature(),this.enableTooltipFeature();else this.disableTooltipFeature();if(this.setWrapText(),this.editSvc?.isEditing(this))this.editSvc?.handleColDefChanged(this);else this.refreshOrDestroyCell({force:!0,suppressFlash:!0})}setWrapText(){let z=this.column.colDef.wrapText==!0;this.comp.toggleCss(IK,z)}dispatchCellContextMenuEvent(z){let J=this.column.colDef,Q=this.createEvent(z,"cellContextMenu"),{beans:Z}=this;if(Z.eventSvc.dispatchEvent(Q),J.onCellContextMenu)window.setTimeout(()=>{Z.frameworkOverrides.wrapOutgoing(()=>{J.onCellContextMenu(Q)})},0)}getCellRenderer(){return this.comp?.getCellRenderer()??null}destroy(){this.onCompAttachedFuncs=[],this.onEditorAttachedFuncs=[];let{focusSvc:z,context:J}=this.beans;if(this.isCellFocused()&&this.hasBrowserFocus())z.attemptToRecoverFocus();super.destroy(),this.positionFeature=J.destroyBean(this.positionFeature)}hasBrowserFocus(){return this.eGui?.contains(n(this.beans))??!1}createSelectionCheckbox(){let z=this.beans.selectionSvc?.createCheckboxSelectionComponent();if(!z)return;return this.beans.context.createBean(z),z.init({rowNode:this.rowNode,column:this.column}),z}createDndSource(){let z=this.beans.registry.createDynamicBean("dndSourceComp",!1,this.rowNode,this.column,this.eGui);if(z)this.beans.context.createBean(z);return z}registerRowDragger(z,J,Q){if(this.customRowDragComp){this.customRowDragComp.setDragElement(z,J);return}let Z=this.createRowDragComp(z,J,Q);if(Z)this.customRowDragComp=Z,this.addDestroyFunc(()=>{this.beans.context.destroyBean(Z),this.customRowDragComp=null}),Z.refreshVisibility()}createRowDragComp(z,J,Q){let Z=this.beans.rowDragSvc?.createRowDragCompForCell(this.rowNode,this.column,()=>this.value,z,J,Q);if(!Z)return;return this.beans.context.createBean(Z),Z}cellEditorAttached(){for(let z of this.onEditorAttachedFuncs)z();this.onEditorAttachedFuncs=[]}setFocusedCellPosition(z){}getFocusedCellPosition(){return this.cellPosition}refreshAriaRowIndex(){if(!y0(this.column)||!this.eGui)return;let{ariaRowIndex:z}=this.rowCtrl;if(z!=null)O6(this.eGui,z)}getRootElement(){return this.eGui}};function ZX(z,J,Q,Z,$,X){if(Q==null&&J==null)return;let Y={},q={},G=(U,_)=>{for(let H of U.split(" ")){if(H.trim()=="")continue;_(H)}};if(Q){let U=Object.keys(Q);for(let _=0;_{if(B)Y[E]=!0;else q[E]=!0})}}if(J&&X)for(let U of Object.keys(J))G(U,(_)=>{if(!Y[_])q[_]=!0});if(X)Object.keys(q).forEach(X);Object.keys(Y).forEach($)}function $8(z){if(z.group)return z.level;let J=z.parent;return J?J.level+1:0}var yK=0,aQ=class extends S{constructor(z,J,Q,Z,$){super();if(this.rowNode=z,this.useAnimationFrameForCreate=Z,this.printLayout=$,this.guiListenerOwners=new WeakMap,this.focusEventWhileNotReady=null,this.allRowGuis=[],this.active=!0,this.centerCellCtrls={list:[],map:{}},this.leftCellCtrls={list:[],map:{}},this.rightCellCtrls={list:[],map:{}},this.slideInAnimation={left:!1,center:!1,right:!1,fullWidth:!1},this.fadeInAnimation={left:!1,center:!1,right:!1,fullWidth:!1},this.rowDragComps=[],this.lastMouseDownOnDragger=!1,this.emptyStyle={},this.updateColumnListsPending=!1,this.rowId=null,this.ariaRowIndex=null,this.businessKey=null,this.beans=J,this.gos=J.gos,this.paginationPage=J.pagination?.getCurrentPage()??0,this.suppressRowTransform=this.gos.get("suppressRowTransform"),this.instanceId=z.id+"-"+yK++,this.rowId=L0(z.id),this.initRowBusinessKey(),this.rowFocused=J.focusSvc.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned),this.rowLevel=$8(this.rowNode),this.setRowType(),this.setAnimateFlags(Q),this.rowStyles=this.processStylesFromGridOptions(),this.rowEditStyleFeature=J.editSvc?.createRowStyleFeature(this),this.fullWidthNotesFeature=this.isFullWidth()?J.notesSvc?.createFullWidthNotesFeature(this):void 0,this.addListeners(),!Z&&!this.isFullWidth())this.createAllCellCtrls()}initRowBusinessKey(){this.businessKeyForNodeFunc=this.gos.get("getBusinessKeyForNode"),this.updateRowBusinessKey()}updateRowBusinessKey(){if(typeof this.businessKeyForNodeFunc!=="function")return;let z=this.businessKeyForNodeFunc(this.rowNode);this.businessKey=L0(z)}updateGui(z,J){if(z==="left")this.leftGui=J;else if(z==="right")this.rightGui=J;else if(z==="fullWidth")this.fullWidthGui=J;else this.centerGui=J}setComp(z,J,Q,Z){let{context:$,rowRenderer:X}=this.beans;Z=m2(this,$,Z);let Y={rowComp:z,element:J,containerType:Q,compBean:Z};this.allRowGuis.push(Y),this.updateGui(Q,Y),this.initialiseRowComp(Y),this.fullWidthNotesFeature?.refresh();let q=this.rowNode,G=this.rowType==="FullWidthLoading"||q.stub,U=!q.data&&this.beans.rowModel.getType()==="infinite";if(!G&&!U&&!q.rowPinned)X.dispatchFirstDataRenderedEvent();this.setupFocus()}unsetComp(z){this.allRowGuis=this.allRowGuis.filter((J)=>J.containerType!==z),this.updateGui(z,void 0)}isCacheable(){return this.rowType==="FullWidthDetail"&&this.gos.get("keepDetailRows")}setCached(z){let J=z?"none":"";for(let Q of this.allRowGuis)Q.element.style.display=J}initialiseRowComp(z){let J=this.gos;if(this.onSuppressCellFocusChanged(this.beans.gos.get("suppressCellFocus")),this.listenOnDomOrder(z),this.onRowHeightChanged(z),this.updateRowIndexes(z),this.setFocusedClasses(z),this.setStylesFromGridOptions(!1,z),s4(J)&&this.rowNode.selectable)this.onRowSelected(z);this.updateColumnLists(!this.useAnimationFrameForCreate);let Q=z.rowComp,Z=this.getInitialRowClasses(z.containerType);for(let $ of Z)Q.toggleCss($,!0);if(this.executeSlideAndFadeAnimations(z),this.rowNode.group)j0(z.element,!!this.rowNode.expanded);if(this.setRowCompRowId(Q),this.setRowCompRowBusinessKey(Q),az(J,z.element,u6,this),z.compBean.addDestroyFunc(()=>az(J,z.element,u6,null)),this.useAnimationFrameForCreate)this.beans.animationFrameSvc.createTask(this.addHoverFunctionality.bind(this,z),this.rowNode.rowIndex,"p2",!1);else this.addHoverFunctionality(z);if(this.isFullWidth())this.setupFullWidth(z);if(J.get("rowDragEntireRow"))this.addRowDraggerToRow(z);if(this.useAnimationFrameForCreate)this.beans.animationFrameSvc.addDestroyTask(()=>{if(!this.isAlive())return;z.rowComp.toggleCss("ag-after-created",!0)});this.executeProcessRowPostCreateFunc()}setRowCompRowBusinessKey(z){if(this.businessKey==null)return;z.setRowBusinessKey(this.businessKey)}setRowCompRowId(z){let J=L0(this.rowNode.id);if(this.rowId=J,J==null)return;z.setRowId(J)}executeSlideAndFadeAnimations(z){let{containerType:J}=z;if(this.slideInAnimation[J])CQ(()=>{this.onTopChanged()}),this.slideInAnimation[J]=!1;if(this.fadeInAnimation[J])CQ(()=>{z.rowComp.toggleCss("ag-opacity-zero",!1)}),this.fadeInAnimation[J]=!1}addRowDraggerToRow(z){let J=this.beans.rowDragSvc?.createRowDragCompForRow(this.rowNode,z.element);if(!J)return;let Q=this.createBean(J,this.beans.context);this.rowDragComps.push(Q),z.compBean.addDestroyFunc(()=>{this.rowDragComps=this.rowDragComps.filter((Z)=>Z!==Q),this.rowEditStyleFeature=this.destroyBean(this.rowEditStyleFeature,this.beans.context),this.destroyBean(Q,this.beans.context)})}setupFullWidth(z){let J=this.getPinnedForContainer(z.containerType),Q=this.createFullWidthCompDetails(z.element,J);z.rowComp.showFullWidth(Q)}getFullWidthCellRenderers(){if(this.gos.get("embedFullWidthRows"))return this.allRowGuis.map((z)=>z?.rowComp?.getFullWidthCellRenderer());return[this.fullWidthGui?.rowComp?.getFullWidthCellRenderer()]}executeProcessRowPostCreateFunc(){let z=this.gos.getCallback("processRowPostCreate");if(!z||!this.areAllContainersReady())return;let J={eRow:this.centerGui.element,ePinnedLeftRow:this.leftGui?this.leftGui.element:void 0,ePinnedRightRow:this.rightGui?this.rightGui.element:void 0,node:this.rowNode,rowIndex:this.rowNode.rowIndex,addRenderedRowListener:this.addEventListener.bind(this)};z(J)}areAllContainersReady(){let{leftGui:z,centerGui:J,rightGui:Q,beans:{visibleCols:Z}}=this,$=!!z||!Z.isPinningLeft(),X=!!J,Y=!!Q||!Z.isPinningRight();return $&&X&&Y}isNodeFullWidthCell(){if(this.rowNode.detail)return!0;let z=this.beans.gos.getCallback("isFullWidthRow");return z?z({rowNode:this.rowNode}):!1}setRowType(){let{rowNode:z,gos:J,beans:{colModel:Q}}=this,Z=J.get("suppressServerSideFullWidthLoadingRow"),$=J.get("groupHideOpenParents"),X=z.stub&&!Z&&!$,Y=this.isNodeFullWidthCell(),q=J.get("masterDetail")&&z.detail,G=Q.pivotMode,U=F9(J,z,G),_=Z&&z.stub&&U&&!$;if(X)this.rowType="FullWidthLoading";else if(q)this.rowType="FullWidthDetail";else if(Y)this.rowType="FullWidth";else if(U&&!_)this.rowType="FullWidthGroup";else this.rowType="Normal"}updateColumnLists(z=!1,J=!1){if(this.isFullWidth())return;let{animationFrameSvc:Q}=this.beans;if(!Q?.active||z||this.printLayout){this.updateColumnListsImpl(J);return}if(this.updateColumnListsPending)return;Q.createTask(()=>{if(!this.active)return;this.updateColumnListsImpl(!0)},this.rowNode.rowIndex,"p1",!1),this.updateColumnListsPending=!0}getNewCellCtrl(z){if(this.beans.rowSpanSvc?.isCellSpanning(z,this.rowNode))return;return new E2(z,this.rowNode,this.beans,this)}isCorrectCtrlForSpan(z){return!this.beans.rowSpanSvc?.isCellSpanning(z.column,this.rowNode)}createCellCtrls(z,J,Q=null){let Z={list:[],map:{}},$=(U,_,H)=>{if(H!=null)Z.list.splice(H,0,_);else Z.list.push(_);Z.map[U]=_},X=[];for(let U of J){let _=U.getInstanceId(),H=z.map[_];if(H&&!this.isCorrectCtrlForSpan(H))H.destroy(),H=void 0;if(!H)H=this.getNewCellCtrl(U);if(!H)continue;$(_,H)}for(let U of z.list){let _=U.column.getInstanceId();if(Z.map[_]!=null)continue;if(!this.isCellEligibleToBeRemoved(U,Q))X.push([_,U]);else U.destroy()}if(X.length)for(let[U,_]of X){let H=Z.list.findIndex((B)=>B.column.getLeft()>_.column.getLeft()),W=H===-1?void 0:Math.max(H-1,0);$(U,_,W)}let{focusSvc:Y,visibleCols:q}=this.beans,G=Y.getFocusedCell();if(G&&G.column.getPinned()==Q){let U=G.column.getInstanceId();if(!Z.map[U]&&q.allCols.includes(G.column)){let H=this.createFocusedCellCtrl();if(H){let W=Z.list.findIndex((E)=>E.column.getLeft()>H.column.getLeft()),B=W===-1?void 0:Math.max(W-1,0);$(U,H,B)}}}return Z}createFocusedCellCtrl(){let{focusSvc:z,rowSpanSvc:J}=this.beans,Q=z.getFocusedCell();if(!Q)return;let Z=J?.getCellSpan(Q.column,this.rowNode);if(Z){if(Z.firstNode!==this.rowNode||!Z.doesSpanContain(Q))return}else if(!z.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned))return;return this.getNewCellCtrl(Q.column)}updateColumnListsImpl(z){this.updateColumnListsPending=!1,this.createAllCellCtrls(),this.setCellCtrls(z)}setCellCtrls(z){for(let J of this.allRowGuis){let Q=this.getCellCtrlsForContainer(J.containerType);J.rowComp.setCellCtrls(Q,z)}}getCellCtrlsForContainer(z){switch(z){case"left":return this.leftCellCtrls.list;case"right":return this.rightCellCtrls.list;case"fullWidth":return[];case"center":return this.centerCellCtrls.list}}createAllCellCtrls(){let z=this.beans.colViewport,J=this.beans.visibleCols;if(this.printLayout)this.centerCellCtrls=this.createCellCtrls(this.centerCellCtrls,J.allCols),this.leftCellCtrls={list:[],map:{}},this.rightCellCtrls={list:[],map:{}};else{let Q=z.getColsWithinViewport(this.rowNode);this.centerCellCtrls=this.createCellCtrls(this.centerCellCtrls,Q);let Z=J.getLeftColsForRow(this.rowNode);this.leftCellCtrls=this.createCellCtrls(this.leftCellCtrls,Z,"left");let $=J.getRightColsForRow(this.rowNode);this.rightCellCtrls=this.createCellCtrls(this.rightCellCtrls,$,"right")}}getInitialCellCtrls(z){if(this.useAnimationFrameForCreate||this.isFullWidth())return null;return this.getCellCtrlsForContainer(z)}isCellEligibleToBeRemoved(z,J){let{column:$}=z;if($.getPinned()!=J)return!0;if(!this.isCorrectCtrlForSpan(z))return!0;let{visibleCols:X,editSvc:Y}=this.beans,q=Y?.isEditing(z),G=z.isCellFocused();if(q||G)return X.allCols.indexOf($)>=0?!1:!0;return!0}getDomOrder(){return this.gos.get("ensureDomOrder")||A0(this.gos,"print")}listenOnDomOrder(z){let J=()=>{z.rowComp.setDomOrder(this.getDomOrder())};z.compBean.addManagedPropertyListeners(["domLayout","ensureDomOrder"],J)}setAnimateFlags(z){if(this.rowNode.sticky||!z)return;let J=P(this.rowNode.oldRowTop),{visibleCols:Q}=this.beans,Z=Q.isPinningLeft(),$=Q.isPinningRight();if(J){let{slideInAnimation:X}=this;if(this.isFullWidth()&&!this.gos.get("embedFullWidthRows")){X.fullWidth=!0;return}X.center=!0,X.left=Z,X.right=$}else{let{fadeInAnimation:X}=this;if(this.isFullWidth()&&!this.gos.get("embedFullWidthRows")){X.fullWidth=!0;return}X.center=!0,X.left=Z,X.right=$}}isFullWidth(){return this.rowType!=="Normal"}refreshFullWidth(){let z=(Y,q)=>{if(!Y)return!0;return Y.rowComp.refreshFullWidth(()=>{return this.createFullWidthCompDetails(Y.element,q).params})},J=z(this.fullWidthGui,null),Q=z(this.centerGui,null),Z=z(this.leftGui,"left"),$=z(this.rightGui,"right"),X=J&&Q&&Z&&$;return this.fullWidthNotesFeature?.refresh(),X}getNotesFeature(){return this.fullWidthNotesFeature}addListeners(){let{beans:z,gos:J,rowNode:Q}=this,{expansionSvc:Z,eventSvc:$,context:X,rowSpanSvc:Y}=z;if(this.addManagedListeners(this.rowNode,{heightChanged:()=>this.onRowHeightChanged(),rowSelected:()=>this.onRowSelected(),rowIndexChanged:this.onRowIndexChanged.bind(this),topChanged:this.onTopChanged.bind(this),...Z?.getRowExpandedListeners(this)??{}}),Q.detail)this.addManagedListeners(Q.parent,{dataChanged:this.onRowNodeDataChanged.bind(this)});if(this.addManagedListeners(Q,{dataChanged:this.onRowNodeDataChanged.bind(this),cellChanged:this.postProcessCss.bind(this),rowHighlightChanged:this.onRowNodeHighlightChanged.bind(this),draggingChanged:this.postProcessRowDragging.bind(this),uiLevelChanged:this.onUiLevelChanged.bind(this),rowPinned:this.onRowPinned.bind(this)}),this.addManagedListeners($,{paginationPixelOffsetChanged:this.onPaginationPixelOffsetChanged.bind(this),heightScaleChanged:this.onTopChanged.bind(this),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),virtualColumnsChanged:this.onVirtualColumnsChanged.bind(this),cellFocused:this.onCellFocusChanged.bind(this),cellFocusCleared:this.onCellFocusChanged.bind(this),paginationChanged:this.onPaginationChanged.bind(this),modelUpdated:this.refreshFirstAndLastRowStyles.bind(this),columnMoved:()=>this.updateColumnLists()}),Y?.active)this.addManagedListeners(Y,{spannedCellsUpdated:({pinned:q})=>{if(q&&!Q.rowPinned)return;this.updateColumnLists()}});this.addDestroyFunc(()=>{this.rowDragComps=this.destroyBeans(this.rowDragComps,X),this.tooltipFeature=this.destroyBean(this.tooltipFeature,X),this.rowEditStyleFeature=this.destroyBean(this.rowEditStyleFeature,X),this.fullWidthNotesFeature?.destroy()}),this.addManagedPropertyListeners(["rowStyle","getRowStyle","rowClass","getRowClass","rowClassRules"],this.postProcessCss.bind(this)),this.addManagedPropertyListener("rowDragEntireRow",()=>{if(J.get("rowDragEntireRow")){for(let G of this.allRowGuis)this.addRowDraggerToRow(G);return}this.rowDragComps=this.destroyBeans(this.rowDragComps,X)}),this.addListenersForCellComps()}addListenersForCellComps(){this.addManagedListeners(this.rowNode,{rowIndexChanged:()=>{for(let z of this.getAllCellCtrls())z.onRowIndexChanged()},cellChanged:(z)=>{for(let J of this.getAllCellCtrls())J.onCellChanged(z)}})}onRowPinned(){for(let z of this.allRowGuis)z.rowComp.toggleCss("ag-row-pinned-source",!!this.rowNode.pinnedSibling)}onRowNodeDataChanged(z){this.refreshRow({suppressFlash:!z.update,newData:!z.update})}refreshRow(z){if(this.isFullWidth()!==!!this.isNodeFullWidthCell()){this.beans.rowRenderer.redrawRow(this.rowNode);return}if(this.isFullWidth()){if(!this.refreshFullWidth())this.beans.rowRenderer.redrawRow(this.rowNode);return}for(let Q of this.getAllCellCtrls())Q.refreshCell(z);for(let Q of this.allRowGuis)this.setRowCompRowId(Q.rowComp),this.updateRowBusinessKey(),this.setRowCompRowBusinessKey(Q.rowComp);this.onRowSelected(),this.postProcessCss()}postProcessCss(){this.setStylesFromGridOptions(!0),this.postProcessClassesFromGridOptions(),this.postProcessRowClassRules(),this.rowEditStyleFeature?.applyRowStyles(),this.postProcessRowDragging()}onRowNodeHighlightChanged(){let z=this.beans.rowDropHighlightSvc,J=z?.row===this.rowNode?z.position:"none",Q=J==="above",Z=J==="inside",$=J==="below",X=J!=="none",Y=Q||$,q=this.rowNode.uiLevel,G=Y&&q>0,U=G?q.toString():"0";for(let _ of this.allRowGuis){let H=_.rowComp;if(H.toggleCss("ag-row-highlight-above",Q),H.toggleCss("ag-row-highlight-inside",Z),H.toggleCss("ag-row-highlight-below",$),H.toggleCss("ag-row-highlight-indent",G),X)_.element.style.setProperty("--ag-row-highlight-level",U);else _.element.style.removeProperty("--ag-row-highlight-level")}}postProcessRowDragging(){let z=this.rowNode.dragging;for(let J of this.allRowGuis)J.rowComp.toggleCss("ag-row-dragging",z)}onDisplayedColumnsChanged(){this.updateColumnLists(!0),this.beans.rowAutoHeight?.requestCheckAutoHeight()}onVirtualColumnsChanged(){this.updateColumnLists(!1,!0)}getRowPosition(){return{rowPinned:q0(this.rowNode.rowPinned),rowIndex:this.rowNode.rowIndex}}onKeyboardNavigate(z){let J=this.findFullWidthInfoForEvent(z);if(!J)return;let{rowGui:Q,column:Z}=J;if(Q.element!==z.target)return;let Y=this.rowNode,{focusSvc:q,navigation:G}=this.beans,U=q.getFocusedCell(),_={rowIndex:Y.rowIndex,rowPinned:Y.rowPinned,column:U?.column??Z};G?.navigateToNextCell(z,z.key,_,!0),z.preventDefault()}onTabKeyDown(z){if(z.defaultPrevented||q4(z))return;let J=this.allRowGuis.find((q)=>q.element.contains(z.target)),Q=J?J.element:null,Z=Q===z.target,$=n(this.beans),X=!1;if(Q&&$)X=Q.contains($)&&$.classList.contains("ag-cell");let Y=null;if(!Z&&!X)Y=O0(this.beans,Q,!1,z.shiftKey);if(this.isFullWidth()&&Z||!Y)this.beans.navigation?.onTabKeyDown(this,z)}getFullWidthElement(){if(this.fullWidthGui)return this.fullWidthGui.element;return null}getRowYPosition(){let z=this.allRowGuis.find((J)=>B0(J.element))?.element;if(z)return z.getBoundingClientRect().top;return 0}onSuppressCellFocusChanged(z){let J=this.isFullWidth()&&z?void 0:this.gos.get("tabIndex");for(let Q of this.allRowGuis)f4(Q.element,"tabindex",J)}setupFocus(){if(!this.isFullWidth())return;this.restoreFullWidthFocus(!0),this.onFullWidthRowFocused(this.focusEventWhileNotReady??void 0)}restoreFullWidthFocus(z=!1){let{focusSvc:J,editSvc:Q}=this.beans;if(Q?.isEditing(this))return;if(!J.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned)||!J.shouldTakeFocus())return;let Z=this.getFullWidthRowGuiForFocus();if(!Z)return;let $=()=>{if(!this.isAlive())return;if(J.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned))Z.element.focus({preventScroll:!0})};if(z){setTimeout($,0);return}$()}getFullWidthRowGuiForFocus(z){if(this.fullWidthGui)return this.fullWidthGui;let J=this.beans.focusSvc.getFocusedCell(),Q=this.beans.colModel.getCol(z?.column??J?.column);if(!Q)return;let Z=Q?.pinned;if(Z==="right")return this.rightGui;if(Z==="left")return this.leftGui;return this.centerGui}setFullWidthRowFocusedClass(z,J){this.forEachGui(void 0,(Q)=>{Q.element.classList.toggle("ag-full-width-focus",J&&Q===z)})}onFullWidthRowFocused(z){let{focusSvc:J}=this.beans;if(!(this.isFullWidth()&&J.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned))){this.setFullWidthRowFocusedClass(void 0,!1);return}let Z=this.getFullWidthRowGuiForFocus(z);if(!Z){if(z)this.focusEventWhileNotReady=z;this.setFullWidthRowFocusedClass(void 0,!1);return}if(this.setFullWidthRowFocusedClass(Z,!0),this.focusEventWhileNotReady=null,z?.forceBrowserFocus)Z.element.focus({preventScroll:!0})}recreateCell(z){this.centerCellCtrls=this.removeCellCtrl(this.centerCellCtrls,z),this.leftCellCtrls=this.removeCellCtrl(this.leftCellCtrls,z),this.rightCellCtrls=this.removeCellCtrl(this.rightCellCtrls,z),z.destroy(),this.updateColumnLists()}removeCellCtrl(z,J){let Q={list:[],map:{}};for(let Z of z.list){if(Z===J)continue;Q.list.push(Z),Q.map[Z.column.getInstanceId()]=Z}return Q}onMouseEvent(z,J){switch(z){case"dblclick":this.onRowDblClick(J);break;case"click":this.onRowClick(J);break;case"pointerdown":case"touchstart":case"mousedown":this.onRowMouseDown(J);break}}createRowEvent(z,J){let{rowNode:Q}=this;return C(this.gos,{type:z,node:Q,data:Q.data,rowIndex:Q.rowIndex,rowPinned:Q.rowPinned,event:J})}createRowEventWithSource(z,J){let Q=this.createRowEvent(z,J);return Q.source=this,Q}onRowDblClick(z){if(q4(z))return;let J=this.createRowEventWithSource("rowDoubleClicked",z);J.isEventHandlingSuppressed=this.isSuppressMouseEvent(z),this.beans.eventSvc.dispatchEvent(J)}findFullWidthInfoForEvent(z){if(!z)return;let J=this.findFullWidthRowGui(z.target),Q=this.getColumnForFullWidth(J),Z=this.getPinnedForFullWidth(J);if(!J||!Q)return;return{rowGui:J,column:Q,pinned:Z}}findFullWidthRowGui(z){return this.allRowGuis.find((J)=>J.element.contains(z))}getColumnForFullWidth(z){let{visibleCols:J}=this.beans;switch(z?.containerType){case"center":return J.centerCols[0];case"left":return J.leftCols[0];case"right":return J.rightCols[0];default:return J.allCols[0]}}getPinnedForFullWidth(z){let J=z?.containerType;return J==="left"||J==="right"?J:void 0}addManagedGuiElementListeners(z,J){let{compBean:Q,element:Z}=z;if(this.guiListenerOwners.get(Z)===Q)return;this.guiListenerOwners.set(Z,Q),Q.addManagedElementListeners(Z,J)}onRowMouseDown(z){if(this.lastMouseDownOnDragger=nz(z.target,"ag-row-drag",3),!this.isFullWidth()||this.isSuppressMouseEvent(z))return;let{rangeSvc:J,focusSvc:Q}=this.beans;J?.removeAllCellRanges();let Z=this.findFullWidthInfoForEvent(z);if(!Z)return;let{rowGui:$,column:X}=Z,Y=$.element,q=z.target,G=this.rowNode,U=z.defaultPrevented||jz();if(Y&&Y.contains(q)&&_2(q))U=!1;Q.setFocusedCell({rowIndex:G.rowIndex,column:X,rowPinned:G.rowPinned,forceBrowserFocus:U})}isSuppressMouseEvent(z){let{gos:J,rowNode:Q}=this;if(this.isFullWidth()){let $=this.findFullWidthRowGui(z.target);return fH(J,$?.rowComp.getFullWidthCellRendererParams(),Q,z)}let Z=c2(J,z.target);return Z!=null&&S6(J,Z.column,Q,z)}onRowClick(z){if(q4(z)||this.lastMouseDownOnDragger)return;let Q=this.isSuppressMouseEvent(z),{eventSvc:Z,selectionSvc:$}=this.beans,X=this.createRowEventWithSource("rowClicked",z);if(X.isEventHandlingSuppressed=Q,Z.dispatchEvent(X),Q)return;$?.handleSelectionEvent(z,this.rowNode,"rowClicked")}setupDetailRowAutoHeight(z){if(this.rowType!=="FullWidthDetail")return;this.beans.masterDetailSvc?.setupDetailRowAutoHeight(this,z)}createFullWidthCompDetails(z,J){let{gos:Q,rowNode:Z}=this,$=C(Q,{fullWidth:!0,data:Z.data,node:Z,value:Z.key,valueFormatted:Z.key,eGridCell:z,eParentOfValue:z,pinned:J,addRenderedRowListener:this.addEventListener.bind(this),registerRowDragger:(Y,q,G,U)=>this.addFullWidthRowDragging(Y,q,G,U),setTooltip:(Y,q)=>{Q.assertModuleRegistered("Tooltip",3),this.setupFullWidthRowTooltip(Y,q)}}),X=this.beans.userCompFactory;switch(this.rowType){case"FullWidthDetail":return U_(X,$);case"FullWidthGroup":{let{value:Y,valueFormatted:q}=this.beans.valueSvc.getValueForDisplay({node:this.rowNode,includeValueFormatted:!0,from:"edit"});return $.value=Y,$.valueFormatted=q,G_(X,$)}case"FullWidthLoading":return q_(X,$);default:return Y_(X,$)}}setupFullWidthRowTooltip(z,J){if(!this.fullWidthGui)return;this.tooltipFeature=this.beans.tooltipSvc?.setupFullWidthRowTooltip(this.tooltipFeature,this,z,J)}addFullWidthRowDragging(z,J,Q="",Z){let{rowDragSvc:$,context:X}=this.beans;if(!$||!this.isFullWidth())return;let Y=$.createRowDragComp(()=>Q,this.rowNode,void 0,z,J,Z);this.createBean(Y,X),this.addDestroyFunc(()=>{this.destroyBean(Y,X)})}onUiLevelChanged(){let z=$8(this.rowNode);if(this.rowLevel!=z){let J="ag-row-level-"+z,Q="ag-row-level-"+this.rowLevel;for(let Z of this.allRowGuis)Z.rowComp.toggleCss(J,!0),Z.rowComp.toggleCss(Q,!1)}this.rowLevel=z}isFirstRowOnPage(){return this.rowNode.rowIndex===this.beans.pageBounds.getFirstRow()}isLastRowOnPage(){return this.rowNode.rowIndex===this.beans.pageBounds.getLastRow()}refreshFirstAndLastRowStyles(){let z=this.isFirstRowOnPage(),J=this.isLastRowOnPage();if(this.firstRowOnPage!==z){this.firstRowOnPage=z;for(let Q of this.allRowGuis)Q.rowComp.toggleCss("ag-row-first",z)}if(this.lastRowOnPage!==J){this.lastRowOnPage=J;for(let Q of this.allRowGuis)Q.rowComp.toggleCss("ag-row-last",J)}}getAllCellCtrls(){if(this.leftCellCtrls.list.length===0&&this.rightCellCtrls.list.length===0)return this.centerCellCtrls.list;return[...this.centerCellCtrls.list,...this.leftCellCtrls.list,...this.rightCellCtrls.list]}postProcessClassesFromGridOptions(){let z=[];if(this.beans.rowStyleSvc?.processClassesFromGridOptions(z,this.rowNode),!z.length)return;for(let J of z)for(let Q of this.allRowGuis)Q.rowComp.toggleCss(J,!0)}postProcessRowClassRules(){this.beans.rowStyleSvc?.processRowClassRules(this.rowNode,(z)=>{for(let J of this.allRowGuis)J.rowComp.toggleCss(z,!0)},(z)=>{for(let J of this.allRowGuis)J.rowComp.toggleCss(z,!1)})}setStylesFromGridOptions(z,J){if(z)this.rowStyles=this.processStylesFromGridOptions();this.forEachGui(J,(Q)=>Q.rowComp.setUserStyles(this.rowStyles))}getPinnedForContainer(z){if(z==="left"||z==="right")return z;return null}getInitialRowClasses(z){let J=this.getPinnedForContainer(z),Q=this.isFullWidth(),{rowNode:Z,beans:$}=this,X=[];if(X.push("ag-row"),X.push(this.rowFocused?"ag-row-focus":"ag-row-no-focus"),this.fadeInAnimation[z])X.push("ag-opacity-zero");if(X.push(Z.rowIndex%2===0?"ag-row-even":"ag-row-odd"),Z.isRowPinned()){if(X.push("ag-row-pinned"),$.pinnedRowModel?.isManual())X.push("ag-row-pinned-manual")}if(!Z.isRowPinned()&&Z.pinnedSibling)X.push("ag-row-pinned-source");if(Z.isSelected())X.push("ag-row-selected");if(Z.footer)X.push("ag-row-footer");if(X.push("ag-row-level-"+this.rowLevel),Z.stub)X.push("ag-row-loading");if(Q)X.push("ag-full-width-row");if($.expansionSvc?.addExpandedCss(X,Z),Z.dragging)X.push("ag-row-dragging");let{rowStyleSvc:Y}=$;if(Y)Y.processClassesFromGridOptions(X,Z),Y.preProcessRowClassRules(X,Z);if(X.push(this.printLayout?"ag-row-position-relative":"ag-row-position-absolute"),this.isFirstRowOnPage())X.push("ag-row-first");if(this.isLastRowOnPage())X.push("ag-row-last");if(Q){if(J==="left")X.push("ag-cell-last-left-pinned");if(J==="right")X.push("ag-cell-first-right-pinned")}return X}processStylesFromGridOptions(){return this.beans.rowStyleSvc?.processStylesFromGridOptions(this.rowNode)??this.emptyStyle}onRowSelected(z){this.beans.selectionSvc?.onRowCtrlSelected(this,(J)=>{if(J===this.centerGui||J===this.fullWidthGui)this.announceDescription()},z)}announceDescription(z){this.beans.selectionSvc?.announceAriaRowSelection(this.rowNode),this.announceNoteDescription(z)}announceNoteDescription(z){let{notesSvc:J,ariaAnnounce:Q}=this.beans;if(!J||!Q||!z&&!this.isFullWidth())return;let Z={rowNode:this.rowNode},$=z?{column:z.column}:{location:"fullWidthRow"},X={...Z,...$};if(J.getNoteAccess(X)?.canView){let q=this.getLocaleTextFunc();Q.announceValue(q("ariaHasNote","This cell has a note."),"note")}}addHoverFunctionality(z){if(!this.active)return;let{element:J,compBean:Q}=z,{rowNode:Z,beans:$,gos:X}=this;Q.addManagedListeners(J,{pointerenter:(Y)=>{if(Y.pointerType==="mouse")Z.dispatchRowEvent("mouseEnter")},pointerleave:(Y)=>{if(Y.pointerType==="mouse")Z.dispatchRowEvent("mouseLeave")}}),Q.addManagedListeners(Z,{mouseEnter:()=>{if(!$.dragSvc?.dragging&&!X.get("suppressRowHoverHighlight"))J.classList.add("ag-row-hover"),Z.setHovered(!0)},mouseLeave:()=>{this.resetHoveredStatus(J)}})}resetHoveredStatus(z){let J=z?[z]:this.allRowGuis.map((Q)=>Q.element);for(let Q of J)Q.classList.remove("ag-row-hover");this.rowNode.setHovered(!1)}roundRowTopToBounds(z){let J=this.beans.ctrlsSvc.getScrollFeature().getApproximateVScollPosition(),Q=this.applyPaginationOffset(J.top,!0)-100,Z=this.applyPaginationOffset(J.bottom,!0)+100;return Math.min(Math.max(Q,z),Z)}forEachGui(z,J){if(z)J(z);else for(let Q of this.allRowGuis)J(Q)}isRowRendered(){return this.allRowGuis.length>0}onRowHeightChanged(z){if(this.rowNode.rowHeight==null)return;let J=this.rowNode.rowHeight,Q=this.beans.environment.getDefaultRowHeight(),$=B9(this.gos)?f2(this.beans,this.rowNode).height:void 0,X=$?`${Math.min(Q,$)-2}px`:void 0;this.forEachGui(z,(Y)=>{if(Y.element.style.height=`${J}px`,X)Y.element.style.setProperty("--ag-line-height",X)})}destroyFirstPass(z=!1){this.active=!1;let{rowNode:J}=this;if(!z&&T1(this.gos)&&!J.sticky)if(J.rowTop!=null){let $=this.roundRowTopToBounds(J.rowTop);this.setRowTop($)}else for(let $ of this.allRowGuis)$.rowComp.toggleCss("ag-opacity-zero",!0);if(this.fullWidthGui?.element.contains(n(this.beans)))this.beans.focusSvc.attemptToRecoverFocus();J.setHovered(!1);let Q=this.createRowEvent("virtualRowRemoved");this.dispatchLocalEvent(Q),this.beans.eventSvc.dispatchEvent(Q),super.destroy()}destroySecondPass(){this.allRowGuis.length=0;let z=(J)=>{for(let Q of J.list)Q.destroy();return{list:[],map:{}}};this.centerCellCtrls=z(this.centerCellCtrls),this.leftCellCtrls=z(this.leftCellCtrls),this.rightCellCtrls=z(this.rightCellCtrls)}setFocusedClasses(z){this.forEachGui(z,(J)=>{J.rowComp.toggleCss("ag-row-focus",this.rowFocused),J.rowComp.toggleCss("ag-row-no-focus",!this.rowFocused)})}onCellFocusChanged(){let{focusSvc:z}=this.beans,J=z.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned);if(J!==this.rowFocused)this.rowFocused=J,this.setFocusedClasses()}onPaginationChanged(){let z=this.beans.pagination?.getCurrentPage()??0;if(this.paginationPage!==z)this.paginationPage=z,this.onTopChanged();this.refreshFirstAndLastRowStyles()}onTopChanged(){this.setRowTop(this.rowNode.rowTop)}onPaginationPixelOffsetChanged(){this.onTopChanged()}applyPaginationOffset(z,J=!1){if(this.rowNode.isRowPinned()||this.rowNode.sticky)return z;let Q=this.beans.pageBounds.getPixelOffset();return z+Q*(J?1:-1)}setRowTop(z){if(this.printLayout)return;if(P(z)){let J=this.applyPaginationOffset(z),$=`${this.rowNode.isRowPinned()||this.rowNode.sticky?J:this.beans.rowContainerHeight.getRealPixelPosition(J)}px`;this.setRowTopStyle($)}}getInitialRowTop(z){return this.suppressRowTransform?this.getInitialRowTopShared(z):void 0}getInitialTransform(z){return this.suppressRowTransform?void 0:`translateY(${this.getInitialRowTopShared(z)})`}getInitialRowTopShared(z){if(this.printLayout)return"";let J=this.rowNode,Q;if(J.sticky)Q=J.stickyRowTop;else{let Z=this.slideInAnimation[z]?this.roundRowTopToBounds(J.oldRowTop):J.rowTop,$=this.applyPaginationOffset(Z);Q=J.isRowPinned()?$:this.beans.rowContainerHeight.getRealPixelPosition($)}return Q+"px"}setRowTopStyle(z){for(let J of this.allRowGuis)if(this.suppressRowTransform)J.rowComp.setTop(z);else J.rowComp.setTransform(`translateY(${z})`)}getCellCtrl(z,J=!1){let Q=null;for(let Z of this.getAllCellCtrls())if(Z.column==z)Q=Z;if(Q!=null||J)return Q;for(let Z of this.getAllCellCtrls())if(Z?.getColSpanningList().indexOf(z)>=0)Q=Z;return Q}onRowIndexChanged(){if(this.rowNode.rowIndex!=null)this.onCellFocusChanged(),this.updateRowIndexes(),this.postProcessCss()}updateRowIndexes(z){let J=this.rowNode.getRowIndexString();if(J===null)return;let Q=(this.beans.ctrlsSvc.getHeaderRowContainerCtrl()?.getRowCount()??0)+(this.beans.filterManager?.getHeaderRowCount()??0),Z=this.rowNode.rowIndex%2===0,$=this.ariaRowIndex=Q+this.rowNode.rowIndex+1;this.forEachGui(z,(X)=>{X.rowComp.setRowIndex(J),X.rowComp.toggleCss("ag-row-even",Z),X.rowComp.toggleCss("ag-row-odd",!Z),O6(X.element,$)})}},bK=class extends S{constructor(){super();this.beanName="navigation",this.onPageDown=L7(this.onPageDown,100),this.onPageUp=L7(this.onPageUp,100)}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(z)=>{this.gridBodyCon=z.gridBodyCtrl})}handlePageScrollingKey(z,J=!1){let{key:Q,altKey:Z}=z,$=z.ctrlKey||z.metaKey,X=!!this.beans.rangeSvc&&z.shiftKey,Y=z5(this.gos,z),q=!1;switch(Q){case k.PAGE_HOME:case k.PAGE_END:if(!$&&!Z)this.onHomeOrEndKey(Q),q=!0;break;case k.LEFT:case k.RIGHT:case k.UP:case k.DOWN:if(!Y)return!1;if($&&!Z&&!X)this.onCtrlUpDownLeftRight(Q,Y),q=!0;break;case k.PAGE_DOWN:case k.PAGE_UP:if(!$&&!Z)q=this.handlePageUpDown(Q,Y,J);break}if(q)z.preventDefault();return q}handlePageUpDown(z,J,Q){if(Q)J=this.beans.focusSvc.getFocusedCell();if(!J)return!1;if(z===k.PAGE_UP)this.onPageUp(J);else this.onPageDown(J);return!0}navigateTo({scrollIndex:z,scrollType:J,scrollColumn:Q,focusIndex:Z,focusColumn:$,isAsync:X,rowPinned:Y}){let{scrollFeature:q}=this.gridBodyCon;if(P(Q)&&!Q.isPinned())q.ensureColumnVisible(Q);if(P(z))q.ensureIndexVisible(z,J);if(!X)q.ensureIndexVisible(Z);let{focusSvc:G}=this.beans;G.setFocusedCell({rowIndex:Z,column:$,rowPinned:Y,forceBrowserFocus:!0}),this.setRangeToCellIfSupported({rowIndex:Z,rowPinned:Y,column:$})}onPageDown(z){let J=this.beans,Q=AQ(J),Z=this.getViewportHeight(),{pageBounds:$,rowModel:X,rowAutoHeight:Y}=J,q=$.getPixelOffset(),G=Q.top+Z,U=X.getRowIndexAtPixel(G+q);if(Y?.active)this.navigateToNextPageWithAutoHeight(z,U);else this.navigateToNextPage(z,U)}onPageUp(z){let J=this.beans,Q=AQ(J),{pageBounds:Z,rowModel:$,rowAutoHeight:X}=J,Y=Z.getPixelOffset(),q=Q.top,G=$.getRowIndexAtPixel(q+Y);if(X?.active)this.navigateToNextPageWithAutoHeight(z,G,!0);else this.navigateToNextPage(z,G,!0)}navigateToNextPage(z,J,Q=!1){let{pageBounds:Z,rowModel:$}=this.beans,X=this.getViewportHeight(),Y=Z.getFirstRow(),q=Z.getLastRow(),G=Z.getPixelOffset(),U=$.getRow(z.rowIndex),_=Q?U?.rowHeight-X-G:X-G,H=U?.rowTop+_,W=$.getRowIndexAtPixel(H+G);if(W===z.rowIndex){let D=Q?-1:1;J=W=z.rowIndex+D}let B;if(Q){if(B="bottom",Wq)W=q;if(J>q)J=q}if(this.isRowTallerThanView($.getRow(W)))J=W,B="top";let E={rowIndex:W,column:z.column,rowPinned:null},K=this.getNormalisedPosition(E),{rowIndex:F,column:L}=K??E;this.navigateTo({scrollIndex:J,scrollType:B,scrollColumn:null,focusIndex:F,focusColumn:L})}navigateToNextPageWithAutoHeight(z,J,Q=!1){this.navigateTo({scrollIndex:J,scrollType:Q?"bottom":"top",scrollColumn:null,focusIndex:J,focusColumn:z.column}),setTimeout(()=>{let Z=this.getNextFocusIndexForAutoHeight(z,Q);this.navigateTo({scrollIndex:J,scrollType:Q?"bottom":"top",scrollColumn:null,focusIndex:Z,focusColumn:z.column,isAsync:!0})},50)}getNextFocusIndexForAutoHeight(z,J=!1){let Q=J?-1:1,Z=this.getViewportHeight(),{pageBounds:$,rowModel:X}=this.beans,Y=$.getLastRow(),q=0,G=z.rowIndex;while(G>=0&&G<=Y){let U=X.getRow(G);if(U){let _=U.rowHeight??0;if(q+_>Z)break;q+=_}G+=Q}return Math.max(0,Math.min(G,Y))}getViewportHeight(){let z=this.beans,J=AQ(z),Q=this.beans.scrollVisibleSvc.getScrollbarWidth(),Z=J.bottom-J.top;if(z.ctrlsSvc.get("center").isHorizontalScrollShowing())Z-=Q;return Z}isRowTallerThanView(z){if(!z)return!1;let J=z.rowHeight;if(typeof J!=="number")return!1;return J>this.getViewportHeight()}onCtrlUpDownLeftRight(z,J){let Q=this.beans.cellNavigation.getNextCellToFocus(z,J,!0);if(!Q)return;let Z=this.getNormalisedPosition(Q),{rowIndex:$,rowPinned:X,column:Y}=Z??Q,q=Y;this.navigateTo({scrollIndex:$,scrollType:null,scrollColumn:q,focusIndex:$,focusColumn:q,rowPinned:X})}onHomeOrEndKey(z){let J=z===k.PAGE_HOME,{visibleCols:Q,pageBounds:Z,rowModel:$}=this.beans,X=Q.allCols,Y=J?Z.getFirstRow():Z.getLastRow(),q=$.getRow(Y);if(!q)return;let G=(J?X:[...X].reverse()).find((U)=>!U.isSuppressNavigable(q)&&!y0(U));if(!G)return;this.navigateTo({scrollIndex:Y,scrollType:null,scrollColumn:G,focusIndex:Y,focusColumn:G})}onTabKeyDown(z,J){let Q=J.shiftKey,Z=this.tabToNextCellCommon(z,Q,J),$=this.beans,{ctrlsSvc:X,pageBounds:Y,focusSvc:q,gos:G}=$;if(Z!==!1){if(Z)J.preventDefault();else if(Z===null)X.get("gridCtrl").allowFocusForNextCoreContainer(Q);return}if(Q){let{rowIndex:U,rowPinned:_}=z.getRowPosition();if(_?U===0:U===Y.getFirstRow())if(G.get("headerHeight")===0||D4($))_4($,!0,!0);else J.preventDefault(),q.focusPreviousFromFirstCell(J)}else{if(z instanceof E2)z.focusCell(!0);if(q.focusOverlay(!1)||_4($,Q))J.preventDefault()}}tabToNextCell(z,J){let Q=this.beans,{focusSvc:Z,rowRenderer:$}=Q,X=Z.getFocusedCell();if(!X)return!1;let Y=X4(Q,X);if(!Y){if(Y=$.getRowByPosition(X),!Y?.isFullWidth())return!1}return!!this.tabToNextCellCommon(Y,z,J,"api")}tabToNextCellCommon(z,J,Q,Z="ui"){let{editSvc:$,focusSvc:X}=this.beans,Y,q=z instanceof E2?z:z.getAllCellCtrls()?.[0];if($?.isEditing())Y=$?.moveToNextCell(q,J,Q,Z);else Y=this.moveToNextCellNotEditing(z,J,Q);if(Y===null)return Y;return Y||!!X.focusedHeader}moveToNextCellNotEditing(z,J,Q){let Z=this.beans.visibleCols.allCols,$;if(z instanceof aQ){if($={...z.getRowPosition(),column:J?Z[0]:y(Z)},this.gos.get("embedFullWidthRows")&&Q){let Y=z.findFullWidthInfoForEvent(Q);if(Y)$.column=Y.column}}else $=z.getFocusedCellPosition();let X=this.findNextCellToFocusOn($,{backwards:J,startEditing:!1});if(X===!1)return null;if(X instanceof E2)X.focusCell(!0);else if(X)return this.tryToFocusFullWidthRow(X,J);return P(X)}findNextCellToFocusOn(z,{backwards:J,startEditing:Q,skipToNextEditableCell:Z}){let $=z,X=this.beans,{cellNavigation:Y,gos:q,focusSvc:G,rowRenderer:U}=X;while(!0){if(z!==$)z=$;if(!J)$=this.getLastCellOfColSpan($);$=Y.getNextTabbedCell($,J);let _=q.getCallback("tabToNextCell");if(P(_)){let E=_({backwards:J,editing:Q,previousCellPosition:z,nextCellPosition:$?$:null});if(E===!0)$=z;else if(E===!1)return!1;else $={rowIndex:E.rowIndex,column:E.column,rowPinned:E.rowPinned}}if(!$)return null;if($.rowIndex<0){let B=Q4(X);return G.focusHeaderPosition({headerPosition:{headerRowIndex:B+$.rowIndex,column:$.column},fromCell:!0}),null}let H=q.get("editType")==="fullRow";if(Q&&(!H||Z)){if(!this.isCellEditable($))continue}this.ensureCellVisible($);let W=X4(X,$);if(!W){let B=U.getRowByPosition($);if(!B||!B.isFullWidth()||Q)continue;return{...B.getRowPosition(),column:$?.column}}if(Y.isSuppressNavigable(W.column,W.rowNode))continue;return W.setFocusedCellPosition($),this.setRangeToCellIfSupported($),W}}isCellEditable(z){let J=this.lookupRowNodeForCell(z);if(J)return z.column.isCellEditable(J);return!1}lookupRowNodeForCell({rowIndex:z,rowPinned:J}){let{pinnedRowModel:Q,rowModel:Z}=this.beans;if(J==="top")return Q?.getPinnedTopRow(z);if(J==="bottom")return Q?.getPinnedBottomRow(z);return Z.getRow(z)}navigateToNextCell(z,J,Q,Z){let $=Q,X=!1,Y=this.beans,{cellNavigation:q,focusSvc:G,gos:U}=Y;while($&&($===Q||!this.isValidNavigateCell($))){if(U.get("enableRtl")){if(J===k.LEFT)$=this.getLastCellOfColSpan($)}else if(J===k.RIGHT)$=this.getLastCellOfColSpan($);$=q.getNextCellToFocus(J,$),X=d($)}if(X&&z?.key===k.UP)$={rowIndex:-1,rowPinned:null,column:Q.column};if(Z){let H=U.getCallback("navigateToNextCell");if(P(H)){let B=H({key:J,previousCellPosition:Q,nextCellPosition:$?$:null,event:z});if(P(B))$={rowPinned:B.rowPinned,rowIndex:B.rowIndex,column:B.column};else $=null}}if(!$)return;if($.rowIndex<0){let H=Q4(Y);G.focusHeaderPosition({headerPosition:{headerRowIndex:H+$.rowIndex,column:$.column??Q.column},event:z||void 0,fromCell:!0});return}let _=this.getNormalisedPosition($);if(_)this.focusPosition(_);else this.tryToFocusFullWidthRow($)}getNormalisedPosition(z){if(!!this.beans.spannedRowRenderer?.getCellByPosition(z))return z;this.ensureCellVisible(z);let Q=X4(this.beans,z);if(!Q)return null;return z=Q.getFocusedCellPosition(),this.ensureCellVisible(z),z}tryToFocusFullWidthRow(z,J){let{visibleCols:Q,rowRenderer:Z,focusSvc:$,eventSvc:X}=this.beans,Y=Q.allCols;if(!Z.getRowByPosition(z)?.isFullWidth())return!1;let G=$.getFocusedCell(),U={rowIndex:z.rowIndex,rowPinned:z.rowPinned,column:z.column||(J?y(Y):Y[0])};this.focusPosition(U);let _=J==null?G!=null&&W0(U,G):J;return X.dispatchEvent({type:"fullWidthRowFocused",rowIndex:U.rowIndex,rowPinned:U.rowPinned,column:U.column,isFullWidthCell:!0,fromBelow:_}),!0}focusPosition(z){let{focusSvc:J}=this.beans;J.setFocusedCell({rowIndex:z.rowIndex,column:z.column,rowPinned:z.rowPinned,forceBrowserFocus:!0}),this.setRangeToCellIfSupported(z)}setRangeToCellIfSupported(z){if(y0(z.column))return;this.beans.rangeSvc?.setRangeToCell(z)}isValidNavigateCell(z){return!!S0(this.beans,z)}getLastCellOfColSpan(z){let J=X4(this.beans,z);if(!J)return z;let Q=J.getColSpanningList();if(Q.length===1)return z;return{rowIndex:z.rowIndex,column:y(Q),rowPinned:z.rowPinned}}ensureCellVisible(z){let J=p1(this.gos),Q=this.beans.rowModel.getRow(z.rowIndex),Z=J&&Q?.sticky,{scrollFeature:$}=this.gridBodyCon;if(!Z&&d(z.rowPinned))$.ensureIndexVisible(z.rowIndex);if(!z.column.isPinned())$.ensureColumnVisible(z.column)}ensureColumnVisible(z){let J=this.gridBodyCon.scrollFeature;if(!z.isPinned())J.ensureColumnVisible(z)}ensureRowVisible(z){this.gridBodyCon.scrollFeature.ensureIndexVisible(z)}};function AQ(z){return z.ctrlsSvc.getScrollFeature().getVScrollPosition()}var Y1={moduleName:"KeyboardNavigation",version:i,beans:[bK,e3,_3],apiFunctions:{getFocusedCell:zK,clearFocusedCell:JK,setFocusedCell:QK,setFocusedHeader:XK,tabToNextCell:ZK,tabToPreviousCell:$K}},xK=class extends S{constructor(){super(...arguments);this.beanName="pageBoundsListener"}postConstruct(){this.addManagedEventListeners({modelUpdated:this.onModelUpdated.bind(this),recalculateRowBounds:this.calculatePages.bind(this)}),this.onModelUpdated()}onModelUpdated(z){this.calculatePages(),this.eventSvc.dispatchEvent({type:"paginationChanged",animate:z?.animate??!1,newData:z?.newData??!1,newPage:z?.newPage??!1,newPageSize:z?.newPageSize??!1,keepRenderedRows:z?.keepRenderedRows??!1})}calculatePages(){let{pageBounds:z,pagination:J,rowModel:Q}=this.beans;if(J)J.calculatePages();else z.calculateBounds(0,Q.getRowCount()-1)}},wK=class extends S{constructor(){super(...arguments);this.beanName="pageBounds",this.pixelOffset=0}getFirstRow(){return this.topRowBounds?.rowIndex??-1}getLastRow(){return this.bottomRowBounds?.rowIndex??-1}getCurrentPageHeight(){let{topRowBounds:z,bottomRowBounds:J}=this;if(!z||!J)return 0;return Math.max(J.rowTop+J.rowHeight-z.rowTop,0)}getCurrentPagePixelRange(){let{topRowBounds:z,bottomRowBounds:J}=this,Q=z?.rowTop??0,Z=J?J.rowTop+J.rowHeight:0;return{pageFirstPixel:Q,pageLastPixel:Z}}calculateBounds(z,J){let{rowModel:Q}=this.beans,Z=Q.getRowBounds(z);if(Z)Z.rowIndex=z;this.topRowBounds=Z;let $=Q.getRowBounds(J);if($)$.rowIndex=J;this.bottomRowBounds=$,this.calculatePixelOffset()}getPixelOffset(){return this.pixelOffset}calculatePixelOffset(){let z=this.topRowBounds?.rowTop??0;if(this.pixelOffset===z)return;this.pixelOffset=z,this.eventSvc.dispatchEvent({type:"paginationPixelOffsetChanged"})}},NK=".ag-pinned-left-floating-bottom,.ag-pinned-left-floating-top,.ag-pinned-right-floating-bottom,.ag-pinned-right-floating-top{min-width:0;overflow:hidden;position:relative}.ag-pinned-left-sticky-top,.ag-pinned-right-sticky-top{height:100%;overflow:hidden;position:relative}.ag-sticky-bottom-full-width-container,.ag-sticky-top-full-width-container{height:100%;overflow:hidden;width:100%}.ag-pinned-left-header,.ag-pinned-right-header{display:inline-block;height:100%;overflow:hidden;position:relative}.ag-body-horizontal-scroll:not(.ag-scrollbar-invisible){.ag-horizontal-left-spacer:not(.ag-scroller-corner){border-right:var(--ag-pinned-column-border)}.ag-horizontal-right-spacer:not(.ag-scroller-corner){border-left:var(--ag-pinned-column-border)}}.ag-pinned-right-header{border-left:var(--ag-pinned-column-border)}.ag-pinned-left-header{border-right:var(--ag-pinned-column-border)}.ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left,.ag-cell-range-single-cell,.ag-cell-focus:not(.ag-cell-range-selected):focus-within){border-left:var(--ag-pinned-column-border)}.ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right,.ag-cell-range-single-cell,.ag-cell-focus:not(.ag-cell-range-selected):focus-within){border-right:var(--ag-pinned-column-border)}.ag-pinned-left-header .ag-header-cell-resize:after{left:calc(50% - var(--ag-header-column-resize-handle-width))}.ag-pinned-right-header .ag-header-cell-resize:after{left:50%}.ag-pinned-left-header .ag-header-cell-resize{right:-3px}.ag-pinned-right-header .ag-header-cell-resize{left:-3px}",gK=class extends S{constructor(z,J){super();this.isLeft=z,this.elements=J,this.getWidth=z?()=>this.beans.pinnedCols.leftWidth:()=>this.beans.pinnedCols.rightWidth}postConstruct(){this.addManagedEventListeners({[`${this.isLeft?"left":"right"}PinnedWidthChanged`]:this.onPinnedWidthChanged.bind(this)})}onPinnedWidthChanged(){let z=this.getWidth(),J=z>0;for(let Q of this.elements)if(Q)w(Q,J),N4(Q,z)}},A6=50,hK=class extends S{constructor(){super(...arguments);this.beanName="pinnedCols"}postConstruct(){this.beans.ctrlsSvc.whenReady(this,(J)=>{this.gridBodyCtrl=J.gridBodyCtrl});let z=this.checkContainerWidths.bind(this);this.addManagedEventListeners({displayedColumnsChanged:z,displayedColumnsWidthChanged:z}),this.addManagedPropertyListener("domLayout",z)}checkContainerWidths(){let{gos:z,visibleCols:J,eventSvc:Q}=this.beans,Z=A0(z,"print"),$=Z?0:J.getColsLeftWidth(),X=Z?0:J.getDisplayedColumnsRightWidth();if($!=this.leftWidth)this.leftWidth=$,Q.dispatchEvent({type:"leftPinnedWidthChanged"});if(X!=this.rightWidth)this.rightWidth=X,Q.dispatchEvent({type:"rightPinnedWidthChanged"})}keepPinnedColumnsNarrowerThanViewport(){let z=this.gridBodyCtrl.eBodyViewport,J=lz(z);if(J<=A6)return;let Q=this.getPinnedColumnsOverflowingViewport(J-A6),Z=this.gos.getCallback("processUnpinnedColumns"),{columns:$,hasLockedPinned:X}=Q,Y=$;if(!Y.length&&!X)return;if(Z)Y=Z({columns:Y,viewportWidth:J});if(!Y?.length)return;Y=Y.filter((q)=>!y0(q)),this.setColsPinned(Y,null,"viewportSizeFeature")}createPinnedWidthFeature(z,...J){return new gK(z,J)}setColsPinned(z,J,Q){let{colModel:Z,colAnimation:$,visibleCols:X,gos:Y}=this.beans;if(!Z.cols)return;if(!z?.length)return;if(A0(Y,"print")){V(37);return}$?.start();let q;if(J===!0||J==="left")q="left";else if(J==="right")q="right";else q=null;let G=[];for(let U of z){if(!U)continue;let _=Z.getCol(U);if(!_)continue;if(_.getPinned()!==q)this.setColPinned(_,q),G.push(_)}if(G.length)X.refresh(Q),T$(this.eventSvc,G,Q);$?.finish()}initCol(z){let{pinned:J,initialPinned:Q}=z.colDef;if(J!==void 0)this.setColPinned(z,J);else this.setColPinned(z,Q)}setColPinned(z,J){if(J===!0||J==="left")z.pinned="left";else if(J==="right")z.pinned="right";else z.pinned=null;z.dispatchStateUpdatedEvent("pinned")}setupHeaderPinnedWidth(z){let{scrollVisibleSvc:J}=this.beans;if(z.pinned==null)return;let Q=z.pinned==="left",Z=z.pinned==="right";z.hidden=!0;let $=()=>{let X=Q?this.leftWidth:this.rightWidth;if(X==null)return;let Y=X==0,q=z.hidden!==Y,G=this.gos.get("enableRtl"),U=J.getScrollbarWidth(),H=J.verticalScrollShowing&&(G&&Q||!G&&Z)?X+U:X;if(z.comp.setPinnedContainerWidth(`${H}px`),z.comp.setDisplayed(!Y),q)z.hidden=Y,z.refresh()};z.addManagedEventListeners({leftPinnedWidthChanged:$,rightPinnedWidthChanged:$,scrollVisibilityChanged:$,scrollbarWidthChanged:$})}getHeaderResizeDiff(z,J){if(J.getPinned()){let{leftWidth:Z,rightWidth:$}=this,X=lz(this.beans.ctrlsSvc.getGridBodyCtrl().eBodyViewport)-A6;if(Z+$+z>X)if(X>Z+$)z=X-Z-$;else return 0}return z}getPinnedColumnsOverflowingViewport(z){let J=this.rightWidth??0,Q=this.leftWidth??0,Z=J+Q,$=!1;if(Z0){if(G0){let B=Y[U++];if(B.colDef.lockPinned){$=!0;continue}W-=B.getActualWidth(),H.push(B)}}return{columns:H,hasLockedPinned:$}}},uK={moduleName:"PinnedColumn",version:i,beans:[hK],css:[NK]},mK=class extends k0{constructor(){super();this.beanName="ariaAnnounce",this.descriptionContainer=null,this.pendingAnnouncements=new Map,this.lastAnnouncement="",this.updateAnnouncement=i0(this,this.updateAnnouncement.bind(this),200)}postConstruct(){let z=this.beans,J=Y0(z),Q=this.descriptionContainer=J.createElement("div");Q.classList.add("ag-aria-description-container"),h8(Q,"polite"),LG(Q,"additions text"),FG(Q,!0),z.eRootDiv.appendChild(Q)}announceValue(z,J){this.pendingAnnouncements.set(J,z),this.updateAnnouncement()}updateAnnouncement(){if(!this.descriptionContainer)return;let z=Array.from(this.pendingAnnouncements.values()).join(". ");this.pendingAnnouncements.clear(),this.descriptionContainer.textContent="",setTimeout(()=>{this.handleAnnouncementUpdate(z)},50)}handleAnnouncementUpdate(z){if(!this.isAlive()||!this.descriptionContainer)return;let J=z;if(J==null||J.replace(/[ .]/g,"")==""){this.lastAnnouncement="";return}if(this.lastAnnouncement===J)J=`${J}​`;this.lastAnnouncement=J,this.descriptionContainer.textContent=J}destroy(){super.destroy();let{descriptionContainer:z}=this;if(z)J0(z),z.remove();this.descriptionContainer=null,this.pendingAnnouncements.clear()}},cK=class extends mK{},iK={moduleName:"Aria",version:i,beans:[cK]},pK=":where(.ag-delay-render){.ag-cell,.ag-header-cell,.ag-header-group-cell,.ag-row,.ag-spanned-cell-wrapper{visibility:hidden}}",X8="ag-delay-render",nK=class extends S{constructor(){super(...arguments);this.beanName="colDelayRenderSvc",this.hideRequested=!1,this.alreadyRevealed=!1,this.timesRetried=0,this.requesters=new Set}hideColumns(z){if(this.alreadyRevealed||this.requesters.has(z))return;if(this.requesters.add(z),!this.hideRequested)this.beans.ctrlsSvc.whenReady(this,(J)=>{J.gridBodyCtrl.eGridBody.classList.add(X8)}),this.hideRequested=!0}revealColumns(z){if(this.alreadyRevealed||!this.isAlive())return;if(this.requesters.delete(z),this.requesters.size>0)return;let{renderStatus:J,ctrlsSvc:Q}=this.beans;if(J){if(!J.areHeaderCellsRendered()&&this.timesRetried<5){this.timesRetried++,setTimeout(()=>this.revealColumns(z));return}this.timesRetried=0}Q.getGridBodyCtrl().eGridBody.classList.remove(X8),this.alreadyRevealed=!0}},dK={moduleName:"ColumnDelayRender",version:i,beans:[nK],css:[pK]},kJ=class extends x{constructor(){super()}},rK={tag:"div",cls:"ag-overlay-exporting-center",children:[{tag:"span",ref:"eExportingIcon",cls:"ag-loading-icon"},{tag:"span",ref:"eExportingText",cls:"ag-exporting-text"}]},tK=class extends kJ{constructor(){super(...arguments);this.eExportingIcon=j,this.eExportingText=j}init(z){let{beans:J}=this;this.setTemplate(rK);let Q=h("overlayExporting",J,null);if(Q)this.eExportingIcon.appendChild(Q);let Z=z.exporting?.overlayText??this.getLocaleTextFunc()("exportingOoo","Exporting...");this.eExportingText.textContent=Z,J.ariaAnnounce.announceValue(Z,"overlay")}},sK={tag:"div",cls:"ag-overlay-loading-center",children:[{tag:"span",ref:"eLoadingIcon",cls:"ag-loading-icon"},{tag:"span",ref:"eLoadingText",cls:"ag-loading-text"}]},lK=class extends kJ{constructor(){super(...arguments);this.eLoadingIcon=j,this.eLoadingText=j}init(z){let{beans:J,gos:Q}=this,Z=q0(Q.get("overlayLoadingTemplate")?.trim());if(this.setTemplate(Z??sK),!Z){let $=h("overlayLoading",J,null);if($)this.eLoadingIcon.appendChild($);let X=z.loading?.overlayText??this.getLocaleTextFunc()("loadingOoo","Loading...");this.eLoadingText.textContent=X,J.ariaAnnounce.announceValue(X,"overlay")}}},aK={tag:"span",cls:"ag-overlay-no-matching-rows-center"},oK=class extends kJ{init(z){let{beans:J}=this;this.setTemplate(aK);let Q=z.noMatchingRows?.overlayText??this.getLocaleTextFunc()("noMatchingRows","No Matching Rows");this.getGui().textContent=Q,J.ariaAnnounce.announceValue(Q,"overlay")}},eK={tag:"span",cls:"ag-overlay-no-rows-center"},zF=class extends kJ{init(z){let{beans:J,gos:Q}=this,Z=q0(Q.get("overlayNoRowsTemplate")?.trim());if(this.setTemplate(Z??eK),!Z){let $=z.noRows?.overlayText??this.getLocaleTextFunc()("noRowsToShow","No Rows To Show");this.getGui().textContent=$,J.ariaAnnounce.announceValue($,"overlay")}}};function JF(z){z.overlays?.showLoadingOverlay()}function QF(z){z.overlays?.showNoRowsOverlay()}function ZF(z){z.overlays?.hideOverlay()}var $F=".ag-overlay{inset:0;pointer-events:none;position:absolute;z-index:2}.ag-overlay-panel,.ag-overlay-wrapper{display:flex;height:100%;width:100%}.ag-overlay-wrapper{align-items:center;flex:none;justify-content:center;text-align:center}.ag-overlay-exporting-wrapper,.ag-overlay-loading-wrapper,.ag-overlay-modal-wrapper{pointer-events:all}.ag-overlay-exporting-center,.ag-overlay-loading-center{background:var(--ag-background-color);border:solid var(--ag-border-width) var(--ag-border-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-popup-shadow);display:flex;padding:var(--ag-spacing)}",XF={tag:"div",cls:"ag-overlay",role:"presentation",children:[{tag:"div",cls:"ag-overlay-panel",role:"presentation",children:[{tag:"div",ref:"eOverlayWrapper",cls:"ag-overlay-wrapper",role:"presentation"}]}]},$X=class extends x{constructor(){super(XF);this.eOverlayWrapper=j,this.activeOverlay=null,this.activePromise=null,this.activeCssClass=null,this.elToFocusAfter=null,this.overlayExclusive=!1,this.oldWrapperPadding=null,this.registerCSS($F)}handleKeyDown(z){if(z.key!==k.TAB||z.defaultPrevented||q4(z))return;let{beans:J,eOverlayWrapper:Q}=this;if(Q&&O0(J,Q,!1,z.shiftKey))return;let $;if(z.shiftKey)$=J.focusSvc.focusGridView({column:y(J.visibleCols.allCols),backwards:!0,canFocusOverlay:!1});else $=_4(J,!1);if($)z.preventDefault()}updateLayoutClasses(z,J){let Q=this.eOverlayWrapper;if(!Q)return;let Z=Q.classList,{AUTO_HEIGHT:$,NORMAL:X,PRINT:Y}=M4;Z.toggle($,J.autoHeight),Z.toggle(X,J.normal),Z.toggle(Y,J.print)}postConstruct(){this.createManagedBean(new lZ(this)),this.setDisplayed(!1,{skipAriaHidden:!0}),this.beans.overlays.setWrapperComp(this,!1),this.addManagedElementListeners(this.getFocusableElement(),{keydown:this.handleKeyDown.bind(this)}),this.addManagedEventListeners({gridSizeChanged:this.refreshWrapperPadding.bind(this)})}setWrapperTypeClass(z){let J=this.eOverlayWrapper?.classList;if(!J){this.activeCssClass=null;return}if(this.activeCssClass)J.toggle(this.activeCssClass,!1);this.activeCssClass=z,J.toggle(z,!0)}showOverlay(z,J,Q){if(this.destroyActiveOverlay(),this.elToFocusAfter=null,this.activePromise=z,this.overlayExclusive=Q,!z)return this.refreshWrapperPadding(),N.resolve();if(this.setWrapperTypeClass(J),this.setDisplayed(!0,{skipAriaHidden:!0}),this.refreshWrapperPadding(),Q&&this.isGridFocused()){let Z=n(this.beans);if(Z&&!Vz(this.beans))this.elToFocusAfter=Z}return z.then((Z)=>{let $=this.eOverlayWrapper;if(!$){this.destroyBean(Z);return}if(this.activePromise!==z){if(this.activeOverlay!==Z)this.destroyBean(Z);return}if(this.activePromise=null,!Z)return;if(this.activeOverlay!==Z)$.appendChild(Z.getGui()),this.activeOverlay=Z;if(Q&&this.isGridFocused())E0($)}),z}refreshWrapperPadding(){if(!this.eOverlayWrapper){this.oldWrapperPadding=null;return}let z=!!this.activeOverlay||!!this.activePromise,J=0;if(z&&!this.overlayExclusive)J=this.beans.ctrlsSvc.get("gridHeaderCtrl")?.headerHeight||0;if(J!==this.oldWrapperPadding)this.oldWrapperPadding=J,this.eOverlayWrapper.style.setProperty("padding-top",`${J}px`)}destroyActiveOverlay(){this.activePromise=null;let z=this.activeOverlay;if(!z){this.overlayExclusive=!1,this.elToFocusAfter=null,this.refreshWrapperPadding();return}let J=this.elToFocusAfter;if(this.elToFocusAfter=null,this.activeOverlay=null,this.overlayExclusive=!1,J&&!this.isGridFocused())J=null;this.destroyBean(z);let Q=this.eOverlayWrapper;if(Q)J0(Q);J?.focus?.({preventScroll:!0}),this.refreshWrapperPadding()}hideOverlay(){this.destroyActiveOverlay(),this.setDisplayed(!1,{skipAriaHidden:!0})}isGridFocused(){let z=n(this.beans);return!!z&&this.beans.eGridDiv.contains(z)}destroy(){this.elToFocusAfter=null,this.destroyActiveOverlay(),this.beans.overlays.setWrapperComp(this,!0),super.destroy(),this.eOverlayWrapper=null}},YF={selector:"AG-OVERLAY-WRAPPER",component:$X},qF=["refresh"],d2=(z)=>({name:z,optionalMethods:qF}),iz={id:"agLoadingOverlay",overlayType:"loading",comp:d2("loadingOverlayComponent"),wrapperCls:"ag-overlay-loading-wrapper",exclusive:!0,compKey:"loadingOverlayComponent",paramsKey:"loadingOverlayComponentParams",isSuppressed:(z)=>{let J=z.get("loading");return J===!1||z.get("suppressLoadingOverlay")===!0&&J!==!0}},A1={id:"agNoRowsOverlay",overlayType:"noRows",comp:d2("noRowsOverlayComponent"),wrapperCls:"ag-overlay-no-rows-wrapper",compKey:"noRowsOverlayComponent",paramsKey:"noRowsOverlayComponentParams",isSuppressed:(z)=>z.get("suppressNoRowsOverlay")},_5={id:"agNoMatchingRowsOverlay",overlayType:"noMatchingRows",comp:d2("noMatchingRowsOverlayComponent"),wrapperCls:"ag-overlay-no-matching-rows-wrapper"},p6={id:"agExportingOverlay",overlayType:"exporting",comp:d2("exportingOverlayComponent"),wrapperCls:"ag-overlay-exporting-wrapper",exclusive:!0},j6={id:"activeOverlay",comp:d2("activeOverlay"),wrapperCls:"ag-overlay-modal-wrapper",exclusive:!0},GF=(z)=>{if(!z)return null;return{agLoadingOverlay:iz,agNoRowsOverlay:A1,agNoMatchingRowsOverlay:_5,agExportingOverlay:p6}[z]??j6},UF=(z)=>{if(!z)return null;return{loading:iz,noRows:A1,noMatchingRows:_5,exporting:p6}[z]},_F=class extends S{constructor(){super(...arguments);this.beanName="overlays",this.eWrapper=void 0,this.exclusive=!1,this.oldExclusive=!1,this.currentDef=null,this.showInitialOverlay=!0,this.userForcedNoRows=!1,this.exportsInProgress=0,this.newColumnsLoadedCleanup=null}postConstruct(){let z=this.gos;this.showInitialOverlay=o(z);let J=()=>{if(this.userForcedNoRows)return;this.updateOverlay(!1)},[Q,Z,$,X]=this.addManagedEventListeners({newColumnsLoaded:J,rowCountReady:()=>{this.disableInitialOverlay(),J(),Z()},rowDataUpdated:J,modelUpdated:J});this.newColumnsLoadedCleanup=Q,this.addManagedPropertyListeners(["loading","activeOverlay","activeOverlayParams","overlayComponentParams","loadingOverlayComponentParams","noRowsOverlayComponentParams"],(Y)=>this.onPropChange(new Set(Y.changeSet?.properties)))}destroy(){this.doHideOverlay(),super.destroy(),this.eWrapper=void 0}setWrapperComp(z,J){if(!this.isAlive())return;if(!J)this.eWrapper=z;else if(this.eWrapper===z)this.eWrapper=void 0;this.updateOverlay(!1)}isVisible(){return!!this.currentDef}showLoadingOverlay(){this.showInitialOverlay=!1;let z=this.gos;if(!this.eWrapper||z.get("activeOverlay"))return;if(this.isDisabled(iz))return;let J=z.get("loading");if(!J&&J!==void 0)return;this.doShowOverlay(iz)}showNoRowsOverlay(){this.showInitialOverlay=!1;let z=this.gos;if(!this.eWrapper||z.get("activeOverlay")||z.get("loading")||this.isDisabled(A1))return;this.userForcedNoRows=!0,this.doShowOverlay(A1)}async showExportOverlay(z){let{gos:J,beans:Q}=this;if(!this.eWrapper||J.get("activeOverlay")||J.get("loading")||this.isDisabled(p6)||this.userForcedNoRows&&this.currentDef===A1){z();return}let Z=this.getDesiredDefWithOverride(p6);if(!Z){z();return}this.exportsInProgress++,this.focusedCell=Q.focusSvc.getFocusedCell(),await this.doShowOverlay(Z),await new Promise((X)=>setTimeout(()=>X()));let $=Date.now();try{z()}finally{let X=Date.now()-$,Y=Math.max(0,300-X),q=()=>{if(this.exportsInProgress--,this.exportsInProgress===0)this.updateOverlay(!1),iZ(Q,this.focusedCell),this.focusedCell=null};if(Y>0)setTimeout(()=>q(),Y);else q()}}hideOverlay(){let z=this.gos;this.showInitialOverlay=!1;let J=this.userForcedNoRows;if(this.userForcedNoRows=!1,z.get("loading")){V(99);return}if(z.get("activeOverlay")){V(296);return}if(this.currentDef===_5){V(297);return}if(this.doHideOverlay(),J){if(this.getOverlayDef()!==A1)this.updateOverlay(!1)}}getOverlayWrapperSelector(){return YF}getOverlayWrapperCompClass(){return $X}onPropChange(z){let J=z.has("activeOverlay");if(J||z.has("loading")){if(this.updateOverlay(J))return}let Q=this.currentDef,Z=this.eWrapper?.activeOverlay;if(Z&&Q){let $=z.has("activeOverlayParams");if(Q===j6){if($)Z.refresh?.(this.makeCompParams(!0))}else{let X=Q.paramsKey;if(z.has("overlayComponentParams")||X&&z.has(X))Z.refresh?.(this.makeCompParams(!1,X,Q.overlayType))}}}updateOverlay(z){let J=this.eWrapper;if(!J)return this.currentDef=null,!1;let Q=this.getDesiredDefWithOverride(),Z=this.currentDef,$=Q===j6&&z;if(Q!==Z){if(!Q)return this.disableInitialOverlay(),this.doHideOverlay();return this.doShowOverlay(Q),!0}if($&&Q)return J.hideOverlay(),this.doShowOverlay(Q),!0;if(!Q)this.disableInitialOverlay();return!1}getDesiredDefWithOverride(z){let{gos:J}=this,Q=GF(J.get("activeOverlay"));if(!Q){if(Q=z??this.getOverlayDef(),Q&&this.isDisabled(Q))Q=null}return Q}getOverlayDef(){let{gos:z,beans:J}=this,{rowModel:Q}=J,Z=z.get("loading");if(Z!==void 0){if(this.disableInitialOverlay(),Z)return iz}else if(this.showInitialOverlay){if(!this.isDisabled(iz)&&(!z.get("columnDefs")||!z.get("rowData")))return iz;this.disableInitialOverlay()}else this.disableInitialOverlay();let X=Q.getOverlayType();return UF(X)}disableInitialOverlay(){this.showInitialOverlay=!1,this.newColumnsLoadedCleanup?.(),this.newColumnsLoadedCleanup=null}doShowOverlay(z){let{gos:J,beans:Q}=this,{userCompFactory:Z}=Q;this.currentDef=z;let $=z!==j6,X=!!z.exclusive;this.exclusive=X;let Y;if(z.paramsKey&&J.get(z.paramsKey)||z.compKey&&J.get(z.compKey))Y=z.paramsKey;let q=void 0;if($){if(J.get("overlayComponent")||J.get("overlayComponentSelector"))q=Z.getCompDetailsFromGridOptions({name:"overlayComponent",optionalMethods:["refresh"]},void 0,this.makeCompParams(!1,z.paramsKey,z.overlayType))}q??(q=Z.getCompDetailsFromGridOptions(z.comp,$?z.id:void 0,this.makeCompParams(!$,Y,z.overlayType),!1));let G=q?.newAgStackInstance()??null,U=this.eWrapper?this.eWrapper.showOverlay(G,z.wrapperCls,X):N.resolve();return this.eWrapper?.refreshWrapperPadding(),this.setExclusive(X),U}makeCompParams(z,J,Q){let{gos:Z}=this,$=z?Z.get("activeOverlayParams"):{...Z.get("overlayComponentParams"),...J&&Z.get(J)||null,overlayType:Q};return C(Z,$??{})}doHideOverlay(){let z=!1;if(this.currentDef)this.currentDef=null,z=!0;this.exclusive=!1;let J=this.eWrapper;if(J)J.hideOverlay(),J.refreshWrapperPadding(),this.setExclusive(!1);return z}setExclusive(z){if(this.oldExclusive!==z)this.oldExclusive=z,this.eventSvc.dispatchEvent({type:"overlayExclusiveChanged"})}isDisabled(z){let{gos:J}=this;return z.overlayType&&J.get("suppressOverlays")?.includes(z.overlayType)||z.isSuppressed?.(J)===!0}},HF={moduleName:"Overlay",version:i,userComponents:{agLoadingOverlay:lK,agNoRowsOverlay:zF,agNoMatchingRowsOverlay:oK,agExportingOverlay:tK},apiFunctions:{showLoadingOverlay:JF,showNoRowsOverlay:QF,hideOverlay:ZF},icons:{overlayLoading:"loading",overlayExporting:"loading"},beans:[_F]},WF=class extends S{constructor(){super(...arguments);this.beanName="rowContainerHeight",this.scrollY=0,this.uiBodyHeight=0}postConstruct(){this.addManagedEventListeners({bodyHeightChanged:this.updateOffset.bind(this)}),this.maxDivHeight=K_(),M2(this.gos,"RowContainerHeightService - maxDivHeight = "+this.maxDivHeight)}updateOffset(){if(!this.stretching)return;let z=this.beans.ctrlsSvc.getScrollFeature().getVScrollPosition().top,J=this.getUiBodyHeight();if(z!==this.scrollY||J!==this.uiBodyHeight)this.scrollY=z,this.uiBodyHeight=J,this.calculateOffset()}calculateOffset(){this.setUiContainerHeight(this.maxDivHeight),this.pixelsToShave=this.modelHeight-this.uiContainerHeight,this.maxScrollY=this.uiContainerHeight-this.uiBodyHeight;let z=this.scrollY/this.maxScrollY,J=z*this.pixelsToShave;M2(this.gos,`RowContainerHeightService - Div Stretch Offset = ${J} (${this.pixelsToShave} * ${z})`),this.setDivStretchOffset(J)}setUiContainerHeight(z){if(z!==this.uiContainerHeight)this.uiContainerHeight=z,this.eventSvc.dispatchEvent({type:"rowContainerHeightChanged"})}clearOffset(){this.setUiContainerHeight(this.modelHeight),this.pixelsToShave=0,this.setDivStretchOffset(0)}setDivStretchOffset(z){let J=typeof z==="number"?Math.floor(z):null;if(this.divStretchOffset===J)return;this.divStretchOffset=J,this.eventSvc.dispatchEvent({type:"heightScaleChanged"})}setModelHeight(z){if(this.modelHeight=z,this.stretching=z!=null&&this.maxDivHeight>0&&z>this.maxDivHeight,this.stretching)this.calculateOffset();else this.clearOffset()}getRealPixelPosition(z){return z-this.divStretchOffset}getUiBodyHeight(){let z=this.beans.ctrlsSvc.getScrollFeature().getVScrollPosition();return z.bottom-z.top}getScrollPositionForPixel(z){if(this.pixelsToShave<=0)return z;let J=this.modelHeight-this.getUiBodyHeight(),Q=z/J;return this.maxScrollY*Q}},BF=400,EF=class extends S{constructor(){super(...arguments);this.beanName="rowRenderer",this.destroyFuncsForColumnListeners=[],this.rowCtrlsByRowIndex={},this.zombieRowCtrls={},this.allRowCtrls=[],this.topRowCtrls=[],this.bottomRowCtrls=[],this.refreshInProgress=!1,this.dataFirstRenderedFired=!1,this.setupRangeSelectionListeners=()=>{let z=()=>{for(let X of this.getAllCellCtrls())X.onCellSelectionChanged()},J=()=>{for(let X of this.getAllCellCtrls())X.updateRangeBordersIfRangeCount()},Q=()=>{this.eventSvc.addListener("cellSelectionChanged",z),this.eventSvc.addListener("columnMoved",J),this.eventSvc.addListener("columnPinned",J),this.eventSvc.addListener("columnVisible",J)},Z=()=>{this.eventSvc.removeListener("cellSelectionChanged",z),this.eventSvc.removeListener("columnMoved",J),this.eventSvc.removeListener("columnPinned",J),this.eventSvc.removeListener("columnVisible",J)};if(this.addDestroyFunc(()=>Z()),this.addManagedPropertyListeners(["enableRangeSelection","cellSelection"],()=>{if(n0(this.gos))Q();else Z()}),n0(this.gos))Q()}}wireBeans(z){this.pageBounds=z.pageBounds,this.colModel=z.colModel,this.pinnedRowModel=z.pinnedRowModel,this.rowModel=z.rowModel,this.focusSvc=z.focusSvc,this.rowContainerHeight=z.rowContainerHeight,this.ctrlsSvc=z.ctrlsSvc,this.editSvc=z.editSvc}postConstruct(){this.ctrlsSvc.whenReady(this,(z)=>{this.gridBodyCtrl=z.gridBodyCtrl,this.initialise()})}initialise(){this.addManagedEventListeners({paginationChanged:this.onPageLoaded.bind(this),pinnedRowDataChanged:this.onPinnedRowDataChanged.bind(this),pinnedRowsChanged:this.onPinnedRowsChanged.bind(this),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),bodyScroll:this.onBodyScroll.bind(this),bodyHeightChanged:this.redraw.bind(this,{})}),this.addManagedPropertyListeners(["domLayout","embedFullWidthRows"],()=>this.onDomLayoutChanged()),this.addManagedPropertyListeners(["suppressMaxRenderedRowRestriction","rowBuffer"],()=>this.redraw()),this.addManagedPropertyListener("suppressCellFocus",(Z)=>this.onSuppressCellFocusChanged(Z.currentValue)),this.addManagedPropertyListeners(["groupSuppressBlankHeader","getBusinessKeyForNode","fullWidthCellRenderer","fullWidthCellRendererParams","suppressStickyTotalRow","groupRowRenderer","groupRowRendererParams","loadingCellRenderer","loadingCellRendererParams","detailCellRenderer","detailCellRendererParams","enableRangeSelection","enableCellTextSelection"],()=>this.redrawRows()),this.addManagedPropertyListener("cellSelection",({currentValue:Z,previousValue:$})=>{if(!$&&Z||$&&!Z)this.redrawRows()});let{stickyRowSvc:z,gos:J,showRowGroupCols:Q}=this.beans;if(Q)this.addManagedPropertyListener("showOpenedGroup",()=>{let Z=Q.columns;if(Z.length)this.refreshCells({columns:Z,force:!0})});if(z)this.stickyRowFeature=z.createStickyRowFeature(this,this.createRowCon.bind(this),this.destroyRowCtrls.bind(this));else{let Z=this.gridBodyCtrl;Z.setStickyTopHeight(0),Z.setStickyBottomHeight(0)}this.registerCellEventListeners(),this.initialiseCache(),this.printLayout=A0(J,"print"),this.embedFullWidthRows=this.printLayout||J.get("embedFullWidthRows"),this.redrawAfterModelUpdate()}initialiseCache(){if(this.gos.get("keepDetailRows")){let z=this.getKeepDetailRowsCount(),J=z!=null?z:3;this.cachedRowCtrls=new KF(J)}}getKeepDetailRowsCount(){return this.gos.get("keepDetailRowsCount")}getStickyTopRowCtrls(){return this.stickyRowFeature?.stickyTopRowCtrls??[]}getStickyBottomRowCtrls(){return this.stickyRowFeature?.stickyBottomRowCtrls??[]}updateAllRowCtrls(){let z=Object.values(this.rowCtrlsByRowIndex),J=Object.values(this.zombieRowCtrls),Q=this.cachedRowCtrls?.getEntries()??[];if(J.length>0||Q.length>0)this.allRowCtrls=[...z,...J,...Q];else this.allRowCtrls=z}isCellBeingRendered(z,J){let Q=this.rowCtrlsByRowIndex[z];if(!J||!Q)return!!Q;if(Q.isFullWidth())return!0;return!!this.beans.spannedRowRenderer?.getCellByPosition({rowIndex:z,column:J,rowPinned:null})||!!Q.getCellCtrl(J)||!Q.isRowRendered()}updateCellFocus(z){for(let J of this.getAllCellCtrls())J.onCellFocused(z);for(let J of this.getFullWidthRowCtrls())J.onFullWidthRowFocused(z)}onCellFocusChanged(z){if(z?.rowIndex!=null&&!z.rowPinned){let J=this.beans.colModel.getCol(z.column)??void 0;if(!this.isCellBeingRendered(z.rowIndex,J))this.redraw()}this.updateCellFocus(z)}onSuppressCellFocusChanged(z){for(let J of this.getAllCellCtrls())J.onSuppressCellFocusChanged(z);for(let J of this.getFullWidthRowCtrls())J.onSuppressCellFocusChanged(z)}registerCellEventListeners(){this.addManagedEventListeners({cellFocused:(z)=>this.onCellFocusChanged(z),cellFocusCleared:()=>this.updateCellFocus(),flashCells:(z)=>{let{cellFlashSvc:J}=this.beans;if(J)for(let Q of this.getAllCellCtrls())J.onFlashCells(Q,z)},columnHoverChanged:()=>{for(let z of this.getAllCellCtrls())z.onColumnHover()},displayedColumnsChanged:()=>{for(let z of this.getAllCellCtrls())z.onDisplayedColumnsChanged()},displayedColumnsWidthChanged:()=>{if(this.printLayout)for(let z of this.getAllCellCtrls())z.onLeftChanged()}}),this.setupRangeSelectionListeners(),this.refreshListenersToColumnsForCellComps(),this.addManagedEventListeners({gridColumnsChanged:this.refreshListenersToColumnsForCellComps.bind(this)}),this.addDestroyFunc(this.removeGridColumnListeners.bind(this))}removeGridColumnListeners(){for(let z of this.destroyFuncsForColumnListeners)z();this.destroyFuncsForColumnListeners.length=0}refreshListenersToColumnsForCellComps(){this.removeGridColumnListeners();let z=this.colModel.getCols();for(let J of z){let Q=(G)=>{for(let U of this.getAllCellCtrls())if(U.column===J)G(U)},Z=()=>{Q((G)=>G.onLeftChanged())},$=()=>{Q((G)=>G.onWidthChanged())},X=()=>{Q((G)=>G.onFirstRightPinnedChanged())},Y=()=>{Q((G)=>G.onLastLeftPinnedChanged())},q=()=>{Q((G)=>G.onColDefChanged())};J.__addEventListener("leftChanged",Z),J.__addEventListener("widthChanged",$),J.__addEventListener("firstRightPinnedChanged",X),J.__addEventListener("lastLeftPinnedChanged",Y),J.__addEventListener("colDefChanged",q),this.destroyFuncsForColumnListeners.push(()=>{J.__removeEventListener("leftChanged",Z),J.__removeEventListener("widthChanged",$),J.__removeEventListener("firstRightPinnedChanged",X),J.__removeEventListener("lastLeftPinnedChanged",Y),J.__removeEventListener("colDefChanged",q)})}}onDomLayoutChanged(){let z=A0(this.gos,"print"),J=z||this.gos.get("embedFullWidthRows"),Q=J!==this.embedFullWidthRows||this.printLayout!==z;if(this.printLayout=z,this.embedFullWidthRows=J,Q)this.redrawAfterModelUpdate({domLayoutChanged:!0})}datasourceChanged(){this.firstRenderedRow=0,this.lastRenderedRow=-1;let z=Object.keys(this.rowCtrlsByRowIndex);this.removeRowCtrls(z)}onPageLoaded(z){let J={recycleRows:z.keepRenderedRows,animate:z.animate,newData:z.newData,newPage:z.newPage,onlyBody:!0};this.redrawAfterModelUpdate(J)}getAllCellsNotSpanningForColumn(z){let J=[];for(let Q of this.getAllRowCtrls()){let Z=Q.getCellCtrl(z,!0)?.eGui;if(Z)J.push(Z)}return J}refreshFloatingRowComps(z=!0){this.refreshFloatingRows(this.topRowCtrls,"top",z),this.refreshFloatingRows(this.bottomRowCtrls,"bottom",z)}refreshFloatingRows(z,J,Q){let{pinnedRowModel:Z,beans:$,printLayout:X}=this,Y=Object.fromEntries(z.map((G)=>[G.rowNode.id,G]));Z?.forEachPinnedRow(J,(G,U)=>{let _=z[U];if(_&&Z.getPinnedRowById(_.rowNode.id,J)===void 0)_.destroyFirstPass(),_.destroySecondPass();if(G.id in Y&&Q)z[U]=Y[G.id],delete Y[G.id];else z[U]=new aQ(G,$,!1,!1,X)});let q=(J==="top"?Z?.getPinnedTopRowCount():Z?.getPinnedBottomRowCount())??0;z.length=q}onPinnedRowDataChanged(){let z={recycleRows:!0};this.redrawAfterModelUpdate(z)}onPinnedRowsChanged(){this.redrawAfterModelUpdate({recycleRows:!0})}redrawRow(z,J=!1){if(z.sticky)this.stickyRowFeature?.refreshStickyNode(z);else if(this.cachedRowCtrls?.has(z)){this.cachedRowCtrls.removeRow(z);return}else{let Q=(Z)=>{let $=Z[z.rowIndex];if(!$)return;if($.rowNode!==z)return;$.destroyFirstPass(),$.destroySecondPass(),Z[z.rowIndex]=this.createRowCon(z,!1,!1)};switch(z.rowPinned){case"top":Q(this.topRowCtrls);break;case"bottom":Q(this.bottomRowCtrls);break;default:Q(this.rowCtrlsByRowIndex),this.updateAllRowCtrls()}}if(!J)this.dispatchDisplayedRowsChanged(!1)}redrawRows(z){let{editSvc:J}=this.beans;if(J?.isEditing())if(J.isBatchEditing())J.cleanupEditors();else J.stopEditing(void 0,{source:"api"});if(z!=null){for(let Z of z??[])this.redrawRow(Z,!0);this.dispatchDisplayedRowsChanged(!1);return}this.redrawAfterModelUpdate()}redrawAfterModelUpdate(z={}){this.getLockOnRefresh();let J=this.beans.focusSvc?.getFocusCellToUseAfterRefresh();this.updateContainerHeights(),this.scrollToTopIfNewData(z);let Q=!z.domLayoutChanged&&!!z.recycleRows,Z=z.animate&&T1(this.gos),$=Q?this.getRowsToRecycle():null;if(!Q)this.removeAllRowComps(!Z);this.workOutFirstAndLastRowsToRender();let{stickyRowFeature:X,gos:Y}=this;if(X){X.checkStickyRows();let q=X.extraTopHeight+X.extraBottomHeight;if(q)this.updateContainerHeights(q)}if(this.recycleRows($,Z),this.gridBodyCtrl.updateRowCount(),!z.onlyBody)this.refreshFloatingRowComps(Y.get("enableRowPinning")?Q:void 0);if(this.dispatchDisplayedRowsChanged(),J!=null)this.restoreFocusedCell(J);this.releaseLockOnRefresh()}scrollToTopIfNewData(z){let J=z.newData||z.newPage,Q=this.gos.get("suppressScrollOnNewData");if(J&&!Q)this.gridBodyCtrl.scrollFeature.scrollToTop(),this.stickyRowFeature?.resetOffsets()}updateContainerHeights(z=0){let{rowContainerHeight:J}=this;if(this.printLayout){J.setModelHeight(null);return}let Q=this.pageBounds.getCurrentPageHeight();if(Q===0)Q=1;J.setModelHeight(Q+z)}getLockOnRefresh(){if(this.refreshInProgress)throw Error(Y4(252));this.refreshInProgress=!0,this.beans.frameworkOverrides.getLockOnRefresh?.()}releaseLockOnRefresh(){this.refreshInProgress=!1,this.beans.frameworkOverrides.releaseLockOnRefresh?.()}isRefreshInProgress(){return this.refreshInProgress}restoreFocusedCell(z){if(!z)return;let J=this.beans.focusSvc,Q=this.findPositionToFocus(z);if(!Q){J.focusHeaderPosition({headerPosition:{headerRowIndex:Q4(this.beans)-1,column:z.column}});return}if(z.rowIndex!==Q.rowIndex||z.rowPinned!=Q.rowPinned){J.setFocusedCell({...Q,preventScrollOnBrowserFocus:!0,forceBrowserFocus:!0});return}if(!J.doesRowOrCellHaveBrowserFocus())this.updateCellFocus(C(this.gos,{...Q,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0,type:"cellFocused"}))}findPositionToFocus(z){let{pagination:J,pageBounds:Q}=this.beans,Z=z;if(Z.rowPinned==null&&J&&Q&&!J.isRowInPage(Z.rowIndex))Z={rowPinned:null,rowIndex:Q.getFirstRow()};while(Z){if(Z.rowPinned==null&&Q){if(Z.rowIndexQ.getLastRow())Z={rowPinned:null,rowIndex:Q.getLastRow()}}let $=this.getRowByPosition(Z);if($?.isAlive())return{...$.getRowPosition(),column:z.column};Z=d0(this.beans,Z)}return null}getAllCellCtrls(){let z=[],J=this.getAllRowCtrls(),Q=J.length;for(let Z=0;Z{let $=Z.rowNode;return q8($,J)})}getCellCtrls(z,J){let Q;if(P(J))Q={},J.forEach(($)=>{let X=this.colModel.getCol($);if(P(X))Q[X.getId()]=!0});let Z=[];for(let $ of this.getRowCtrls(z))for(let X of $.getAllCellCtrls()){let Y=X.column.getId();if(Q&&!Q[Y])continue;Z.push(X)}return Z}destroy(){this.removeAllRowComps(!0),super.destroy()}removeAllRowComps(z){let J=Object.keys(this.rowCtrlsByRowIndex);this.removeRowCtrls(J,z),this.stickyRowFeature?.destroyStickyCtrls()}getRowsToRecycle(){let z=[];for(let Q of Object.keys(this.rowCtrlsByRowIndex))if(this.rowCtrlsByRowIndex[Q].rowNode.id==null)z.push(Q);this.removeRowCtrls(z);let J={};for(let Q of Object.values(this.rowCtrlsByRowIndex)){let Z=Q.rowNode;J[Z.id]=Q}return this.rowCtrlsByRowIndex={},J}removeRowCtrls(z,J=!1){for(let Q of z){let Z=this.rowCtrlsByRowIndex[Q];if(Z)Z.destroyFirstPass(J),Z.destroySecondPass();delete this.rowCtrlsByRowIndex[Q]}}onBodyScroll(z){if(z.direction!=="vertical")return;this.redraw({afterScroll:!0})}redraw(z={}){let{focusSvc:J,animationFrameSvc:Q}=this.beans,{afterScroll:Z}=z,$,X=this.stickyRowFeature;if(X)$=J?.getFocusCellToUseAfterRefresh()||void 0;let Y=this.firstRenderedRow,q=this.lastRenderedRow;this.workOutFirstAndLastRowsToRender();let G=!1;if(X){G=X.checkStickyRows();let _=X.extraTopHeight+X.extraBottomHeight;if(_)this.updateContainerHeights(_)}let U=this.firstRenderedRow!==Y||this.lastRenderedRow!==q;if(Z&&!G&&!U)return;if(this.getLockOnRefresh(),this.recycleRows(null,!1,Z),this.releaseLockOnRefresh(),this.dispatchDisplayedRowsChanged(Z&&!G),$!=null){let _=J?.getFocusCellToUseAfterRefresh();if($!=null&&_==null)Q?.flushAllFrames(),this.restoreFocusedCell($)}}removeRowCompsNotToDraw(z,J){let Q={};for(let X of z)Q[X]=!0;let $=Object.keys(this.rowCtrlsByRowIndex).filter((X)=>!Q[X]);this.removeRowCtrls($,J)}calculateIndexesToDraw(z){let J=[];for(let Y=this.firstRenderedRow;Y<=this.lastRenderedRow;Y++)J.push(Y);let Q=this.beans.pagination,Z=this.beans.focusSvc?.getFocusedCell()?.rowIndex;if(Z!=null&&(Zthis.lastRenderedRow)&&(!Q||Q.isRowInPage(Z))&&Z{let q=Y.rowNode.rowIndex;if(q==null||q===Z)return;if(qthis.lastRenderedRow){if(this.doNotUnVirtualiseRow(Y))J.push(q)}};for(let Y of Object.values(this.rowCtrlsByRowIndex))$(Y);if(z)for(let Y of Object.values(z))$(Y);J.sort((Y,q)=>Y-q);let X=[];for(let Y=0;Y{this.destroyRowCtrls(z,J),this.updateAllRowCtrls(),this.dispatchDisplayedRowsChanged()});else this.destroyRowCtrls(z,J)}this.updateAllRowCtrls()}dispatchDisplayedRowsChanged(z=!1){this.eventSvc.dispatchEvent({type:"displayedRowsChanged",afterScroll:z})}onDisplayedColumnsChanged(){let{visibleCols:z}=this.beans,J=z.isPinningLeft(),Q=z.isPinningRight();if(this.pinningLeft!==J||Q!==this.pinningRight){if(this.pinningLeft=J,this.pinningRight=Q,this.embedFullWidthRows)this.redrawFullWidthEmbeddedRows()}}redrawFullWidthEmbeddedRows(){let z=[];for(let J of this.getFullWidthRowCtrls()){let Q=J.rowNode.rowIndex;z.push(Q.toString())}this.refreshFloatingRowComps(),this.removeRowCtrls(z),this.redraw({afterScroll:!0})}getFullWidthRowCtrls(z){let J=Y8(z);return this.getAllRowCtrls().filter((Q)=>{if(!Q.isFullWidth())return!1;let Z=Q.rowNode;if(J!=null&&!q8(Z,J))return!1;return!0})}createOrUpdateRowCtrl(z,J,Q,Z){let $,X=this.rowCtrlsByRowIndex[z];if(!X){if($=this.rowModel.getRow(z),P($)&&P(J)&&J[$.id]&&$.alreadyRendered)X=J[$.id],J[$.id]=null}if(!X){if(!$)$=this.rowModel.getRow(z);if(P($))X=this.createRowCon($,Q,Z);else return}if($)$.alreadyRendered=!0;this.rowCtrlsByRowIndex[z]=X}destroyRowCtrls(z,J){let Q=[];if(z)for(let Z of Object.values(z)){if(!Z)continue;if(this.cachedRowCtrls&&Z.isCacheable()){this.cachedRowCtrls.addRow(Z);continue}if(Z.destroyFirstPass(!J),J){let $=Z.instanceId;this.zombieRowCtrls[$]=Z,Q.push(()=>{Z.destroySecondPass(),delete this.zombieRowCtrls[$]})}else Z.destroySecondPass()}if(J)Q.push(()=>{if(this.isAlive())this.updateAllRowCtrls(),this.dispatchDisplayedRowsChanged()}),window.setTimeout(()=>{for(let Z of Q)Z()},BF)}getRowBuffer(){return this.gos.get("rowBuffer")}getRowBufferInPixels(){let z=this.getRowBuffer(),J=E9(this.beans);return z*J}workOutFirstAndLastRowsToRender(){let{rowContainerHeight:z,pageBounds:J,rowModel:Q}=this;z.updateOffset();let Z,$;if(!Q.isRowsToRender())Z=0,$=-1;else if(this.printLayout)this.beans.environment.refreshRowHeightVariable(),Z=J.getFirstRow(),$=J.getLastRow();else{let _=this.getRowBufferInPixels(),H=this.ctrlsSvc.getScrollFeature(),W=this.gos.get("suppressRowVirtualisation"),B,E,K;do{let f=J.getPixelOffset(),{pageFirstPixel:A,pageLastPixel:R}=J.getCurrentPagePixelRange(),O=z.divStretchOffset,v=H.getVScrollPosition(),I=v.top,b=v.bottom;if(W)E=A+O,K=R+O;else E=Math.max(I+f-_,A)+O,K=Math.min(b+f+_,R)+O;this.firstVisibleVPixel=Math.max(I+f,A)+O,this.lastVisibleVPixel=Math.min(b+f,R)+O,B=this.ensureAllRowsInRangeHaveHeightsCalculated(E,K)}while(B);let F=Q.getRowIndexAtPixel(E),L=Q.getRowIndexAtPixel(K),D=J.getFirstRow(),M=J.getLastRow();if(FM)L=M;Z=F,$=L}let X=A0(this.gos,"normal"),Y=this.gos.get("suppressMaxRenderedRowRestriction"),q=Math.max(this.getRowBuffer(),500);if(X&&!Y){if($-Z>q)$=Z+q}let G=Z!==this.firstRenderedRow,U=$!==this.lastRenderedRow;if(G||U)this.firstRenderedRow=Z,this.lastRenderedRow=$,this.eventSvc.dispatchEvent({type:"viewportChanged",firstRow:Z,lastRow:$})}dispatchFirstDataRenderedEvent(){if(this.dataFirstRenderedFired)return;this.dataFirstRenderedFired=!0,O4(this.beans,()=>{this.beans.eventSvc.dispatchEvent({type:"firstDataRendered",firstRow:this.firstRenderedRow,lastRow:this.lastRenderedRow})})}ensureAllRowsInRangeHaveHeightsCalculated(z,J){let Q=this.pinnedRowModel?.ensureRowHeightsValid(),Z=this.stickyRowFeature?.ensureRowHeightsValid(),{pageBounds:$,rowModel:X}=this,Y=X.ensureRowHeightsValid(z,J,$.getFirstRow(),$.getLastRow());if(Y||Z)this.eventSvc.dispatchEvent({type:"recalculateRowBounds"});if(Z||Y||Q)return this.updateContainerHeights(),!0;return!1}doNotUnVirtualiseRow(z){let Z=z.rowNode,$=this.focusSvc.isRowFocused(Z.rowIndex,Z.rowPinned),X=this.editSvc?.isEditing(z),Y=Z.detail;if(!($||X||Y))return!1;return this.isRowPresent(Z)?!0:!1}isRowPresent(z){if(!this.rowModel.isRowPresent(z))return!1;return this.beans.pagination?.isRowInPage(z.rowIndex)??!0}createRowCon(z,J,Q){let Z=this.cachedRowCtrls?.getRow(z)??null;if(Z)return Z;let $=Q&&!this.printLayout&&!!this.beans.animationFrameSvc?.active;return new aQ(z,this.beans,J,$,this.printLayout)}getRenderedNodes(){let z=Object.values(this.rowCtrlsByRowIndex).map((Z)=>Z.rowNode),J=this.getStickyTopRowCtrls().map((Z)=>Z.rowNode),Q=this.getStickyBottomRowCtrls().map((Z)=>Z.rowNode);return[...J,...z,...Q]}getRowByPosition(z){let J,{rowIndex:Q}=z;switch(z.rowPinned){case"top":J=this.topRowCtrls[Q];break;case"bottom":J=this.bottomRowCtrls[Q];break;default:if(J=this.rowCtrlsByRowIndex[Q],!J){if(J=this.getStickyTopRowCtrls().find((Z)=>Z.rowNode.rowIndex===Q)||null,!J)J=this.getStickyBottomRowCtrls().find((Z)=>Z.rowNode.rowIndex===Q)||null}break}return J}isRangeInRenderedViewport(z,J){if(z==null||J==null)return!1;let Z=z>this.lastRenderedRow;return!(Jthis.maxCount){let J=this.entriesList[0];J.destroyFirstPass(),J.destroySecondPass(),this.removeFromCache(J)}}getRow(z){if(z?.id==null)return null;let J=this.entriesMap[z.id];if(!J)return null;return this.removeFromCache(J),J.setCached(!1),J.rowNode!=z?null:J}has(z){return this.entriesMap[z.id]!=null}removeRow(z){let J=z.id,Q=this.entriesMap[J];delete this.entriesMap[J],X0(this.entriesList,Q)}removeFromCache(z){let J=z.rowNode.id;delete this.entriesMap[J],X0(this.entriesList,z)}getEntries(){return this.entriesList}};function Y8(z){if(!z)return;let J={top:{},bottom:{},normal:{}};for(let Q of z){let Z=Q.id;switch(Q.rowPinned){case"top":J.top[Z]=Q;break;case"bottom":J.bottom[Z]=Q;break;default:J.normal[Z]=Q;break}}return J}function q8(z,J){let Q=z.id;switch(z.rowPinned){case"top":return J.top[Q]!=null;case"bottom":return J.bottom[Q]!=null;default:return J.normal[Q]!=null}}var FF=class extends S{constructor(){super(...arguments);this.beanName="rowNodeSorter",this.accentedSort=!1,this.primaryColumnsSortGroups=!1,this.pivotActive=!1}postConstruct(){this.firstLeaf=o(this.gos)?X1:LF,this.addManagedPropertyListeners(["accentedSort","autoGroupColumnDef","treeData"],this.updateOptions.bind(this));let z=this.updatePivotModeState.bind(this);this.addManagedEventListeners({columnPivotModeChanged:z,columnPivotChanged:z}),this.updateOptions(),z()}updateOptions(){this.accentedSort=!!this.gos.get("accentedSort"),this.primaryColumnsSortGroups=b4(this.gos)}updatePivotModeState(){this.pivotActive=this.beans.colModel.isPivotActive()}doFullSortInPlace(z,J){return z.sort((Q,Z)=>this.compareRowNodes(J,Q,Z))}compareRowNodes(z,J,Q){if(J===Q)return 0;let Z=this.accentedSort;for(let $=0,X=z.length;${if(z.data)return z;let J=z.childrenAfterGroup;while(J?.length){let Q=J[0];if(Q.data)return Q;J=Q.childrenAfterGroup}},G8=(z)=>{if(!z)return z;if(typeof z==="bigint")return z<0n?-z:z;let J=Number(z);return isNaN(J)?z:Math.abs(J)};function DF(z){z.sortSvc?.onSortChanged("api")}var mz=(z,J)=>({tag:"span",ref:`eSort${z}`,cls:`ag-sort-indicator-icon ag-sort-${J} ag-hidden`,attrs:{"aria-hidden":"true"}}),MF={tag:"span",cls:"ag-sort-indicator-container",children:[mz("Order","order"),mz("Asc","ascending-icon"),mz("Desc","descending-icon"),mz("Mixed","mixed-icon"),mz("AbsoluteAsc","absolute-ascending-icon"),mz("AbsoluteDesc","absolute-descending-icon"),mz("None","none-icon")]},H5=class extends x{constructor(z){super();if(this.eSortOrder=j,this.eSortAsc=j,this.eSortDesc=j,this.eSortMixed=j,this.eSortNone=j,this.eSortAbsoluteAsc=j,this.eSortAbsoluteDesc=j,!z)this.setTemplate(MF)}attachCustomElements(z,J,Q,Z,$,X,Y){this.eSortOrder=z,this.eSortAsc=J,this.eSortDesc=Q,this.eSortMixed=Z,this.eSortNone=$,this.eSortAbsoluteAsc=X,this.eSortAbsoluteDesc=Y}setupSort(z,J=!1,Q){if(this.column=z,this.suppressOrder=J,this.getSortDefOverride=Q,this.setupMultiSortIndicator(),!z.isSortable()&&!z.colDef.showRowGroup)return;this.addInIcon("sortAscending",this.eSortAsc,z),this.addInIcon("sortDescending",this.eSortDesc,z),this.addInIcon("sortUnSort",this.eSortNone,z),this.addInIcon("sortAbsoluteAscending",this.eSortAbsoluteAsc,z),this.addInIcon("sortAbsoluteDescending",this.eSortAbsoluteDesc,z);let Z=this.updateIcons.bind(this),$=this.onSortChanged.bind(this);this.addManagedPropertyListener("unSortIcon",Z),this.addManagedEventListeners({newColumnsLoaded:Z,sortChanged:$,columnRowGroupChanged:$}),this.onSortChanged()}addInIcon(z,J,Q){if(J==null)return;let Z=h(z,this.beans,Q);if(Z)J.appendChild(Z)}onSortChanged(){if(this.updateIcons(),!this.suppressOrder)this.updateSortOrder()}updateIcons(){let{eSortAsc:z,eSortDesc:J,eSortAbsoluteAsc:Q,eSortAbsoluteDesc:Z,eSortNone:$,column:X,gos:Y,beans:q}=this,G=PZ(X,q,this.getSortDefOverride),U=G.isDefaultSortAllowed,_=G.isAbsoluteSortAllowed,{isAbsoluteSort:H,isDefaultSort:W,isAscending:B,isDescending:E,direction:K}=G;if(z)w(z,B&&W&&U,{skipAriaHidden:!0});if(J)w(J,E&&W&&U,{skipAriaHidden:!0});if($){let F=!X.colDef.unSortIcon&&!Y.get("unSortIcon");w($,!F&&!K,{skipAriaHidden:!0})}if(Q)w(Q,B&&H&&_,{skipAriaHidden:!0});if(Z)w(Z,E&&H&&_,{skipAriaHidden:!0})}setupMultiSortIndicator(){let{eSortMixed:z,column:J,gos:Q}=this;this.addInIcon("sortUnSort",z,J);let Z=J.colDef.showRowGroup;if(b4(Q)&&Z)this.addManagedEventListeners({sortChanged:this.updateMultiSortIndicator.bind(this),columnRowGroupChanged:this.updateMultiSortIndicator.bind(this)}),this.updateMultiSortIndicator()}updateMultiSortIndicator(){let{eSortMixed:z,beans:J,column:Q}=this;if(z){let Z=J.sortSvc.getDisplaySortForColumn(Q)?.direction==="mixed";w(z,Z,{skipAriaHidden:!0})}}updateSortOrder(){let{eSortOrder:z,column:J,beans:{sortSvc:Q}}=this;if(!z)return;let Z=Q.getColumnsWithSortingOrdered(),$=Q.getDisplaySortIndexForColumn(J)??-1,X=Z.some((q)=>Q.getDisplaySortIndexForColumn(q)??!1),Y=$>=0&&X;if(w(z,Y,{skipAriaHidden:!0}),$>=0)z.textContent=($+1).toString();else J0(z)}refresh(){this.onSortChanged()}},kF={selector:"AG-SORT-INDICATOR",component:H5},fF=class extends S{constructor(){super(...arguments);this.beanName="sortSvc"}progressSort(z,J,Q){let Z=this.getNextSortDirection(z);this.setSortForColumn(z,Z,J,Q)}progressSortFromEvent(z,J){let Z=this.gos.get("multiSortKey")==="ctrl"?J.ctrlKey||J.metaKey:J.shiftKey;this.progressSort(z,Z,"uiColumnSorted")}setSortForColumn(z,J,Q,Z){let{gos:$,showRowGroupCols:X}=this.beans,Y=b4($),q=[z];if(Y){if(z.colDef.showRowGroup){let H=X?.getSourceColumnsForGroupColumn?.(z)?.filter((W)=>W.isSortable());if(H)q=[z,...H]}}for(let _ of q)this.setColSort(_,J,Z);let G=(Q||$.get("alwaysMultiSort"))&&!$.get("suppressMultiSort"),U=[];if(!G){let _=this.clearSortBarTheseColumns(q,Z);U.push(..._)}this.updateSortIndex(z),U.push(...q),this.dispatchSortChangedEvents(Z,U)}updateSortIndex(z){let{gos:J,colModel:Q,showRowGroupCols:Z}=this.beans,$=b4(J),X=Z?.getShowRowGroupCol(z.getId()),Y=$?X||z:z,q=this.getColumnsWithSortingOrdered();Q.forAllCols((_)=>this.setColSortIndex(_,null));let G=q.filter((_)=>{if($&&_.colDef.showRowGroup)return!1;return _!==Y});(Y.getSortDef()?[...G,Y]:G).forEach((_,H)=>this.setColSortIndex(_,H))}onSortChanged(z,J){this.dispatchSortChangedEvents(z,J)}isSortActive(){let z=!1;return this.beans.colModel.forAllCols((J)=>{if(J.getSortDef())return z=!0,!0}),z}dispatchSortChangedEvents(z,J){let Q={type:"sortChanged",source:z};if(J)Q.columns=J;this.eventSvc.dispatchEvent(Q)}clearSortBarTheseColumns(z,J){let Q=[];return this.beans.colModel.forAllCols((Z)=>{if(!z.includes(Z)){if(Z.getSortDef())Q.push(Z);let $=Z4();this.setColSort(Z,$,J)}}),Q}getNextSortDirection(z,J){let Q=z.getSortingOrder(),Z=J===void 0?z.getSortDef():Z4(J),X=Q.findIndex((Y)=>f6(Y,Z))+1;if(X>=Q.length)X=0;return Z4(Q[X])}getIndexedSortMap(){let{gos:z,colModel:J,showRowGroupCols:Q,rowGroupColsSvc:Z}=this.beans,$=[];if(J.forAllCols((U)=>{if(U.getSortDef())$.push(U)}),J.pivotMode){let U=b4(z);$=$.filter((_)=>{let H=!!_.aggFunc,W=!_.primary,B=U?Q?.getShowRowGroupCol(_.getId()):_.colDef.showRowGroup;return H||W||B})}let X=Z?.columns.filter((U)=>!!U.getSortDef())??[],Y={};$.forEach((U,_)=>Y[U.getId()]=_),$.sort((U,_)=>{let H=U.getSortIndex(),W=_.getSortIndex();if(H!=null&&W!=null)return H-W;else if(H==null&&W==null){let B=Y[U.getId()],E=Y[_.getId()];return B>E?1:-1}else if(W==null)return-1;else return 1});let q=b4(z)&&!!X.length;if(q)$=[...new Set($.map((U)=>Q?.getShowRowGroupCol(U.getId())??U))];let G=new Map;if($.forEach((U,_)=>G.set(U,_)),q)for(let U of X){let _=Q.getShowRowGroupCol(U.getId());G.set(U,G.get(_))}return G}getColumnsWithSortingOrdered(){return[...this.getIndexedSortMap().entries()].sort(([,z],[,J])=>z-J).map(([z])=>z)}collectSortItems(z=!1){let J=[],Q=this.getColumnsWithSortingOrdered();for(let Z of Q){let $=Z.getSortDef()?.direction;if(!$)continue;let X=A4(Z.getSortDef()?.type),Y={sort:$,type:X};if(z)Y.colId=Z.getId();else Y.column=Z;J.push(Y)}return J}getSortModel(){return this.collectSortItems(!0)}getSortOptions(){return this.collectSortItems()}canColumnDisplayMixedSort(z){let J=b4(this.gos),Q=!!z.colDef.showRowGroup;return J&&Q}getDisplaySortForColumn(z){let J=this.beans.showRowGroupCols?.getSourceColumnsForGroupColumn(z);if(!this.canColumnDisplayMixedSort(z)||!J?.length)return z.getSortDef();let Z=z.colDef.field!=null||!!z.colDef.valueGetter?[z,...J]:J,$=Z[0].getSortDef();if(!Z.every((Y)=>f6(Y.getSortDef(),$)))return{type:A4(z.getSortDef()?.type),direction:"mixed"};return $}getDisplaySortIndexForColumn(z){return this.getIndexedSortMap().get(z)}setupHeader(z,J){let Q=()=>{let{type:Z,direction:$}=Z4(J.getSortDef());if(z.toggleCss("ag-header-cell-sorted-asc",$==="asc"),z.toggleCss("ag-header-cell-sorted-desc",$==="desc"),z.toggleCss("ag-header-cell-sorted-abs-asc",Z==="absolute"&&$==="asc"),z.toggleCss("ag-header-cell-sorted-abs-desc",Z==="absolute"&&$==="desc"),z.toggleCss("ag-header-cell-sorted-none",!$),J.colDef.showRowGroup){let q=!this.beans.showRowGroupCols?.getSourceColumnsForGroupColumn(J)?.every((G)=>$==G.getSortDef()?.direction);z.toggleCss("ag-header-cell-sorted-mixed",q)}};z.addManagedEventListeners({sortChanged:Q,columnPinned:Q,columnRowGroupChanged:Q,displayedColumnsChanged:Q})}initCol(z){let{sortIndex:J,initialSortIndex:Q}=z.colDef,Z=C9(z.colDef);if(Z)z.setSortDef(Z);if(J!==void 0){if(J!==null)z.sortIndex=J}else if(Q!==null)z.sortIndex=Q}updateColSort(z,J,Q){if(J===void 0)return;this.setColSort(z,Z4(J),Q)}setColSort(z,J,Q){if(!f6(z.getSortDef(),J))z.setSortDef(J),z.dispatchColEvent("sortChanged",Q);z.dispatchStateUpdatedEvent("sort")}setColSortIndex(z,J){z.sortIndex=J,z.dispatchStateUpdatedEvent("sortIndex")}createSortIndicator(z){return new H5(z)}getSortIndicatorSelector(){return kF}},XX={moduleName:"Sort",version:i,beans:[fF,FF],apiFunctions:{onSortChanged:DF},userComponents:{agSortIndicator:H5},icons:{sortAscending:"asc",sortDescending:"desc",sortUnSort:"none",sortAbsoluteAscending:"aasc",sortAbsoluteDescending:"adesc"}},SF=class extends S{constructor(){super(...arguments);this.beanName="syncSvc",this.waitingForColumns=!1}postConstruct(){this.addManagedPropertyListener("columnDefs",(z)=>this.setColumnDefs(z))}start(){this.beans.ctrlsSvc.whenReady(this,()=>{let z=this.gos.get("columnDefs");if(z)this.setColumnsAndData(z);else this.waitingForColumns=!0;this.gridReady()})}setColumnsAndData(z){let{colModel:J,rowModel:Q}=this.beans;J.setColumnDefs(z??[],"gridInitializing"),Q.start()}gridReady(){let{eventSvc:z,gos:J}=this;z.dispatchEvent({type:"gridReady"}),M2(J,`initialised successfully, enterprise = ${J.isModuleRegistered("EnterpriseCore")}`)}setColumnDefs(z){let J=this.gos.get("columnDefs");if(!J)return;if(this.waitingForColumns){this.waitingForColumns=!1,this.setColumnsAndData(J);return}this.beans.colModel.setColumnDefs(J,Dz(z.source))}};var VF="paste",RF=class extends S{constructor(){super(...arguments);this.beanName="changeDetectionSvc",this.deferredDepth=0,this.batchedPath=null,this.batchedNodes=null}destroy(){super.destroy(),this.batchedPath=null,this.batchedNodes=null}postConstruct(){this.csrm=uZ(this.beans),this.addManagedEventListeners({cellValueChanged:this.onCellValueChanged.bind(this)})}beginDeferred(){this.deferredDepth++}endDeferred(){if(this.deferredDepth===0)return;if(--this.deferredDepth>0)return;let z=this.batchedPath,J=this.batchedNodes;if(this.batchedPath=null,this.batchedNodes=null,z)this.csrm?.doAggregate(z);let{rowRenderer:Q}=this.beans;if(J)for(let Z of J)U8(Q,Z);if(z){let Z=z.getSortedRows();for(let $=0,X=Z.length;${let{sibling:Q,pinnedSibling:Z}=J;z.refreshRowByNode(J),z.refreshRowByNode(Q),z.refreshRowByNode(Z),z.refreshRowByNode(Q?.pinnedSibling),z.refreshRowByNode(Z?.sibling)},AF=class extends S{constructor(){super(...arguments);this.beanName="expressionSvc",this.cache={}}evaluate(z,J){if(typeof z==="string")return this.evaluateExpression(z,J);else r(15,{expression:z})}evaluateExpression(z,J){try{return this.createExpressionFunction(z)(J.value,J.context,J.oldValue,J.newValue,J.value,J.node,J.data,J.colDef,J.rowIndex,J.api,J.getValue,J.column,J.columnGroup)}catch(Q){return r(16,{expression:z,params:J,e:Q}),null}}createExpressionFunction(z){let J=this.cache;if(J[z])return J[z];let Q=this.createFunctionBody(z),Z=Function("x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, getValue, column, columnGroup",Q);return J[z]=Z,Z}createFunctionBody(z){if(z.includes("return"))return z;else return"return "+z+";"}};var jF={moduleName:"Expression",version:i,beans:[AF]},OF={moduleName:"ChangeDetection",version:i,beans:[RF]};var PF=class extends S{constructor(){super(...arguments);this.beanName="valueSvc",this.executeValueGetter=this.executeValueGetterWithoutValueCache,this.isTreeData=!1,this.isSsrm=!1,this.cellExpressions=!1,this.groupSuppressBlankHeader=!1,this.editSvc=void 0,this.valueCache=void 0,this.rowGroupColsSvc=void 0,this.expressionSvc=void 0,this.dataTypeSvc=void 0,this.formulaDataSvc=void 0}wireBeans(z){this.expressionSvc=z.expressionSvc,this.colModel=z.colModel,this.valueCache=z.valueCache,this.dataTypeSvc=z.dataTypeSvc,this.editSvc=z.editSvc,this.formulaDataSvc=z.formulaDataSvc,this.rowGroupColsSvc=z.rowGroupColsSvc,this.init()}init(){let z=this.gos;this.isSsrm=Az(z),this.cellExpressions=z.get("enableCellExpressions"),this.isTreeData=z.get("treeData"),this.groupSuppressBlankHeader=z.get("groupSuppressBlankHeader"),this.executeValueGetter=this.valueCache&&z.get("valueCache")?this.executeValueGetterWithValueCache:this.executeValueGetterWithoutValueCache}postConstruct(){this.init();let z=(J)=>this.callColumnCellValueChangedHandler(J);this.eventSvc.addListener("cellValueChanged",z,!0),this.addDestroyFunc(()=>this.eventSvc.removeListener("cellValueChanged",z,!0)),this.addManagedPropertyListener("treeData",(J)=>this.isTreeData=J.currentValue),this.addManagedPropertyListener("groupSuppressBlankHeader",(J)=>this.groupSuppressBlankHeader=J.currentValue)}getValueForDisplay(z){let J=this.beans,Q=z.column,Z=z.node,$=J.showRowGroupColValueSvc,X=!Q&&Z.group,Y=!this.isTreeData||Z.footer;if($&&Y&&(X||Q?.colDef.showRowGroup)){let W=$.getGroupValue(Z,Q,this.displayIgnoresAggData(Z));if(W==null)return{value:null,valueFormatted:null};return{value:W.value,valueFormatted:z.includeValueFormatted?$.formatAndPrefixGroupColValue(W,Q,z.exporting):null}}if(!Q)return{value:Z.key,valueFormatted:null};let q=this.getValue(Q,Z,z.from,this.displayIgnoresAggData(Z)),G=q,U=J.formula,_=Q.colDef;if(_.allowFormula&&U?.isFormula(q))if(z.useRawFormula)q=U.normaliseFormula(q,!0),G=U.resolveValue(Q,Z);else q=U.resolveValue(Q,Z),G=q;let H=z.includeValueFormatted&&!(z.exporting&&_.useValueFormatterForExport===!1);return{value:q,valueFormatted:H?this.formatValue(Q,Z,G):null}}getValue(z,J,Q,Z=!1){if(!J)return;let $=z.colDef,X=J.group;if(!X&&!J.rowPinned){let G=$.pivotValueColumn;if(G)z=G}let Y=this.editSvc;if(Y&&Q!=="data"){let G=Y.getPendingEditValue(J,z,Q);if(G!==void 0)return G}let q=this.resolveValue(z,J,Z,X);if(q===void 0){if(X){let G=$.showRowGroup;if(typeof G==="string"){let U=this.rowGroupColsSvc?.getColumnIndex(G);if(U!=null&&U>J.level)return null}}return}if(this.cellExpressions&&GZ(q)){let G=q.substring(1);q=this.executeValueGetter(G,J.data,z,J)}return q}displayIgnoresAggData(z){if(!z.group||z.footer||z.level===-1)return!1;if(!z.sibling||this.groupSuppressBlankHeader)return!1;if(z.leafGroup&&this.colModel.pivotMode)return!1;return!!z.expanded}resolveValue(z,J,Q,Z){let{colDef:$,colId:X}=z;if(!Z&&$.allowFormula){let L=this.beans.formula?.getDataSourceFormula(J,z);if(L!==void 0)return L}let Y=Z&&!Q?J.aggData:void 0,q=this.isTreeData;if(q&&Y?.[X]!==void 0)return Y[X];let G=J.data,U=$.field,_=$.valueGetter;if(q){if(_)return this.executeValueGetter(_,G,z,J);if(U&&G)return z.fieldContainsDots?B2(G,U):G[U]}let H=J.groupData;if(H&&X in H)return H[X];if(Y?.[X]!==void 0)return Y[X];let W=$.showRowGroup,B=typeof W!=="string"||!Z,E=this.isSsrm,K=E&&Q&&!!$.aggFunc;if(_&&!K)return B?this.executeValueGetter(_,G,z,J):void 0;if(E&&J.footer&&J.field&&(W===!0||W===J.field)){if(!G)return;let L=J.field;return z.fieldContainsDots?B2(G,L):G[L]}if(U&&G&&!K){if(!B)return;return z.fieldContainsDots?B2(G,U):G[U]}return}parseValue(z,J,Q,Z){let $=z.colDef;if($.allowFormula&&this.beans.formula?.isFormula(Q))return Q;let X=$.valueParser;if(P(X)){let Y=C(this.gos,{node:J,data:J?.data,oldValue:Z,newValue:Q,colDef:$,column:z});if(typeof X==="function")return X(Y);return this.expressionSvc?.evaluate(X,Y)}return Q}getDeleteValue(z,J){if(P(z.colDef.valueParser))return this.parseValue(z,J,"",this.getValueForDisplay({column:z,node:J,from:"edit"}).value)??null;return null}formatValue(z,J,Q,Z,$=!0){let{expressionSvc:X}=this.beans,Y=null,q,G=z.colDef;if(Z)q=Z;else if($)q=G.valueFormatter;if(q){let U=J?J.data:null,_=C(this.gos,{value:Q,node:J,data:U,colDef:G,column:z});if(typeof q==="function")Y=q(_);else Y=X?X.evaluate(q,_):null}else if(G.refData)return G.refData[Q]||"";if(Y==null&&Array.isArray(Q))Y=Q.join(", ");return Y}setValue(z,J,Q,Z){let $=J.colDef;if(!z.data&&this.canCreateRowNodeData(z,$))z.data={};if(!this.isSetValueSupported(J,z,Q,$))return!1;let X=this.getValue(J,z,"data"),Y=C(this.gos,{node:z,data:z.data,oldValue:X,newValue:Q,colDef:$,column:J}),q=!1;if(z.data){let U=this.handleExternalFormulaChange({column:J,eventSource:Z,newValue:Q,setterParams:Y,rowNode:z});if(U!==null)return U;q=this.computeValueChange({column:J,rowNode:z,newValue:Q,params:Y,rowData:z.data,valueSetter:$.valueSetter,field:$.field})??!0}let G=this.beans.changeDetectionSvc;G?.beginDeferred();try{if(z.group){let U=this.beans.rowGroupingEditValueSvc?.setGroupDataValue(z,J,Q,X,Z,q||Q!==X);if(U!==void 0){if(!q&&!U)return!1;return this.finishValueChange(z,J,Y,Z,Q)}}if(!q)return!1;return this.finishValueChange(z,J,Y,Z)}finally{G?.endDeferred()}}canCreateRowNodeData(z,J){if(!z.group)return!0;if(J.groupRowValueSetter!=null||J.groupRowEditable!=null)return!1;if(J.pivotValueColumn)return!1;return!0}finishValueChange(z,J,Q,Z,$){z.resetQuickFilterAggregateText(),this.valueCache?.onDataChanged();let X=$===void 0?this.getValue(J,z,"data"):$;if(this.dispatchCellValueChangedEvent(z,Q,X,Z),z.pinnedSibling)this.dispatchCellValueChangedEvent(z.pinnedSibling,Q,X,Z);return!0}isSetValueSupported(z,J,Q,Z){let{field:$,valueSetter:X}=Z,Y=this.beans.formula,q=z.colDef.allowFormula&&Y?.isFormula(Q),G=!!this.formulaDataSvc?.hasDataSource();if(d($)&&d(X)&&!(G&&q)){if(J.group&&(Z.groupRowValueSetter||Z.groupRowEditable))return!0;return V(17),!1}if(this.dataTypeSvc&&!this.dataTypeSvc.checkType(z,Q))return V(135),!1;return!0}handleExternalFormulaChange(z){let{column:J,rowNode:Q,newValue:Z,eventSource:$,setterParams:X}=z,Y=this.beans.formula,q=this.formulaDataSvc;if(!J.colDef.allowFormula||!q?.hasDataSource())return null;let G=Y?.isFormula(Z),U=q.getFormula({column:J,rowNode:Q});if(G){if(U===Z)return!1;q.setFormula({column:J,rowNode:Q,formula:Z});let H=Y?.resolveValue(J,Q),W=J.colDef;if(P(W.valueSetter)||!d(W.field)){let B={...X,newValue:H};this.computeValueChange({column:J,rowNode:Q,newValue:H,params:B,rowData:Q.data,valueSetter:W.valueSetter,field:W.field})}return this.finishValueChange(Q,J,X,$)}if(U!==void 0)q.setFormula({column:J,rowNode:Q,formula:void 0});return null}computeValueChange(z){let{valueSetter:J,params:Q,rowData:Z,field:$,column:X,newValue:Y}=z;if(P(J)){if(typeof J==="function")return J(Q);return this.expressionSvc?.evaluate(J,Q)}return!!Z&&this.setValueUsingField(Z,$,Y,X.fieldContainsDots)}dispatchCellValueChangedEvent(z,J,Q,Z){this.eventSvc.dispatchEvent({type:"cellValueChanged",event:null,rowIndex:z.rowIndex,rowPinned:z.rowPinned,column:J.column,colDef:J.colDef,data:z.data,node:z,oldValue:J.oldValue,newValue:Q,newRawValue:J.newValue,value:Q,source:Z})}callColumnCellValueChangedHandler(z){let J=z.colDef.onCellValueChanged;if(typeof J==="function")this.beans.frameworkOverrides.wrapOutgoing(()=>{J(z)})}setValueUsingField(z,J,Q,Z){if(!J)return!1;let $=!1;if(!Z){if($=z[J]===Q,!$)z[J]=Q}else{let X=J.split("."),Y=z;while(X.length>0&&Y){let q=X.shift();if(X.length===0){if($=Y[q]===Q,!$)Y[q]=Q}else Y=Y[q]}}return!$}executeValueGetterWithValueCache(z,J,Q,Z){let $=Q.colId,X=this.valueCache.getValue(Z,$);if(X!==void 0)return X;let Y=this.executeValueGetterWithoutValueCache(z,J,Q,Z);return this.valueCache.setValue(Z,$,Y),Y}executeValueGetterWithoutValueCache(z,J,Q,Z){let $=C(this.gos,{data:J,node:Z,column:Q,colDef:Q.colDef,getValue:(Y)=>this.getValueCallback(Z,Y)}),X;if(typeof z==="function")X=z($);else X=this.expressionSvc?.evaluate(z,$);return X}getValueCallback(z,J){let Q=this.colModel.getColDefColOrCol(J);return Q?this.getValue(Q,z,"data"):null}getKeyForNode(z,J){let Q=this.getValue(z,J,"data"),Z=z.colDef.keyCreator,$=Q;if(Z){let X=C(this.gos,{value:Q,colDef:z.colDef,column:z,node:J,data:J.data});$=Z(X)}if(typeof $==="string"||$==null)return $;if($=String($),$==="[object Object]")V(121);return $}},TF={moduleName:"CommunityCore",version:i,beans:[K3,oH,mB,gU,WF,ZB,U3,N3,GB,wK,xK,EF,PF,B3,q3,E3,iB,SF,bB,xB,s3],icons:{selectOpen:"small-down",smallDown:"small-down",colorPicker:"color-picker",smallUp:"small-up",checkboxChecked:"small-up",checkboxIndeterminate:"checkbox-indeterminate",checkboxUnchecked:"checkbox-unchecked",radioButtonOn:"radio-button-on",radioButtonOff:"radio-button-off",smallLeft:"small-left",smallRight:"small-right"},apiFunctions:{getGridId:eH,destroy:zW,isDestroyed:JW,getGridOption:QW,setGridOption:ZW,updateGridOptions:M$,isModuleRegistered:$W},dependsOn:[CB,n2,cW,XX,n3,Z5,d3,HF,OF,t3,Y1,uK,iK,o3,gB,yB,jF,DB,dK]};function oQ(z){let{inputValue:J,allSuggestions:Q,hideIrrelevant:Z,maxSuggestions:$}=z,X=(Q??[]).map((G,U)=>({value:G,relevance:vF(J,G),idx:U}));if(X.sort((G,U)=>G.relevance-U.relevance),Z)X=X.filter((G)=>G.relevance0)X=X.slice(0,$);let Y=[],q=[];for(let G of X)Y.push(G.value),q.push(G.idx);return{values:Y,indices:q}}function vF(z,J){let Q=z.length,Z=J.length;if(Z===0)return Q?Q:0;let $=z.toLocaleLowerCase(),X=J.toLocaleLowerCase(),Y;if(Q>0){let H=X.indexOf($);if(H>=0)return H*0.01}if(z.length1&&E>1){let L=z[H-2],D=$[H-2],M=J[E-2],f=X[E-2];if(D===f){if(U++,L===M)U++}}if(H<_)U++;G[E]=q[E-1]}Y=q,q=G,G=Y}return q[Z]/(U+1)}var YX={AdvancedFilter:1,AiToolkit:1,AllEnterprise:1,BatchEdit:1,CellSelection:1,Clipboard:1,ColumnMenu:1,ColumnsToolPanel:1,ContextMenu:1,ExcelExport:1,FiltersToolPanel:1,Find:1,GridCharts:1,IntegratedCharts:1,GroupFilter:1,MasterDetail:1,Menu:1,MultiFilter:1,NewFiltersToolPanel:1,Pivot:1,RangeSelection:1,RichSelect:1,RowNumbers:1,RowGrouping:1,RowGroupingEdit:1,RowGroupingPanel:1,ServerSideRowModelApi:1,ServerSideRowModel:1,SetFilter:1,SideBar:1,Sparklines:1,StatusBar:1,Toolbar:1,TreeData:1,ViewportRowModel:1,Formula:1,Notes:1},jQ=["TextFilter","NumberFilter","BigIntFilter","DateFilter","SetFilter","MultiFilter","GroupFilter","CustomFilter"],IF={EditCore:["TextEditor","NumberEditor","DateEditor","CheckboxEditor","LargeTextEditor","SelectEditor","RichSelect","CustomEditor"],CheckboxCellRenderer:["AllCommunity"],CsrmHierarchy:["RowGrouping","Pivot","TreeData"],CsrmGroupStages:["RowGrouping","Pivot","TreeData"],ColumnFilter:jQ,ColumnGroupHeaderComp:["AllCommunity"],ColumnGroup:["AllCommunity"],ColumnHeaderComp:["AllCommunity"],ColumnMove:["AllCommunity"],ColumnResize:["AllCommunity"],CommunityCore:["AllCommunity"],CsrmSsrmSharedApi:["ClientSideRowModelApi","ServerSideRowModelApi"],RowModelSharedApi:["ClientSideRowModelApi","ServerSideRowModelApi"],EnterpriseCore:["AllEnterprise"],FilterCore:[...jQ,"QuickFilter","ExternalFilter","AdvancedFilter"],GroupCellRenderer:["RowGrouping","Pivot","TreeData","MasterDetail","ServerSideRowModel"],KeyboardNavigation:["AllCommunity"],LoadingCellRenderer:["ServerSideRowModel"],MenuCore:["ColumnMenu","ContextMenu"],MenuItem:["ColumnMenu","ContextMenu","MultiFilter","IntegratedCharts","ColumnsToolPanel"],Overlay:["AllCommunity"],PinnedColumn:["AllCommunity"],SharedAggregation:["RowGrouping","Pivot","TreeData","ServerSideRowModel"],SharedDragAndDrop:["AllCommunity"],SharedMasterDetail:["MasterDetail","ServerSideRowModel"],SharedMenu:[...jQ,"ColumnMenu","ContextMenu"],SharedPivot:["Pivot","ServerSideRowModel"],SharedRowGrouping:["RowGrouping","ServerSideRowModel"],SharedRowSelection:["RowSelection","ServerSideRowModel"],SkeletonCellRenderer:["ServerSideRowModel"],Sort:["AllCommunity"],SsrmInfiniteSharedApi:["InfiniteRowModel","ServerSideRowModelApi"],SharedTreeData:["TreeData","ServerSideRowModel"]},CF={InfiniteRowModel:"infinite",ClientSideRowModelApi:"clientSide",ClientSideRowModel:"clientSide",ServerSideRowModelApi:"serverSide",ServerSideRowModel:"serverSide",ViewportRowModel:"viewport"};function yF(z,J){let Q=[];for(let Z of Array.isArray(z)?z:[z]){let $=IF[Z];if($)for(let X of $){let Y=CF[X];if(!Y||Y===J)Q.push(X)}else Q.push(Z)}return Q}var qX=(z,J,Q)=>{if(Q)return`${["import { AgGridProvider, AgGridReact } from 'ag-grid-react';",...z].join(` +`)} + +const modules = [ ${J} ]; + +function App() { + return ( + + + + ); +}`;return`${z.join(` +`)} + +ModuleRegistry.registerModules([ ${J} ]);`},GX=(z)=>{let J=z!==void 0;return`No AG Grid modules are registered! It is recommended to start with all Community features via the AllCommunityModule: + +${qX([`import { ${J?"":"ModuleRegistry, "}AllCommunityModule } from 'ag-grid-community';`],"AllCommunityModule",J)} +`},bF=(z,J)=>{let Q=z.map((X)=>`import { ${K2(X)} } from '${YX[X]?"ag-grid-enterprise":"ag-grid-community"}';`);if(z.some((X)=>X==="IntegratedCharts"||X==="Sparklines"))Q.push("import { AgChartsEnterpriseModule } from 'ag-charts-enterprise';");let $=z.map((X)=>K2(X,!0)).join(", ");if(!J)Q.unshift("import { ModuleRegistry } from 'ag-grid-community';");return`${qX(Q,$,J)} + +For more info see: ${P1}/modules/`};function K2(z,J=!1){if(J&&(z==="IntegratedCharts"||z==="Sparklines"))return`${z}Module.with(AgChartsEnterpriseModule)`;return`${z}Module`}function xF(z,J){let Q=J.filter((X)=>X==="IntegratedCharts"||X==="Sparklines"),Z="";if(!globalThis?.agCharts&&Q.length>0)Z=`Unable to use ${z} as either the ag-charts-community or ag-charts-enterprise script needs to be included alongside ag-grid-enterprise. +`;else if(J.some((X)=>YX[X]))Z=Z+`Unable to use ${z} as that requires the ag-grid-enterprise script to be included. +`;return Z}function UX({moduleName:z,rowModelType:J}){return`To use the ${z}Module you must set the gridOption "rowModelType='${J}'"`}var OQ=({reasonOrId:z,moduleName:J,gridScoped:Q,gridId:Z,rowModelType:$,additionalText:X,isUmd:Y,usesAgGridProvider:q})=>{let G=yF(J,$),U=typeof z==="string"?z:hF[z];if(Y)return xF(U,G);let _=G.filter((B)=>B==="IntegratedCharts"||B==="Sparklines"),H=_.length>0?`${_.map((B)=>K2(B)).join()} must be initialised with an AG Charts module. One of 'AgChartsCommunityModule' / 'AgChartsEnterpriseModule'.`:"";return`${`Unable to use ${U} as ${G.length>1?"one of "+G.map((B)=>K2(B)).join(", "):K2(G[0])} is not registered${Q?" for gridId: "+Z:""}. ${H} Check if you have registered the module: +`} +${bF(G,q)}`+(X?` + +${X}`:"")},_8=(z)=>{return`${z} must be initialised with an AG Charts module. One of 'AgChartsCommunityModule' / 'AgChartsEnterpriseModule'. + +import { AgChartsEnterpriseModule } from 'ag-charts-enterprise'; +import { ModuleRegistry } from 'ag-grid-community'; +import { ${z} } from 'ag-grid-enterprise'; + +ModuleRegistry.registerModules([${z}.with(AgChartsEnterpriseModule)]); + `},wF=(z)=>`AG Grid: Unable to use the Clipboard API (navigator.clipboard.${z}()). The reason why it could not be used has been logged in the previous line. For this reason the grid has defaulted to using a workaround which doesn't perform as well. Either fix why Clipboard API is blocked, OR stop this message from appearing by setting grid property suppressClipboardApi=true (which will default the grid to using the workaround rather than the API.`,NF={1:()=>"`rowData` must be an array",2:({nodeId:z})=>`Duplicate node id '${z}' detected from getRowId callback, this could cause issues in your grid.`,3:()=>"Calling gridApi.resetRowHeights() makes no sense when using Auto Row Height.",4:({id:z})=>`Could not find row id=${z}, data item was not found for this id`,5:({data:z})=>["Could not find data item as object was not found.",z," Consider using getRowId to help the Grid find matching row data"],6:()=>"'groupHideOpenParents' only works when specifying specific columns for 'colDef.showRowGroup'",7:()=>"Pivoting is not supported with aligned grids as it may produce different columns in each grid.",8:({key:z})=>`Unknown key for navigation ${z}`,9:({variable:z})=>`No value for ${z?.cssName}. This usually means that the grid has been initialised before styles have been loaded. The default value of ${z?.defaultValue} will be used and updated when styles load.`,10:({eventType:z})=>`As of v33, the '${z}' event is deprecated. Use the global 'modelUpdated' event to determine when row children have changed.`,11:()=>"No gridOptions provided to createGrid",12:({colKey:z})=>["column ",z," not found"],13:()=>"Could not find rowIndex, this means tasks are being executed on a rowNode that has been removed from the grid.",14:({groupPrefix:z})=>`Row IDs cannot start with ${z}, this is a reserved prefix for AG Grid's row grouping feature.`,15:({expression:z})=>["value should be either a string or a function",z],16:({expression:z,params:J,e:Q})=>["Processing of the expression failed","Expression = ",z,"Params = ",J,"Exception = ",Q],17:()=>"you need either field or valueSetter set on colDef for editing to work",18:()=>"alignedGrids contains an undefined option.",19:()=>"alignedGrids - No api found on the linked grid.",20:()=>`You may want to configure via a callback to avoid setup race conditions: + "alignedGrids: () => [linkedGrid]"`,21:()=>"pivoting is not supported with aligned grids. You can only use one of these features at a time in a grid.",22:({key:z})=>`${z} is an initial property and cannot be updated.`,23:()=>"The return of `getRowHeight` cannot be zero. If the intention is to hide rows, use a filter instead.",24:()=>"row height must be a number if not using standard row model",25:({id:z})=>["The getRowId callback must return a string. The ID ",z," is being cast to a string."],26:({fnName:z,preDestroyLink:J})=>{return`Grid API function ${z}() cannot be called as the grid has been destroyed. + Either clear local references to the grid api, when it is destroyed, or check gridApi.isDestroyed() to avoid calling methods against a destroyed grid. + To run logic when the grid is about to be destroyed use the gridPreDestroy event. See: ${J}`},27:({fnName:z,module:J})=>`API function '${z}' not registered to module '${J}'`,28:()=>"setRowCount cannot be used while using row grouping.",29:()=>"tried to call sizeColumnsToFit() but the grid is coming back with zero width, maybe the grid is not visible yet on the screen?",30:({toIndex:z})=>["tried to insert columns in invalid location, toIndex = ",z,"remember that you should not count the moving columns when calculating the new index"],31:()=>"infinite loop in resizeColumnSets",32:()=>"applyColumnState() - the state attribute should be an array, however an array was not found. Please provide an array of items (one for each col you want to change) for state.",33:()=>"stateItem.aggFunc must be a string. if using your own aggregation functions, register the functions first before using them in get/set state. This is because it is intended for the column state to be stored and retrieved as simple JSON.",34:({key:z})=>`the column type '${z}' is a default column type and cannot be overridden.`,35:()=>"Column type definitions 'columnTypes' with a 'type' attribute are not supported because a column type cannot refer to another column type. Only column definitions 'columnDefs' can use the 'type' attribute to refer to a column type.",36:({t:z})=>"colDef.type '"+z+"' does not correspond to defined gridOptions.columnTypes",37:()=>"Changing the column pinning status is not allowed with domLayout='print'",38:({iconName:z})=>`provided icon '${z}' needs to be a string or a function`,39:()=>"Applying column order broke a group where columns should be married together. Applying new order has been discarded.",40:({e:z,method:J})=>`${z} +${wF(J)}`,41:()=>"Browser did not allow document.execCommand('copy'). Ensure 'api.copySelectedRowsToClipboard() is invoked via a user event, i.e. button click, otherwise the browser will prevent it for security reasons.",42:()=>"Browser does not support document.execCommand('copy') for clipboard operations",43:({iconName:z})=>`As of v33, icon '${z}' is deprecated. Use the icon CSS name instead.`,44:()=>'Data type definition hierarchies (via the "extendsDataType" property) cannot contain circular references.',45:({parentCellDataType:z})=>`The data type definition ${z} does not exist.`,46:()=>'The "baseDataType" property of a data type definition must match that of its parent.',47:({cellDataType:z})=>`Missing data type definition - "${z}"`,48:({property:z,inferred:J,colId:Q})=>{let Z=J?" (inferred)":"",$=Q?` for column "${Q}"`:"";return`Cell data type is "object"${Z} but no Value ${z} has been provided${$}. Please either provide an object data type definition with a Value ${z}, or set: + - "colDef.value${z}"${J&&z==="Parser"?` + - "colDef.cellDataType = 'object'"`:""}`},49:({methodName:z})=>`Framework component is missing the method ${z}()`,50:({compName:z})=>`Could not find component ${z}, did you forget to configure this component?`,51:()=>"Export cancelled. Export is not allowed as per your configuration.",52:()=>"There is no `window` associated with the current `document`",53:()=>"unknown value type during csv conversion",54:()=>"Could not find document body, it is needed for drag and drop and context menu.",55:()=>"addRowDropZone - A container target needs to be provided",56:()=>"addRowDropZone - target already exists in the list of DropZones. Use `removeRowDropZone` before adding it again.",57:()=>"unable to show popup filter, filter instantiation failed",58:()=>"no values found for select cellEditor",59:()=>"cannot select pinned rows",60:()=>"cannot select node until it has finished loading",61:()=>"since version v32.2.0, rowNode.isFullWidthCell() has been deprecated. Instead check `rowNode.detail` followed by the user provided `isFullWidthRow` grid option.",62:({colId:z})=>`setFilterModel() - no column found for colId: ${z}`,63:({colId:z})=>`setFilterModel() - unable to fully apply model, filtering disabled for colId: ${z}`,64:({colId:z})=>`setFilterModel() - unable to fully apply model, unable to create filter for colId: ${z}`,65:()=>"filter missing setModel method, which is needed for setFilterModel",66:()=>"filter API missing getModel method, which is needed for getFilterModel",67:()=>"Filter is missing isFilterActive() method",68:()=>"Column Filter API methods have been disabled as Advanced Filters are enabled.",69:({guiFromFilter:z})=>`getGui method from filter returned ${z}; it should be a DOM element.`,70:({newFilter:z})=>`Grid option quickFilterText only supports string inputs, received: ${typeof z}`,71:()=>"debounceMs is ignored when apply button is present",72:({keys:z})=>["ignoring FilterOptionDef as it doesn't contain one of ",z],73:()=>"invalid FilterOptionDef supplied as it doesn't contain a 'displayKey'",74:()=>"no filter options for filter",75:()=>"Unknown button type specified",76:({filterModelType:z})=>['Unexpected type of filter "',z,'", it looks like the filter was configured with incorrect Filter Options'],77:()=>"Filter model is missing 'conditions'",78:()=>'Filter Model contains more conditions than "filterParams.maxNumConditions". Additional conditions have been ignored.',79:()=>'"filterParams.maxNumConditions" must be greater than or equal to zero.',80:()=>'"filterParams.numAlwaysVisibleConditions" must be greater than or equal to zero.',81:()=>'"filterParams.numAlwaysVisibleConditions" cannot be greater than "filterParams.maxNumConditions".',82:({param:z})=>`DateFilter ${z} is not a number`,83:()=>"DateFilter minValidYear should be <= maxValidYear",84:()=>"DateFilter minValidDate should be <= maxValidDate",85:()=>"DateFilter should not have both minValidDate and minValidYear parameters set at the same time! minValidYear will be ignored.",86:()=>"DateFilter should not have both maxValidDate and maxValidYear parameters set at the same time! maxValidYear will be ignored.",87:()=>"DateFilter parameter minValidDate should always be lower than or equal to parameter maxValidDate.",88:({index:z})=>`Invalid row index for ensureIndexVisible: ${z}`,89:()=>"A template was provided for Header Group Comp - templates are only supported for Header Comps (not groups)",90:()=>"datasource is missing getRows method",91:()=>"Filter is missing method doesFilterPass",92:()=>"AnimationFrameService called but animation frames are off",93:()=>"cannot add multiple ranges when `cellSelection.suppressMultiRanges = true`",94:({paginationPageSizeOption:z,pageSizeSet:J,pageSizesSet:Q,pageSizeOptions:Z})=>`'paginationPageSize=${z}'${J?"":" (default value)"}, but ${z} is not included in${Q?"":" the default"} paginationPageSizeSelector=[${Z?.join(", ")}].`,95:({paginationPageSizeOption:z,paginationPageSizeSelector:J})=>`Either set '${J}' to an array that includes ${z} or to 'false' to disable the page size selector.`,96:({id:z,data:J})=>["Duplicate ID",z,"found for pinned row with data",J,"When `getRowId` is defined, it must return unique IDs for all pinned rows. Use the `rowPinned` parameter."],97:({colId:z})=>`cellEditor for column ${z} is missing getGui() method`,98:()=>"popup cellEditor does not work with fullRowEdit - you cannot use them both - either turn off fullRowEdit, or stop using popup editors.",99:()=>"Since v32, `api.hideOverlay()` does not hide the loading overlay when `loading=true`. Set `loading=false` instead.",101:({propertyName:z,componentName:J,agGridDefaults:Q,jsComps:Z})=>{let $=[],X=[...Object.keys(Q??[]).filter((q)=>!["agCellEditor","agGroupRowRenderer","agSortIndicator"].includes(q)),...Object.keys(Z??[]).filter((q)=>!!Z[q])],Y=oQ({inputValue:J,allSuggestions:X,hideIrrelevant:!0,maxSuggestions:4}).values;if($.push(`Could not find '${J}' component. It was configured as "${z}: '${J}'" but it wasn't found in the list of registered components. +`),Y.length>0)$.push(` Did you mean: [${Y.slice(0,3)}]? +`);return $.push("If using a custom component check it has been registered correctly."),$},102:()=>"selectAll: 'filtered' only works when gridOptions.rowModelType='clientSide'",103:()=>"Invalid selection state. When using client-side row model, the state must conform to `string[]`.",104:({value:z,param:J})=>`Numeric value ${z} passed to ${J} param will be interpreted as ${z} seconds. If this is intentional use "${z}s" to silence this warning.`,105:({e:z})=>["chart rendering failed",z],106:()=>`Theming API and Legacy Themes are both used in the same page. A Theming API theme has been provided to the 'theme' grid option, but the file (ag-grid.css) is also included and will cause styling issues. Remove ag-grid.css from the page. See the migration guide: ${P1}/theming-migration/`,107:({key:z,value:J})=>`Invalid value for theme param ${z} - ${J}`,108:({e:z})=>["chart update failed",z],109:({inputValue:z,allSuggestions:J})=>{let Q=oQ({inputValue:z,allSuggestions:J,hideIrrelevant:!0,maxSuggestions:4}).values;return[`Could not find '${z}' aggregate function. It was configured as "aggFunc: '${z}'" but it wasn't found in the list of registered aggregations.`,Q.length>0?` Did you mean: [${Q.slice(0,3)}]?`:"","If using a custom aggregation function check it has been registered correctly."].join(` +`)},110:()=>"groupHideOpenParents only works when specifying specific columns for colDef.showRowGroup",111:()=>"Invalid selection state. When `groupSelects` is enabled, the state must conform to `IServerSideGroupSelectionState`.",113:()=>"Set Filter cannot initialise because you are using a row model that does not contain all rows in the browser. Either use a different filter type, or configure Set Filter such that you provide it with values",114:({component:z})=>`Could not find component with name of ${z}. Is it in Vue.components?`,116:()=>"Invalid selection state. The state must conform to `IServerSideSelectionState`.",117:()=>"selectAll must be of boolean type.",118:()=>"Infinite scrolling must be enabled in order to set the row count.",119:()=>"Unable to instantiate filter",120:()=>"MultiFloatingFilterComp expects MultiFilter as its parent",121:()=>"a column you are grouping or pivoting by has objects as values. If you want to group by complex objects then either a) use a colDef.keyCreator (see AG Grid docs) or b) to toString() on the object to return a key",122:()=>"could not find the document, document is empty",123:()=>"Advanced Filter is only supported with the Client-Side Row Model or Server-Side Row Model.",124:()=>"No active charts to update.",125:({chartId:z})=>`Unable to update chart. No active chart found with ID: ${z}.`,126:()=>"unable to restore chart as no chart model is provided",127:({allRange:z})=>`unable to create chart as ${z?"there are no columns in the grid":"no range is selected"}.`,128:({feature:z})=>`${z} is only available if using 'multiRow' selection mode.`,129:({feature:z,rowModel:J})=>`${z} is only available if using 'clientSide' or 'serverSide' rowModelType, you are using ${J}.`,130:()=>'cannot multi select unless selection mode is "multiRow"',132:()=>"Row selection features are not available unless `rowSelection` is enabled.",133:({iconName:z})=>`icon '${z}' function should return back a string or a dom object`,134:({iconName:z})=>`Did not find icon '${z}'`,135:()=>"Data type of the new value does not match the cell data type of the column",136:()=>"Unable to update chart as the 'type' is missing. It must be either 'rangeChartUpdate', 'pivotChartUpdate', or 'crossFilterChartUpdate'.",137:({type:z,currentChartType:J})=>`Unable to update chart as a '${z}' update type is not permitted on a ${J}.`,138:({chartType:z})=>`invalid chart type supplied: ${z}`,139:({customThemeName:z})=>`a custom chart theme with the name ${z} has been supplied but not added to the 'chartThemes' list`,140:({name:z})=>`no stock theme exists with the name '${z}' and no custom chart theme with that name was supplied to 'customChartThemes'`,141:()=>"cross filtering with row grouping is not supported.",142:()=>"cross filtering is only supported in the client side row model.",143:({panel:z})=>`'${z}' is not a valid Chart Tool Panel name`,144:({type:z})=>`Invalid charts data panel group name supplied: '${z}'`,145:({group:z})=>`As of v32, only one charts customize panel group can be expanded at a time. '${z}' will not be expanded.`,146:({comp:z})=>`Unable to instantiate component '${z}' as its module hasn't been loaded. Add 'ValidationModule' to see which module is required.`,147:({group:z})=>`Invalid charts customize panel group name supplied: '${z}'`,148:({group:z})=>`invalid chartGroupsDef config '${z}'`,149:({group:z,chartType:J})=>`invalid chartGroupsDef config '${z}.${J}'`,150:()=>"'seriesChartTypes' are required when the 'customCombo' chart type is specified.",151:({chartType:z})=>`invalid chartType '${z}' supplied in 'seriesChartTypes', converting to 'line' instead.`,152:({colId:z})=>`no 'seriesChartType' found for colId = '${z}', defaulting to 'line'.`,153:({chartDataType:z})=>`unexpected chartDataType value '${z}' supplied, instead use 'category', 'series' or 'excluded'`,154:({colId:z})=>`cross filtering requires a 'agSetColumnFilter' or 'agMultiColumnFilter' to be defined on the column with id: ${z}`,155:({option:z})=>`'${z}' is not a valid Chart Toolbar Option`,156:({panel:z})=>`Invalid panel in chartToolPanelsDef.panels: '${z}'`,157:({unrecognisedGroupIds:z})=>["unable to find group(s) for supplied groupIds:",z],158:()=>"can not expand a column item that does not represent a column group header",159:()=>"Invalid params supplied to createExcelFileForExcel() - `ExcelExportParams.data` is empty.",160:()=>"Export cancelled. Export is not allowed as per your configuration.",161:()=>"The Excel Exporter is currently on Multi Sheet mode. End that operation by calling 'api.getMultipleSheetAsExcel()' or 'api.exportMultipleSheetsAsExcel()'",162:({id:z,dataType:J})=>`Unrecognized data type for excel export [${z}.dataType=${J}]`,163:({featureName:z})=>`Excel table export does not work with ${z}. The exported Excel file will not contain any Excel tables. + Please turn off ${z} to enable Excel table exports.`,164:()=>"Unable to add data table to Excel sheet: A table already exists.",165:()=>"Unable to add data table to Excel sheet: Missing required parameters.",166:({unrecognisedGroupIds:z})=>["unable to find groups for these supplied groupIds:",z],167:({unrecognisedColIds:z})=>["unable to find columns for these supplied colIds:",z],168:()=>"detailCellRendererParams.template should be function or string",169:()=>'Reference to eDetailGrid was missing from the details template. Please add data-ref="eDetailGrid" to the template.',170:({providedStrategy:z})=>`invalid cellRendererParams.refreshStrategy = ${z} supplied, defaulting to refreshStrategy = 'rows'.`,171:()=>"could not find detail grid options for master detail, please set gridOptions.detailCellRendererParams.detailGridOptions",172:()=>"could not find getDetailRowData for master / detail, please set gridOptions.detailCellRendererParams.getDetailRowData",173:({group:z})=>`invalid chartGroupsDef config '${z}'`,174:({group:z,chartType:J})=>`invalid chartGroupsDef config '${z}.${J}'`,175:({menuTabName:z,itemsToConsider:J})=>[`Trying to render an invalid menu item '${z}'. Check that your 'menuTabs' contains one of `,J],176:({key:z})=>`unknown menu item type ${z}`,177:()=>"valid values for cellSelection.handle.direction are 'x', 'y' and 'xy'. Default to 'xy'.",178:({colId:z})=>`column ${z} is not visible`,179:()=>"totalValueGetter should be either a function or a string (expression)",180:()=>"agRichSelectCellEditor requires cellEditorParams.values to be set",181:()=>"agRichSelectCellEditor cannot have `multiSelect` and `allowTyping` set to `true`. AllowTyping has been turned off.",182:()=>'you cannot mix groupDisplayType = "multipleColumns" with treeData, only one column can be used to display groups when doing tree data',183:()=>"Group Column Filter only works on group columns. Please use a different filter.",184:({parentGroupData:z,childNodeData:J})=>["duplicate group keys for row data, keys should be unique",[z,J]],185:({data:z})=>["getDataPath() should not return an empty path",[z]],186:({rowId:z,rowData:J,duplicateRowsData:Q})=>["duplicate group keys for row data, keys should be unique",z,J,...Q??[]],187:({rowId:z,firstData:J,secondData:Q})=>[`Duplicate node id ${z}. Row IDs are provided via the getRowId() callback. Please modify the getRowId() callback code to provide unique row id values.`,"first instance",J,"second instance",Q],188:(z)=>`getRowId callback must be provided for Server Side Row Model ${z?.feature||"selection"} to work correctly.`,189:({startRow:z})=>`invalid value ${z} for startRow, the value should be >= 0`,190:({rowGroupId:z,data:J})=>["null and undefined values are not allowed for server side row model keys",z?`column = ${z}`:"","data is ",J],194:({method:z})=>`calling gridApi.${z}() is only possible when using rowModelType=\`clientSide\`.`,195:({justCurrentPage:z})=>`selecting just ${z?"current page":"filtered"} only works when gridOptions.rowModelType='clientSide'`,196:({key:z})=>`Provided ids must be of string type. Invalid id provided: ${z}`,197:()=>"`toggledNodes` must be an array of string ids.",199:()=>"getSelectedNodes and getSelectedRows functions cannot be used with select all functionality with the server-side row model. Use `api.getServerSideSelectionState()` instead.",200:OQ,201:({rowModelType:z})=>`Could not find row model for rowModelType = ${z}`,202:()=>"`getSelectedNodes` and `getSelectedRows` functions cannot be used with `groupSelectsChildren` and the server-side row model. Use `api.getServerSideSelectionState()` instead.",203:()=>"Server Side Row Model does not support Dynamic Row Height and Cache Purging. Either a) remove getRowHeight() callback or b) remove maxBlocksInCache property. Purging has been disabled.",204:()=>"Server Side Row Model does not support Auto Row Height and Cache Purging. Either a) remove colDef.autoHeight or b) remove maxBlocksInCache property. Purging has been disabled.",205:({duplicateIdText:z})=>`Unable to display rows as duplicate row ids (${z}) were returned by the getRowId callback. Please modify the getRowId callback to provide unique ids.`,206:()=>"getRowId callback must be implemented for transactions to work. Transaction was ignored.",207:()=>'The Set Filter Parameter "defaultToNothingSelected" value was ignored because it does not work when "excelMode" is used.',208:()=>"Set Filter Value Formatter must return string values. Please ensure the Set Filter Value Formatter returns string values for complex objects.",209:()=>`Set Filter Key Creator is returning null for provided values and provided values are primitives. Please provide complex objects. See ${P1}/filter-set-filter-list/#filter-value-types`,210:()=>"Set Filter has a Key Creator, but provided values are primitives. Did you mean to provide complex objects?",211:()=>"property treeList=true for Set Filter params, but you did not provide a treeListPathGetter or values of type Date.",212:()=>"please review all your toolPanel components, it seems like at least one of them doesn't have an id",213:()=>"Advanced Filter does not work with Filters Tool Panel. Filters Tool Panel has been disabled.",214:({key:z})=>`unable to lookup Tool Panel as invalid key supplied: ${z}`,215:({key:z,defaultByKey:J})=>`the key ${z} is not a valid key for specifying a tool panel, valid keys are: ${Object.keys(J??{}).join(",")}`,216:({name:z})=>`Missing component for '${z}'`,217:({invalidColIds:z})=>["unable to find grid columns for the supplied colDef(s):",z],218:({property:z,defaultOffset:J})=>`${z} must be a number, the value you provided is not a valid number. Using the default of ${J}px.`,219:({property:z})=>`Property ${z} does not exist on the target object.`,220:({lineDash:z})=>`'${z}' is not a valid 'lineDash' option.`,221:()=>"agAggregationComponent should only be used with the client and server side row model.",222:()=>"agFilteredRowCountComponent should only be used with the client side row model.",223:()=>"agSelectedRowCountComponent should only be used with the client and server side row model.",224:()=>"agTotalAndFilteredRowCountComponent should only be used with the client side row model.",225:()=>"agTotalRowCountComponent should only be used with the client side row model.",226:()=>"viewport is missing init method.",227:()=>"menu item icon must be DOM node or string",228:({menuItemOrString:z})=>`unrecognised menu item ${z}`,230:()=>"detailCellRendererParams.template is not supported by AG Grid React. To change the template, provide a Custom Detail Cell Renderer. See https://www.ag-grid.com/react-data-grid/master-detail-custom-detail/",231:()=>"As of v32, using custom components with `reactiveCustomComponents = false` is deprecated.",232:()=>"Using both rowData and v-model. rowData will be ignored.",233:({methodName:z})=>`Framework component is missing the method ${z}()`,234:()=>'Group Column Filter does not work with the colDef property "field". This property will be ignored.',235:()=>'Group Column Filter does not work with the colDef property "filterValueGetter". This property will be ignored.',236:()=>'Group Column Filter does not work with the colDef property "filterParams". This property will be ignored.',237:()=>"Group Column Filter does not work with Tree Data enabled. Please disable Tree Data, or use a different filter.",238:()=>"setRowCount can only accept a positive row count.",239:()=>'Theming API and CSS File Themes are both used in the same page. In v33 we released the Theming API as the new default method of styling the grid. See the migration docs https://www.ag-grid.com/react-data-grid/theming-migration/. Because no value was provided to the `theme` grid option it defaulted to themeQuartz. But the file (ag-grid.css) is also included and will cause styling issues. Either pass the string "legacy" to the theme grid option to use v32 style themes, or remove ag-grid.css from the page to use Theming API.',240:({theme:z})=>`theme grid option must be a Theming API theme object or the string "legacy", received: ${z}`,243:()=>"Failed to deserialize state - each provided state object must be an object.",244:()=>"Failed to deserialize state - `selectAllChildren` must be a boolean value or undefined.",245:()=>"Failed to deserialize state - `toggledNodes` must be an array.",246:()=>"Failed to deserialize state - Every `toggledNode` requires an associated string id.",247:()=>`Row selection state could not be parsed due to invalid data. Ensure all child state has toggledNodes or does not conform with the parent rule. +Please rebuild the selection state and reapply it.`,248:()=>"SetFloatingFilter expects SetFilter as its parent",249:()=>"Must supply a Value Formatter in Set Filter params when using a Key Creator",250:()=>"Must supply a Key Creator in Set Filter params when `treeList = true` on a group column, and Tree Data or Row Grouping is enabled.",251:({chartType:z})=>`AG Grid: Unable to create chart as an invalid chartType = '${z}' was supplied.`,252:()=>`cannot get grid to draw rows when it is in the middle of drawing rows. +Your code probably called a grid API method while the grid was in the render stage. +To overcome this, put the API call into a timeout, e.g. instead of api.redrawRows(), call setTimeout(function() { api.redrawRows(); }, 0). +To see what part of your code that caused the refresh check this stacktrace.`,253:({version:z})=>["Illegal version string: ",z],254:()=>"Cannot create chart: no chart themes available.",255:({point:z})=>`Lone surrogate U+${z?.toString(16).toUpperCase()} is not a scalar value`,256:()=>"Unable to initialise. See validation error, or load ValidationModule if missing.",257:()=>_8("IntegratedChartsModule"),258:()=>_8("SparklinesModule"),259:({part:z})=>`the argument to theme.withPart must be a Theming API part object, received: ${z}`,260:({propName:z,compName:J,gridScoped:Q,gridId:Z,rowModelType:$,usesAgGridProvider:X})=>OQ({reasonOrId:`AG Grid '${z}' component: ${J}`,moduleName:C1[J],gridId:Z,gridScoped:Q,rowModelType:$,usesAgGridProvider:X}),261:()=>"As of v33, `column.isHovered()` is deprecated. Use `api.isColumnHovered(column)` instead.",262:()=>'As of v33, icon key "smallDown" is deprecated. Use "advancedFilterBuilderSelect" for Advanced Filter Builder dropdown, "selectOpen" for Select cell editor and dropdowns (e.g. Integrated Charts menu), "richSelectOpen" for Rich Select cell editor.',263:()=>'As of v33, icon key "smallLeft" is deprecated. Use "panelDelimiterRtl" for Row Group Panel / Pivot Panel, "subMenuOpenRtl" for sub-menus.',264:()=>'As of v33, icon key "smallRight" is deprecated. Use "panelDelimiter" for Row Group Panel / Pivot Panel, "subMenuOpen" for sub-menus.',265:({colId:z})=>`Unable to infer chart data type for column '${z}' if first data entry is null. Please specify "chartDataType", or a "cellDataType" in the column definition. For more information, see ${P1}/integrated-charts-range-chart#coldefchartdatatype .`,266:()=>'As of v33.1, using "keyCreator" with the Rich Select Editor has been deprecated. It now requires the "formatValue" callback to convert complex data to strings.',267:()=>"Detail grids can not use a different theme to the master grid, the `theme` detail grid option will be ignored.",268:()=>"Transactions aren't supported with tree data when using treeDataChildrenField",269:()=>"When `masterSelects: 'detail'`, detail grids must be configured with multi-row selection",270:({id:z,parentId:J})=>`Cycle detected for row with id='${z}' and parent id='${J}'. Resetting the parent for row with id='${z}' and showing it as a root-level node.`,271:({id:z,parentId:J})=>`Parent row not found for row with id='${z}' and parent id='${J}'. Showing row with id='${z}' as a root-level node.`,272:()=>GX(),273:({providedId:z,usedId:J})=>`Provided column id '${z}' was already in use, ensure all column and group ids are unique. Using '${J}' instead.`,274:({prop:z})=>{let J=`Since v33, ${z} has been deprecated.`;switch(z){case"maxComponentCreationTimeMs":J+=" This property is no longer required and so will be removed in a future version.";break;case"setGridApi":J+=" This method is not called by AG Grid. To access the GridApi see: https://ag-grid.com/react-data-grid/grid-interface/#grid-api ";break;case"children":J+=" For multiple versions AgGridReact does not support children.";break}return J},275:UX,276:()=>"Row Numbers Row Resizer cannot be used when Grid Columns have `autoHeight` enabled.",277:({colId:z})=>`'enableFilterHandlers' is set to true, but column '${z}' does not have 'filter.doesFilterPass' or 'filter.handler' set.`,278:({colId:z})=>`Unable to create filter handler for column '${z}'`,279:(z)=>{},280:({colId:z})=>`'name' must be provided for custom filter components for column '${z}`,281:({colId:z})=>`Filter for column '${z}' does not have 'filterParams.buttons', but the new Filters Tool Panel has buttons configured. Either configure buttons for the filter, or disable buttons on the Filters Tool Panel.`,282:()=>"New filter tool panel requires `enableFilterHandlers: true`.",283:()=>"As of v34, use the same method on the filter handler (`api.getColumnFilterHandler(colKey)`) instead.",284:()=>"As of v34, filters are active when they have a model. Use `api.getColumnFilterModel()` instead.",285:()=>"As of v34, use (`api.getColumnFilterModel()`) instead.",286:()=>"As of v34, use (`api.setColumnFilterModel()`) instead.",287:()=>"`api.doFilterAction()` requires `enableFilterHandlers = true",288:()=>"`api.getColumnFilterModel(key, true)` requires `enableFilterHandlers = true",289:({rowModelType:z})=>`Row Model '${z}' is not supported with Batch Editing`,290:({rowIndex:z,rowPinned:J})=>`Row with index '${z}' and pinned state '${J}' not found`,291:()=>"License Key being set multiple times with different values. This can result in an incorrect license key being used,",292:({colId:z})=>`The Multi Filter for column '${z}' has buttons configured against the child filters. When 'enableFilterHandlers=true', buttons must instead be provided against the parent Multi Filter params. The child filter buttons will be ignored.`,293:()=>"The grid was initialised detached from the DOM and was then inserted into a Shadow Root. Theme styles are probably broken. Pass the themeStyleContainer grid option to let the grid know where in the document to insert theme CSS.",294:()=>"When using the `agRichSelectCellEditor` setting `filterListAsync = true` requires `allowTyping = true` and the `values()` callback must return a Promise of filtered values.",295:({blockedService:z})=>`colDef.allowFormula is not supported with ${z}. Formulas has been turned off.`,296:()=>"Since v35, `api.hideOverlay()` does not hide the overlay when `activeOverlay` is set. Set `activeOverlay=null` instead.",297:()=>'`api.hideOverlay()` does not hide the no matching rows overlay as it is only controlled by grid state. Set `suppressOverlays=["noMatchingRows"] to not show it.',298:()=>"Columns Tool Panel 'buttons' requires 'apply' to enable Deferred Updates.",301:({key:z})=>`Toolbar item '${z}' is missing the 'toolbarItem' property and will not be rendered.`,302:({itemName:z,moduleName:J,gridScoped:Q,gridId:Z,rowModelType:$})=>OQ({reasonOrId:`Toolbar item '${z}'`,moduleName:J,gridId:Z,gridScoped:Q,rowModelType:$,additionalText:"The item will not be rendered."}),303:({key:z})=>`Multiple toolbar items share the explicit key '${z}'. Only the first item is rendered.`};function gF(z,J){let Q=NF[z];if(!Q)return[`Missing error text for error id ${z}!`];let Z=Q(J),X=` +See ${_9(z,J)}`;return Array.isArray(Z)?Z.concat(X):[Z,X]}var hF={1:"Charting Aggregation",2:"pivotResultFields",3:"setTooltip"},uF=class{constructor(z="javascript"){this.frameworkName=z,this.renderingEngine="vanilla",this.batchFrameworkComps=!1,this.usesAgGridProvider=void 0,this.wrapIncoming=(J)=>J(),this.wrapOutgoing=(J)=>J(),this.baseDocLink=`${z9}/${this.frameworkName}-data-grid`,zU(this.baseDocLink)}frameworkComponent(z){return null}isFrameworkComponent(z){return!1}getDocLink(z){return this.baseDocLink+(z?"/"+z:"")}},H8=new WeakMap,W8=new WeakMap;function fJ(z,J,Q){if(!J)return r(11),{};let Z=Q,$;if(!Z?.setThemeOnGridDiv){let Y=z0({tag:"div"});Y.style.height="100%",z.appendChild(Y),z=Y,$=()=>z.remove()}return new cF().create(z,J,(Y)=>{let q=new lH(z);Y.createBean(q)},void 0,Q,$)}var mF=1,cF=class{create(z,J,Q,Z,$,X){let Y=fZ.applyGlobalGridOptions(J),q=Y.gridId??String(mF++),G=this.getRegisteredModules($,q,Y.rowModelType),U=this.createBeansList(Y.rowModelType,G,q,$?.frameworkOverrides?.usesAgGridProvider),_=this.createProvidedBeans(z,Y,$);if(!U)return;let B=new T_({providedBeanInstances:_,beanClasses:U,id:q,beanInitComparator:C_,beanDestroyComparator:y_,derivedBeans:[v_],destroyCallback:()=>{W8.delete(E),H8.delete(z),sG(q),X?.()}});this.registerModuleFeatures(B,G),Q(B),B.getBean("syncSvc").start(),Z?.(B);let E=B.getBean("gridApi");return H8.set(z,E),W8.set(E,z),E}getRegisteredModules(z,J,Q){return k2(TF,void 0,!0),z?.modules?.forEach((Z)=>k2(Z,J)),lG(J,B8(Q))}registerModuleFeatures(z,J){let Q=z.getBean("registry"),Z=z.getBean("apiFunctionSvc");for(let $ of J){Q.registerModule($);let X=$.apiFunctions;if(X){let Y=Object.keys(X);for(let q of Y)Z?.addFunction(q,X[q])}}}createProvidedBeans(z,J,Q){let Z=Q?Q.frameworkOverrides:null;if(d(Z))Z=new uF;let $={gridOptions:J,eGridDiv:z,eRootDiv:z,globalListener:Q?Q.globalListener:null,globalSyncListener:Q?Q.globalSyncListener:null,frameworkOverrides:Z,withinStudio:Q?.withinStudio};if(Q?.providedBeanInstances)Object.assign($,Q.providedBeanInstances);return $}createBeansList(z,J,Q,Z){let $={clientSide:"ClientSideRowModel",infinite:"InfiniteRowModel",serverSide:"ServerSideRowModel",viewport:"ViewportRowModel"},X=B8(z),Y=$[X];if(!Y){G2(201,{rowModelType:X},`Unknown rowModelType ${X}.`);return}if(!oG()){G2(272,void 0,GX(Z));return}if(!z){let G=Object.entries($).filter(([U,_])=>yQ(_,Q,U));if(G.length==1){let[U,_]=G[0];if(U!==X){let H={moduleName:_,rowModelType:U};G2(275,H,UX(H));return}}}if(!yQ(Y,Q,X)){let G=VZ(),U=`rowModelType = '${X}'`,_=G?`Unable to use ${U} as that requires the ag-grid-enterprise script to be included. +`:`Missing module ${Y}Module for rowModelType ${X}.`;G2(200,{reasonOrId:U,moduleName:Y,gridScoped:SZ(),gridId:Q,rowModelType:X,isUmd:G},_);return}let q=new Set;for(let G of J)for(let U of G.beans??[])q.add(U);return Array.from(q)}};function B8(z){return z??"clientSide"}function iF(z,J,Q="auto"){z.frameworkOverrides.wrapIncoming(()=>z.ctrlsSvc.getScrollFeature().ensureColumnVisible(J,Q),"ensureVisible")}function pF(z,J,Q){z.frameworkOverrides.wrapIncoming(()=>z.ctrlsSvc.getScrollFeature().ensureIndexVisible(J,Q),"ensureVisible")}var nF=class extends S{constructor(z){super();this.rootNode=z,this.nextId=0,this.allNodesMap={},E8(z)}getRowNode(z){return this.allNodesMap[z]}setNewRowData(z){this.dispatchRowDataUpdateStarted(z),this.destroyAllNodes();let J=E8(this.rootNode),Q=Array(z.length);J._leafs=Q;let Z=0,$=this.beans.groupStage?.getNestedDataGetter(),X=$?new Set:null,Y=(q,G)=>{let U=q.level+1;for(let _=0,H=G.length;_{if(!H&&H!==void 0){let M=L.sourceRowIndex;H=M<=W,W=M}if(L.data!==D){if(L.updateData(D),!Y.has(L))q.add(L);if(!L.selectable&&L.isSelected())U.push(L)}},K=(L,D,M)=>{for(let f=0,A=D.length;f0;if(F){let L=Q._leafs??(Q._leafs=[]);if(H===void 0)lF(L,G,X);else if(sF(L,G))X.reordered=!0}if(F||B||q.size)z.rowDataUpdated=!0,this.deselect(U)}deleteUnusedNodes(z,{removals:J},Q,Z){let $=this.rootNode._leafs;for(let X=0,Y=$.length;X0}updateRowData(z,J,Q){if(this.dispatchRowDataUpdateStarted(z.add),this.beans.groupStage?.getNestedDataGetter())return V(268),{remove:[],update:[],add:[]};let Z=[],$=wQ(this.gos),X=this.executeRemove($,z,J,Z,Q),Y=this.executeUpdate($,z,J,Z),q=this.executeAdd(z,J);return this.deselect(Z),{remove:X,update:Y,add:q}}executeRemove(z,{remove:J},{adds:Q,updates:Z,removals:$},X,Y){let q=this.rootNode._leafs,G=q?.length,U=J?.length;if(!U||!G)return[];let _=0,H=G,W=0,B=Array(U);for(let E=0;EW)W=F;if(B[_++]=K,!this.destroyNode(K,Y))continue;if(K.isSelected())X.push(K);if(!Q.delete(K))Z.delete(K),$.push(K)}if(B.length=_,_)tF(q,H,W);return B}executeUpdate(z,{update:J},{adds:Q,updates:Z},$){let X=J?.length;if(!X)return[];let Y=Array(X),q=0;for(let G=0;G=G;--H){let B=Z[H];B.sourceRowIndex=W,Z[W--]=B}J.reordered=!0}Z.length=q;let U=Array(Y),_=J.adds;for(let H=0;H=Q||Number.isNaN(J))return Q;J=Math.ceil(J);let Z=this.gos;if(J>0&&Z.get("treeData")&&Z.get("getDataPath"))J=dF(z,J);return J}},dF=(z,J)=>{for(let Q=0,Z=z.length;Q{if(z.group=!0,z.level=-1,z._expanded=!0,z.id=IZ,z._leafs?.length!==0)z._leafs=[];let J=[],Q=[],Z=[],$=[];z.childrenAfterGroup=J,z.childrenAfterSort=Q,z.childrenAfterAggFilter=Z,z.childrenAfterFilter=$;let X=z.sibling;if(X)X.childrenAfterGroup=J,X.childrenAfterSort=Q,X.childrenAfterAggFilter=Z,X.childrenAfterFilter=$,X.childrenMapped=z.childrenMapped;return z.updateHasChildren(),z},rF=(z,J)=>{if(z)for(let Q=0,Z=z.length;Q{J=Math.max(0,J);for(let Z=J,$=z.length;Z<$;++Z){let X=z[Z];if(Z<=Q&&X.destroyed)continue;X.sourceRowIndex=J,z[J++]=X}z.length=J},sF=(z,J)=>{let Q=J.size;z.length=Q;let Z=0,$=!1,X=!1;for(let Y of J){let q=Y.sourceRowIndex;if(q===Z)X||(X=$);else{if(q>=0)X=!0;else $=!0;Y.sourceRowIndex=Z,z[Z]=Y}++Z}return X},lF=(z,J,{adds:Q})=>{let Z=z.length,$=J.size;if($>Z)z.length=$;let X=0;for(let Y=0;Y{this.beans.groupStage?.invalidateGroupCols(),this.refreshModel({step:"group",afterColumnsChanged:!0,keepRenderedRows:!0,animate:!this.gos.get("suppressAnimationFrame")})};this.addManagedEventListeners({newColumnsLoaded:Q,columnRowGroupChanged:Q,columnValueChanged:this.onValueChanged.bind(this),columnPivotChanged:()=>this.refreshModel({step:"pivot"}),columnPivotModeChanged:()=>this.refreshModel({step:"group"}),filterChanged:this.onFilterChanged.bind(this),sortChanged:this.onSortChanged.bind(this),stylesChanged:this.onGridStylesChanges.bind(this),gridReady:this.onGridReady.bind(this),rowExpansionStateChanged:this.onRowGroupOpened.bind(this)}),this.addPropertyListeners()}addPropertyListeners(){let{beans:z,stagesRefreshProps:J}=this,Q=[z.groupStage,z.filterStage,z.groupFilterStage,z.pivotStage,z.aggStage,z.sortStage,z.groupSortStage,z.filterAggStage,z.flattenStage].filter((Z)=>!!Z);this.stages=Q;for(let Z=Q.length-1;Z>=0;--Z){let $=Q[Z].refreshProps;if($)for(let X of $)J.set(X,Z)}this.addManagedPropertyListeners([...J.keys(),"rowData"],(Z)=>{let $=Z.changeSet?.properties;if($)this.onPropChange($)}),this.addManagedPropertyListener("rowHeight",()=>this.resetRowHeights())}start(){if(this.started=!0,this.rowNodesCountReady)this.refreshModel({step:"group",rowDataUpdated:!0,newData:!0});else this.setInitialData()}setInitialData(){if(this.gos.get("rowData"))this.onPropChange(["rowData"])}ensureRowHeightsValid(z,J,Q,Z){let $,X=!1;do{$=!1;let Y=this.getRowIndexAtPixel(z),q=this.getRowIndexAtPixel(J),G=Math.max(Y,Q),U=Math.min(q,Z);for(let _=G;_<=U;_++){let H=this.getRow(_);if(H.rowHeightEstimated){let W=f2(this.beans,H);H.setRowHeight(W.height),$=!0,X=!0}}if($)this.setRowTopAndRowIndex()}while($);return X}onPropChange(z){let{nodeManager:J,gos:Q,beans:Z}=this,$=Z.groupStage;if(!J)return;let X=new Set(z),Y=$?.onPropChange(X),q;if(X.has("rowData"))q=Q.get("rowData");else if(Y)q=$?.extractData();if(q&&!Array.isArray(q))q=null,V(1);let G={step:"nothing",changedProps:X};if(q){let _=!Y&&!this.isEmpty()&&q.length>0&&Q.exists("getRowId")&&!Q.get("resetRowDataOnUpdate");if(this.refreshingData=!0,_)G.keepRenderedRows=!0,G.animate=!Q.get("suppressAnimationFrame"),G.changedRowNodes=new I1,J.setImmutableRowData(G,q);else G.rowDataUpdated=!0,G.newData=!0,J.setNewRowData(q),this.rowNodesCountReady=!0}let U=G.rowDataUpdated?"group":this.getRefreshedStage(z);if(U)G.step=U,this.refreshModel(G)}getRefreshedStage(z){let{stages:J,stagesRefreshProps:Q}=this;if(!J)return null;let Z=J.length,$=Z;for(let X=0,Y=z.length;X{if(X?.id!=null&&!J.has(X.id))X.clearRowTopAndRowIndex()},Z=(X)=>{Q(X),Q(X.detailNode),Q(X.sibling);let Y=X.childrenAfterGroup;if(!X.hasChildren()||!Y)return;if(z&&X.level!==-1&&!X.expanded)return;for(let q=0,G=Y.length;q{let U=X[G];if(this.gos.get("groupHideOpenParents"))while(U.expanded&&U.childrenAfterSort&&U.childrenAfterSort.length>0)U=U.childrenAfterSort[0];return U.rowIndex},q=J.footerSvc;if(q)return q?.getTopDisplayIndex(Z,z,X,Y);return Y(z)}getTopLevelIndexFromDisplayedIndex(z){let{rootNode:J,rowsToDisplay:Q}=this;if(!J||!Q.length||Q[0]===J)return z;let $=this.getRow(z);if($.footer)$=$.sibling;let X=$.parent;while(X&&X!==J)$=X,X=$.parent;let Y=J.childrenAfterSort?.indexOf($)??-1;return Y>=0?Y:z}getRowBounds(z){let J=this.rowsToDisplay[z];return J?{rowTop:J.rowTop,rowHeight:J.rowHeight}:null}onRowGroupOpened(){this.refreshModel({step:"map",keepRenderedRows:!0,animate:T1(this.gos)})}onFilterChanged({afterDataChange:z,columns:J}){if(!z){let Z=J.length===0||J.some(($)=>$.isPrimary())?"filter":"filter_aggregates";this.refreshModel({step:Z,keepRenderedRows:!0,animate:T1(this.gos)})}}onSortChanged(){this.refreshModel({step:"sort",keepRenderedRows:!0,animate:T1(this.gos)})}getType(){return"clientSide"}onValueChanged(){this.refreshModel({step:this.beans.colModel.isPivotActive()?"pivot":"aggregate"})}isSuppressModelUpdateAfterUpdateTransaction(z){if(!this.gos.get("suppressModelUpdateAfterUpdateTransaction"))return!1;let{changedRowNodes:J,newData:Q,rowDataUpdated:Z}=z;if(!J||Q||!Z)return!1;if(J.removals.length||J.adds.size)return!1;return!0}reMapRows(){if(this.refreshingModel||this.refreshingData){this.noKeepRenderedRows=!0,this.noKeepUndoRedoStack=!0,this.noAnimate=!0;return}this.refreshModel({step:"map",keepRenderedRows:!1,keepUndoRedoStack:!1,animate:!1})}refreshModel(z){let{nodeManager:J,eventSvc:Q,started:Z}=this;if(!J)return;let $=!!z.rowDataUpdated;if(Z&&$)Q.dispatchEvent({type:"rowDataUpdated"});if(this.deferRefresh(z)){this.setPendingRefreshFlags(z),this.rowDataUpdatedPending||(this.rowDataUpdatedPending=$);return}if(this.rowDataUpdatedPending)this.rowDataUpdatedPending=!1,z.step="group";this.updateRefreshParams(z);let X=!1;this.refreshingModel=!0;try{this.executeRefresh(z,$),X=!0}finally{if(this.refreshingData=!1,this.refreshingModel=!1,!X)this.setPendingRefreshFlags(z)}this.clearPendingRefreshFlags(),this.beans.formula?.onRowsChanged(z.changedRowNodes,z.newData),Q.dispatchEvent({type:"modelUpdated",animate:z.animate,keepRenderedRows:z.keepRenderedRows,newData:z.newData,newPage:!1,keepUndoRedoStack:z.keepUndoRedoStack})}executeRefresh(z,J){let{beans:Q,rootNode:Z}=this;if(Q.masterDetailSvc?.refreshModel(z),J&&z.step!=="group")Q.colFilter?.refreshModel();let $=z.changedPath;if($?.addRow(Z),z.step==="group")this.doGrouping(Z,z),$??($=z.changedPath);switch($??($=Q.changedPathFactory?.ensureRowsPath(z,Z)),z.step){case"group":case"filter":this.doFilter($);case"pivot":if(this.doPivot($,z.changedProps))$=void 0,z.changedPath=void 0;case"aggregate":this.doAggregate($);case"filter_aggregates":this.doFilterAggregates($);case"sort":this.doSort($,z.changedRowNodes);case"map":this.doRowsToDisplay()}let X=new Set;this.setRowTopAndRowIndex(X),this.clearRowTopAndRowIndex($,X),this.updateRefreshParams(z)}deferRefresh(z){if(this.refreshingModel)return!0;if(this.beans.colModel.changeEventsDispatching)return!0;if(this.isSuppressModelUpdateAfterUpdateTransaction(z)){if(this.started)this.refreshingData=!1;return!0}if(!this.started)return!0;return!1}setPendingRefreshFlags(z){this.pendingNewData||(this.pendingNewData=!!z.newData),this.noKeepRenderedRows||(this.noKeepRenderedRows=!z.keepRenderedRows),this.noKeepUndoRedoStack||(this.noKeepUndoRedoStack=!z.keepUndoRedoStack),this.noAnimate||(this.noAnimate=!z.animate)}clearPendingRefreshFlags(){this.pendingNewData=!1,this.noKeepRenderedRows=!1,this.noKeepUndoRedoStack=!1,this.noAnimate=!1}updateRefreshParams(z){z.newData=this.pendingNewData||!!z.newData,z.keepRenderedRows=!this.noKeepRenderedRows&&!!z.keepRenderedRows,z.keepUndoRedoStack=!this.noKeepUndoRedoStack&&!!z.keepUndoRedoStack,z.animate=!this.noAnimate&&!!z.animate}isEmpty(){return!this.rootNode?._leafs?.length||!this.beans.colModel?.ready}isRowsToRender(){return this.rowsToDisplay.length>0}getOverlayType(){let{beans:z,gos:J}=this;if(this.rootNode?._leafs?.length){if(z.filterManager?.isAnyFilterPresent()&&this.getRowCount()===0)return"noMatchingRows"}else if(this.rowCountReady||(J.get("rowData")?.length??0)==0)return"noRows";return null}getNodesInRangeForSelection(z,J){let Q=!1,Z=!1,$=[],X=V2(this.gos);return this.forEachNodeAfterFilterAndSort((Y)=>{if(Z)return;if(Q){if(Y===J||Y===z){if(Z=!0,X&&Y.group){_X($,Y);return}}}if(!Q){if(Y!==J&&Y!==z)return;if(Q=!0,J===z)Z=!0}if(!Y.group||!X)$.push(Y)}),$}getTopLevelNodes(){return this.rootNode?.childrenAfterGroup??null}getRow(z){return this.rowsToDisplay[z]}getFormulaRow(z){return this.formulaRows[z]}isRowPresent(z){return this.rowsToDisplay.indexOf(z)>=0}getRowIndexAtPixel(z){let J=this.rowsToDisplay,Q=J.length;if(this.isEmpty()||Q===0)return-1;let Z=0,$=Q-1;if(z<=0)return 0;if(J[$].rowTop<=z)return $;let Y=-1,q=-1;while(!0){let G=Math.floor((Z+$)/2),U=J[G];if(this.isRowInPixel(U,z))return G;if(U.rowTopz)$=G-1;if(Y===Z&&q===$)return G;Y=Z,q=$}}isRowInPixel(z,J){let Q=z.rowTop,Z=Q+z.rowHeight;return Q<=J&&Z>J}forEachLeafNode(z){let J=this.rootNode?._leafs;if(J)for(let Q=0,Z=J.length;QQ.childrenAfterAggFilter)}forEachNodeAfterFilterAndSort(z,J=!1){this.depthFirstSearchRowNodes(z,J,(Q)=>Q.childrenAfterSort)}forEachPivotNode(z,J,Q){let{colModel:Z,rowGroupColsSvc:$}=this.beans;if(!Z.pivotMode)return;if(!$?.columns.length){z(this.rootNode,0);return}let X=Q?"childrenAfterSort":"childrenAfterGroup";this.depthFirstSearchRowNodes(z,J,(Y)=>!Y.leafGroup?Y[X]:null)}depthFirstSearchRowNodes(z,J=!1,Q=(X)=>X.childrenAfterGroup,Z=this.rootNode,$=0){let X=$;if(!Z)return X;let Y=Z===this.rootNode;if(!Y)z(Z,X++);if(Z.hasChildren()&&!Z.footer){let q=Y||this.hierarchical?Q(Z):null;if(q){let G=this.beans.footerSvc;X=G?.addTotalRows(X,Z,z,J,Y,"top")??X;for(let U of q)X=this.depthFirstSearchRowNodes(z,J,Q,U,X);return G?.addTotalRows(X,Z,z,J,Y,"bottom")??X}}return X}doAggregate(z){if(this.rootNode)this.beans.aggStage?.execute(z)}doFilterAggregates(z){if(this.hierarchical){let Z=this.beans.filterAggStage;if(Z){Z.execute(z);return}}let J=this.rootNode;J.childrenAfterAggFilter=J.childrenAfterFilter;let Q=J.sibling;if(Q)Q.childrenAfterAggFilter=J.childrenAfterFilter}doSort(z,J){let Q=this.beans;(this.hierarchical&&Q.groupSortStage||Q.sortStage).execute(z,J)}doGrouping(z,J){let Z=this.beans.groupStage?.execute(J);if(Z===void 0){let $=z._leafs;z.childrenAfterGroup=$,z.updateHasChildren();let X=z.sibling;if(X)X.childrenAfterGroup=$}if(Z||J.rowDataUpdated)this.beans.colFilter?.refreshModel();if(!this.rowCountReady&&this.rowNodesCountReady)this.rowCountReady=!0,this.eventSvc.dispatchEventOnce({type:"rowCountReady"})}doFilter(z){let J=this.beans;(this.hierarchical&&J.groupFilterStage||J.filterStage).execute(z);let Q=this.rootNode,Z=Q.sibling;if(Z)Z.childrenAfterFilter=Q.childrenAfterFilter}doPivot(z,J){return this.beans.pivotStage?.execute(z,J)??!1}getRowNode(z){if(typeof z!=="string")z=String(z);let J=this.nodeManager?.getRowNode(z);if(typeof J==="object")return J;let Q=this.beans.groupStage?.getNonLeaf(z);if(Q)return Q;return this.getSpecialRowNode(z)}getSpecialRowNode(z){if(z===IZ)return this.rootNode??void 0;if(z===PU){let J=this.rootNode?.sibling;return J?.footer?J:void 0}if(z.startsWith(hQ)){let J=z.slice(hQ.length),Q=this.getRowNode(J);return Q?.sibling?.footer?Q.sibling:void 0}if(z.startsWith(S7)){let J=z.slice(S7.length),Q=this.nodeManager?.getRowNode(J);if(typeof Q==="object"&&Q.detailNode?.id===z)return Q.detailNode}}batchUpdateRowData(z,J){if(!this.asyncTransactionsTimer){this.asyncTransactions=[];let Q=this.gos.get("asyncTransactionWaitMillis");this.asyncTransactionsTimer=setTimeout(()=>this.executeBatchUpdateRowData(),Q)}this.asyncTransactions.push({rowDataTransaction:z,callback:J})}flushAsyncTransactions(){let z=this.asyncTransactionsTimer;if(z)clearTimeout(z),this.executeBatchUpdateRowData()}executeBatchUpdateRowData(){let{nodeManager:z,beans:J,eventSvc:Q,asyncTransactions:Z}=this;if(!z)return;J.valueCache?.onDataChanged();let $=[],X=[],Y=new I1,q=!this.gos.get("suppressAnimationFrame");for(let{rowDataTransaction:G,callback:U}of Z??[]){this.rowNodesCountReady=!0,this.refreshingData=!0;let _=z.updateRowData(G,Y,q);if($.push(_),U)X.push(U.bind(null,_))}if(this.commitTransactions(Y,q),X.length>0)setTimeout(()=>{for(let G=0,U=X.length;G0)Q.dispatchEvent({type:"asyncTransactionsFlushed",results:$});this.asyncTransactionsTimer=0,this.asyncTransactions=null}updateRowData(z){let J=this.nodeManager;if(!J)return null;this.beans.valueCache?.onDataChanged(),this.rowNodesCountReady=!0;let Q=new I1,Z=!this.gos.get("suppressAnimationFrame");this.refreshingData=!0;let $=J.updateRowData(z,Q,Z);return this.commitTransactions(Q,Z),$}commitTransactions(z,J){this.refreshModel({step:"group",rowDataUpdated:!0,keepRenderedRows:!0,animate:J,changedRowNodes:z})}doRowsToDisplay(){let{rootNode:z,beans:J}=this;if(J.formula?.active){let $=z?.childrenAfterSort??[];this.formulaRows=$,this.rowsToDisplay=$.filter((X)=>!X.softFiltered);for(let X of this.rowsToDisplay)X.setUiLevel(0);return}let Q=J.flattenStage;if(Q){this.rowsToDisplay=Q.execute();return}let Z=this.rootNode.childrenAfterSort??[];for(let $ of Z)$.setUiLevel(0);this.rowsToDisplay=Z}onRowHeightChanged(){this.refreshModel({step:"map",keepRenderedRows:!0,keepUndoRedoStack:!0})}resetRowHeights(){let z=this.rootNode;if(!z)return;let J=this.resetRowHeightsForAllRowNodes();z.setRowHeight(z.rowHeight,!0);let Q=z.sibling;if(Q?.setRowHeight(Q.rowHeight,!0),J)this.onRowHeightChanged()}resetRowHeightsForAllRowNodes(){let z=!1;return this.forEachNode((J)=>{J.setRowHeight(J.rowHeight,!0);let Q=J.detailNode;Q?.setRowHeight(Q.rowHeight,!0);let Z=J.sibling;Z?.setRowHeight(Z.rowHeight,!0),z=!0}),z}onGridStylesChanges(z){if(z.rowHeightChanged&&!this.beans.rowAutoHeight?.active)this.resetRowHeights()}onGridReady(){if(!this.started)this.setInitialData()}destroy(){super.destroy(),this.nodeManager=this.destroyBean(this.nodeManager),this.started=!1,this.rootNode=null,this.rowsToDisplay=[],this.asyncTransactions=null,this.stages=null,this.stagesRefreshProps.clear(),clearTimeout(this.asyncTransactionsTimer)}onRowHeightChangedDebounced(){this.onRowHeightChanged_debounced()}},_X=(z,J)=>{let Q=J.childrenAfterGroup;if(Q)for(let Z=0,$=Q.length;Z<$;++Z){let X=Q[Z];if(X.data)z.push(X);if(X.group)_X(z,X)}};var oF=class extends S{constructor(){super(...arguments);this.beanName="filterStage",this.step="filter",this.refreshProps=null}wireBeans(z){this.filterManager=z.filterManager}execute(){let z=this.beans,J=z.rowModel.rootNode,Q=J.childrenAfterGroup,Z=Q.length,$=this.filterManager,X=!!$?.isChildFilterPresent();if(z.formula?.active)if(J.childrenAfterFilter=Q,X)for(let Y=0;Y{let $=Q.length,X=0;for(let Y=0;Y=$||Q[X]!==q)return K8(z,J,Y,X,Q,Z);++X}else if(X<$)return K8(z,J,Y,X,Q,Z)}return X===$?Q:z},K8=(z,J,Q,Z,$,X)=>{let Y=Z>0?$.slice(0,Z):[];while(Q{let{childrenAfterSort:X,childrenAfterAggFilter:Y}=J;if(!Y)return X&&X.length>0?X:[];let q=Y.length;if(q<=1){if(X?.length===q&&(q===0||X[0]===Y[0]))return X;return Y.slice()}if(!X||q<=zL)return z.doFullSortInPlace(Y.slice(),$);let G=new Map,{updates:U,adds:_}=Q,H=[];for(let B=0;Bz.compareRowNodes($,B,E)||~G.get(B)-~G.get(E)),W===q)return H;return QL(z,$,H,X,G,q)},QL=(z,J,Q,Z,$,X)=>{let Y=Array(X),q=0,G=Q[q],U,_=-1,H=0,W=0,B=Q.length,E=Z.length;while(!0){if(_<0){if(H>=E)break;if(U=Z[H++],_=$.get(U)??-1,_<0)continue}if((z.compareRowNodes(J,G,U)||~$.get(G)-_)<0){if(Y[W++]=G,++q>=B)break;G=Q[q]}else Y[W++]=U,_=-1}while(q=0)Y[W++]=K}return Y},ZL=(z,J,Q)=>{let Z=0;Q.length=J.size;for(let $=0,X=z.length;${let{childrenAfterSort:J,sibling:Q}=z;if(Q)Q.childrenAfterSort=J;if(!J)return;for(let Z=0,$=J.length-1;Z<=$;Z++){let X=J[Z],Y=Z===0,q=Z===$;if(X.firstChild!==Y)X.firstChild=Y,X.dispatchRowEvent("firstChildChanged");if(X.lastChild!==q)X.lastChild=q,X.dispatchRowEvent("lastChildChanged");if(X.childIndex!==Z)X.childIndex=Z,X.dispatchRowEvent("childIndexChanged")}},XL=class extends S{constructor(){super(...arguments);this.beanName="sortStage",this.step="sort",this.refreshProps=["postSortRows","accentedSort"]}execute(z,J){let{rowModel:Q,sortSvc:Z,rowNodeSorter:$}=this.beans,X=Q.rootNode,Y=Z.getSortOptions(),q=Y.length>0,G=this.gos.getCallback("postSortRows"),U=q&&!G&&this.gos.get("deltaSort")&&J,_=X.childrenAfterSort,H=X.childrenAfterAggFilter,W;if(q)if(U)W=JL($,X,U,z,Y);else W=$.doFullSortInPlace(H?.slice()??[],Y);else W=GG(_,H);X.childrenAfterSort=W,$L(X),G?.({nodes:W})}},HX={moduleName:"ClientSideRowModel",version:i,rowModels:["clientSide"],beans:[aF,oF,XL],dependsOn:[XX]};var YL=":where(.ag-ltr) :where(.ag-animate-autosize){.ag-cell,.ag-header-cell,.ag-header-group-cell{transition:width .2s ease-in-out,left .2s ease-in-out}}:where(.ag-rtl) :where(.ag-animate-autosize){.ag-cell,.ag-header-cell,.ag-header-group-cell{transition:width .2s ease-in-out,right .2s ease-in-out}}";function qL(z,J){if(typeof J==="number")z.colAutosize?.sizeColumnsToFit(J,"api");else z.colAutosize?.sizeColumnsToFitGridBody(J)}function WX({colAutosize:z,visibleCols:J},Q,Z){if(Array.isArray(Q))z?.autoSizeCols({colKeys:Q,skipHeader:Z,source:"api"});else z?.autoSizeCols({...Q,colKeys:Q.colIds??J.allCols,source:"api"})}function GL(z,J){if(J&&typeof J==="object")WX(z,J);else z.colAutosize?.autoSizeAllColumns({source:"api",skipHeader:J})}var UL=class extends S{constructor(){super(...arguments);this.beanName="colAutosize",this.timesDelayed=0,this.shouldQueueResizeOperations=!1,this.resizeOperationQueue=[]}postConstruct(){let{gos:z}=this,J=z.get("autoSizeStrategy");if(J){let Q=!1,Z=J.type;if(Z==="fitGridWidth"||Z==="fitProvidedWidth")Q=!0;else if(Z==="fitCellContents"){this.addManagedEventListeners({firstDataRendered:()=>this.onFirstDataRendered(J)});let $=z.get("rowData");Q=$!=null&&$.length>0&&o(z)}if(Q)this.beans.colDelayRenderSvc?.hideColumns(Z)}}autoSizeCols(z){let{eventSvc:J,visibleCols:Q,colModel:Z}=this.beans;Y2(this.beans,!0),this.innerAutoSizeCols(z).then(($)=>{let X=(_)=>N1(J,Array.from(_),!0,"autosizeColumns");if(!z.scaleUpToFitGridWidth)return Y2(this.beans,!1),X($);let Y=F8(this.beans),q=(_)=>Q.leftCols.some((H)=>h4(H,_)),G=(_)=>Q.rightCols.some((H)=>h4(H,_)),U=z.colKeys.filter((_)=>{return!Z.getCol(_)?.colDef.suppressAutoSize&&!y0(_)&&!q(_)&&!G(_)});this.sizeColumnsToFit(Y,z.source,!0,{defaultMaxWidth:z.defaultMaxWidth,defaultMinWidth:z.defaultMinWidth,columnLimits:z.columnLimits?.map((_)=>({..._,key:_.colId})),colKeys:U,onlyScaleUp:!0,animate:!1}),Y2(this.beans,!1),X($)})}innerAutoSizeCols(z){return new Promise((J,Q)=>{if(this.shouldQueueResizeOperations)return this.pushResizeOperation(()=>this.innerAutoSizeCols(z).then(J,Q));let{colKeys:Z,skipHeader:$,skipHeaderGroups:X,stopAtGroup:Y,defaultMaxWidth:q,defaultMinWidth:G,columnLimits:U=[],source:_="api"}=z,{animationFrameSvc:H,renderStatus:W,colModel:B,autoWidthCalc:E,visibleCols:K}=this.beans;if(H?.flushAllFrames(),this.timesDelayed<5&&W&&(!W.areHeaderCellsRendered()||!W.areCellsRendered())){this.timesDelayed++,setTimeout(()=>{if(this.isAlive())this.innerAutoSizeCols(z).then(J,Q)});return}this.timesDelayed=0;let F=new Set,L=-1,D=Object.fromEntries(U.map(({colId:A,...R})=>[A,R])),M=$??this.gos.get("skipHeaderOnAutoSize"),f=X??M;while(L!==0){L=0;let A=[];for(let R of Z){if(!R||w2(R))continue;let O=B.getCol(R);if(!O||F.has(O)||O.colDef.suppressAutoSize)continue;let v=E.getPreferredWidthForColumn(O,M);if(v>0){let I=D[O.colId]??{};I.minWidth??(I.minWidth=G),I.maxWidth??(I.maxWidth=q);let b=_L(O,v,I);O.setActualWidth(b,_),F.add(O),L++}A.push(O)}if(A.length)K.refresh(_)}if(!f)this.autoSizeColumnGroupsByColumns(Z,_,Y);J(F)})}autoSizeColumn(z,J,Q){this.autoSizeCols({colKeys:[z],skipHeader:Q,skipHeaderGroups:!0,source:J})}autoSizeColumnGroupsByColumns(z,J,Q){let{colModel:Z,ctrlsSvc:$}=this.beans,X=new Set,Y=Z.getColsForKeys(z);for(let G of Y){let U=G.parent;while(U&&U!=Q){if(!U.isPadding())X.add(U);U=U.parent}}let q;for(let G of X){for(let U of $.getHeaderRowContainerCtrls())if(q=U.getHeaderCtrlForColumn(G),q)break;q?.resizeLeafColumnsToFit(J)}}autoSizeAllColumns(z){if(this.shouldQueueResizeOperations){this.pushResizeOperation(()=>this.autoSizeAllColumns(z));return}this.autoSizeCols({colKeys:this.beans.visibleCols.allCols,...z})}addColumnAutosizeListeners(z,J){let Q=this.gos.get("skipHeaderOnAutoSize"),Z=()=>{this.autoSizeColumn(J,"uiColumnResized",Q)};z.addEventListener("dblclick",Z);let $=new c0(z);return $.addEventListener("doubleTap",Z),()=>{z.removeEventListener("dblclick",Z),$.destroy()}}addColumnGroupResize(z,J,Q){let Z=this.gos.get("skipHeaderOnAutoSize"),$=()=>{let X=[],Y=J.getDisplayedLeafColumns();for(let q of Y)if(!q.colDef.suppressAutoSize)X.push(q.colId);if(X.length>0)this.autoSizeCols({colKeys:X,skipHeader:Z,stopAtGroup:J,source:"uiColumnResized"});Q()};return z.addEventListener("dblclick",$),()=>z.removeEventListener("dblclick",$)}sizeColumnsToFitGridBody(z,J){if(!this.isAlive())return;let Q=F8(this.beans);if(Q>0&&this.beans.visibleCols.centerCols.length===0)Q=Math.max(Q-A6,0);if(Q>0){this.sizeColumnsToFit(Q,"sizeColumnsToFit",!1,z);return}if(J===void 0)window.setTimeout(()=>{this.sizeColumnsToFitGridBody(z,100)},0);else if(J===100)window.setTimeout(()=>{this.sizeColumnsToFitGridBody(z,500)},100);else if(J===500)window.setTimeout(()=>{this.sizeColumnsToFitGridBody(z,-1)},500);else V(29)}sizeColumnsToFit(z,J="sizeColumnsToFit",Q,Z){if(this.shouldQueueResizeOperations){this.pushResizeOperation(()=>this.sizeColumnsToFit(z,J,Q,Z));return}let{beans:$}=this,X=Z?.animate??!0;if(X)Y2($,!0);let Y={};for(let{key:L,...D}of Z?.columnLimits??[])Y[typeof L==="string"?L:L.getColId()]=D;let q=$.visibleCols.allCols;if(z<=0||!q.length)return;let G=t4(q);if(Z?.onlyScaleUp&&G>z)return;if(z===G){if(q.every((D)=>{if(D.colDef.suppressSizeToFit)return!0;let M=Y?.[D.getId()],f=M?.minWidth??Z?.defaultMinWidth,A=M?.maxWidth??Z?.defaultMaxWidth,R=D.getActualWidth();return(f==null||R>=f)&&(A==null||R<=A)}))return}let _=[],H=[];for(let L of q){let D=Z?.colKeys?.some((M)=>h4(L,M))??!0;if(L.colDef.suppressSizeToFit||!D)H.push(L);else _.push(L)}let W=_.slice(0),B=!1,E=(L)=>{X0(_,L),H.push(L)},K={};for(let L of _){if(Z?.onlyScaleUp)K[L.colId]=L.getActualWidth();L.resetActualWidth(J);let D=Y?.[L.getId()],M=D?.minWidth??Z?.defaultMinWidth??-1/0,f=D?.maxWidth??Z?.defaultMaxWidth??1/0,A=L.getActualWidth(),R=Math.max(Math.min(A,f),M);if(R!=A)L.setActualWidth(R,J,!0)}while(!B){B=!0;let L=z-t4(H);if(L<=0)for(let D of _){let M=Y?.[D.getId()]?.minWidth??Z?.defaultMinWidth??D.minWidth;D.setActualWidth(M,J,!0)}else{let D=L/t4(_),M=L;for(let f=_.length-1;f>=0;f--){let A=_[f],R=A.colId,O=K[R],v=Y?.[R],I=v?.minWidth??Z?.defaultMinWidth??O,b=v?.maxWidth??Z?.defaultMaxWidth,m=Math.max(I??-1/0,A.getMinWidth()),g=Math.min(b??1/0,A.getMaxWidth()),e=Math.round(A.getActualWidth()*D);if(eg)e=g,E(A),B=!1;else if(f===0)e=M;A.setActualWidth(e,J,!0),M-=e}}}for(let L of W)L.fireColumnWidthChangedEvent(J);let F=$.visibleCols;if(F.setLeftValues(J),F.updateBodyWidths(),Q)return;if(N1(this.eventSvc,W,!0,J),X)Y2($,!1)}applyAutosizeStrategy(){let{gos:z,colDelayRenderSvc:J}=this.beans,Q=z.get("autoSizeStrategy");if(Q?.type!=="fitGridWidth"&&Q?.type!=="fitProvidedWidth")return;setTimeout(()=>{if(!this.isAlive())return;let Z=Q.type;if(Z==="fitGridWidth"){let{columnLimits:$,defaultMinWidth:X,defaultMaxWidth:Y}=Q,q=$?.map(({colId:G,minWidth:U,maxWidth:_})=>({key:G,minWidth:U,maxWidth:_}));this.sizeColumnsToFitGridBody({defaultMinWidth:X,defaultMaxWidth:Y,columnLimits:q})}else if(Z==="fitProvidedWidth")this.sizeColumnsToFit(Q.width,"sizeColumnsToFit");J?.revealColumns(Z)})}onFirstDataRendered({colIds:z,...J}){setTimeout(()=>{if(!this.isAlive())return;let Q="autosizeColumns";if(z)this.autoSizeCols({...J,source:Q,colKeys:z});else this.autoSizeAllColumns({...J,source:Q});this.beans.colDelayRenderSvc?.revealColumns(J.type)})}processResizeOperations(){this.shouldQueueResizeOperations=!1;for(let z of this.resizeOperationQueue)z();this.resizeOperationQueue=[]}pushResizeOperation(z){this.resizeOperationQueue.push(z)}destroy(){this.resizeOperationQueue.length=0,super.destroy()}};function _L(z,J,Q={}){let Z=Q.minWidth??z.getMinWidth();if(J$)J=$;return J}function F8({ctrlsSvc:z,scrollVisibleSvc:J}){let Q=z.getGridBodyCtrl(),$=Q.isVerticalScrollShowing()?J.getScrollbarWidth():0;return lz(Q.eGridBody)-$}var L8="ag-animate-autosize";function Y2({ctrlsSvc:z,gos:J},Q){if(!J.get("animateColumnResizing")||J.get("enableRtl")||!z.isAlive())return;let Z=z.getGridBodyCtrl().eGridBody.classList;if(Q)Z.add(L8);else Z.remove(L8)}var BX={moduleName:"ColumnAutoSize",version:i,beans:[UL],apiFunctions:{sizeColumnsToFit:qL,autoSizeColumns:WX,autoSizeAllColumns:GL},dependsOn:[O$],css:[YL]};var HL=class extends S{constructor(){super(...arguments);this.beanName="gridSerializer"}wireBeans(z){this.visibleCols=z.visibleCols,this.colModel=z.colModel,this.rowModel=z.rowModel,this.pinnedRowModel=z.pinnedRowModel}serialize(z,J={}){let{allColumns:Q,columnKeys:Z,skipRowGroups:$,exportRowNumbers:X}=J,Y=this.getColumnsToExport({allColumns:Q,skipRowGroups:$,columnKeys:Z,exportRowNumbers:X});return[this.prepareSession(Y),this.prependContent(J),this.exportColumnGroups(J,Y),this.exportHeaders(J,Y),this.processPinnedTopRows(J,Y),this.processRows(J,Y),this.processPinnedBottomRows(J,Y),this.appendContent(J)].reduce((q,G)=>G(q),z).parse()}processRow(z,J,Q,Z){let $=J.shouldRowBeSkipped||(()=>!1),Y=J.rowPositions!=null||!!J.onlySelected,q=this.gos.get("groupHideOpenParents")&&!Y,G=this.colModel.pivotMode?Z.leafGroup:!Z.group,U=!!Z.footer,_=Z.allChildrenCount===1&&Z.childrenAfterGroup?.length===1&&UU(this.gos,Z);if(!G&&!U&&(J.skipRowGroups||_||q)||J.onlySelected&&!Z.isSelected()||J.skipPinnedTop&&Z.rowPinned==="top"||J.skipPinnedBottom&&Z.rowPinned==="bottom"||Z.stub)return;if(Z.level===-1&&!G&&!U)return;if($(C(this.gos,{node:Z})))return;let B=z.onNewBodyRow(Z);if(Q.forEach((E,K)=>{B.onColumn(E,K,Z)}),J.getCustomContentBelowRow){let E=J.getCustomContentBelowRow(C(this.gos,{node:Z}));if(E)z.addCustomContent(E)}}appendContent(z){return(J)=>{let Q=z.appendContent;if(Q)J.addCustomContent(Q);return J}}prependContent(z){return(J)=>{let Q=z.prependContent;if(Q)J.addCustomContent(Q);return J}}prepareSession(z){return(J)=>{return J.prepare(z),J}}exportColumnGroups(z,J){return(Q)=>{if(!z.skipColumnGroupHeaders){let Z=new I$,{colGroupSvc:$}=this.beans,X=$?$.createColumnGroups({columns:J,idCreator:Z,pinned:null,isStandaloneStructure:!0}):J;this.recursivelyAddHeaderGroups(X,Q,z.processGroupHeaderCallback)}return Q}}exportHeaders(z,J){return(Q)=>{if(!z.skipColumnHeaders){let Z=Q.onNewHeaderRow();J.forEach(($,X)=>{Z.onColumn($,X,void 0)})}return Q}}processPinnedTopRows(z,J){return(Q)=>{let Z=this.processRow.bind(this,Q,z,J);if(z.rowPositions)z.rowPositions.filter(($)=>$.rowPinned==="top").sort(($,X)=>$.rowIndex-X.rowIndex).map(($)=>this.pinnedRowModel?.getPinnedTopRow($.rowIndex)).forEach(Z);else if(!this.pinnedRowModel?.isManual())this.pinnedRowModel?.forEachPinnedRow("top",Z);return Q}}processRows(z,J){return(Q)=>{let Z=this.rowModel,$=o(this.gos,Z),X=Az(this.gos,Z),Y=!$&&z.onlySelected,q=this.processRow.bind(this,Q,z,J),{exportedRows:G="filteredAndSorted"}=z;if(z.rowPositions)z.rowPositions.filter((U)=>U.rowPinned==null).sort((U,_)=>U.rowIndex-_.rowIndex).map((U)=>Z.getRow(U.rowIndex)).forEach(q);else if(this.colModel.pivotMode)if($)Z.forEachPivotNode(q,!0,G==="filteredAndSorted");else if(X)Z.forEachNodeAfterFilterAndSort(q,!0);else Z.forEachNode(q);else if(z.onlySelectedAllPages||Y){let U=this.beans.selectionSvc?.getSelectedNodes()??[];this.replicateSortedOrder(U),U.forEach(q)}else if(G==="all")Z.forEachNode(q);else if($||X)Z.forEachNodeAfterFilterAndSort(q,!0);else Z.forEachNode(q);return Q}}replicateSortedOrder(z){let{sortSvc:J,rowNodeSorter:Q}=this.beans;if(!J||!Q)return;let Z=J.getSortOptions(),$=(X,Y)=>{if(X.rowIndex!=null&&Y.rowIndex!=null)return X.rowIndex-Y.rowIndex;if(X.level===Y.level){if(X.parent?.id===Y.parent?.id)return Q.compareRowNodes(Z,X,Y)||(X.rowIndex??-1)-(Y.rowIndex??-1);return $(X.parent,Y.parent)}if(X.level>Y.level)return $(X.parent,Y);return $(X,Y.parent)};z.sort($)}processPinnedBottomRows(z,J){return(Q)=>{let Z=this.processRow.bind(this,Q,z,J);if(z.rowPositions)z.rowPositions.filter(($)=>$.rowPinned==="bottom").sort(($,X)=>$.rowIndex-X.rowIndex).map(($)=>this.pinnedRowModel?.getPinnedBottomRow($.rowIndex)).forEach(Z);else if(!this.pinnedRowModel?.isManual())this.pinnedRowModel?.forEachPinnedRow("bottom",Z);return Q}}getColumnsToExport(z){let{allColumns:J=!1,skipRowGroups:Q=!1,exportRowNumbers:Z=!1,columnKeys:$}=z,{colModel:X,gos:Y,visibleCols:q}=this,G=X.pivotMode,U=(W)=>{if(i4(W))return!1;return!y0(W)||Z};if($?.length)return X.getColsForKeys($).filter(U);let _=Y.get("treeData"),H;if(J&&!G)H=X.getCols();else H=q.allCols;return H=H.filter((W)=>U(W)&&(Q&&!_?!Z1(W):!0)),H}recursivelyAddHeaderGroups(z,J,Q){let Z=[];for(let $ of z){let X=$;if(!X.getChildren)continue;for(let Y of X.getChildren()??[])Z.push(Y)}if(z.length>0&&K0(z[0]))this.doAddHeaderHeader(J,z,Q);if(Z&&Z.length>0)this.recursivelyAddHeaderGroups(Z,J,Q)}doAddHeaderHeader(z,J,Q){let Z=z.onNewHeaderGroupingRow(),$=0;for(let X of J){let Y=X,q;if(Q)q=Q(C(this.gos,{columnGroup:Y}));else q=this.beans.colNames.getDisplayNameForColumnGroup(Y,"header");let U=(Y.isExpandable()?Y.getLeafColumns():[]).reduce((_,H,W,B)=>{let E=y(_);if(H.getColumnGroupShow()!=="open"){if(E&&E[1]==null)E[1]=W-1}else if(!E||E[1]!=null)E=[W],_.push(E);if(W===B.length-1&&E&&E[1]==null)E[1]=W;return _},[]);Z.onColumn(Y,q||"",$++,Y.getLeafColumns().length-1,U)}}},W5={moduleName:"SharedExport",version:i,beans:[HL]};function SJ(z,J){let Q=document.defaultView??window;if(!Q)return;let Z=document.createElement("a"),$=Q.URL.createObjectURL(J);Z.setAttribute("href",$),Z.setAttribute("download",z),Z.style.display="none",document.body.appendChild(Z),Z.dispatchEvent(new MouseEvent("click",{bubbles:!1,cancelable:!0,view:Q})),Z.remove(),Q.setTimeout(()=>{Q.URL.revokeObjectURL($)},0)}var B5=class extends S{getFileName(z){let J=this.getDefaultFileExtension();if(!z?.length)z=this.getDefaultFileName();return z.includes(".")?z:`${z}.${J}`}getData(z){return this.beans.gridSerializer.serialize(this.createSerializingSession(z),z)}getDefaultFileName(){return`export.${this.getDefaultFileExtension()}`}},E5=class{constructor(z){this.valueFrom="data";let{colModel:J,rowGroupColsSvc:Q,colNames:Z,valueSvc:$,gos:X,processCellCallback:Y,processHeaderCallback:q,processGroupHeaderCallback:G,processRowGroupCallback:U,valueFrom:_}=z;if(this.colModel=J,this.rowGroupColsSvc=Q,this.colNames=Z,this.valueSvc=$,this.gos=X,this.processCellCallback=Y,this.processHeaderCallback=q,this.processGroupHeaderCallback=G,this.processRowGroupCallback=U,_)this.valueFrom=_}prepare(z){}extractHeaderValue(z){return this.getHeaderName(this.processHeaderCallback,z)??""}extractRowCellValue(z){let{column:J,node:Q,currentColumnIndex:Z,accumulatedRowIndex:$,type:X,useRawFormula:Y}=z,q=Z===0&&F9(this.gos,Q,this.colModel.pivotMode);if(this.processRowGroupCallback&&(this.gos.get("treeData")||Q.group)&&(J.isRowGroupDisplayed(Q.rowGroupColumn?.colId??"")||q))return{value:this.processRowGroupCallback(C(this.gos,{column:J,node:Q}))??""};if(this.processCellCallback)return{value:this.processCellCallback(C(this.gos,{accumulatedRowIndex:$,column:J,node:Q,value:this.valueSvc.getValueForDisplay({column:J,node:Q,from:this.valueFrom}).value,type:X,parseValue:(E)=>this.valueSvc.parseValue(J,Q,E,this.valueSvc.getValue(J,Q,this.valueFrom)),formatValue:(E)=>this.valueSvc.formatValue(J,Q,E)??E}))??""};let G=this.gos.get("treeData"),U=this.valueSvc,_=Q.level===-1&&Q.footer,H=J.colDef.showRowGroup===!0&&(Q.group||G);if(!_&&(q||H)){let E="",K=Q;while(K&&K.level!==-1){let{value:F,valueFormatted:L}=U.getValueForDisplay({column:q?void 0:J,node:K,includeValueFormatted:!0,exporting:!0,from:this.valueFrom});E=` -> ${L??F??""}${E}`,K=K.parent}return{value:E,valueFormatted:E}}let{value:W,valueFormatted:B}=U.getValueForDisplay({column:J,node:Q,includeValueFormatted:!0,exporting:!0,useRawFormula:Y,from:this.valueFrom});return{value:W??"",valueFormatted:B}}getHeaderName(z,J){if(z)return z(C(this.gos,{column:J}));return this.colNames.getDisplayNameForColumn(J,"csv",!0)}},D8=`\r +`,WL=class extends E5{constructor(z){super(z);this.config=z,this.isFirstLine=!0,this.result="";let{suppressQuotes:J,columnSeparator:Q}=z;this.suppressQuotes=J,this.columnSeparator=Q}addCustomContent(z){if(!z)return;if(typeof z==="string"){if(!/^\s*\n/.test(z))this.beginNewLine();z=z.replace(/\r?\n/g,D8),this.result+=z}else z.forEach((J)=>{this.beginNewLine(),J.forEach((Q,Z)=>{if(Z!==0)this.result+=this.columnSeparator;if(this.result+=this.putInQuotes(Q.data.value||""),Q.mergeAcross)this.appendEmptyCells(Q.mergeAcross)})})}onNewHeaderGroupingRow(){return this.beginNewLine(),{onColumn:this.onNewHeaderGroupingRowColumn.bind(this)}}onNewHeaderGroupingRowColumn(z,J,Q,Z){if(Q!=0)this.result+=this.columnSeparator;this.result+=this.putInQuotes(J),this.appendEmptyCells(Z)}appendEmptyCells(z){for(let J=1;J<=z;J++)this.result+=this.columnSeparator+this.putInQuotes("")}onNewHeaderRow(){return this.beginNewLine(),{onColumn:this.onNewHeaderRowColumn.bind(this)}}onNewHeaderRowColumn(z,J){if(J!=0)this.result+=this.columnSeparator;this.result+=this.putInQuotes(this.extractHeaderValue(z))}onNewBodyRow(){return this.beginNewLine(),{onColumn:this.onNewBodyRowColumn.bind(this)}}onNewBodyRowColumn(z,J,Q){if(J!=0)this.result+=this.columnSeparator;let Z=this.extractRowCellValue({column:z,node:Q,currentColumnIndex:J,accumulatedRowIndex:J,type:"csv",useRawFormula:!1});this.result+=this.putInQuotes(Z.valueFormatted??Z.value)}putInQuotes(z){if(this.suppressQuotes)return z;if(z===null||z===void 0)return'""';let J;if(typeof z==="string")J=z;else if(typeof z.toString==="function")J=z.toString();else V(53),J="";return'"'+J.replace(/"/g,'""')+'"'}parse(){return this.result}beginNewLine(){if(!this.isFirstLine)this.result+=D8;this.isFirstLine=!1}},BL=class extends B5{constructor(){super(...arguments);this.beanName="csvCreator"}getMergedParams(z){let J=this.gos.get("defaultCsvExportParams");return Object.assign({},J,z)}export(z){if(this.isExportSuppressed()){V(51);return}let J=()=>{let Z=this.getMergedParams(z),$=this.getData(Z),X=new Blob(["\uFEFF",$],{type:"text/plain"}),Y=Z.fileName,q=typeof Y==="function"?Y(C(this.gos,{})):Y;SJ(this.getFileName(q),X)},{overlays:Q}=this.beans;if(Q)Q.showExportOverlay(J);else J()}exportDataAsCsv(z){this.export(z)}getDataAsCsv(z,J=!1){let Q=J?Object.assign({},z):this.getMergedParams(z);return this.getData(Q)}getDefaultFileExtension(){return"csv"}createSerializingSession(z){let{colModel:J,colNames:Q,rowGroupColsSvc:Z,valueSvc:$,gos:X}=this.beans,{processCellCallback:Y,processHeaderCallback:q,processGroupHeaderCallback:G,processRowGroupCallback:U,suppressQuotes:_,columnSeparator:H,valueFrom:W}=z;return new WL({colModel:J,colNames:Q,valueSvc:$,gos:X,processCellCallback:Y||void 0,processHeaderCallback:q||void 0,processGroupHeaderCallback:G||void 0,processRowGroupCallback:U||void 0,suppressQuotes:_||!1,columnSeparator:H||",",rowGroupColsSvc:Z,valueFrom:W})}isExportSuppressed(){return this.gos.get("suppressCsvExport")}};function EL(z,J){return z.csvCreator?.getDataAsCsv(J)}function KL(z,J){z.csvCreator?.exportDataAsCsv(J)}var EX={moduleName:"CsvExport",version:i,beans:[BL],apiFunctions:{getDataAsCsv:EL,exportDataAsCsv:KL},dependsOn:[W5]},KX=class extends k0{constructor(z,J){super();if(this.ctrl=z,J)this.beans=J}postConstruct(){this.refreshTooltip()}setBrowserTooltip(z,J){let Z=this.ctrl.getGui();if(!Z)return;if(z!=null&&(z!=""||J))Z.setAttribute("title",z);else Z.removeAttribute("title")}updateTooltipText(){let{getTooltipValue:z}=this.ctrl;if(z)this.tooltip=z()}createTooltipFeatureIfNeeded(){if(this.tooltipManager==null){let z=this.beans.registry.createDynamicBean("tooltipStateManager",!0,this.ctrl,()=>this.tooltip);if(z)this.tooltipManager=this.createBean(z,this.beans.context)}}attemptToShowTooltip(){this.tooltipManager?.prepareToShowTooltip()}attemptToHideTooltip(){this.tooltipManager?.hideTooltip()}setTooltipAndRefresh(z){this.tooltip=z,this.refreshTooltip()}refreshTooltip(z){if(this.browserTooltips=this.beans.gos.get("enableBrowserTooltips"),this.updateTooltipText(),this.browserTooltips)this.setBrowserTooltip(this.tooltip),this.tooltipManager=this.destroyBean(this.tooltipManager,this.beans.context);else this.setBrowserTooltip(z?"":null,z),this.createTooltipFeatureIfNeeded()}destroy(){this.tooltipManager=this.destroyBean(this.tooltipManager,this.beans.context),super.destroy()}},FL=1000,LL=1000,M8=100,k8,E6=!1,DL=class extends k0{constructor(z,J){super();this.tooltipCtrl=z,this.getTooltipValue=J,this.interactionEnabled=!1,this.isInteractingWithTooltip=!1,this.state=0,this.tooltipInstanceCount=0,this.tooltipMouseTrack=!1}wireBeans(z){this.popupSvc=z.popupSvc}postConstruct(){if(this.gos.get("tooltipInteraction"))this.interactionEnabled=!0;this.tooltipTrigger=this.getTooltipTrigger(),this.tooltipMouseTrack=this.gos.get("tooltipMouseTrack");let z=this.tooltipCtrl.getGui();if(this.tooltipTrigger===0)this.addManagedListeners(z,{mouseenter:this.onMouseEnter.bind(this),mouseleave:this.onMouseLeave.bind(this)});if(this.tooltipTrigger===1)this.addManagedListeners(z,{focusin:this.onFocusIn.bind(this),focusout:this.onFocusOut.bind(this)});if(this.addManagedListeners(z,{mousemove:this.onMouseMove.bind(this)}),!this.interactionEnabled)this.addManagedListeners(z,{mousedown:this.onMouseDown.bind(this),keydown:this.onKeyDown.bind(this)})}getGridOptionsTooltipDelay(z){let J=this.gos.get(z);return Math.max(200,J)}getTooltipDelay(z){return this.tooltipCtrl[`getTooltip${z}DelayOverride`]?.()??this.getGridOptionsTooltipDelay(`tooltip${z}Delay`)}destroy(){this.setToDoNothing(),super.destroy()}getTooltipTrigger(){let z=this.gos.get("tooltipTrigger");if(!z||z==="hover")return 0;return 1}onMouseEnter(z){if(this.interactionEnabled&&this.interactiveTooltipTimeoutId)this.unlockService(),this.startHideTimeout();if(a4())return;if(E6)this.showTooltipTimeoutId=window.setTimeout(()=>{this.prepareToShowTooltip(z)},M8);else this.prepareToShowTooltip(z)}onMouseMove(z){if(this.lastMouseEvent)this.lastMouseEvent=z;if(this.tooltipMouseTrack&&this.state===2&&this.tooltipComp)this.positionTooltip()}onMouseDown(){this.setToDoNothing()}onMouseLeave(){if(this.interactionEnabled)this.lockService();else this.setToDoNothing()}onFocusIn(){this.prepareToShowTooltip()}onFocusOut(z){let J=z.relatedTarget,Q=this.tooltipCtrl.getGui(),Z=this.tooltipComp?.getGui();if(this.isInteractingWithTooltip||Q.contains(J)||this.interactionEnabled&&Z?.contains(J))return;this.setToDoNothing()}onKeyDown(){if(this.isInteractingWithTooltip)this.isInteractingWithTooltip=!1;this.setToDoNothing()}prepareToShowTooltip(z){if(this.state!=0||E6)return;let J=0;if(z)J=this.isLastTooltipHiddenRecently()?this.getTooltipDelay("SwitchShow"):this.getTooltipDelay("Show");this.lastMouseEvent=z||null,this.showTooltipTimeoutId=window.setTimeout(this.showTooltip.bind(this),J),this.state=1}isLastTooltipHiddenRecently(){return Date.now()-k8this.hideTooltip(!0),...J.getAdditionalParams?.()});this.state=2,this.tooltipInstanceCount++;let Z=this.newTooltipComponentCallback.bind(this,this.tooltipInstanceCount);this.createTooltipComp(Q,Z)}hideTooltip(z){if(!z&&this.isInteractingWithTooltip)return;if(this.tooltipComp)this.destroyTooltipComp(),k8=Date.now();if(this.eventSvc.dispatchEvent({type:"tooltipHide",parentGui:this.tooltipCtrl.getGui()}),z)this.isInteractingWithTooltip=!1;this.setToDoNothing(!0)}newTooltipComponentCallback(z,J){if(this.state!==2||this.tooltipInstanceCount!==z){this.destroyBean(J);return}let Z=J.getGui();if(this.tooltipComp=J,!Z.classList.contains("ag-tooltip"))Z.classList.add("ag-tooltip-custom");if(this.tooltipTrigger===0)Z.classList.add("ag-tooltip-animate");if(this.interactionEnabled)Z.classList.add("ag-tooltip-interactive");let $=this.getLocaleTextFunc(),X=this.popupSvc?.addPopup({eChild:Z,ariaLabel:$("ariaLabelTooltip","Tooltip")});if(X)this.tooltipPopupDestroyFunc=X.hideFunc;if(this.positionTooltip(),this.tooltipTrigger===1){let Y=()=>this.setToDoNothing();[this.onBodyScrollEventCallback]=this.addManagedEventListeners({bodyScroll:Y}),this.setEventHandlers(Y)}if(this.interactionEnabled){if([this.tooltipMouseEnterListener,this.tooltipMouseLeaveListener]=this.addManagedElementListeners(Z,{mouseenter:this.onTooltipMouseEnter.bind(this),mouseleave:this.onTooltipMouseLeave.bind(this)}),[this.onDocumentKeyDownCallback]=this.addManagedElementListeners(Y0(this.beans),{keydown:(Y)=>{if(!Z.contains(Y?.target))this.onKeyDown()}}),this.tooltipTrigger===1)[this.tooltipFocusInListener,this.tooltipFocusOutListener]=this.addManagedElementListeners(Z,{focusin:this.onTooltipFocusIn.bind(this),focusout:this.onTooltipFocusOut.bind(this)})}this.eventSvc.dispatchEvent({type:"tooltipShow",tooltipGui:Z,parentGui:this.tooltipCtrl.getGui()}),this.startHideTimeout()}onTooltipMouseEnter(){this.isInteractingWithTooltip=!0,this.unlockService()}onTooltipMouseLeave(){if(this.isTooltipFocused())return;this.isInteractingWithTooltip=!1,this.lockService()}onTooltipFocusIn(){this.isInteractingWithTooltip=!0}isTooltipFocused(){let z=this.tooltipComp?.getGui(),J=n(this.beans);return!!z&&z.contains(J)}onTooltipFocusOut(z){let J=this.tooltipCtrl.getGui();if(this.isTooltipFocused())return;if(this.isInteractingWithTooltip=!1,J.contains(z.relatedTarget))this.startHideTimeout();else this.hideTooltip()}positionTooltip(){let z={type:"tooltip",ePopup:this.tooltipComp.getGui(),nudgeY:18,skipObserver:this.tooltipMouseTrack};if(this.lastMouseEvent)this.popupSvc?.positionPopupUnderMouseEvent({...z,mouseEvent:this.lastMouseEvent});else this.popupSvc?.positionPopupByComponent({...z,eventSource:this.tooltipCtrl.getGui(),position:"under",keepWithinBounds:!0,nudgeY:5})}destroyTooltipComp(){this.tooltipComp.getGui().classList.add("ag-tooltip-hiding");let z=this.tooltipPopupDestroyFunc,J=this.tooltipComp,Q=this.tooltipTrigger===0?LL:0;window.setTimeout(()=>{z(),this.destroyBean(J)},Q),this.clearTooltipListeners(),this.tooltipPopupDestroyFunc=void 0,this.tooltipComp=void 0}clearTooltipListeners(){for(let z of[this.tooltipMouseEnterListener,this.tooltipMouseLeaveListener,this.tooltipFocusInListener,this.tooltipFocusOutListener])if(z)z();this.tooltipMouseEnterListener=this.tooltipMouseLeaveListener=this.tooltipFocusInListener=this.tooltipFocusOutListener=null}lockService(){E6=!0,this.interactiveTooltipTimeoutId=window.setTimeout(()=>{this.unlockService(),this.setToDoNothing()},M8)}unlockService(){E6=!1,this.clearInteractiveTimeout()}startHideTimeout(){this.clearHideTimeout(),this.hideTooltipTimeoutId=window.setTimeout(this.hideTooltip.bind(this),this.getTooltipDelay("Hide"))}clearShowTimeout(){if(!this.showTooltipTimeoutId)return;window.clearTimeout(this.showTooltipTimeoutId),this.showTooltipTimeoutId=void 0}clearHideTimeout(){if(!this.hideTooltipTimeoutId)return;window.clearTimeout(this.hideTooltipTimeoutId),this.hideTooltipTimeoutId=void 0}clearInteractiveTimeout(){if(!this.interactiveTooltipTimeoutId)return;window.clearTimeout(this.interactiveTooltipTimeoutId),this.interactiveTooltipTimeoutId=void 0}clearTimeouts(){this.clearShowTimeout(),this.clearHideTimeout(),this.clearInteractiveTimeout()}},ML=class extends KX{constructor(z,J,Q){super(z,Q);this.highlightTracker=J,this.onHighlight=this.onHighlight.bind(this)}postConstruct(){super.postConstruct(),this.wireHighlightListeners()}wireHighlightListeners(){this.addManagedPropertyListener("tooltipTrigger",({currentValue:z})=>{this.setTooltipMode(z)}),this.setTooltipMode(this.gos.get("tooltipTrigger")),this.highlightTracker.addEventListener("itemHighlighted",this.onHighlight)}onHighlight(z){if(this.tooltipMode!==1)return;if(z.highlighted)this.attemptToShowTooltip();else this.attemptToHideTooltip()}setTooltipMode(z="focus"){this.tooltipMode=z==="focus"?1:0}destroy(){this.highlightTracker.removeEventListener("itemHighlighted",this.onHighlight),super.destroy()}},kL=class extends hZ{constructor(){super({tag:"div",cls:"ag-tooltip"})}init(z){let{value:J}=z,Q=this.getGui();Q.textContent=T2(J);let Z=z.location.replace(/([a-z])([A-Z0-9])/g,"$1-$2").toLowerCase();Q.classList.add(`ag-${Z}-tooltip`)}},fL=".ag-tooltip{background-color:var(--ag-tooltip-background-color);border:var(--ag-tooltip-border);border-radius:var(--ag-border-radius);color:var(--ag-tooltip-text-color);padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);position:absolute;white-space:normal;z-index:99999;&:where(.ag-cell-editor-tooltip),&:where(.ag-cell-formula-tooltip){background-color:var(--ag-tooltip-error-background-color);border:var(--ag-tooltip-error-border);color:var(--ag-tooltip-error-text-color);font-weight:500}}.ag-tooltip-custom{position:absolute;z-index:99999}.ag-tooltip-custom:where(:not(.ag-tooltip-interactive)),.ag-tooltip:where(:not(.ag-tooltip-interactive)){pointer-events:none}.ag-tooltip-animate{transition:opacity 1s;&:where(.ag-tooltip-hiding){opacity:0}}";function f8(z,J){return{top:z.top-J.top,left:z.left-J.left,right:z.right-J.left,bottom:z.bottom-J.top}}function q2(z,J,Q,Z=0){let[$,X]=Q.split("-"),Y=FX(z,X),q=SL(J,$),G=VL($,X);return{x:Y.x-q.x+G.dx*Z,y:Y.y-q.y+G.dy*Z}}function FX(z,J){let Q=(z.left+z.right)/2,Z=(z.top+z.bottom)/2;switch(J){case"tl":return{x:z.left,y:z.top};case"tc":return{x:Q,y:z.top};case"tr":return{x:z.right,y:z.top};case"l":return{x:z.left,y:Z};case"c":return{x:Q,y:Z};case"r":return{x:z.right,y:Z};case"bl":return{x:z.left,y:z.bottom};case"bc":return{x:Q,y:z.bottom};case"br":return{x:z.right,y:z.bottom}}}function SL(z,J){return FX({top:0,left:0,right:z.width,bottom:z.height},J)}function VL(z,J){let Q=S8(z),Z=S8(J),$=V8(z),X=V8(J);return{dx:Math.sign(Z-Q),dy:Math.sign(X-$)}}function S8(z){let J=z.length===2?z[1]:z;if(J==="l")return-1;if(J==="r")return 1;return 0}function V8(z){if(z.length===1)return 0;if(z.startsWith("t"))return-1;if(z.startsWith("b"))return 1;return 0}var K6=0,RL=200,AL=class extends k0{constructor(){super(...arguments);this.beanName="popupSvc",this.popupList=[]}postConstruct(){this.addManagedEventListeners({stylesChanged:this.handleThemeChange.bind(this)})}getPopupParent(){let z=this.gos.get("popupParent");if(z)return z;return this.getDefaultPopupParent()}positionPopupUnderMouseEvent(z){let{ePopup:J,nudgeX:Q,nudgeY:Z,skipObserver:$}=z;this.positionPopup({ePopup:J,nudgeX:Q,nudgeY:Z,keepWithinBounds:!0,skipObserver:$,updatePosition:()=>this.calculatePointerAlign(z.mouseEvent),postProcessCallback:()=>this.callPostProcessPopup(z.additionalParams,z.type,z.ePopup,null,z.mouseEvent)})}calculatePointerAlign(z){let J=this.getParentRect();return{x:z.clientX-J.left,y:z.clientY-J.top}}positionPopupByComponent(z){let{ePopup:J,nudgeX:Q,nudgeY:Z,keepWithinBounds:$,eventSource:X,alignSide:Y="left",position:q="over",type:G}=z,U=X.getBoundingClientRect(),_=this.getParentRect();this.setAlignedTo(X,J);let H=()=>{let W=f8(U,_),B={width:J.offsetWidth,height:J.offsetHeight},E=Y==="right";if(q==="over")return this.setAlignedStyles(J,"over"),q2(W,B,E?"tr-tr":"tl-tl");if(this.setAlignedStyles(J,"under"),this.shouldRenderUnderOrAbove(J,U,_,z.nudgeY||0)==="under")return q2(W,B,E?"tr-br":"tl-bl");let F=q2(W,B,E?"br-tr":"bl-tl");return F.y-=(Z||0)*2,F};this.positionPopup({ePopup:J,nudgeX:Q,nudgeY:Z,keepWithinBounds:$,updatePosition:H,postProcessCallback:()=>this.callPostProcessPopup(z.additionalParams,G,J,X,null)})}positionPopupForMenu(z){let{eventSource:J,ePopup:Q,event:Z}=z,$=J.getBoundingClientRect(),X=this.getParentRect();this.setAlignedTo(J,Q);let Y=!1,q=()=>{let G=f8($,X),U=this.keepXYWithinBounds(Q,G.top,0),_=Q.clientWidth>0?Q.clientWidth:200;if(!Y)Q.style.minWidth=`${_}px`,Y=!0;let W=X.right-X.left-_,B={width:_,height:Q.offsetHeight},E=q2(G,B,"tl-tr").x-2,K=q2(G,B,"tr-tl").x,F;if(this.gos.get("enableRtl")){if(F=K,F<0)F=E,this.setAlignedStyles(Q,"left");if(F>W)F=0,this.setAlignedStyles(Q,"right")}else{if(F=E,F>W)F=K,this.setAlignedStyles(Q,"right");if(F<0)F=0,this.setAlignedStyles(Q,"left")}return{x:F,y:U}};this.positionPopup({ePopup:Q,keepWithinBounds:!0,updatePosition:q,postProcessCallback:()=>this.callPostProcessPopup(z.additionalParams,"subMenu",Q,J,Z instanceof MouseEvent?Z:void 0)})}shouldRenderUnderOrAbove(z,J,Q,Z){let $=Q.bottom-J.bottom,X=J.top-Q.top,Y=z.offsetHeight+Z;if($>Y)return"under";if(X>Y||X>$)return"above";return"under"}setAlignedStyles(z,J){let Q=this.getPopupIndex(z);if(Q===-1)return;let Z=this.popupList[Q],{alignedToElement:$}=Z;if(!$)return;let X=["right","left","over","above","under"];for(let Y of X)$.classList.remove(`ag-has-popup-positioned-${Y}`),z.classList.remove(`ag-popup-positioned-${Y}`);if(!J)return;$.classList.add(`ag-has-popup-positioned-${J}`),z.classList.add(`ag-popup-positioned-${J}`)}setAlignedTo(z,J){let Q=this.getPopupIndex(J);if(Q!==-1){let Z=this.popupList[Q];Z.alignedToElement=z}}positionPopup(z){let{ePopup:J,keepWithinBounds:Q,nudgeX:Z,nudgeY:$,skipObserver:X,updatePosition:Y}=z,q={width:0,height:0},G=(U=!1)=>{let{x:_,y:H}=Y();if(U&&J.clientWidth===q.width&&J.clientHeight===q.height)return;if(q.width=J.clientWidth,q.height=J.clientHeight,Z)_+=Z;if($)H+=$;if(Q)_=this.keepXYWithinBounds(J,_,1),H=this.keepXYWithinBounds(J,H,0);if(J.style.left=`${_}px`,J.style.top=`${H}px`,z.postProcessCallback)z.postProcessCallback()};if(G(),!X){let U=j4(this.beans,J,()=>G(!0));setTimeout(()=>U(),RL)}}getParentRect(){let z=Y0(this.beans),J=this.getPopupParent();if(J===z.body)J=z.documentElement;else if(getComputedStyle(J).position==="static")J=J.offsetParent;return d8(J)}keepXYWithinBounds(z,J,Q){let Z=Q===0,$=Z?"clientHeight":"clientWidth",X=Z?"top":"left",Y=Z?"height":"width",q=Z?"scrollTop":"scrollLeft",G=Y0(this.beans),U=G.documentElement,_=this.getPopupParent(),H=z.getBoundingClientRect(),W=_.getBoundingClientRect(),B=G.documentElement.getBoundingClientRect(),E=_===G.body,K=Math.ceil(H[Y]),L=E?(Z?n8:P6)(U)+U[q]:_[$];if(E)L-=Math.abs(B[X]-W[X]);let D=L-K;return Math.min(Math.max(J,0),Math.max(D,0))}addPopup(z){let{eChild:J,ariaLabel:Q,ariaOwns:Z,alwaysOnTop:$,positionCallback:X,anchorToElement:Y}=z,q=this.getPopupIndex(J);if(q!==-1)return{hideFunc:this.popupList[q].hideFunc};this.initialisePopupPosition(J);let G=this.createPopupWrapper(J,!!$,Q,Z),U=this.addEventListenersToPopup({...z,wrapperEl:G});if(X)X();return this.addPopupToPopupList(J,G,U,Y),{hideFunc:U}}initialisePopupPosition(z){let Q=this.getPopupParent().getBoundingClientRect();if(!P(z.style.top))z.style.top=`${Q.top*-1}px`;if(!P(z.style.left))z.style.left=`${Q.left*-1}px`}createPopupWrapper(z,J,Q,Z){let $=this.getPopupParent(),{environment:X,gos:Y}=this.beans,q=H0({tag:"div"});if(X.applyThemeClasses(q),q.classList.add("ag-popup"),z.classList.add(Y.get("enableRtl")?"ag-rtl":"ag-ltr","ag-popup-child"),!z.hasAttribute("role"))U0(z,"dialog");if(Q)_0(z,Q);else if(Z)z.id||(z.id=`popup-component-${K6}`),K7(Z,z.id);if(q.appendChild(z),$.appendChild(q),J)this.setAlwaysOnTop(z,!0);else this.bringPopupToFront(z);return q}addEventListenersToPopup(z){let J=this.beans,Q=Y0(J),{wrapperEl:Z,eChild:$,closedCallback:X,afterGuiAttached:Y,closeOnEsc:q,modal:G,ariaOwns:U}=z,_=!1,H=(K)=>{if(!Z.contains(n(J)))return;if(K.key===k.ESCAPE&&!this.isStopPropagation(K))E({keyboardEvent:K})},W=(K)=>E({mouseEvent:K}),B=(K)=>E({touchEvent:K}),E=(K={})=>{let{mouseEvent:F,touchEvent:L,keyboardEvent:D,forceHide:M}=K;if(!M&&(this.isEventFromCurrentPopup({mouseEvent:F,touchEvent:L},$)||_))return;if(_=!0,Z.remove(),Q.removeEventListener("keydown",H),Q.removeEventListener("mousedown",W),Q.removeEventListener("touchstart",B),Q.removeEventListener("contextmenu",W),this.eventSvc.removeListener("dragStarted",W),X)X(F||L||D);this.removePopupFromPopupList($,U)};if(Y)Y({hidePopup:E});return window.setTimeout(()=>{if(q)Q.addEventListener("keydown",H);if(G)Q.addEventListener("mousedown",W),this.eventSvc.addListener("dragStarted",W),Q.addEventListener("touchstart",B),Q.addEventListener("contextmenu",W)},0),E}addPopupToPopupList(z,J,Q,Z){if(this.popupList.push({element:z,wrapper:J,hideFunc:Q,instanceId:K6,isAnchored:!!Z}),Z)this.setPopupPositionRelatedToElement(z,Z);K6=K6+1}getPopupIndex(z){return this.popupList.findIndex((J)=>J.element===z)}setPopupPositionRelatedToElement(z,J){let Q=this.getPopupIndex(z);if(Q===-1)return;let Z=this.popupList[Q];if(Z.stopAnchoringPromise)Z.stopAnchoringPromise.then((X)=>X?.());if(Z.stopAnchoringPromise=void 0,Z.isAnchored=!1,!J)return;let $=this.keepPopupPositionedRelativeTo({element:J,ePopup:z,hidePopup:Z.hideFunc});return Z.stopAnchoringPromise=$,Z.isAnchored=!0,$}removePopupFromPopupList(z,J){if(this.setAlignedStyles(z,null),this.setPopupPositionRelatedToElement(z,null),J)K7(J,null);this.popupList=this.popupList.filter((Q)=>Q.element!==z)}keepPopupPositionedRelativeTo(z){let J=this.getPopupParent(),Q=J.getBoundingClientRect(),{element:Z,ePopup:$}=z,X=Z.getBoundingClientRect(),Y=(H)=>Number.parseInt(H.substring(0,H.length-1),10),q=(H,W)=>{let B=Q[H]-X[H],E=Y($.style[H]);return{initialDiff:B,lastDiff:B,initial:E,last:E,direction:W}},G=q("top",0),U=q("left",1),_=this.beans.frameworkOverrides;return new N((H)=>{_.wrapIncoming(()=>{xU(()=>{let W=J.getBoundingClientRect(),B=Z.getBoundingClientRect();if(B.top==0&&B.left==0&&B.height==0&&B.width==0){z.hidePopup();return}let K=(F,L)=>{let D=Y($.style[L]);if(F.last!==D)F.initial=D,F.last=D;let M=W[L]-B[L];if(M!=F.lastDiff){let f=this.keepXYWithinBounds($,F.initial+F.initialDiff-M,F.direction);$.style[L]=`${f}px`,F.last=f}F.lastDiff=M};K(G,"top"),K(U,"left")},200).then((W)=>{H(()=>{if(W!=null)window.clearInterval(W)})})},"popupPositioning")})}isEventFromCurrentPopup(z,J){let{mouseEvent:Q,touchEvent:Z}=z,$=Q?Q:Z;if(!$)return!1;let X=this.getPopupIndex(J);if(X===-1)return!1;for(let Y=X;Yz.element)}hasAnchoredPopup(){return this.popupList.some((z)=>z.isAnchored)}isStopPropagation(z){return q4(z)}},q1={moduleName:"Popup",version:i,beans:[jL]};function h1(z){return z.get("tooltipShowMode")==="whenTruncated"}function t1(z,J){return h1(z)?y1(J):void 0}var OL=(z,J)=>{let Q=z;if(typeof Q.getTranslatedMessage==="function")return Q.getTranslatedMessage(J);return z.message},eQ=(z,J,Q)=>{let{editModelSvc:Z}=z,$=Z?.getCellValidationModel()?.getCellValidation(J)?.errorMessages,X=Z?.getRowValidationModel().getRowValidation(J)?.errorMessages,Y=$||X;return Y?.length?Y.join(Q("tooltipValidationErrorSeparator",". ")):void 0},PL=(z,J)=>{if(!h1(z.gos))return;if(J.isCellRenderer()){let Z=J.column.colDef;if(!(!!Z.showRowGroup||Z.cellRenderer==="agGroupCellRenderer"))return;return y1(()=>{let X=J.eGui;return X.querySelector(".ag-group-value")||X.querySelector(".ag-cell-value")||X})}return y1(()=>{let Z=J.eGui;return Z.children.length===0?Z:Z.querySelector(".ag-cell-value")})},TL=(z,J,Q)=>{let{editSvc:Z}=z,{column:$}=J,X=PL(z,J),Y=()=>{if(Z?.isEditing(J))return!1;if(!X)return!0;if(!$.isTooltipEnabled())return!1;return X()};return{shouldDisplayDefault:Y,shouldDisplayColumnTooltip:Y,shouldDisplayCustomTooltip:Q??Y}},vL=({beans:z,ctrl:J,value:Q,displayFunctions:Z,translate:$})=>{let{editSvc:X,formula:Y,gos:q}=z,{column:G,rowNode:U}=J,_=G.colDef;if(_.allowFormula&&Y?.active){let F=Y.getFormulaError(G,U);if(F)return{value:OL(F,$),location:"cellFormula",shouldDisplay:()=>!!Y?.getFormulaError(G,U)}}if(!X?.isEditing(J)){let F=eQ(z,J,$);if(F)return{value:F,location:"cellEditor",shouldDisplay:()=>!X?.isEditing(J)&&!!eQ(z,J,$)}}let{shouldDisplayCustomTooltip:W,shouldDisplayColumnTooltip:B}=Z;if(Q!=null)return{value:Q,location:"cell",shouldDisplay:W};let E=U.data;if(_.tooltipField&&P(E)){let F=_.tooltipField;return{value:G.isTooltipFieldContainsDots()?B2(E,F):E[F],location:"cell",shouldDisplay:B}}let K=_.tooltipValueGetter;if(K)return{value:K(C(q,{location:"cell",colDef:G.colDef,column:G,rowIndex:J.cellPosition.rowIndex,node:U,data:U.data,value:J.value,valueFormatted:J.valueFormatted})),location:"cell",shouldDisplay:B};return null},IL=class extends S{constructor(){super(...arguments);this.beanName="tooltipSvc"}setupHeaderTooltip(z,J,Q,Z){if(z)J.destroyBean(z);if(!J.isAlive())return;let $=this.gos,X=h1($),{column:Y,eGui:q}=J,G=Y.colDef;if(!Z&&X&&!G.headerComponent)Z=y1(()=>q.querySelector(".ag-header-cell-text"));let U="header",_="header",H=this.beans.colNames.getDisplayNameForColumn(Y,_,!0),W=Q??H,B={getGui:()=>q,getLocation:()=>U,getTooltipValue:()=>Q??G?.headerTooltipValueGetter?.(C($,{location:U,colDef:G,column:Y,value:W,valueFormatted:H}))??G?.headerTooltip,shouldDisplayTooltip:Z,getAdditionalParams:()=>({column:Y,colDef:Y.colDef})},E=this.createTooltipFeature(B);if(E)E=J.createBean(E),J.setRefreshFunction("tooltip",()=>E.refreshTooltip());return E}setupHeaderGroupTooltip(z,J,Q,Z){if(z)J.destroyBean(z);if(!J.isAlive())return;let $=this.gos,X=h1($),{column:Y,eGui:q}=J,G=Y.getColGroupDef();if(!Z&&X&&!G?.headerGroupComponent)Z=y1(()=>q.querySelector(".ag-header-group-text"));let U="headerGroup",_="header",H=this.beans.colNames.getDisplayNameForColumnGroup(Y,_),W=Q??H,B={getGui:()=>q,getLocation:()=>U,getTooltipValue:()=>Q??G?.headerTooltipValueGetter?.(C($,{location:U,colDef:G,column:Y,value:W,valueFormatted:H}))??G?.headerTooltip,shouldDisplayTooltip:Z,getAdditionalParams:()=>{let K={column:Y};if(G)K.colDef=G;return K}},E=this.createTooltipFeature(B);return E?J.createBean(E):E}enableCellTooltipFeature(z,J,Q){let{beans:Z}=this,{column:$,rowNode:X}=z,Y=TL(Z,z,Q),q=this.getLocaleTextFunc(),G=null,U=()=>{return G=vL({beans:Z,ctrl:z,value:J,displayFunctions:Y,translate:q}),G},H={getGui:()=>z.eGui,getLocation:()=>G?.location??"cell",getTooltipValue:()=>U()?.value,shouldDisplayTooltip:()=>{let W=G??U();if(!W)return!1;return W.shouldDisplay?W.shouldDisplay():!0},getAdditionalParams:()=>({column:$,colDef:$.colDef,rowIndex:z.cellPosition.rowIndex,node:X,data:X.data,valueFormatted:z.valueFormatted})};return this.createTooltipFeature(H,Z)}setupFullWidthRowTooltip(z,J,Q,Z){let $={getGui:()=>J.getFullWidthElement(),getTooltipValue:()=>Q,getLocation:()=>"fullWidthRow",shouldDisplayTooltip:Z},X=this.beans,Y=X.context;if(z)J.destroyBean(z,Y);let q=this.createTooltipFeature($,X);if(!q)return;return J.createBean(q,Y)}setupCellEditorTooltip(z,J){let{beans:Q}=this,{context:Z}=Q,$=J.getValidationElement?.(!0)||!J.isPopup?.()&&z.eGui;if(!$)return;let X={getGui:()=>$,getTooltipValue:()=>eQ(Q,z,this.getLocaleTextFunc()),getLocation:()=>"cellEditor",shouldDisplayTooltip:()=>{let{editModelSvc:q}=Q,G=q?.getRowValidationModel()?.getRowValidationMap(),U=q?.getCellValidationModel()?.getCellValidationMap(),_=!!G&&G.size>0,H=!!U&&U.size>0;return _||H}},Y=this.createTooltipFeature(X,Q);if(!Y)return;return z.createBean(Y,Z)}initCol(z){let{colDef:J}=z;z.tooltipEnabled=P(J.tooltipField)||P(J.tooltipValueGetter)||P(J.tooltipComponent)}createTooltipFeature(z,J){return this.beans.registry.createDynamicBean("tooltipFeature",!1,z,J)}},CL=class extends DL{createTooltipComp(z,J){H_(this.beans.userCompFactory,z)?.newAgStackInstance().then(J)}setEventHandlers(z){[this.onColumnMovedEventCallback]=this.addManagedEventListeners({columnMoved:z})}clearEventHandlers(){this.onColumnMovedEventCallback?.(),this.onColumnMovedEventCallback=void 0}},yL={moduleName:"Tooltip",version:i,beans:[IL],dynamicBeans:{tooltipFeature:KX,highlightTooltipFeature:ML,tooltipStateManager:CL},userComponents:{agTooltipComponent:kL},dependsOn:[q1],css:[fL]};var bL=".ag-cell-inline-editing{border:var(--ag-cell-editing-border)!important;border-radius:var(--ag-border-radius);box-shadow:var(--ag-cell-editing-shadow);padding:0;z-index:1;.ag-cell-edit-wrapper,.ag-cell-editor,.ag-cell-wrapper,:where(.ag-cell-editor) .ag-input-field-input,:where(.ag-cell-editor) .ag-wrapper{height:100%;line-height:normal;min-height:100%;width:100%}&.ag-cell-editing-error{border-color:var(--ag-invalid-color)!important}}:where(.ag-popup-editor) .ag-large-text{background-color:var(--ag-background-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);padding:0}.ag-large-text-input{display:block;height:auto;padding:var(--ag-cell-horizontal-padding)}:where(.ag-rtl .ag-large-text-input) .ag-text-area-input{resize:none}:where(.ag-ltr) .ag-checkbox-edit{padding-left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-checkbox-edit{padding-right:var(--ag-cell-horizontal-padding)}:where(.ag-row.ag-row-editing-invalid .ag-cell-inline-editing){opacity:.8}.ag-popup-editor{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}";var s1=class extends V1{constructor(z,J="ag-text-field",Q="text"){super(z,J,Q)}postConstruct(){if(super.postConstruct(),this.config.allowedCharPattern)this.preventDisallowedCharacters()}setValue(z,J){let Q=this.eInput;if(Q.value!==z)Q.value=P(z)?z:"";return super.setValue(z,J)}setStartValue(z){this.setValue(z,!0)}setCustomValidity(z){let J=this.eInput,Q=z.length>0;if(J.setCustomValidity(z),Q)J.reportValidity();HZ(J,Q)}preventDisallowedCharacters(){let z=new RegExp(`[${this.config.allowedCharPattern}]`),J=(Q)=>{if(!_$(Q))return;if(Q.key&&!z.test(Q.key))Q.preventDefault()};this.addManagedListeners(this.eInput,{keydown:J,paste:(Q)=>{if(Q.clipboardData?.getData("text")?.split("").some(($)=>!z.test($)))Q.preventDefault()}})}},Zz={selector:"AG-INPUT-TEXT-FIELD",component:s1};var xL=class extends k_{constructor(z){super();this.cellEditorInput=z,this.eEditor=j}initialiseEditor(z){let{cellEditorInput:J}=this;this.setTemplate({tag:"div",cls:"ag-cell-edit-wrapper",children:[J.getTemplate()]},J.getAgComponents());let{eEditor:Q}=this,{cellStartedEdit:Z,eventKey:$,suppressPreventDefault:X}=z;Q.getInputElement().setAttribute("title",""),J.init(Q,z);let Y,q=!0;if(Z){if(this.focusAfterAttached=!0,$===k.BACKSPACE||$===k.DELETE)Y="";else if($?.length===1)if(X)q=!1;else Y=$;else if(Y=J.getStartValue(),$!==k.F2)this.highlightAllOnFocus=!0}else this.focusAfterAttached=!1,Y=J.getStartValue();if(q&&Y!=null)Q.setStartValue(Y);this.addGuiEventListener("keydown",(G)=>{let{key:U}=G;if(U===k.PAGE_UP||U===k.PAGE_DOWN)G.preventDefault()})}afterGuiAttached(){let z=this.getLocaleTextFunc(),J=this.eEditor;if(J.setInputAriaLabel(z("ariaInputEditor","Input Editor")),!this.focusAfterAttached)return;if(!jz())J.getFocusableElement().focus();let Q=J.getInputElement();if(this.highlightAllOnFocus)Q.select();else this.cellEditorInput.setCaret?.()}focusIn(){let{eEditor:z}=this,J=z.getFocusableElement(),Q=z.getInputElement();J.focus(),Q.select()}getValue(){return this.cellEditorInput.getValue()}agSetEditValue(z){this.params.value=z;let J=this.cellEditorInput.getStartValue();this.eEditor.setStartValue(J??null)}isPopup(){return!1}getValidationElement(){return this.eEditor.getInputElement()}getValidationErrors(){return this.cellEditorInput.getValidationErrors()}};var LX=class extends s1{constructor(z){super(z,"ag-number-field","number")}postConstruct(){super.postConstruct();let z=this.eInput;this.addManagedListeners(z,{blur:()=>{let X=Number.parseFloat(z.value),Y=isNaN(X)?"":this.normalizeValue(X.toString());if(this.value!==Y)this.setValue(Y)},wheel:this.onWheel.bind(this)}),z.step="any";let{precision:J,min:Q,max:Z,step:$}=this.config;if(typeof J==="number")this.setPrecision(J);if(typeof Q==="number")this.setMin(Q);if(typeof Z==="number")this.setMax(Z);if(typeof $==="number")this.setStep($)}onWheel(z){if(n(this.beans)===this.eInput)z.preventDefault()}normalizeValue(z){if(z==="")return"";if(this.precision!=null)z=this.adjustPrecision(z);return z}adjustPrecision(z,J){let Q=this.precision;if(Q==null)return z;if(J){let $=Number.parseFloat(z).toFixed(Q);return Number.parseFloat($).toString()}let Z=String(z).split(".");if(Z.length>1){if(Z[1].length<=Q)return z;else if(Q>0)return`${Z[0]}.${Z[1].slice(0,Q)}`}return Z[0]}setMin(z){if(this.min===z)return this;return this.min=z,f4(this.eInput,"min",z),this}setMax(z){if(this.max===z)return this;return this.max=z,f4(this.eInput,"max",z),this}setPrecision(z){return this.precision=z,this}setStep(z){if(this.step===z)return this;return this.step=z,f4(this.eInput,"step",z),this}setValue(z,J){return this.setValueOrInputValue((Q)=>super.setValue(Q,J),()=>this,z)}setStartValue(z){return this.setValueOrInputValue((J)=>super.setValue(J,!0),(J)=>{this.eInput.value=J},z)}setValueOrInputValue(z,J,Q){if(P(Q)){let Z=this.isScientificNotation(Q);if(Z&&this.eInput.validity.valid)return z(Q);if(!Z){Q=this.adjustPrecision(Q);let $=this.normalizeValue(Q);Z=Q!=$}if(Z)return J(Q)}return z(Q)}getValue(z=!1){let J=this.eInput;if(!J.validity.valid&&!z)return;let Q=J.value;if(this.isScientificNotation(Q))return this.adjustPrecision(Q,!0);return super.getValue()}isScientificNotation(z){return typeof z==="string"&&z.includes("e")}};var wL=".ag-list-item{align-items:center;display:flex;height:var(--ag-list-item-height);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;&.ag-active-item{background-color:var(--ag-row-hover-color)}}",NL="ag-active-item",gL=(z,J)=>({tag:"div",cls:`ag-list-item ag-${z}-list-item`,attrs:{role:"option"},children:[{tag:"span",cls:`ag-list-item-text ag-${z}-list-item-text`,ref:"eText",children:J}]}),hL=class extends I0{constructor(z,J,Q){super(gL(z,J));this.label=J,this.value=Q,this.eText=j}postConstruct(){this.createTooltip(),this.addEventListeners()}setHighlighted(z){let J=this.getGui();J.classList.toggle(NL,z),o6(J,z),this.dispatchLocalEvent({type:"itemHighlighted",highlighted:z})}getHeight(){return this.getGui().clientHeight}setIndex(z,J){let Q=this.getGui();I2(Q,z),v2(Q,J)}createTooltip(){let z={getTooltipValue:()=>this.label,getGui:()=>this.getGui(),getLocation:()=>"UNKNOWN",shouldDisplayTooltip:()=>l8(this.eText)},J=this.createOptionalManagedBean(this.beans.registry.createDynamicBean("highlightTooltipFeature",!1,z,this));if(J)this.tooltipFeature=J}addEventListeners(){let z=this.getParentComponent();if(!z)return;this.addGuiEventListener("mouseover",()=>{z.highlightItem(this)}),this.addGuiEventListener("mousedown",(J)=>{J.preventDefault(),J.stopPropagation(),z.setValue(this.value)})}},uL=class extends I0{constructor(z="default"){super({tag:"div",cls:`ag-list ag-${z}-list`});this.cssIdentifier=z,this.options=[],this.listItems=[],this.highlightedItem=null,this.registerCSS(wL)}postConstruct(){let z=this.getGui();this.addManagedElementListeners(z,{mouseleave:()=>this.clearHighlighted()})}handleKeyDown(z){let J=z.key;switch(J){case k.ENTER:if(!this.highlightedItem)this.setValue(this.getValue());else{let Q=this.listItems.indexOf(this.highlightedItem);this.setValueByIndex(Q)}break;case k.DOWN:case k.UP:z.preventDefault(),this.navigate(J);break;case k.PAGE_DOWN:case k.PAGE_UP:case k.PAGE_HOME:case k.PAGE_END:z.preventDefault(),this.navigateToPage(J);break}}addOptions(z){for(let J of z)this.addOption(J);return this}addOption(z){let{value:J,text:Q}=z,Z=Q??J;return this.options.push({value:J,text:Z}),this.renderOption(J,Z),this.updateIndices(),this}clearOptions(){this.options=[],this.reset(!0);for(let z of this.listItems)z.destroy();J0(this.getGui()),this.listItems=[],this.refreshAriaRole()}updateOptions(z){let J=this.options!==z;if(J)this.clearOptions(),this.addOptions(z);return J}setValue(z,J){if(this.value===z)return this.fireItemSelected(),this;if(z==null)return this.reset(J),this;let Q=this.options.findIndex((Z)=>Z.value===z);if(Q!==-1){let Z=this.options[Q];if(this.value=Z.value,this.displayValue=Z.text,this.highlightItem(this.listItems[Q]),!J)this.fireChangeEvent()}return this}setValueByIndex(z){return this.setValue(this.options[z].value)}getValue(){return this.value}getDisplayValue(){return this.displayValue}refreshHighlighted(){this.clearHighlighted();let z=this.options.findIndex((J)=>J.value===this.value);if(z!==-1)this.highlightItem(this.listItems[z])}highlightItem(z){let J=z.getGui();if(!B0(J))return;this.clearHighlighted(),z.setHighlighted(!0),this.highlightedItem=z;let Q=this.getGui(),{scrollTop:Z,clientHeight:$}=Q,{offsetTop:X,offsetHeight:Y}=J;if(X+Y>Z+$||X{Q.setIndex(Z+1,J)})}fireChangeEvent(){this.dispatchLocalEvent({type:"fieldValueChanged"}),this.fireItemSelected()}fireItemSelected(){this.dispatchLocalEvent({type:"selectedItem"})}},mL=".ag-picker-field-display{flex:1 1 auto}.ag-picker-field{align-items:center;display:flex}.ag-picker-field-icon{border:0;cursor:pointer;display:flex;margin:0;padding:0}.ag-picker-field-wrapper{background-color:var(--ag-picker-button-background-color);border:var(--ag-picker-button-border);border-radius:5px;min-height:max(var(--ag-list-item-height),calc(var(--ag-spacing)*4));overflow:hidden;&:where(.invalid){background-color:var(--ag-input-invalid-background-color);border:var(--ag-input-invalid-border);color:var(--ag-input-invalid-text-color)}}.ag-picker-field-wrapper:where(.ag-picker-has-focus),.ag-picker-field-wrapper:where(:focus-within){background-color:var(--ag-picker-button-focus-background-color);border:var(--ag-picker-button-focus-border);box-shadow:var(--ag-focus-shadow);&:where(.invalid){box-shadow:var(--ag-focus-error-shadow)}}.ag-picker-field-wrapper:disabled{opacity:.5}",cL={tag:"div",cls:"ag-picker-field",role:"presentation",children:[{tag:"div",ref:"eLabel"},{tag:"div",ref:"eWrapper",cls:"ag-wrapper ag-picker-field-wrapper ag-picker-collapsed",children:[{tag:"div",ref:"eDisplayField",cls:"ag-picker-field-display"},{tag:"div",ref:"eIcon",cls:"ag-picker-field-icon",attrs:{"aria-hidden":"true"}}]}]},iL=class extends x${constructor(z){super(z,z?.template||cL,z?.agComponents||[],z?.className);if(this.isPickerDisplayed=!1,this.skipClick=!1,this.pickerGap=4,this.hideCurrentPicker=null,this.eLabel=j,this.eWrapper=j,this.eDisplayField=j,this.eIcon=j,this.registerCSS(mL),this.ariaRole=z?.ariaRole,this.onPickerFocusIn=this.onPickerFocusIn.bind(this),this.onPickerFocusOut=this.onPickerFocusOut.bind(this),!z)return;let{pickerGap:J,maxPickerHeight:Q,variableWidth:Z,minPickerWidth:$,maxPickerWidth:X}=z;if(J!=null)this.pickerGap=J;if(this.variableWidth=!!Z,Q!=null)this.setPickerMaxHeight(Q);if($!=null)this.setPickerMinWidth($);if(X!=null)this.setPickerMaxWidth(X)}postConstruct(){super.postConstruct(),this.setupAria();let z=`ag-${this.getCompId()}-display`;this.eDisplayField.setAttribute("id",z);let J=this.getAriaElement();this.addManagedElementListeners(J,{keydown:this.onKeyDown.bind(this)}),this.addManagedElementListeners(this.eLabel,{mousedown:this.onLabelOrWrapperMouseDown.bind(this)}),this.addManagedElementListeners(this.eWrapper,{mousedown:this.onLabelOrWrapperMouseDown.bind(this)});let{pickerIcon:Q,inputWidth:Z}=this.config;if(Q){let $=this.beans.iconSvc.createIconNoSpan(Q);if($)this.eIcon.appendChild($)}if(Z!=null)this.setInputWidth(Z)}setupAria(){let z=this.getAriaElement();if(z.setAttribute("tabindex",this.gos.get("tabIndex").toString()),j0(z,!1),this.ariaRole)U0(z,this.ariaRole)}onLabelOrWrapperMouseDown(z){if(z){let J=this.getFocusableElement();if(J!==this.eWrapper&&z?.target===J)return;z.preventDefault(),this.getFocusableElement().focus()}if(this.skipClick){this.skipClick=!1;return}if(this.isDisabled())return;if(this.isPickerDisplayed)this.hidePicker();else this.showPicker()}onKeyDown(z){switch(z.key){case k.UP:case k.DOWN:case k.ENTER:case k.SPACE:z.preventDefault(),this.onLabelOrWrapperMouseDown();break;case k.ESCAPE:if(this.isPickerDisplayed){if(z.preventDefault(),z.stopPropagation(),this.hideCurrentPicker)this.hideCurrentPicker()}break}}showPicker(){if(this.isPickerDisplayed=!0,!this.pickerComponent)this.pickerComponent=this.createPickerComponent();let z=this.pickerComponent.getGui();z.addEventListener("focusin",this.onPickerFocusIn),z.addEventListener("focusout",this.onPickerFocusOut),this.hideCurrentPicker=this.renderAndPositionPicker(),this.toggleExpandedStyles(!0)}renderAndPositionPicker(){let z=this.pickerComponent.getGui();if(!this.gos.get("suppressScrollWhenPopupsAreOpen"))[this.destroyMouseWheelFunc]=this.addManagedEventListeners({bodyScroll:()=>{this.hidePicker()}});let J=this.getLocaleTextFunc(),{config:{pickerAriaLabelKey:Q,pickerAriaLabelValue:Z,modalPicker:$=!0},maxPickerHeight:X,minPickerWidth:Y,maxPickerWidth:q,variableWidth:G,beans:U,eWrapper:_}=this,H={modal:$,eChild:z,closeOnEsc:!0,closedCallback:()=>{let K=Vz(U);if(this.beforeHidePicker(),K&&this.isAlive())this.getFocusableElement().focus()},ariaLabel:J(Q,Z),anchorToElement:_};z.style.position="absolute";let W=U.popupSvc,B=W.addPopup(H);if(G){if(Y)z.style.minWidth=Y;if(z.style.width=FZ(P6(_)),q)z.style.maxWidth=q}else I6(z,q??P6(_));let E=X??`${C2(W.getPopupParent())}px`;return z.style.setProperty("max-height",E),this.alignPickerToComponent(),B.hideFunc}alignPickerToComponent(){if(!this.pickerComponent)return;let{pickerGap:z,config:{pickerType:J},beans:{popupSvc:Q,gos:Z},eWrapper:$,pickerComponent:X}=this,Y=Z.get("enableRtl")?"right":"left";Q.positionPopupByComponent({type:J,eventSource:$,ePopup:X.getGui(),position:"under",alignSide:Y,keepWithinBounds:!0,nudgeY:z})}beforeHidePicker(){if(this.destroyMouseWheelFunc)this.destroyMouseWheelFunc(),this.destroyMouseWheelFunc=void 0;this.toggleExpandedStyles(!1);let z=this.pickerComponent.getGui();z.removeEventListener("focusin",this.onPickerFocusIn),z.removeEventListener("focusout",this.onPickerFocusOut),this.isPickerDisplayed=!1,this.pickerComponent=void 0,this.hideCurrentPicker=null}toggleExpandedStyles(z){if(!this.isAlive())return;let J=this.getAriaElement();j0(J,z);let Q=this.eWrapper.classList;Q.toggle("ag-picker-expanded",z),Q.toggle("ag-picker-collapsed",!z)}onPickerFocusIn(){this.togglePickerHasFocus(!0)}onPickerFocusOut(z){if(!this.pickerComponent?.getGui().contains(z.relatedTarget))this.togglePickerHasFocus(!1)}togglePickerHasFocus(z){if(!this.pickerComponent)return;this.eWrapper.classList.toggle("ag-picker-has-focus",z)}hidePicker(){if(this.hideCurrentPicker)this.hideCurrentPicker(),this.dispatchLocalEvent({type:"pickerHidden"})}setInputWidth(z){return I6(this.eWrapper,z),this}getFocusableElement(){return this.eWrapper}setPickerGap(z){return this.pickerGap=z,this}setPickerMinWidth(z){if(typeof z==="number")z=`${z}px`;return this.minPickerWidth=z==null?void 0:z,this}setPickerMaxWidth(z){if(typeof z==="number")z=`${z}px`;return this.maxPickerWidth=z==null?void 0:z,this}setPickerMaxHeight(z){if(typeof z==="number")z=`${z}px`;return this.maxPickerHeight=z==null?void 0:z,this}destroy(){this.hidePicker(),super.destroy()}},pL=".ag-select{align-items:center;display:flex;&.ag-disabled{opacity:.5}}.ag-select:where(:not(.ag-cell-editor,.ag-label-align-top)){min-height:var(--ag-list-item-height)}:where(.ag-select){.ag-picker-field-wrapper{cursor:default;padding-left:var(--ag-spacing);padding-right:var(--ag-spacing)}&.ag-disabled .ag-picker-field-wrapper:focus{box-shadow:none}.ag-picker-field-display{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-picker-field-icon{align-items:center;display:flex}}.ag-select-list{background-color:var(--ag-picker-list-background-color);border:var(--ag-picker-list-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);overflow:hidden auto}.ag-select-list-item{cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none}:where(.ag-ltr) .ag-select-list-item{padding-left:var(--ag-spacing)}:where(.ag-rtl) .ag-select-list-item{padding-right:var(--ag-spacing)}.ag-select-list-item-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}",nL=class extends iL{constructor(z){super({pickerAriaLabelKey:"ariaLabelSelectField",pickerAriaLabelValue:"Select Field",pickerType:"ag-list",className:"ag-select",pickerIcon:"selectOpen",ariaRole:"combobox",...z});this.registerCSS(pL)}postConstruct(){this.tooltipFeature=this.createOptionalManagedBean(this.beans.registry.createDynamicBean("tooltipFeature",!1,{shouldDisplayTooltip:y1(()=>this.eDisplayField),getGui:()=>this.getGui()})),super.postConstruct(),this.createListComponent(),this.eWrapper.tabIndex=this.gos.get("tabIndex");let{options:z,value:J,placeholder:Q}=this.config;if(z!=null)this.addOptions(z);if(J!=null)this.setValue(J,!0);if(Q&&J==null)this.eDisplayField.textContent=Q;this.addManagedElementListeners(this.eWrapper,{focusout:this.onWrapperFocusOut.bind(this)})}onWrapperFocusOut(z){if(!this.eWrapper.contains(z.relatedTarget))this.hidePicker()}createListComponent(){let z=this.createBean(new uL("select"));this.listComponent=z,z.setParentComponent(this);let J=z.getAriaElement(),Q=`ag-select-list-${z.getCompId()}`;J.setAttribute("id",Q),WZ(this.getAriaElement(),J),z.addManagedElementListeners(z.getGui(),{mousedown:(Z)=>{Z?.preventDefault()}}),z.addManagedListeners(z,{selectedItem:()=>{this.hidePicker(),this.dispatchLocalEvent({type:"selectedItem"})},fieldValueChanged:()=>{if(!this.listComponent)return;this.setValue(this.listComponent.getValue(),!1,!0),this.hidePicker()}})}createPickerComponent(){return this.listComponent}beforeHidePicker(){this.listComponent?.hideItemTooltip(),super.beforeHidePicker()}onKeyDown(z){let{key:J}=z;if(J===k.TAB)this.hidePicker();switch(J){case k.ENTER:case k.UP:case k.DOWN:case k.PAGE_UP:case k.PAGE_DOWN:case k.PAGE_HOME:case k.PAGE_END:if(z.preventDefault(),this.isPickerDisplayed)this.listComponent?.handleKeyDown(z);else super.onKeyDown(z);break;case k.ESCAPE:super.onKeyDown(z);break;case k.SPACE:if(this.isPickerDisplayed)z.preventDefault();else super.onKeyDown(z);break}}showPicker(){let z=this.listComponent;if(!z)return;super.showPicker(),z.refreshHighlighted()}addOptions(z){for(let J of z)this.addOption(J);return this}addOption(z){return this.listComponent.addOption(z),this}clearOptions(){return this.listComponent?.clearOptions(),this.setValue(void 0,!0),this}updateOptions(z){if(this.listComponent?.updateOptions(z))this.setValue(void 0,!0);return this}setValue(z,J,Q){let{listComponent:Z,config:{placeholder:$},eDisplayField:X,tooltipFeature:Y}=this;if(this.value===z||!Z)return this;if(!Q)Z.setValue(z,!0);if(Z.getValue()===this.getValue())return this;let G=Z.getDisplayValue();if(G==null&&$)G=$;return X.textContent=G,Y?.setTooltipAndRefresh(G??null),super.setValue(z,J)}destroy(){this.listComponent=this.destroyBean(this.listComponent),super.destroy()}};var dL={tag:"ag-input-text-field",ref:"eEditor",cls:"ag-cell-editor"},rL=class{constructor(z){this.getLocaleTextFunc=z,this.cachedRaw=this}getTemplate(){return dL}getAgComponents(){return[Zz]}init(z,J){this.eEditor=z,this.params=J;let Q=J.maxLength;if(Q!=null)z.setMaxLength(Q)}getValidationErrors(){let{params:z}=this,{maxLength:J,getValidationErrors:Q}=z,Z=this.getValue(),$=this.getLocaleTextFunc(),X=[];if(J!=null&&typeof Z==="string"&&Z.length>J)X.push($("maxLengthValidation",`Must be ${J} characters or fewer.`,[String(J)]));if(!X.length)X=null;if(Q)return Q({value:Z,cellEditorParams:z,internalErrors:X});return X}getValue(){let{eEditor:z,params:J}=this,Q=z.getValue();if(!P(Q)&&!P(J.value))return J.value;if(Object.is(this.cachedRaw,Q))return this.cachedParsed;let Z=J.parseValue(Q);return this.cachedRaw=Q,this.cachedParsed=Z,Z}getStartValue(){let z=this.params;return z.useFormatter||z.column.getColDef().refData?z.formatValue(z.value):z.value}setCaret(){if(jz())this.eEditor.getInputElement().focus({preventScroll:!0});let z=this.eEditor,J=z.getValue(),Q=P(J)&&J.length||0;if(Q)z.getInputElement().setSelectionRange(Q,Q)}},R8=class extends xL{constructor(){super(new rL(()=>this.getLocaleTextFunc()))}};function tL(z,J){return z.editModelSvc?.getEditRowDataValue(J,{checkSiblings:!0})}function sL(z){let J=z.editModelSvc?.getEditMap(),Q=[];return J?.forEach((Z,$)=>{let{rowIndex:X,rowPinned:Y}=$;Z.forEach((q,G)=>{let{editorValue:U,pendingValue:_,sourceValue:H,state:W}=q,B=S4(q),E=U??_;if(E===v0)E=void 0;let K={newValue:E,oldValue:H,state:W,column:G,colId:G.getColId(),colKey:G.getColId(),rowIndex:X,rowPinned:Y},F=W==="editing";if(F||!F&&B)Q.push(K)})}),Q}function lL(z,J=!1){let{editSvc:Q}=z;if(Q?.isBatchEditing()){if(J){for(let Z of z.editModelSvc?.getEditPositions()??[])if(Z.state==="editing")Q.revertSingleCellEdit(Z)}else Kz(z,{persist:!0});Bz(z,void 0,{cancel:J})}else Q?.stopEditing(void 0,{cancel:J,source:"edit",forceStop:!J,forceCancel:J})}function aL(z,J){let Q=l(z,J);return!!z.editSvc?.isEditing(Q)}function oL(z,J){let{key:Q,colKey:Z,rowIndex:$,rowPinned:X}=J,{editSvc:Y,colModel:q}=z,G=q.getCol(Z);if(!G){V(12,{colKey:Z});return}let _=S0(z,{rowIndex:$,rowPinned:X||null,column:G});if(!_){V(290,{rowIndex:$,rowPinned:X});return}if(!Y?.isCellEditable({rowNode:_,column:G},"api"))return;if(X==null)pF(z,$);iF(z,Z),Y?.startEditing({rowNode:_,column:G},{event:Q?new KeyboardEvent("keydown",{key:Q}):void 0,source:"api",editable:!0})}function eL(z){return z.editSvc?.validateEdit()||null}var zD={tag:"div",cls:"ag-popup-editor",attrs:{tabindex:"-1"}},JD=class extends hZ{constructor(z){super(zD);this.params=z}postConstruct(){az(this.gos,this.getGui(),"popupEditorWrapper",!0),this.addKeyDownListener()}addKeyDownListener(){let z=this.getGui(),J=this.params,Q=(Z)=>{if(!pQ(this.gos,Z,J.node,J.column,!0))J.onKeyDown(Z)};this.addManagedElementListeners(z,{keydown:Q})}};function QD(z,{column:J},Q,Z,$="ui"){if(Q instanceof KeyboardEvent&&(Q.key===k.TAB||Q.key===k.ENTER||Q.key===k.F2||Q.key===k.BACKSPACE&&Z))return!0;if(Q?.shiftKey&&z.rangeSvc?.getCellRanges().length!=0)return!1;let Y=J?.getColDef(),q=ZD(z.gos,Y),G=Q?.type;if(G==="click"&&Q?.detail===1&&q===1)return!0;if(G==="dblclick"&&Q?.detail===2&&q===2)return!0;if($==="api")return!!Z;return!1}function ZD(z,J){if(z.get("suppressClickEdit")===!0)return 0;if(z.get("singleClickEdit")===!0)return 1;if(J?.singleClickEdit)return 1;return 2}function PQ(z,J){return z.editModelSvc?.hasEdits(J,{withOpenEditor:!0})??!1}function zZ(z,J){let{column:Q,rowNode:Z}=J,$=Q.getColDef();if(!Z)return PQ(z,J);let X=$.editable;if(Z.group&&$.groupRowEditable!=null){if(z.rowGroupingEditValueSvc?.isGroupCellEditable(Z,Q))return!0;return PQ(z,J)}if(Q.isColumnFunc(Z,X))return!0;return PQ(z,J)}function $D(z,J,Q="ui"){let Z=zZ(z,J);if(Z||Q==="ui")return Z;let{rowNode:$,column:X}=J;for(let Y of z.colModel.getCols())if(Y!==X&&zZ(z,{rowNode:$,column:Y}))return!0;return!1}var n6=(z,J=!1)=>{if(z!==void 0)return S4(z)||J&&z.state==="editing"};function DX(z,J,Q=!1){return n6(z.editModelSvc?.getEdit(J),Q)}var MX=(z,J,Q)=>{if(!z)return;for(let Z=0,$=z.length;Z<$;++Z){let X=z[Z];if(X.data){if(n6(J?.getEdit({rowNode:X,column:Q}))||n6(J?.getEdit({rowNode:X.pinnedSibling,column:Q})))return!0}if(MX(X.childrenAfterGroup,J,Q))return!0}};function kX(z,J){let{column:Q,rowNode:Z}=J;if(z.gos.get("groupTotalRow")&&!Z?.footer)return!1;return MX(Z?.childrenAfterGroup,z.editModelSvc,Q)}function fX(z,{rowNode:J,column:Q}){if(J=J.pinnedSibling,!J)return;return n6(z.editModelSvc?.getEdit({rowNode:J,column:Q}))}var XD=class extends S{constructor(z,J){super();this.cellCtrl=z,this.beans=J,this.editSvc=J.editSvc,this.editModelSvc=J.editModelSvc}setComp(z){this.cellComp=z,this.applyCellStyles()}applyCellStyles(){let{cellCtrl:z,editSvc:J,beans:Q}=this;if(J?.isBatchEditing()&&J.isEditing()){let $=DX(Q,z)||kX(Q,z)||fX(Q,z);this.applyBatchingStyle($)}else this.applyBatchingStyle(!1);let Z=!!this.editModelSvc?.getCellValidationModel().hasCellValidation(this.cellCtrl);this.cellComp.toggleCss("ag-cell-editing-error",Z)}applyBatchingStyle(z){this.cellComp.toggleCss("ag-cell-editing",z??!1),this.cellComp.toggleCss("ag-cell-batch-edit",(z&&this.editSvc?.isBatchEditing())??!1)}},YD=class extends S{constructor(z,J){super();this.rowCtrl=z,this.beans=J,this.gos=J.gos,this.editSvc=J.editSvc,this.editModelSvc=J.editModelSvc}applyRowStyles(){let{rowCtrl:z,editModelSvc:J,beans:Q}=this,Z=z.rowNode,$=J?.getEditRow(Z),X=this.editModelSvc?.getRowValidationModel().hasRowValidation({rowNode:Z});if(!$&&Z.pinnedSibling)Z=Z.pinnedSibling,$=J?.getEditRow(Z);if($){let Y=Array.from($.keys()).some((q)=>{let G={rowNode:Z,column:q};return DX(Q,G,!0)||kX(Q,G)||fX(Q,G)});this.applyStyle(X,Y);return}this.applyStyle(X)}applyStyle(z=!1,J=!1){let Q=!!this.editSvc?.isBatchEditing(),Z=this.gos.get("editType")==="fullRow";this.rowCtrl?.forEachGui(void 0,({rowComp:$})=>{$.toggleCss("ag-row-editing",Z&&J),$.toggleCss("ag-row-batch-edit",Z&&J&&Q),$.toggleCss("ag-row-inline-editing",J),$.toggleCss("ag-row-not-inline-editing",!J),$.toggleCss("ag-row-editing-invalid",Z&&J&&z)})}},qD=({rowModel:z,pinnedRowModel:J,editModelSvc:Q},Z)=>{let $=new Set;z.forEachNode((X)=>Z.has(X)&&$.add(X)),J?.forEachPinnedRow("top",(X)=>Z.has(X)&&$.add(X)),J?.forEachPinnedRow("bottom",(X)=>Z.has(X)&&$.add(X));for(let X of Z)if(!$.has(X))Q.removeEdits({rowNode:X});return $},GD=({editModelSvc:z},J,Q)=>{for(let Z of J)z?.getEditRow(Z)?.forEach(($,X)=>!Q.has(X)&&z.removeEdits({rowNode:Z,column:X}))},UD=(z)=>()=>{let J=new Set(z.colModel.getCols()),Q=z.editModelSvc.getEditMap(!0),Z=new Set(Q.keys());GD(z,qD(z,Z),J)},_D=new Set(["undo","redo","paste","bulk","rangeSvc"]),HD=new Set(["ui","api"]),SX={paste:"api",rangeSvc:"api",fillHandle:"api",cellClear:"api",bulk:"api"},WD=new Set(Object.keys(SX)),BD=new Set(["paste","rangeSvc","cellClear","redo","undo"]),TQ={cancel:!0,source:"api"},ED={cancel:!1,source:"api"},cz={checkSiblings:!0},_z={force:!0,suppressFlash:!0},KD={force:!0},FD=class extends S{constructor(){super(...arguments);this.beanName="editSvc",this.committing=!1,this.batch=!1,this.batchStartDispatched=!1,this.stopping=!1,this.rangeSelectionWhileEditing=0}postConstruct(){let{beans:z}=this;this.model=z.editModelSvc,this.valueSvc=z.valueSvc,this.rangeSvc=z.rangeSvc,this.addManagedPropertyListener("editType",({currentValue:Z})=>{this.stopEditing(void 0,TQ),this.createStrategy(Z)});let J=UD(z),Q=()=>{let Z=this.model.getCellValidationModel().getCellValidationMap().size>0,$=this.model.getRowValidationModel().getRowValidationMap().size>0;if(Z||$)this.stopEditing(void 0,TQ);else if(this.isEditing())if(this.batch)Bz(z,this.model.getEditPositions());else this.stopEditing(void 0,ED);return!1};this.addManagedEventListeners({columnPinned:J,columnVisible:J,columnRowGroupChanged:J,rowExpansionStateChanged:J,pinnedRowsChanged:J,displayedRowsChanged:J,sortChanged:Q,filterChanged:Q,cellFocused:this.onCellFocused.bind(this)})}isBatchEditing(){return this.batch}startBatchEditing(){if(this.batch)return;this.batch=!0,this.batchStartDispatched=!1,this.stopEditing(void 0,TQ)}stopBatchEditing(z){if(!this.batch)return;if(z)this.stopEditing(void 0,z);if(this.batchStartDispatched)this.dispatchBatchStopped(new Map,!1);this.batch=!1,this.batchStartDispatched=!1}ensureBatchStarted(){if(!this.batch||this.batchStartDispatched)return;this.batchStartDispatched=!0,this.dispatchBatchEvent("batchEditingStarted",new Map)}createStrategy(z){let{beans:J,gos:Q,strategy:Z}=this,$=A8(Q,z);if(Z){if(Z.beanName===$)return Z;this.destroyStrategy()}return this.strategy=this.createOptionalManagedBean(J.registry.createDynamicBean($,!0))}destroyStrategy(){if(!this.strategy)return;this.strategy.destroy(),this.strategy=this.destroyBean(this.strategy)}shouldStartEditing(z,J,Q,Z="ui"){let $=QD(this.beans,z,J,Q,Z);if($)this.strategy??(this.strategy=this.createStrategy());return $}shouldStopEditing(z,J,Q="ui"){return this.strategy?.shouldStop(z,J,Q)??null}shouldCancelEditing(z,J,Q="ui"){return this.strategy?.shouldCancel(z,J,Q)??null}validateEdit(){return DK(this.beans)}isEditing(z,J){return this.model.hasEdits(z??void 0,J??cz)}isRowEditing(z,J){return!!z&&this.model.hasRowEdits(z,J)}enableRangeSelectionWhileEditing(){if(this.beans.rangeSvc&&this.gos.get("cellSelection"))this.rangeSelectionWhileEditing++}disableRangeSelectionWhileEditing(){this.rangeSelectionWhileEditing=Math.max(0,this.rangeSelectionWhileEditing-1)}isRangeSelectionEnabledWhileEditing(){return this.rangeSelectionWhileEditing>0}startEditing(z,J){let{startedEdit:Q=!0,event:Z=null,source:$="ui",ignoreEventKey:X=!1,silent:Y}=J;if(this.strategy??(this.strategy=this.createStrategy()),!(J.editable??this.isCellEditable(z,"api")))return;let G=l(this.beans,z);if(G&&!G.comp){J.editable=void 0,G.onCompAttachedFuncs.push(()=>this.startEditing(z,J));return}let U=this.shouldStartEditing(z,Z,Q,$);if(U===!1&&$!=="api"){if(this.isEditing(z))this.stopEditing();return}if(!this.batch&&this.shouldStopEditing(z,void 0,$)&&!J.continueEditing)this.stopEditing(void 0,{source:$});if(U)this.ensureBatchStarted();this.strategy.start({position:z,event:Z,source:$,ignoreEventKey:X,startedEdit:Q,silent:Y})}stopEditing(z,J){let Q=this.prepareStopContext(z,J);if(!Q)return!1;this.stopping=!0;let Z=!1;try{let $=this.processStopRequest(Q);return Z||(Z=$.res),this.finishStopEditing({...Q,edits:$.edits,params:J,position:z,res:Z}),Z}finally{this.rangeSelectionWhileEditing=0,this.stopping=!1}}prepareStopContext(z,J){let{event:Q=null,cancel:Z=!1,source:$="ui",forceCancel:X=!1,forceStop:Y=!1,commit:q=!1}=J||{};if(WD.has($)&&this.batch){if(z?.rowNode&&z?.column)this.bulkRefreshCell(z);return null}let G=this.committing?SX[$]:$;if(!(this.committing||this.isEditing(z)||this.batch&&this.model.hasEdits(z,cz))||!this.strategy||this.stopping)return null;let _=l(this.beans,z);if(_)_.onEditorAttachedFuncs=[];let H=!Z&&(!!this.shouldStopEditing(z,Q,G)||(this.committing||$==="paste")&&!this.batch)||Y,W=Z&&!!this.shouldCancelEditing(z,Q,G)||X;return{cancel:Z,cellCtrl:_,edits:this.model.getEditMap(!0),event:Q??null,forceCancel:X,forceStop:Y,commit:q,position:z,source:$,treatAsSource:G,willCancel:W,willStop:H}}processStopRequest(z){let{event:J,position:Q,willCancel:Z,willStop:$}=z;if($||Z)return this.handleStopOrCancel(z);if(this.shouldHandleMidBatchKey(J,Q))return{res:!1,edits:this.handleMidBatchKey(J,Q,z)};if(Kz(this.beans,{persist:!0}),this.batch)this.strategy?.cleanupEditors(Q);return{res:!1,edits:this.model.getEditMap()}}handleStopOrCancel(z){let{beans:J,model:Q}=this,{cancel:Z,commit:$,edits:X,event:Y,source:q,willCancel:G,willStop:U}=z,_=!this.batch||!G;Kz(J,{persist:_,isCancelling:G||Z,isStopping:U});let H=Q.getEditMap(),B=!G&&(!this.batch||$)?this.processEdits(H,q):[];if(Z)this.strategy?.stopCancelled(z.forceCancel);else this.strategy?.stopCommitted(Y,$);this.clearValidationIfNoOpenEditors();for(let E of B)Q.clearEditValue(E);this.bulkRefreshMap(X);for(let E of Q.getEditPositions(H)){let K=l(J,E),F=S4(E);K?.refreshCell({force:!0,suppressFlash:!F})}return{res:U,edits:H}}shouldHandleMidBatchKey(z,J){return z instanceof KeyboardEvent&&this.batch&&!!this.strategy?.midBatchInputsAllowed(J)&&this.isEditing(J,{withOpenEditor:!0})}handleMidBatchKey(z,J,Q){let{beans:Z,model:$}=this,{cellCtrl:X,edits:Y}=Q,{key:q}=z,G=q===k.ENTER,U=q===k.ESCAPE,_=q===k.TAB;if(G||_||U){if(G||_)Kz(Z,{persist:!0});else if(U&&X){let{rowNode:H,column:W}=X;if(this.batch&&H&&W){let B={rowNode:H,column:W};Bz(Z,[B],{silent:!0}),this.model.stop(B,!0,!0),l(Z,B)?.refreshCell(_z)}else this.revertSingleCellEdit(X)}if(this.batch)this.strategy?.cleanupEditors();else Bz(Z,$.getEditPositions(),{event:z,cancel:U});return z.preventDefault(),this.bulkRefreshMap(Y,{suppressFlash:!0}),$.getEditMap()}return Y}finishStopEditing({cellCtrl:z,edits:J,params:Q,position:Z,res:$,commit:X,forceCancel:Y,willCancel:q,willStop:G}){let U=this.beans;if($&&Z){if(!this.batch||X)this.model.removeEdits(Z)}this.navigateAfterEdit(Q,z?.cellPosition),U2(U),this.clearValidationIfNoOpenEditors();let{rowRenderer:_,formula:H}=U;if(q)_.refreshRows({rowNodes:Array.from(J.keys())});if(this.batch){if(H)H.refreshFormulas(!0);else _.refreshRows({suppressFlash:!0,force:!0});let W=G&&X;if(W||q&&Y)this.dispatchBatchStopped(J,W)}}dispatchBatchStopped(z,J){let Q;if(J){if(Q=_K(z),Q.size>0)this.ensureBatchStarted()}if(this.batchStartDispatched)this.batchStartDispatched=!1,this.dispatchBatchEvent("batchEditingStopped",Q??new Map)}clearValidationIfNoOpenEditors(){if(!this.model.hasEdits(void 0,{withOpenEditor:!0}))this.model.getCellValidationModel().clearCellValidationMap(),this.model.getRowValidationModel().clearRowValidationMap()}navigateAfterEdit(z,J){if(!z||!J)return;let{event:Q,suppressNavigateAfterEdit:Z}=z;if(!(Q instanceof KeyboardEvent)||Z)return;let{key:X,shiftKey:Y}=Q,q=this.gos.get("enterNavigatesVerticallyAfterEdit");if(X!==k.ENTER||!q)return;let G=Y?k.UP:k.DOWN;this.beans.navigation?.navigateToNextCell(null,G,J,!1)}processEdits(z,J){let Q=Array.from(z.keys()),Z=this.model.getCellValidationModel().getCellValidationMap().size>0||this.model.getRowValidationModel().getRowValidationMap().size>0,$=[],{changeDetectionSvc:X}=this.beans;X?.beginDeferred();try{for(let Y of Q){let q=z.get(Y);for(let G of q.keys()){let U=q.get(G),_={rowNode:Y,column:G};if(S4(U)&&!Z){let H=l(this.beans,_);if(!this.setNodeDataValue(Y,G,U.pendingValue,H,J))$.push(_)}}}}finally{X?.endDeferred()}return $}setNodeDataValue(z,J,Q,Z,$="edit"){let X=HD.has($)?"edit":$;if(Z)Z.suppressRefreshCell=!0;this.committing=!0;try{return z.setDataValue(J,Q,X)}finally{if(this.committing=!1,Z)Z.suppressRefreshCell=!1}}syncEditAfterCommit(z,J){let Q=this.model.getEdit(z);if(Q&&Q.state!=="editing")if(J)this.beans.editModelSvc?.setEdit(z,{sourceValue:Q.pendingValue});else this.model.clearEditValue(z)}setEditMap(z,J){this.strategy??(this.strategy=this.createStrategy()),this.strategy?.setEditMap(z,J),this.bulkRefreshMap(z);let Q=_z;if(J?.forceRefreshOfEditCellsOnly)Q={...LD(z),..._z};this.beans.rowRenderer.refreshCells(Q)}dispatchEditValuesChanged({rowNode:z,column:J},Q={}){if(!z||!J||!Q)return;let{pendingValue:Z,sourceValue:$}=Q,{rowIndex:X,rowPinned:Y,data:q}=z;this.beans.eventSvc.dispatchEvent({type:"cellEditValuesChanged",node:z,rowIndex:X,rowPinned:Y,column:J,source:"api",data:q,newValue:Z,oldValue:$,value:Z,colDef:J.getColDef()})}bulkRefreshCell(z,J){if(o(this.gos,this.beans.rowModel))this.refCell(z,this.model.getEdit(z),J)}bulkRefreshMap(z,J){if(o(this.gos,this.beans.rowModel))z.forEach((Q,Z)=>{for(let $ of Q.keys())this.refCell({rowNode:Z,column:$},Q.get($),J)})}refCell({rowNode:z,column:J},Q,Z={}){let{beans:$,gos:X}=this,Y=new Set([z]),q=new Set,G=z.pinnedSibling;if(G)Y.add(G);let U=z.sibling;if(U)q.add(U);let _=z.parent;while(_){if(_.sibling?.footer&&X.get("groupTotalRow"))q.add(_.sibling);else if(!_.parent&&_.sibling&&X.get("grandTotalRow"))q.add(_.sibling);else q.add(_);_=_.parent}for(let H of Y)this.dispatchEditValuesChanged({rowNode:H,column:J},Q);for(let H of Y)l($,{rowNode:H,column:J})?.refreshCell(Z);for(let H of q){let W=l($,{rowNode:H,column:J});if(W){if(W.refreshCell(Z),!Z.force&&this.batch)W.editStyleFeature?.applyCellStyles?.()}}}stopAllEditing(z=!1,J="ui"){if(this.isEditing())this.stopEditing(void 0,{cancel:z,source:J})}isCellEditable(z,J="ui"){let{gos:Q,beans:Z}=this,$=z.rowNode;if($.group&&z.column.getColDef().groupRowEditable==null){if(Q.get("treeData")){if(!$.data&&!Q.get("enableGroupEdit"))return!1}else if(!Q.get("enableGroupEdit"))return!1}let X=A8(Q)==="fullRow"?$D(Z,z,J):zZ(Z,z);if(X)this.strategy??(this.strategy=this.createStrategy());return X}cellEditingInvalidCommitBlocks(){return this.gos.get("invalidEditValueMode")==="block"}checkNavWithValidation(z,J,Q=!0){if(this.hasValidationErrors(z)){let Z=l(this.beans,z);if(this.cellEditingInvalidCommitBlocks()){if(J?.preventDefault?.(),Q){if(Z&&!Z.hasBrowserFocus())Z.focusCell();Z?.comp?.getCellEditor()?.focusIn?.()}return"block-stop"}if(Z)this.revertSingleCellEdit(Z);return"revert-continue"}return"continue"}revertSingleCellEdit(z,J=!1){let Q=l(this.beans,z);if(!Q?.comp?.getCellEditor())return;if(Bz(this.beans,[z],{silent:!0}),this.model.clearEditValue(z),z1(this.beans,z,{silent:!0}),Mz(this.beans),Q?.refreshCell(_z),!J)return;Q?.focusCell(),Q?.comp?.getCellEditor()?.focusIn?.()}hasValidationErrors(z){Mz(this.beans);let J=l(this.beans,z);if(J)J.refreshCell(_z),J.rowCtrl.rowEditStyleFeature?.applyRowStyles();let Q=!1;if(z?.rowNode){if(Q||(Q=this.model.getRowValidationModel().hasRowValidation({rowNode:z.rowNode})),z.column)Q||(Q=this.model.getCellValidationModel().hasCellValidation({rowNode:z.rowNode,column:z.column}))}else Q||(Q=this.model.getCellValidationModel().getCellValidationMap().size>0),Q||(Q=this.model.getRowValidationModel().getRowValidationMap().size>0);return Q}moveToNextCell(z,J,Q,Z="ui"){let $,X=this.isEditing(),Y=X&&this.checkNavWithValidation(void 0,Q)==="block-stop";if(z instanceof E2&&X)$=this.strategy?.moveToNextEditingCell(z,J,Q,Z,Y);if($===null)return $;if($=$||!!this.beans.focusSvc.focusedHeader,$===!1&&!Y)this.stopEditing();return $}getPendingEditValue(z,J,Q){if(Q==="batch"&&!this.batch)return;let Z=this.model.getEdit({rowNode:z,column:J},cz);if(!Z)return;if(this.stopping&&!this.batch&&!Z.editorState?.cellStartedEditing)return;if(Q==="edit"){let X=Z.editorValue;if(X!=null&&X!==v0)return X}let $=Z.pendingValue;if($!==v0)return $;return}getCellDataValue(z){let J=this.model.getEdit(z,cz);if(J){let Q=J.pendingValue;if(Q!==v0)return Q;let Z=J.sourceValue;if(Z!=null)return Z}return this.valueSvc.getValue(z.column,z.rowNode,"data")}addStopEditingWhenGridLosesFocus(z){qK(this,this.beans,z)}createPopupEditorWrapper(z){return new JD(z)}batchResetToSourceValue(z){if(!this.batch)return!1;let J=this.model.getEdit(z);if(!J)return!1;let{pendingValue:Q,sourceValue:Z,state:$}=J;if(Q===Z)return!1;if($==="editing")return!1;return this.dispatchEditValuesChanged(z,{...J,pendingValue:Z}),this.beans.editModelSvc?.removeEdits(z),l(this.beans,z)?.refreshCell(_z),!0}setDataValue(z,J,Q){try{let Z=this.batch,$=this.isEditing(Z?void 0:z);if((!$||this.committing)&&!Z&&!BD.has(Q))return;if(!$&&!Z&&Q==="paste")return;if(Q==="batch"&&!Z)return;if(Q==="edit"){if($&&this.applyEditorValue(z,J))return!0;if(!Z)return}if(this.strategy??(this.strategy=this.createStrategy()),Q==="batch"||Q==="edit")return this.applyDirectValue(z,J,Q);let X=this.beans,Y;if(Z)Y="ui";else if(this.committing)Y=Q??"api";else Y="api";if(!Q||_D.has(Q))return this.applyDirectValue(z,J,Q);let q=this.applyExistingEdit(z,J,Q,Y);if(q!==void 0)return q;return k1(X,z,J,Q,void 0,{persist:!0}),this.ensureBatchStarted(),this.stopEditing(z,{source:Y,suppressNavigateAfterEdit:!0}),!0}finally{this.committing=!1}}applyExistingEdit(z,J,Q,Z){let $=this.model.getEdit(z);if(!$)return;if($.pendingValue===J)return!1;if($.sourceValue!==J)return k1(this.beans,z,J,Q,void 0,{persist:!0}),this.ensureBatchStarted(),this.stopEditing(z,{source:Z,suppressNavigateAfterEdit:!0}),!0;return this.beans.editModelSvc?.removeEdits(z),this.ensureBatchStarted(),this.dispatchEditValuesChanged(z,{...$,pendingValue:J}),!0}applyEditorValue(z,J){let Q=this.beans,Z=l(Q,z),$=Z?.comp?.getCellEditor();if(!Z||!$)return!1;if(k1(Q,z,J,"edit",void 0,{persist:!0}),Z.editStyleFeature?.applyCellStyles?.(),"agSetEditValue"in $)return $.agSetEditValue(J),!0;if($.refresh&&Z.editCompDetails)return $.refresh({...Z.editCompDetails.params,value:J}),!0;if(Z.hasBrowserFocus())Z.onEditorAttachedFuncs.push(()=>{let Y=l(this.beans,z);Y?.focusCell(!0),Y?.comp?.getCellEditor()?.focusIn?.()});return Bz(Q,[z],{silent:!0,cancel:!0}),z1(Q,z,{silent:!0}),Mz(Q),l(Q,z)?.refreshCell(_z),!0}applyDirectValue(z,J,Q){let Z=this.beans;if(this.batch){if(Q==="batch"&&l(Z,z)?.comp?.getCellEditor()){let{editModelSvc:Y,valueSvc:q}=Z,{rowNode:G,column:U}=z;if(Y?.getEdit(z)?.sourceValue===void 0)Y?.setEdit(z,{sourceValue:q.getValue(U,G,"data")});Y?.setEdit(z,{pendingValue:J})}else if(k1(Z,z,J,Q,void 0,{persist:!0}),Q!=="batch")this.cleanupEditors();return U2(Z),this.ensureBatchStarted(),this.bulkRefreshCell(z),!0}k1(Z,z,J,Q,void 0,{persist:!0});let $=l(Z,z),X=this.setNodeDataValue(z.rowNode,z.column,J,$,Q);return this.syncEditAfterCommit(z,X),U2(Z),l(Z,z)?.refreshCell(X?KD:_z),X}handleColDefChanged(z){WK(this.beans,z)}destroy(){this.model.clear(),this.destroyStrategy(),super.destroy()}prepDetailsDuringBatch(z,J){let{model:Q}=this;if(!this.batch)return;if(!Q.hasRowEdits(z.rowNode,cz))return;let{rowNode:$}=z,{compDetails:X,valueToDisplay:Y}=J;if(X){let{params:q}=X;return q.data=Q.getEditRowDataValue($,cz),{compDetails:X}}return{valueToDisplay:Y}}cleanupEditors(){this.strategy?.cleanupEditors()}dispatchCellEvent(z,J,Q,Z){this.strategy?.dispatchCellEvent(z,J,Q,Z)}dispatchBatchEvent(z,J){this.eventSvc.dispatchEvent(this.createBatchEditEvent(z,J))}createBatchEditEvent(z,J){return C(this.gos,{type:z,...z==="batchEditingStopped"?{changes:this.toEventChangeList(J)}:{}})}toEventChangeList(z){return this.model.getEditPositions(z).map((J)=>({rowIndex:J.rowNode.rowIndex,rowPinned:J.rowNode.rowPinned,columnId:J.column.getColId(),newValue:J.pendingValue,oldValue:J.sourceValue}))}applyBulkEdit({rowNode:z,column:J},Q){if(!Q||Q.length===0)return;let{beans:Z,rangeSvc:$,valueSvc:X}=this,{formula:Y}=Z;Kz(Z,{persist:!0});let q=this.model.getEditMap(!0),G=q.get(z)?.get(J)?.pendingValue,U=!1;if(!this.batch)this.eventSvc.dispatchEvent({type:"bulkEditingStarted"}),U=!0;let _=Y?.isFormula(G)??!1;Q.forEach((W)=>{let B=W.columns.some((E)=>E?.isAllowFormula());if($?.forEachRowInRange(W,(E)=>{let K=S0(Z,E);if(K===void 0)return;let F=q.get(K)??new Map,L=G;for(let D of W.columns){if(!D)continue;let M=!!_&&D.isAllowFormula();if(this.isCellEditable({rowNode:K,column:D},"api")){let f=X.getValue(D,K,"data",!0),A=X.parseValue(D,K??null,L,f);if(Number.isNaN(A))A=null;F.set(D,{editorValue:void 0,pendingValue:A,sourceValue:f,state:"changed",editorState:{isCancelAfterEnd:void 0,isCancelBeforeStart:void 0}})}if(M)L=Y?.updateFormulaByOffset({value:L,columnDelta:1})}if(F.size>0)q.set(K,F);if(_&&B)G=Y?.updateFormulaByOffset({value:G,rowDelta:1})}),this.setEditMap(q),this.batch){this.cleanupEditors(),U2(Z),this.ensureBatchStarted();return}this.committing=!0;try{this.stopEditing(void 0,{source:"bulk"})}finally{if(this.committing=!1,U)this.eventSvc.dispatchEvent({type:"bulkEditingStopped",changes:this.toEventChangeList(q)})}});let H=l(Z,{rowNode:z,column:J});if(H)H.focusCell(!0)}createCellStyleFeature(z){return new XD(z,this.beans)}createRowStyleFeature(z){return new YD(z,this.beans)}setEditingCells(z,J){let{beans:Q}=this,{colModel:Z,valueSvc:$}=Q,X=new Map;for(let{colId:Y,column:q,colKey:G,rowIndex:U,rowPinned:_,newValue:H,state:W}of z){let B=Y?Z.getCol(Y):G?Z.getCol(G):q;if(!B)continue;let E=S0(Q,{rowIndex:U,rowPinned:_});if(!E)continue;let K=$.getValue(B,E,"data",!0);if(!J?.forceRefreshOfEditCellsOnly&&!S4({pendingValue:H,sourceValue:K})&&W!=="editing")continue;let F=X.get(E);if(!F)F=new Map,X.set(E,F);if(H===void 0)H=v0;F.set(B,{editorValue:void 0,pendingValue:H,sourceValue:K,state:W??"changed",editorState:{isCancelAfterEnd:void 0,isCancelBeforeStart:void 0}})}this.setEditMap(X,J)}onCellFocused(z){let J=l(this.beans,z);if(!J||!this.isEditing(J,cz))return;let Q=this.model.getEdit(J);if(!Q||!S4(Q))return;let $=this.getLocaleTextFunc()("ariaPendingChange","Pending Change");this.beans.ariaAnnounce?.announceValue($,"pendingChange")}allowedFocusTargetOnValidation(z){return l(this.beans,z)}};function LD(z){return{rowNodes:z?Array.from(z.keys()):void 0,columns:z?[...new Set(Array.from(z.values()).flatMap((J)=>Array.from(J.keys())))]:void 0}}function A8(z,J){return J??z.get("editType")??"singleCell"}var VX=class extends S{postConstruct(){this.model=this.beans.editModelSvc,this.editSvc=this.beans.editSvc,this.addManagedEventListeners({cellFocused:this.onCellFocusChanged?.bind(this),cellFocusCleared:this.onCellFocusChanged?.bind(this)})}clearEdits(z){this.model.clearEditValue(z)}onCellFocusChanged(z){let J,Q=z.previousParams,{editSvc:Z,beans:$}=this,X=z.type==="cellFocused"?z.sourceEvent:null;if(Q)J=l($,Q);let{gos:Y,editModelSvc:q}=$,G=z.type==="cellFocusCleared";if(Z.isEditing(void 0,{withOpenEditor:!0})){let{column:U,rowIndex:_,rowPinned:H}=z,W={column:U,rowNode:S0($,{rowIndex:_,rowPinned:H})},B=Y.get("invalidEditValueMode")==="block";if(B)return;let E=!B,K=!!q?.getCellValidationModel().hasCellValidation(W),F=E&&K;if(!(Q||G?Z.stopEditing(void 0,{cancel:F,source:G&&E?"api":void 0,event:X}):!0))if(Z.isBatchEditing())Z.cleanupEditors();else Z.stopEditing(void 0,{source:"api"})}J?.refreshCell({suppressFlash:!0,force:!0})}stopCancelled(z){let J=this.editSvc.isBatchEditing()&&!z;for(let Q of this.model.getEditPositions())j2(this.beans,Q,{cancel:!0},l(this.beans,Q)),this.model.stop(Q,J,!0);return!0}stopCommitted(z,J){let Q=this.model.getEditPositions(),Z={all:[],pass:[],fail:[]};for(let Y of Q)if(Z.all.push(Y),(this.model.getCellValidationModel().getCellValidation(Y)?.errorMessages?.length??0)>0)Z.fail.push(Y);else Z.pass.push(Y);let $=this.processValidationResults(Z),X=this.editSvc.isBatchEditing()&&!J;for(let Y of $.destroy)j2(this.beans,Y,{event:z},l(this.beans,Y)),this.model.stop(Y,X,!1);for(let Y of $.keep){let q=l(this.beans,Y);if(!this.editSvc.cellEditingInvalidCommitBlocks()&&q)this.editSvc.revertSingleCellEdit(q)}return!0}cleanupEditors({rowNode:z}={},J){Kz(this.beans,{persist:!1});let Q=this.model.getEditPositions(),Z=[];if(z){for(let $ of Q)if($.rowNode!==z)Z.push($)}else for(let $ of Q)Z.push($);Bz(this.beans,Z),U2(this.beans,J)}setFocusOutOnEditor(z){z.comp?.getCellEditor()?.focusOut?.()}setFocusInOnEditor(z){let J=z.comp,Q=J?.getCellEditor();if(Q?.focusIn)Q.focusIn();else{let Z=this.beans.gos.get("editType")==="fullRow";z.focusCell(Z),z.onEditorAttachedFuncs.push(()=>J?.getCellEditor()?.focusIn?.())}}setupEditors(z){let{event:J,ignoreEventKey:Q=!1,startedEdit:Z,position:$,cells:X=this.model.getEditPositions()}=z,Y=J instanceof KeyboardEvent&&!Q&&J.key||void 0;UK(this.beans,X,$,Y,J,Z)}dispatchCellEvent(z,J,Q,Z){let $=l(this.beans,z);if($)this.eventSvc.dispatchEvent({...$.createEvent(J??null,Q),...Z})}dispatchRowEvent(z,J,Q){if(Q)return;let Z=i6(this.beans,z);if(Z)this.eventSvc.dispatchEvent(Z.createRowEvent(J))}shouldStop(z,J,Q="ui"){let Z=this.editSvc.isBatchEditing();if(Z&&Q==="api")return!0;if(Z&&(Q==="ui"||Q==="edit"))return!1;if(Q==="api")return!0;if(J instanceof KeyboardEvent&&!Z)return J.key===k.ENTER;return null}shouldCancel(z,J,Q="ui"){let Z=this.editSvc.isBatchEditing();if(J instanceof KeyboardEvent&&!Z){if(J.key===k.ESCAPE)return!0}if(Z&&Q==="api")return!0;if(Q==="api")return!0;return!1}setEditMap(z,J){if(!J?.update)this.editSvc.stopEditing(void 0,{cancel:!0,source:"api"});let Q=[];if(z.forEach((Z,$)=>{Z.forEach((X,Y)=>{if(X.state==="editing")Q.push({...X,rowNode:$,column:Y})})}),J?.update)z=new Map([...this.model.getEditMap(),...z]);if(this.model?.setEditMap(z),Q.length>0){let Z=Q.at(-1),$=Z.pendingValue===v0?void 0:Z.pendingValue;this.start({position:Z,event:new KeyboardEvent("keydown",{key:$}),source:"api"});let X=l(this.beans,Z);if(X)this.setFocusInOnEditor(X)}}destroy(){this.cleanupEditors(),super.destroy()}},DD=class extends VX{constructor(){super(...arguments);this.beanName="fullRow",this.startedRows=new Set}shouldStop(z,J,Q="ui"){let{rowNode:Z,beans:$}=this,{rowNode:X}=z||{};if(!i6($,{rowNode:Z}))return!0;let q=super.shouldStop({rowNode:Z},J,Q);if(q!==null)return q;if(!Z)return!1;return X!==Z}midBatchInputsAllowed({rowNode:z}){if(!z)return!1;return this.model.hasEdits({rowNode:z})}clearEdits(z){this.model.clearEditValue(z)}start(z){let{position:J,silent:Q,startedEdit:Z,event:$,ignoreEventKey:X}=z,{rowNode:Y}=J,{beans:q,model:G,startedRows:U}=this;if(this.rowNode!==Y)super.cleanupEditors(J);let _=q.visibleCols.allCols,H=[],W=[];for(let B of _)if(B.isCellEditable(Y))W.push(B);if(W.length==0)return;if(!U.has(Y))this.dispatchRowEvent({rowNode:Y},"rowEditingStarted",Q),U.add(Y);for(let B of W){let E={rowNode:Y,column:B};H.push(E),G.start(E)}this.rowNode=Y,this.setupEditors({cells:H,position:J,startedEdit:Z,event:$,ignoreEventKey:X})}processValidationResults(z){if(z.fail.length>0&&this.editSvc.cellEditingInvalidCommitBlocks())return{destroy:[],keep:z.all};return{destroy:z.all,keep:[]}}stopCancelled(z){let{rowNode:J,model:Q}=this;if(J&&!Q.hasEdits())return!1;return super.stopCancelled(z),this.cleanupEditors({rowNode:J},!0),this.rowNode=void 0,!0}stopCommitted(z,J){let{rowNode:Q,beans:Z,model:$,editSvc:X}=this;if(Q&&!$.hasEdits())return!1;let Y=[];if($.getEditMap().forEach((q,G)=>{if(!q||q.size===0)return;for(let U of q.values())if(S4(U)){Y.push(G);break}}),Mz(Z),X.checkNavWithValidation({rowNode:Q})==="block-stop")return!1;if(super.stopCommitted(z,J),J||!X.isBatchEditing())for(let q of Y)this.dispatchRowEvent({rowNode:q},"rowValueChanged");return this.cleanupEditors({rowNode:Q},!0),this.rowNode=void 0,!0}onCellFocusChanged(z){let{rowIndex:J}=z,Q=z.previousParams;if(Q?.rowIndex===J||z.sourceEvent instanceof KeyboardEvent)return;let{beans:Z,gos:$,model:X}=this;if(Z.editSvc?.isRangeSelectionEnabledWhileEditing())return;let Y=l(Z,Q);if($.get("invalidEditValueMode")==="block"&&Y&&(X.getCellValidationModel().getCellValidation(Y)||X.getRowValidationModel().getRowValidation(Y)))return;super.onCellFocusChanged(z)}cleanupEditors(z={},J){super.cleanupEditors(z,J);let{startedRows:Q}=this;for(let Z of Q)this.dispatchRowEvent({rowNode:Z},"rowEditingStopped"),this.destroyEditorsForRow(Z);Q.clear()}destroyEditorsForRow(z){let J=i6(this.beans,{rowNode:z});if(!J)return;let Q={};for(let Z of J.getAllCellCtrls())if(Z.comp?.getCellEditor())j2(this.beans,Z,Q,Z)}moveToNextEditingCell(z,J,Q,Z="ui",$=!1){let{beans:X,model:Y,gos:q,editSvc:G}=this,U=z.cellPosition,_;Y.suspend(!0);try{_=X.navigation?.findNextCellToFocusOn(U,{backwards:J,startEditing:!0,skipToNextEditableCell:!1})}finally{Y.suspend(!1)}if(_===!1)return null;if(_==null)return!1;let H=_.cellPosition,W=z.isCellEditable(),B=_.isCellEditable(),E=U.rowIndex===H?.rowIndex&&U.rowPinned===H.rowPinned;if(W)this.setFocusOutOnEditor(z);this.restoreEditors();let K=q.get("suppressStartEditOnTab");if(B&&!$)if(K)_.focusCell(!0,Q);else{if(!_.comp?.getCellEditor())z1(X,_,{event:Q,cellStartedEdit:!0});this.setFocusInOnEditor(_),_.focusCell(!1,Q)}else{if(B&&$)this.setFocusInOnEditor(_);_.focusCell(!0,Q)}if(!E&&!$){if(G?.stopEditing({rowNode:z.rowNode},{event:Q,forceStop:!0}),G?.isRowEditing(z.rowNode,{withOpenEditor:!0}))this.cleanupEditors(_,!0);if(K)_.focusCell(!0,Q);else G.startEditing(_,{startedEdit:!0,event:Q,source:Z,ignoreEventKey:!0,editable:B||void 0})}return z.rowCtrl?.refreshRow({suppressFlash:!0,force:!0}),!0}restoreEditors(){let{beans:z,model:J}=this;J.getEditMap().forEach((Q,Z)=>Q.forEach(({state:$},X)=>{if($!=="editing")return;let Y=l(z,{rowNode:Z,column:X});if(Y&&!Y.comp?.getCellEditor())z1(z,Y,{silent:!0})}))}destroy(){super.destroy(),this.rowNode=void 0,this.startedRows.clear()}},MD=class extends VX{constructor(){super(...arguments);this.beanName="singleCell"}shouldStop(z,J,Q="ui"){let Z=super.shouldStop(z,J,Q);if(Z!==null)return Z;let $=z?.rowNode,X=z?.column,Y=this.rowNode,q=this.column;if((!Y||!q)&&$&&X)return null;if(Y!==$||q!==X)return!0;if(!Y&&!q)return this.model.hasEdits(void 0,{withOpenEditor:!0});return!1}midBatchInputsAllowed(z){return this.model.hasEdits(z)}start(z){let{position:J,startedEdit:Q,event:Z,ignoreEventKey:$}=z;if(this.rowNode!==J.rowNode||this.column!==J.column)super.cleanupEditors();this.rowNode=J.rowNode,this.column=J.column,this.model.start(J),this.setupEditors({cells:[J],position:J,startedEdit:Q,event:Z,ignoreEventKey:$})}dispatchRowEvent(z,J,Q){}processValidationResults(z){if(z.fail.length>0&&this.editSvc.cellEditingInvalidCommitBlocks())return{destroy:[],keep:z.all};return{destroy:z.all,keep:[]}}stopCancelled(z){return super.stopCancelled(z),this.clearPosition()}stopCommitted(z,J){return super.stopCommitted(z,J),this.clearPosition()}clearPosition(){return this.rowNode=void 0,this.column=void 0,!0}onCellFocusChanged(z){let{colModel:J,editSvc:Q}=this.beans,{rowIndex:Z,column:$,rowPinned:X}=z,Y=S0(this.beans,{rowIndex:Z,rowPinned:X}),q=lQ($),G=J.getCol(q),U=z.previousParams;if(U){let _=lQ(U.column);if(U?.rowIndex===Z&&_===q&&U?.rowPinned===X)return}if(z.type=="cellFocused"&&(Q?.isRangeSelectionEnabledWhileEditing()||Q?.isEditing({rowNode:Y,column:G},{withOpenEditor:!0})))return;super.onCellFocusChanged(z)}moveToNextEditingCell(z,J,Q,Z="ui",$=!1){let X=this.beans.focusSvc.getFocusedCell();if(X)z=X4(this.beans,X)??z;let Y=z.cellPosition,q,G=this.beans.gos.get("editType")==="fullRow";if(G)this.model.suspend(!0);if(!$)z.eGui.focus(),this.editSvc?.stopEditing(z,{source:this.editSvc?.isBatchEditing()?"ui":"api",event:Q});try{q=this.beans.navigation?.findNextCellToFocusOn(Y,{backwards:J,startEditing:!0})}finally{if(G)this.model.suspend(!1)}if(q===!1)return null;if(q==null)return!1;let U=q.cellPosition,_=z.isCellEditable(),H=q.isCellEditable(),W=Y.rowIndex===U?.rowIndex&&Y.rowPinned===U.rowPinned;if(_&&!$)this.setFocusOutOnEditor(z);let B=this.gos.get("suppressStartEditOnTab"),E=!1;if(!W&&!$)if(super.cleanupEditors(q,!0),B)q.focusCell(!0,Q);else E=!0,this.editSvc.startEditing(q,{startedEdit:!0,event:Q,source:Z,ignoreEventKey:!0,editable:H});if(H&&!$){if(q.focusCell(!1,Q),B)q.focusCell(!0,Q);else if(!q.comp?.getCellEditor()){if(!E){let K=this.editSvc?.isEditing(q,{withOpenEditor:!0});z1(this.beans,q,{event:Q,cellStartedEdit:!0,silent:K})}this.setFocusInOnEditor(q),this.cleanupEditors(q)}}else{if(H&&$)this.setFocusInOnEditor(q);q.focusCell(!0,Q)}return z.rowCtrl?.refreshRow({suppressFlash:!0,force:!0}),!0}destroy(){super.destroy(),this.rowNode=void 0,this.column=void 0}},kD={moduleName:"EditCore",version:i,beans:[YK,FD],apiFunctions:{getEditingCells:sL,getEditRowValues:tL,getCellEditorInstances:GK,startEditingCell:oL,stopEditing:lL,isEditing:aL,validateEdit:eL},dynamicBeans:{singleCell:MD,fullRow:DD},dependsOn:[q1,yL],css:[bL]};var RX={moduleName:"TextEditor",version:i,userComponents:{agCellEditor:R8,agTextCellEditor:R8},dependsOn:[kD]};var AX={agSetColumnFilter:"agSetColumnFilterHandler",agMultiColumnFilter:"agMultiColumnFilterHandler",agGroupColumnFilter:"agGroupColumnFilterHandler",agNumberColumnFilter:"agNumberColumnFilterHandler",agBigIntColumnFilter:"agBigIntColumnFilterHandler",agDateColumnFilter:"agDateColumnFilterHandler",agTextColumnFilter:"agTextColumnFilterHandler"},fD=new Set(Object.values(AX));function Hz(z,J){let Q=z.filterUi;if(!Q)return null;if(Q.created)return Q.promise;if(J)return null;let Z=Q.create(Q.refreshed),$=Q;return $.created=!0,$.promise=Z,Z}function VJ(z,J,Q,Z,$,X,Y){return J.refresh?.({...Q,model:Z,source:X,additionalEventAttributes:Y}),z().then((q)=>{if(q){let{filter:G,filterParams:U}=q;l1(G,U,Z,$,X,Y)}})}function l1(z,J,Q,Z,$,X){z?.refresh?.({...J,model:Q,state:Z,source:$,additionalEventAttributes:X})}function jX(z,J,Q,Z){let $=z();if($?.created)$.promise.then((X)=>{let Y=J();l1(X,$.filterParams,Y,Q()??{model:Y},"ui",Z)})}function d6(z){let J,Q=!1,Z,{action:$,filterParams:X,getFilterUi:Y,getModel:q,getState:G,updateState:U,updateModel:_,processModelToApply:H}=z;switch($){case"apply":{let W=G();if(Z=W?.model??null,H)Z=H(Z);J={state:W?.state,model:Z},Q=!0;break}case"clear":{if(J={model:null},!X?.buttons?.includes("apply"))Q=!0,Z=null;break}case"reset":{J={model:null},Q=!0,Z=null;break}case"cancel":{J={model:q()};break}}if(U(J),Q)_(Z);else jX(Y,q,G,{fromAction:$})}function f0(z,J){return z[J]??null}var SD=class extends sZ{constructor(){super(...arguments);this.iconCreated=!1}wireComp(z,J,Q,Z,$){this.comp=z;let X=m2(this,this.beans.context,$);this.eButtonShowMainFilter=Q,this.eFloatingFilterBody=Z,this.setGui(J,X),this.setupActive(),this.refreshHeaderStyles(),this.setupWidth(X),this.setupLeft(X),this.setupHover(X),this.setupFocus(X),this.setupAria(),this.setupFilterButton(),this.setupUserComp(),this.setupSyncWithFilter(X),this.setupUi(),X.addManagedElementListeners(this.eButtonShowMainFilter,{click:this.showParentFilter.bind(this)}),this.setupFilterChangedListener(X);let Y=()=>this.onColDefChanged(X);X.addManagedListeners(this.column,{colDefChanged:Y}),X.addManagedEventListeners({filterSwitched:({column:q})=>{if(q===this.column)Y()}}),X.addDestroyFunc(()=>{this.eButtonShowMainFilter=null,this.eFloatingFilterBody=null,this.userCompDetails=null,this.clearComponent()})}resizeHeader(){}moveHeader(){}getHeaderClassParams(){let{column:z,beans:J}=this,Q=z.colDef;return C(J.gos,{colDef:Q,column:z,floatingFilter:!0})}setupActive(){let z=this.column.colDef,J=!!z.filter,Q=!!z.floatingFilter;this.active=J&&Q}setupUi(){if(this.comp.setButtonWrapperDisplayed(!this.suppressFilterButton&&this.active),this.comp.addOrRemoveBodyCssClass("ag-floating-filter-full-body",this.suppressFilterButton),this.comp.addOrRemoveBodyCssClass("ag-floating-filter-body",!this.suppressFilterButton),!this.active||this.iconCreated)return;let z=h("filter",this.beans,this.column);if(z)this.iconCreated=!0,this.eButtonShowMainFilter.appendChild(z)}setupFocus(z){z.createManagedBean(new Jz(this.eGui,{shouldStopEventPropagation:this.shouldStopEventPropagation.bind(this),onTabKeyDown:this.onTabKeyDown.bind(this),handleKeyDown:this.handleKeyDown.bind(this),onFocusIn:this.onFocusIn.bind(this)}))}setupAria(){let z=this.getLocaleTextFunc();_0(this.eButtonShowMainFilter,z("ariaFilterMenuOpen","Open Filter Menu"))}onTabKeyDown(z){let{beans:J}=this;if(n(J)===this.eGui)return;let $=O0(J,this.eGui,null,z.shiftKey);if($){J.headerNavigation?.scrollToColumn(this.column),z.preventDefault(),$.focus();return}let X=this.findNextColumnWithFloatingFilter(z.shiftKey);if(!X)return;if(J.focusSvc.focusHeaderPosition({headerPosition:{headerRowIndex:this.rowCtrl.rowIndex,column:X},event:z}))z.preventDefault()}findNextColumnWithFloatingFilter(z){let J=this.beans.visibleCols,Q=this.column;do if(Q=z?J.getColBefore(Q):J.getColAfter(Q),!Q)break;while(!Q.colDef.filter||!Q.colDef.floatingFilter);return Q}handleKeyDown(z){super.handleKeyDown(z);let J=this.getWrapperHasFocus();switch(z.key){case k.UP:case k.DOWN:case k.LEFT:case k.RIGHT:if(J)return;l0(z);case k.ENTER:if(J){if(E0(this.eGui))z.preventDefault()}break;case k.ESCAPE:if(!J)this.eGui.focus()}}onFocusIn(z){if(this.eGui.contains(z.relatedTarget))return;let Q=!!z.relatedTarget&&!z.relatedTarget.classList.contains("ag-floating-filter"),Z=!!z.relatedTarget&&nz(z.relatedTarget,"ag-floating-filter");if(Q&&Z&&z.target===this.eGui){let $=this.lastFocusEvent,X=$?.key===k.TAB;if($&&X){let Y=$.shiftKey;E0(this.eGui,Y)}}this.focusThis()}setupHover(z){this.beans.colHover?.addHeaderFilterColumnHoverListener(z,this.comp,this.column,this.eGui)}setupLeft(z){let J=new tZ(this.column,this.eGui,this.beans);z.createManagedBean(J)}setupFilterButton(){this.suppressFilterButton=!this.beans.menuSvc?.isFloatingFilterButtonEnabled(this.column),this.highlightFilterButtonWhenActive=!F0(this.gos)}setupUserComp(){if(!this.active)return;let z=this.beans.colFilter?.getFloatingFilterCompDetails(this.column,()=>this.showParentFilter());if(z)this.setCompDetails(z)}setCompDetails(z){this.userCompDetails=z,this.comp.setCompDetails(z)}showParentFilter(){let z=this.suppressFilterButton?this.eFloatingFilterBody:this.eButtonShowMainFilter;this.beans.menuSvc?.showFilterMenu({column:this.column,buttonElement:z,containerType:"floatingFilter",positionBy:"button"})}setupSyncWithFilter(z){if(!this.active)return;let{beans:{colFilter:J},column:Q,gos:Z}=this,$=(X)=>{if(X?.source==="filterDestroyed"&&(!this.isAlive()||!J?.isAlive()))return;let Y=this.comp.getFloatingFilterComp();if(!Y)return;Y.then((q)=>{if(q){if(Z.get("enableFilterHandlers")){let _=X,H="filter";if(_?.afterFloatingFilter)H="ui";else if(_?.afterDataChange)H="dataChanged";else if(X?.source==="api")H="api";this.updateFloatingFilterParams(this.userCompDetails,H);return}let G=J?.getCurrentFloatingFilterParentModel(Q),U=X?{...X,columns:X.columns??[],source:X.source==="api"?"api":"columnFilter"}:null;q.onParentModelChanged(G,U)}})};if([this.destroySyncListener]=z.addManagedListeners(Q,{filterChanged:$}),J?.isFilterActive(Q))$(null)}setupWidth(z){let J=()=>{let Q=`${this.column.getActualWidth()}px`;this.comp.setWidth(Q)};z.addManagedListeners(this.column,{widthChanged:J}),J()}setupFilterChangedListener(z){if(this.active)[this.destroyFilterChangedListener]=z.addManagedListeners(this.column,{filterChanged:this.updateFilterButton.bind(this)}),this.updateFilterButton()}updateFilterButton(){if(!this.suppressFilterButton&&this.comp){let z=!!this.beans.filterManager?.isFilterAllowed(this.column);if(this.comp.setButtonWrapperDisplayed(z),this.highlightFilterButtonWhenActive&&z)this.eButtonShowMainFilter.classList.toggle("ag-filter-active",this.column.isFilterActive())}}onColDefChanged(z){let J=this.active;this.setupActive();let Q=!J&&this.active;if(J&&!this.active)this.destroySyncListener(),this.destroyFilterChangedListener();let Z=this.beans.colFilter,$=this.active?Z?.getFloatingFilterCompDetails(this.column,()=>this.showParentFilter()):null,X=this.comp.getFloatingFilterComp();if(!X||!$)this.updateCompDetails(z,$,Q);else X.then((Y)=>{if(!Y||Z?.areFilterCompsDifferent(this.userCompDetails??null,$))this.updateCompDetails(z,$,Q);else this.updateFloatingFilterParams($,"colDef")})}updateCompDetails(z,J,Q){if(!this.isAlive())return;if(this.setCompDetails(J),this.setupFilterButton(),this.setupUi(),Q)this.setupSyncWithFilter(z),this.setupFilterChangedListener(z)}updateFloatingFilterParams(z,J){if(!z)return;let Q=z.params;this.comp.getFloatingFilterComp()?.then((Z)=>{if(typeof Z?.refresh==="function"){if(this.gos.get("enableFilterHandlers"))Q={...Q,model:f0(this.beans.colFilter?.model??{},this.column.colId),source:J};Z.refresh(Q)}})}addResizeAndMoveKeyboardListeners(){}destroy(){super.destroy(),this.destroySyncListener=null,this.destroyFilterChangedListener=null}};function VD(z,J){let Q=z.colModel.getCol(J);if(!Q){r(12,{colKey:J});return}z.menuSvc?.showColumnMenu({column:Q,positionBy:"auto"})}function RD(z){z.menuSvc?.hidePopupMenu()}var AD=class extends S{constructor(){super(...arguments);this.beanName="menuSvc"}postConstruct(){let{enterpriseMenuFactory:z,filterMenuFactory:J}=this.beans;this.activeMenuFactory=z??J}showColumnMenu(z){this.showColumnMenuCommon(this.activeMenuFactory,z,"columnMenu")}showFilterMenu(z){this.showColumnMenuCommon(j8(this.beans),z,z.containerType,!0)}showHeaderContextMenu(z,J,Q){this.activeMenuFactory?.showMenuAfterContextMenuEvent(z,J,Q)}hidePopupMenu(){this.beans.contextMenuSvc?.hideActiveMenu(),this.activeMenuFactory?.hideActiveMenu()}hideFilterMenu(){j8(this.beans)?.hideActiveMenu()}isColumnMenuInHeaderEnabled(z){let{suppressHeaderMenuButton:J}=z.colDef;return!J&&!!this.activeMenuFactory?.isMenuEnabled(z)&&(F0(this.gos)||!!this.beans.enterpriseMenuFactory)}isFilterMenuInHeaderEnabled(z){return!z.colDef.suppressHeaderFilterButton&&!!this.beans.filterManager?.isFilterAllowed(z)}isHeaderContextMenuEnabled(z){return!(z&&G4(z)?z.colDef:z?.getColGroupDef())?.suppressHeaderContextMenu&&this.gos.get("columnMenu")==="new"}isHeaderMenuButtonAlwaysShowEnabled(){return this.isSuppressMenuHide()}isHeaderMenuButtonEnabled(){let z=!this.isSuppressMenuHide();return!(a4()&&z)}isHeaderFilterButtonEnabled(z){return this.isFilterMenuInHeaderEnabled(z)&&!F0(this.gos)&&!this.isFloatingFilterButtonDisplayed(z)}isFilterMenuItemEnabled(z){return!!this.beans.filterManager?.isFilterAllowed(z)&&!F0(this.gos)&&!this.isFilterMenuInHeaderEnabled(z)&&!this.isFloatingFilterButtonDisplayed(z)}isFloatingFilterButtonEnabled(z){return!z.getColDef().suppressFloatingFilterButton}isFloatingFilterButtonDisplayed(z){return!!z.getColDef().floatingFilter&&this.isFloatingFilterButtonEnabled(z)}isSuppressMenuHide(){let z=this.gos,J=z.get("suppressMenuHide");if(F0(z))return z.exists("suppressMenuHide")?J:!1;return J}showColumnMenuCommon(z,J,Q,Z){let{positionBy:$,onClosedCallback:X}=J,Y=J.column;if($==="button"){let{buttonElement:q}=J;z?.showMenuAfterButtonClick(Y,q,Q,X,Z)}else if($==="mouse"){let{mouseEvent:q}=J;z?.showMenuAfterMouseEvent(Y,q,Q,X,Z)}else if(Y){let q=this.beans,G=q.ctrlsSvc;G.getScrollFeature().ensureColumnVisible(Y,"auto"),O4(q,()=>{let U=G.getHeaderRowContainerCtrl(Y.getPinned())?.getHeaderCtrlForColumn(Y);if(U)z?.showMenuAfterButtonClick(Y,U.getAnchorElementForMenu(Z),Q,X,Z)})}}};function O2(z,J,Q){if(z.menuVisible!==J)z.menuVisible=J,z.dispatchColEvent("menuVisibleChanged",Q)}function j8(z){let{enterpriseMenuFactory:J,filterMenuFactory:Q,gos:Z}=z;return J&&F0(Z)?J:Q}var K5={moduleName:"SharedMenu",version:i,beans:[AD],apiFunctions:{showColumnMenu:VD,hidePopupMenu:RD}},jD=".ag-set-filter{--ag-indentation-level:0}.ag-set-filter-item{align-items:center;display:flex;height:100%}:where(.ag-ltr) .ag-set-filter-item{padding-left:calc(var(--ag-widget-container-horizontal-padding) + var(--ag-indentation-level)*var(--ag-set-filter-indent-size))}:where(.ag-rtl) .ag-set-filter-item{padding-right:calc(var(--ag-widget-container-horizontal-padding) + var(--ag-indentation-level)*var(--ag-set-filter-indent-size))}.ag-set-filter-item-checkbox{display:flex;height:100%;width:100%}.ag-set-filter-group-icons{display:block;:where(.ag-set-filter-group-closed-icon),:where(.ag-set-filter-group-indeterminate-icon),:where(.ag-set-filter-group-opened-icon){cursor:pointer}}:where(.ag-ltr) .ag-set-filter-group-icons{margin-right:var(--ag-widget-container-horizontal-padding)}:where(.ag-rtl) .ag-set-filter-group-icons{margin-left:var(--ag-widget-container-horizontal-padding)}.ag-filter-body-wrapper{display:flex;flex-direction:column}:where(.ag-menu:not(.ag-tabs) .ag-filter) .ag-filter-body-wrapper{min-width:180px}.ag-filter-filter{flex:1 1 0px}.ag-filter-condition{display:flex;justify-content:center}.ag-floating-filter-body{display:flex;flex:1 1 auto;height:100%;position:relative}.ag-floating-filter-full-body{align-items:center;display:flex;flex:1 1 auto;height:100%;overflow:hidden;width:100%}.ag-floating-filter-input{align-items:center;display:flex;width:100%;>:where(.ag-date-floating-filter-wrapper),>:where(.ag-floating-filter-input),>:where(.ag-input-field){flex:1 1 auto}:where(.ag-input-field-input[type=date]),:where(.ag-input-field-input[type=datetime-local]){width:1px}}.ag-floating-filter-button{display:flex;flex:none}.ag-date-floating-filter-wrapper{display:flex}.ag-set-floating-filter-input :where(.ag-input-field-input)[disabled]{pointer-events:none}.ag-floating-filter-button-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;height:var(--ag-icon-size);width:var(--ag-icon-size)}.ag-filter-loading{align-items:unset;background-color:var(--ag-chrome-background-color);height:100%;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);position:absolute;width:100%;z-index:1;:where(.ag-menu) &{background-color:var(--ag-menu-background-color)}}.ag-filter-separator{border-top:solid var(--ag-border-width) var(--menu-separator-color)}:where(.ag-filter-select) .ag-picker-field-wrapper{width:0}.ag-filter-condition-operator{height:17px}:where(.ag-ltr) .ag-filter-condition-operator-or{margin-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-filter-condition-operator-or{margin-right:calc(var(--ag-spacing)*2)}.ag-set-filter-select-all{padding-top:var(--ag-widget-container-vertical-padding)}.ag-filter-no-matches,.ag-set-filter-list{height:calc(var(--ag-list-item-height)*6)}.ag-filter-no-matches{padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}.ag-set-filter-tree-list{height:calc(var(--ag-list-item-height)*10)}.ag-set-filter-filter{margin-left:var(--ag-widget-container-horizontal-padding);margin-right:var(--ag-widget-container-horizontal-padding);margin-top:var(--ag-widget-container-vertical-padding)}.ag-filter-to{margin-top:var(--ag-widget-vertical-spacing)}.ag-mini-filter{margin:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}:where(.ag-ltr) .ag-set-filter-add-group-indent{margin-left:calc(var(--ag-icon-size) + var(--ag-widget-container-horizontal-padding))}:where(.ag-rtl) .ag-set-filter-add-group-indent{margin-right:calc(var(--ag-icon-size) + var(--ag-widget-container-horizontal-padding))}:where(.ag-filter-menu) .ag-set-filter-list{min-width:max(200px,100%)}.ag-filter-virtual-list-item:focus-visible{box-shadow:inset var(--ag-focus-shadow)}.ag-filter-apply-panel{display:flex;justify-content:flex-end;overflow:hidden;padding:var(--ag-widget-vertical-spacing) var(--ag-widget-container-horizontal-padding) var(--ag-widget-container-vertical-padding)}.ag-filter-apply-panel-button{line-height:1.5}:where(.ag-ltr) .ag-filter-apply-panel-button{margin-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-filter-apply-panel-button{margin-right:calc(var(--ag-spacing)*2)}.ag-simple-filter-body-wrapper{display:flex;flex-direction:column;gap:var(--ag-widget-vertical-spacing);min-height:calc(var(--ag-list-item-height) + var(--ag-widget-container-vertical-padding) + var(--ag-widget-vertical-spacing));overflow-y:auto;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);padding-bottom:var(--ag-widget-container-vertical-padding);:where(.ag-resizer-wrapper){margin:0}}.ag-multi-filter-menu-item{margin:var(--ag-spacing) 0}.ag-multi-filter-group-title-bar{background-color:transparent;color:var(--ag-header-text-color);font-weight:500;padding:calc(var(--ag-spacing)*1.5) var(--ag-spacing)}.ag-group-filter-field-select-wrapper{display:flex;flex-direction:column;gap:var(--ag-widget-vertical-spacing);padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}";function OD(z){let J=z.filterManager;return!!J?.isColumnFilterPresent()||!!J?.isAggregateFilterPresent()}function PD(z,J){return z.filterManager?.getColumnFilterInstance(J)??Promise.resolve(void 0)}function TD(z,J){let Q=z.colModel.getColDefColOrCol(J);if(Q)return z.colFilter?.destroyFilter(Q,"api")}function vD(z,J){z.frameworkOverrides.wrapIncoming(()=>z.filterManager?.setFilterModel(J))}function ID(z){return z.filterManager?.getFilterModel()??{}}function CD(z,J,Q){let{gos:Z,colModel:$,colFilter:X}=z;if(Q&&!Z.get("enableFilterHandlers"))V(288),Q=!1;let Y=$.getColDefColOrCol(J);return Y?X?.getModelForColumn(Y,Q)??null:null}function yD(z,J,Q){return z.filterManager?.setColumnFilterModel(J,Q)??Promise.resolve()}function bD(z,J){let Q=z.colModel.getColDefColOrCol(J);if(!Q){r(12,{colKey:J});return}z.menuSvc?.showFilterMenu({column:Q,containerType:"columnFilter",positionBy:"auto"})}function xD(z){z.menuSvc?.hideFilterMenu()}function wD(z,J){let Q=z.colModel.getColDefColOrCol(J);if(!Q){r(12,{colKey:J});return}return z.colFilter?.getHandler(Q,!0)}function ND(z,J){let{colModel:Q,colFilter:Z,gos:$}=z;if(!$.get("enableFilterHandlers")){V(287);return}let{colId:X,action:Y}=J;if(X){let q=Q.getColById(X);if(q)Z?.updateModel(q,Y)}else Z?.updateAllModels(Y)}var O8={january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"},P8=["january","february","march","april","may","june","july","august","september","october","november","december"];function gD(z,J){if(z==null)return-1;if(J==null)return 1;return Number.parseFloat(z)-Number.parseFloat(J)}function hD(z,J){if(z==null)return-1;if(J==null)return 1;let Q=Sz(z),Z=Sz(J);if(Q!=null&&Z!=null){if(Q===Z)return 0;return Q>Z?1:-1}return String(z).localeCompare(String(J))}function T8(z){return z instanceof Date&&!isNaN(z.getTime())}var JZ={number:()=>{return},bigint:()=>{return},boolean:()=>({maxNumConditions:1,debounceMs:0,filterOptions:["empty",{displayKey:"true",displayName:"True",predicate:(z,J)=>J,numberOfInputs:0},{displayKey:"false",displayName:"False",predicate:(z,J)=>J===!1,numberOfInputs:0}]}),date:()=>({isValidDate:T8}),dateString:({dataTypeDefinition:z})=>({comparator:(J,Q)=>{let Z=z.dateParser(Q);if(Q==null||ZJ)return 1;return 0},isValidDate:(J)=>typeof J==="string"&&T8(z.dateParser(J))}),dateTime:(z)=>JZ.date(z),dateTimeString:(z)=>JZ.dateString(z),object:()=>{return},text:()=>{return}},QZ={number:()=>({comparator:gD}),bigint:()=>({comparator:hD}),boolean:({t:z})=>({valueFormatter:(J)=>P(J.value)?z(String(J.value),J.value?"True":"False"):z("blanks","(Blanks)")}),date:({formatValue:z,t:J})=>({valueFormatter:(Q)=>{let Z=z(Q);return P(Z)?Z:J("blanks","(Blanks)")},treeList:!0,treeListFormatter:(Q,Z)=>{if(Q==="NaN")return J("invalidDate","Invalid Date");if(Z===1&&Q!=null){let $=P8[Number(Q)-1];return J($,O8[$])}return Q??J("blanks","(Blanks)")},treeListPathGetter:(Q)=>Ez(Q,!1)}),dateString:({formatValue:z,dataTypeDefinition:J,t:Q})=>({valueFormatter:(Z)=>{let $=z(Z);return P($)?$:Q("blanks","(Blanks)")},treeList:!0,treeListPathGetter:(Z)=>Ez(J.dateParser(Z??void 0),!1),treeListFormatter:(Z,$)=>{if($===1&&Z!=null){let X=P8[Number(Z)-1];return Q(X,O8[X])}return Z??Q("blanks","(Blanks)")}}),dateTime:(z)=>{let J=QZ.date(z);return J.treeListPathGetter=Ez,J},dateTimeString(z){let J=z.dataTypeDefinition.dateParser,Q=QZ.dateString(z);return Q.treeListPathGetter=(Z)=>Ez(J(Z??void 0)),Q},object:({formatValue:z,t:J})=>({valueFormatter:(Q)=>{let Z=z(Q);return P(Z)?Z:J("blanks","(Blanks)")}}),text:()=>{return}};function F5(z,J,Q,Z,$,X,Y){let q=Q,G=z==="agSetColumnFilter";if(!q&&Z.baseDataType==="object"&&!G)q=({column:B,node:E})=>$({column:B,node:E,value:X.valueSvc.getValue(B,E,"data")});let _=(G?QZ:JZ)[Z.baseDataType],H=_({dataTypeDefinition:Z,formatValue:$,t:Y});return{filterParams:typeof J==="object"?{...H,...J}:H,filterValueGetter:q}}var uD={boolean:"agTextColumnFilter",date:"agDateColumnFilter",dateString:"agDateColumnFilter",dateTime:"agDateColumnFilter",dateTimeString:"agDateColumnFilter",bigint:"agBigIntColumnFilter",number:"agNumberColumnFilter",object:"agTextColumnFilter",text:"agTextColumnFilter"},mD={boolean:"agTextColumnFloatingFilter",date:"agDateColumnFloatingFilter",dateString:"agDateColumnFloatingFilter",dateTime:"agDateColumnFloatingFilter",dateTimeString:"agDateColumnFloatingFilter",bigint:"agBigIntColumnFloatingFilter",number:"agNumberColumnFloatingFilter",object:"agTextColumnFloatingFilter",text:"agTextColumnFloatingFilter"};function L5(z,J=!1){return(J?mD:uD)[z??"text"]}function D5(z,J,Q){if(J==null)return null;let Z=null,{compName:$,jsComp:X,fwComp:Y}=h9(z,J);if($)Z={agSetColumnFilter:"agSetColumnFloatingFilter",agMultiColumnFilter:"agMultiColumnFloatingFilter",agGroupColumnFilter:"agGroupColumnFloatingFilter",agNumberColumnFilter:"agNumberColumnFloatingFilter",agBigIntColumnFilter:"agBigIntColumnFloatingFilter",agDateColumnFilter:"agDateColumnFloatingFilter",agTextColumnFilter:"agTextColumnFloatingFilter"}[$];else if(X==null&&Y==null&&J.filter===!0)Z=Q();return Z}var cD={filterHandler:()=>({doesFilterPass:()=>!0})};function v8(z,J,Q,Z){if(!z.isPrimary())return!0;let X=!Q;if(!z.isValueActive()||!X)return!1;if(J)return!0;return Z}var iD=class extends S{constructor(){super(...arguments);this.beanName="colFilter",this.allColumnFilters=new Map,this.allColumnListeners=new Map,this.activeAggregateFilters=[],this.activeColumnFilters=[],this.processingFilterChange=!1,this.modelUpdates=[],this.columnModelUpdates=[],this.state=new Map,this.handlerMap={...AX},this.isGlobalButtons=!1,this.activeFilterComps=new Set}postConstruct(){this.addManagedEventListeners({gridColumnsChanged:this.onColumnsChanged.bind(this),dataTypesInferred:this.processFilterModelUpdateQueue.bind(this)}),this.addManagedPropertyListener("pivotMode",this.onPivotModeChanged.bind(this));let z=this.gos,J={...z.get("initialState")?.filter?.filterModel??{}};if(this.initialModel=J,this.model={...J},!z.get("enableFilterHandlers"))delete this.handlerMap.agMultiColumnFilter}refreshModel(){this.onNewRowsLoaded("rowDataUpdated")}setModel(z,J="api",Q){let{colModel:Z,dataTypeSvc:$,filterManager:X}=this.beans;if($?.isPendingInference){this.modelUpdates.push({model:z,source:J});return}let Y=[],q=this.getModel(!0);if(z){let G=new Set(Object.keys(z));this.allColumnFilters.forEach((U,_)=>{let H=z[_];Y.push(this.setModelOnFilterWrapper(U,H)),G.delete(_)}),G.forEach((U)=>{let _=Z.getColDefColOrCol(U);if(!_){V(62,{colId:U});return}if(!_.isFilterAllowed()){V(63,{colId:U});return}let H=this.getOrCreateFilterWrapper(_,!0);if(!H){V(64,{colId:U});return}Y.push(this.setModelOnFilterWrapper(H,z[U],!0))})}else this.model={},this.allColumnFilters.forEach((G)=>{Y.push(this.setModelOnFilterWrapper(G,null))});N.all(Y).then(()=>{let G=this.getModel(!0),U=[];if(this.allColumnFilters.forEach((_,H)=>{let W=q?q[H]:null,B=G?G[H]:null;if(!s6(W,B))U.push(_.column)}),U.length>0)X?.onFilterChanged({columns:U,source:J});else if(Q)this.updateActive("filterChanged")})}getModel(z){let J={},{allColumnFilters:Q,initialModel:Z,beans:{colModel:$}}=this;if(Q.forEach((X,Y)=>{let q=this.getModelFromFilterWrapper(X);if(P(q))J[Y]=q}),!z)for(let X of Object.keys(Z)){let Y=Z[X];if(P(Y)&&!Q.has(X)&&$.getCol(X)?.isFilterAllowed())J[X]=Y}return J}setState(z,J,Q="api"){if(this.state.clear(),J)for(let Z of Object.keys(J)){let $=J[Z];this.state.set(Z,{model:f0(this.model,Z),state:$})}this.setModel(z,Q,!0)}getState(){let z=this.state;if(!z.size)return;let J={},Q=!1;return z.forEach((Z,$)=>{let X=Z.state;if(X!=null)Q=!0,J[$]=X}),Q?J:void 0}getModelFromFilterWrapper(z){let Q=z.column.getColId();if(z.isHandler)return f0(this.model,Q);let Z=z.filter;if(Z){if(typeof Z.getModel!=="function")return V(66),null;return Z.getModel()}return f0(this.initialModel,Q)}isFilterPresent(){return this.activeColumnFilters.length>0}isAggFilterPresent(){return!!this.activeAggregateFilters.length}disableFilters(){this.initialModel={};let{allColumnFilters:z}=this;if(z.size)return z.forEach((J)=>this.disposeFilterWrapper(J,"advancedFilterEnabled")),!0;return!1}updateActiveFilters(){let z=(G)=>{if(!G)return!1;if(!G.isFilterActive)return V(67),!1;return G.isFilterActive()},{colModel:J,gos:Q}=this.beans,Z=!!u4(Q),$=[],X=[],Y=(G,U,_)=>{if(U)if(v8(G,J.isPivotMode(),J.isPivotActive(),Z))$.push(_);else X.push(_)},q=[];return this.allColumnFilters.forEach((G)=>{let U=G.column,_=U.getColId();if(G.isHandler)q.push(N.resolve().then(()=>{Y(U,this.isHandlerActive(U),{colId:_,isHandler:!0,handler:G.handler,handlerParams:G.handlerParams})}));else{let H=Hz(G);if(H)q.push(H.then((W)=>{Y(U,z(W),{colId:_,isHandler:!1,comp:W})}))}}),N.all(q).then(()=>{this.activeAggregateFilters=$,this.activeColumnFilters=X})}updateFilterFlagInColumns(z,J){let Q=[];return this.allColumnFilters.forEach((Z)=>{let $=Z.column;if(Z.isHandler)Q.push(N.resolve().then(()=>{this.setColFilterActive($,this.isHandlerActive($),z,J)}));else{let X=Hz(Z);if(X)Q.push(X.then((Y)=>{this.setColFilterActive($,Y.isFilterActive(),z,J)}))}}),this.beans.groupFilter?.updateFilterFlags(z,J),N.all(Q)}doFiltersPass(z,J,Q){let{data:Z,aggData:$}=z,X=Q?this.activeAggregateFilters:this.activeColumnFilters,Y=Q?$:Z,q=this.model;for(let G=0;G{if(this.isAlive())Q?.onFilterChanged(z)};if(J.isRefreshInProgress())setTimeout(Z,0);else Z()}updateBeforeFilterChanged(z={}){let{column:J,additionalEventAttributes:Q}=z,Z=J?.getColId();return this.updateActiveFilters().then(()=>this.updateFilterFlagInColumns("filterChanged",Q).then(()=>{this.allColumnFilters.forEach(($)=>{let{column:X,isHandler:Y}=$;if(Z===X.getColId())return;if(Y)$.handler.onAnyFilterChanged?.();Hz($,Y)?.then((q)=>{if(typeof q?.onAnyFilterChanged==="function")q.onAnyFilterChanged()})}),this.processingFilterChange=!0}))}updateAfterFilterChanged(){this.processingFilterChange=!1}isSuppressFlashingCellsBecauseFiltering(){return!(this.gos.get("allowShowChangeAfterFilter")??!1)&&this.processingFilterChange}onNewRowsLoaded(z){let J=[];this.allColumnFilters.forEach((Q)=>{let Z=Q.isHandler;if(Z)Q.handler.onNewRowsLoaded?.();let $=Hz(Q,Z);if($)J.push($.then((X)=>{X.onNewRowsLoaded?.()}))}),N.all(J).then(()=>this.updateActive(z,{afterDataChange:!0}))}updateActive(z,J){this.updateFilterFlagInColumns(z,J).then(()=>this.updateActiveFilters())}createGetValue(z,J){let{filterValueSvc:Q,colModel:Z}=this.beans;return($,X)=>{let Y=X?Z.getColDefColOrCol(X):z;return Y?Q.getValue(Y,$,J):void 0}}isFilterActive(z){let J=this.cachedFilter(z);if(J?.isHandler)return this.isHandlerActive(z);let Q=J?.filter;if(Q)return Q.isFilterActive();return f0(this.initialModel,z.getColId())!=null}isHandlerActive(z){let J=P(f0(this.model,z.getColId()));if(J)return J;let Q=this.beans.groupFilter;return Q?.isGroupFilter(z)?Q.isFilterActive(z):!1}getOrCreateFilterUi(z){let J=this.getOrCreateFilterWrapper(z,!0);return J?Hz(J):null}getFilterUiForDisplay(z){let J=this.getOrCreateFilterWrapper(z,!0);if(!J)return null;let Q=Hz(J);if(!Q)return null;return Q.then((Z)=>({comp:Z,params:J.filterUi.filterParams,isHandler:J.isHandler}))}getHandler(z,J){let Q=this.getOrCreateFilterWrapper(z,J);return Q?.isHandler?Q.handler:void 0}getOrCreateFilterWrapper(z,J){if(!z.isFilterAllowed())return;let Q=this.cachedFilter(z);if(!Q&&J)Q=this.createFilterWrapper(z),this.setColumnFilterWrapper(z,Q);return Q}cachedFilter(z){return this.allColumnFilters.get(z.getColId())}getDefaultFilter(z,J=!1){return this.getDefaultFilterFromDataType(()=>this.beans.dataTypeSvc?.getBaseDataType(z),J)}getDefaultFilterFromDataType(z,J=!1){if(KU(this.gos))return J?"agSetColumnFloatingFilter":"agSetColumnFilter";return L5(z(),J)}getDefaultFloatingFilter(z){return this.getDefaultFilter(z,!0)}createFilterComp(z,J,Q,Z,$,X){let Y=()=>{let U=this.createFilterCompParams(z,$,X),_=Z(U,$);return yZ(this.beans.userCompFactory,J,_,Q)},q=Y();if(!q)return null;return{compDetails:q,createFilterUi:(U)=>{return(U?Y():q).newAgStackInstance()}}}createFilterInstance(z,J,Q,Z){let $=this.beans.selectableFilter;if($?.isSelectable(J))J=$.getFilterDef(z,J);let{handler:X,handlerParams:Y,handlerGenerator:q}=this.createHandler(z,J,Q)??{},G=this.createFilterComp(z,J,Q,Z,!!X,"init");if(!G)return{compDetails:null,createFilterUi:null,handler:X,handlerGenerator:q,handlerParams:Y};let{compDetails:U,createFilterUi:_}=G;if(this.isGlobalButtons){if(!U.params?.buttons?.length)V(281,{colId:z.getColId()})}return{compDetails:U,handler:X,handlerGenerator:q,handlerParams:Y,createFilterUi:_}}createBaseFilterParams(z,J){let{filterManager:Q,rowModel:Z}=this.beans;return C(this.gos,{column:z,colDef:z.getColDef(),getValue:this.createGetValue(z),doesRowPassOtherFilter:J?()=>!0:($)=>Q?.doesRowPassFilter($,z.getColId())??!0,rowModel:Z})}createFilterCompParams(z,J,Q,Z){let $=this.filterChangedCallbackFactory(z),X=this.createBaseFilterParams(z,Z);if(X.filterChangedCallback=$,X.filterModifiedCallback=Z?()=>{}:(Y)=>this.filterModified(z,Y),J){let Y=X,q=z.getColId(),G=f0(this.model,q);Y.model=G,Y.state=this.state.get(q)??{model:G},Y.onModelChange=(U,_)=>{this.updateStoredModel(q,U),this.refreshHandlerAndUi(z,U,"ui",!1,_).then(()=>{$({..._,source:"columnFilter"})})},Y.onStateChange=(U)=>{this.updateState(z,U),this.updateOrRefreshFilterUi(z)},Y.onAction=(U,_,H)=>{this.updateModel(z,U,_),this.dispatchLocalEvent({type:"filterAction",column:z,action:U,event:H})},Y.getHandler=()=>this.getHandler(z,!0),Y.onUiChange=(U)=>this.filterUiChanged(z,U),Y.source=Q}return X}createFilterUiForHandler(z,J){return J?{created:!1,create:J,filterParams:z.params,compDetails:z}:null}createFilterUiLegacy(z,J,Q){let Z=J(),$={created:!0,create:J,filterParams:z.params,compDetails:z,promise:Z};return Z.then(Q),$}createFilterWrapper(z){let{compDetails:J,handler:Q,handlerGenerator:Z,handlerParams:$,createFilterUi:X}=this.createFilterInstance(z,z.getColDef(),this.getDefaultFilter(z),(q)=>q),Y=z.getColId();if(Q)return delete this.initialModel[Y],Q.init?.({...$,source:"init",model:f0(this.model,Y)}),{column:z,isHandler:!0,handler:Q,handlerGenerator:Z,handlerParams:$,filterUi:this.createFilterUiForHandler(J,X)};if(X){let q={column:z,filterUi:null,isHandler:!1};return q.filterUi=this.createFilterUiLegacy(J,X,(G)=>{q.filter=G??void 0}),q}return{column:z,filterUi:null,isHandler:!1}}createHandlerFunc(z,J,Q){let{gos:Z,frameworkOverrides:$,registry:X}=this.beans,Y,q=(B)=>{let E=B.filter;if(w9(E)){let K=E.handler;if(K)return K;if(Y=E.doesFilterPass,Y)return()=>({doesFilterPass:Y});return}return typeof E==="string"?E:void 0},G=Z.get("enableFilterHandlers"),U=G?q(J):void 0,_=(B)=>()=>this.createBean(X.createDynamicBean(B,!0)),H,W;if(typeof U==="string"){let B=Z.get("filterHandlers")?.[U];if(B!=null)H=B;else if(fD.has(U))H=_(U),W=U}else H=U;if(!H){let B,{compName:E,jsComp:K,fwComp:F}=h9($,J);if(E)B=E;else if(K==null&&F==null&&J.filter===!0)B=Q;if(W=this.handlerMap[B],W)H=_(W)}if(!H){if(!G)return;if(o(Z))V(277,{colId:z.getColId()});return cD}return{filterHandler:H,handlerNameOrCallback:Y??W}}createHandler(z,J,Q){let Z=this.createHandlerFunc(z,J,Q);if(!Z)return;let $=JQ(this.beans.userCompFactory,J,this.createFilterCompParams(z,!0,"init")),{handlerNameOrCallback:X,filterHandler:Y}=Z,{handler:q,handlerParams:G}=this.createHandlerFromFunc(z,Y,$);return{handler:q,handlerParams:G,handlerGenerator:X??Y}}createHandlerFromFunc(z,J,Q){let Z=z.getColDef(),$=J(C(this.gos,{column:z,colDef:Z})),X=this.createHandlerParams(z,Q);return{handler:$,handlerParams:X}}createHandlerParams(z,J){let Q=z.getColDef(),Z=z.getColId(),$=this.filterChangedCallbackFactory(z);return C(this.gos,{colDef:Q,column:z,getValue:this.createGetValue(z),doesRowPassOtherFilter:(X)=>this.beans.filterManager?.doesRowPassFilter(X,Z)??!0,onModelChange:(X,Y)=>{this.updateStoredModel(Z,X),this.refreshHandlerAndUi(z,X,"handler",!1,Y).then(()=>{$({...Y,source:"columnFilter"})})},onModelAsStringChange:()=>{z.dispatchColEvent("filterChanged","filterChanged"),this.dispatchLocalEvent({type:"filterModelAsStringChanged",column:z})},filterParams:J})}onColumnsChanged(){let z=[],{colModel:J,filterManager:Q,groupFilter:Z}=this.beans;this.allColumnFilters.forEach((X,Y)=>{let q;if(X.column.isPrimary())q=J.getColDefCol(Y);else q=J.getCol(Y);if(q&&q===X.column)return;z.push(X.column),this.disposeFilterWrapper(X,"columnChanged"),this.disposeColumnListener(Y)});let $=Z&&z.every((X)=>Z.isGroupFilter(X));if(z.length>0&&!$)Q?.onFilterChanged({columns:z,source:"api"})}isFilterAllowed(z){if(!z.isFilterAllowed())return!1;let Q=this.beans.groupFilter;if(Q?.isGroupFilter(z))return Q.isFilterAllowed(z);return!0}getFloatingFilterCompDetails(z,J){let{userCompFactory:Q,frameworkOverrides:Z,selectableFilter:$,gos:X}=this.beans,Y=(B)=>{this.getOrCreateFilterUi(z)?.then((K)=>{B(zz(K))})},q=z.getColDef(),G=$?.isSelectable(q)?$.getFilterDef(z,q):q,U=D5(Z,G,()=>this.getDefaultFloatingFilter(z))??"agReadOnlyFloatingFilter",_=X.get("enableFilterHandlers"),H=JQ(Q,G,this.createFilterCompParams(z,_,"init",!0)),W=C(X,{column:z,filterParams:H,currentParentModel:()=>this.getCurrentFloatingFilterParentModel(z),parentFilterInstance:Y,showParentFilter:J});if(_){let B=W,E=z.getColId(),K=this.filterChangedCallbackFactory(z);B.onUiChange=(F)=>this.floatingFilterUiChanged(z,F),B.model=f0(this.model,E),B.onModelChange=(F,L)=>{this.updateStoredModel(E,F),this.refreshHandlerAndUi(z,F,"floating",!0,L).then(()=>{K({...L,source:"columnFilter"})})},B.getHandler=()=>this.getHandler(z,!0),B.source="init"}return bZ(Q,q,W,U)}getCurrentFloatingFilterParentModel(z){return this.getModelFromFilterWrapper(this.cachedFilter(z)??{column:z})}destroyFilterUi(z,J,Q,Z){if(z.isHandler){let X=J.getColId();delete this.initialModel[X],this.state.delete(X);let Y=z.filterUi,q=this.createFilterUiForHandler(Q,Z);z.filterUi=q;let G=this.eventSvc;if(Y?.created)Y.promise.then((U)=>{this.destroyBean(U),G.dispatchEvent({type:"filterDestroyed",source:"paramsUpdated",column:J})});else G.dispatchEvent({type:"filterHandlerDestroyed",source:"paramsUpdated",column:J})}else this.destroyFilter(J,"paramsUpdated")}destroyFilter(z,J="api"){let Q=z.getColId(),Z=this.allColumnFilters.get(Q);if(this.disposeColumnListener(Q),delete this.initialModel[Q],Z)this.disposeFilterWrapper(Z,J).then(($)=>{if($&&this.isAlive())this.beans.filterManager?.onFilterChanged({columns:[z],source:"api"})})}disposeColumnListener(z){let J=this.allColumnListeners.get(z);if(J)this.allColumnListeners.delete(z),J()}disposeFilterWrapper(z,J){let Q=!1,{column:Z,isHandler:$,filterUi:X}=z,Y=Z.getColId();if($)Q=this.isHandlerActive(Z),this.destroyBean(z.handler),delete this.model[Y],this.state.delete(Y);let q=()=>{this.setColFilterActive(Z,!1,"filterDestroyed"),this.allColumnFilters.delete(Y),this.eventSvc.dispatchEvent({type:"filterDestroyed",source:J,column:Z})};if(X)if(X.created)return X.promise.then((G)=>{return Q=$?Q:!!G?.isFilterActive(),this.destroyBean(G),q(),Q});else q();return N.resolve(Q)}filterChangedCallbackFactory(z){return(J)=>{this.callOnFilterChangedOutsideRenderCycle({additionalEventAttributes:J,columns:[z],column:z,source:J?.source??"columnFilter"})}}filterParamsChanged(z,J="api"){let Q=this.allColumnFilters.get(z);if(!Q)return;let Z=this.beans,$=Q.column,X=$.getColDef(),Y=$.isFilterAllowed(),q=this.getDefaultFilter($),G=Z.selectableFilter,U=G?.isSelectable(X)?G.getFilterDef($,X):X,_=Y?this.createHandlerFunc($,U,this.getDefaultFilter($)):void 0,H=!!_,W=Q.isHandler;if(W!=H){this.destroyFilter($,"paramsUpdated");return}let{compDetails:B,createFilterUi:E}=(Y?this.createFilterComp($,U,q,(F)=>F,H,"colDef"):null)??{compDetails:null,createFilterUi:null},K=B?.params??JQ(Z.userCompFactory,U,this.createFilterCompParams($,H,"colDef"));if(W){let F=_?.handlerNameOrCallback??_?.filterHandler,L=f0(this.model,z);if(Q.handlerGenerator!=F){let D=Q.handler,{handler:M,handlerParams:f}=this.createHandlerFromFunc($,_.filterHandler,K);if(Q.handler=M,Q.handlerParams=f,Q.handlerGenerator=F,delete this.model[z],M.init?.({...f,source:"init",model:null}),this.destroyBean(D),L!=null)this.beans.filterManager?.onFilterChanged({columns:[$],source:J})}else{let D=this.createHandlerParams($,B?.params);Q.handlerParams=D,Q.handler.refresh?.({...D,source:"colDef",model:L})}}if(this.areFilterCompsDifferent(Q.filterUi?.compDetails??null,B)||!Q.filterUi||!B){this.destroyFilterUi(Q,$,B,E);return}Q.filterUi.filterParams=K,Hz(Q,W)?.then((F)=>{if((F?.refresh?F.refresh(K):!0)===!1)this.destroyFilterUi(Q,$,B,E);else this.dispatchLocalEvent({type:"filterParamsChanged",column:$,params:K})})}refreshHandlerAndUi(z,J,Q,Z,$){let X=this.cachedFilter(z);if(!X){if(Z)this.getOrCreateFilterWrapper(z,!0);return N.resolve()}if(!X.isHandler)return N.resolve();let{filterUi:Y,handler:q,handlerParams:G}=X;return VJ(()=>{if(Y){let{created:U,filterParams:_}=Y;if(U)return Y.promise.then((H)=>{return H?{filter:H,filterParams:_}:void 0});else Y.refreshed=!0}return N.resolve(void 0)},q,G,J,this.state.get(z.getColId())??{model:J},Q,$)}setColumnFilterWrapper(z,J){let Q=z.getColId();this.allColumnFilters.set(Q,J),this.allColumnListeners.set(Q,this.addManagedListeners(z,{colDefChanged:()=>this.filterParamsChanged(Q)})[0])}areFilterCompsDifferent(z,J){if(!J||!z)return!0;let{componentClass:Q}=z,{componentClass:Z}=J;return!(Q===Z||Q?.render&&Z?.render&&Q.render===Z.render)}hasFloatingFilters(){return this.beans.colModel.getCols().some((J)=>J.getColDef().floatingFilter)}getFilterInstance(z){let J=this.beans.colModel.getColDefColOrCol(z);if(!J)return Promise.resolve(void 0);let Q=this.getOrCreateFilterUi(J);if(!Q)return Promise.resolve(null);return new Promise((Z)=>{Q.then(($)=>{Z(zz($))})})}processFilterModelUpdateQueue(){this.modelUpdates.forEach(({model:z,source:J})=>this.setModel(z,J)),this.modelUpdates=[],this.columnModelUpdates.forEach(({key:z,model:J,resolve:Q})=>{this.setModelForColumn(z,J).then(()=>Q())}),this.columnModelUpdates=[]}getModelForColumn(z,J){if(J){let{state:Z,model:$}=this,X=z.getColId(),Y=Z.get(X);if(Y)return Y.model??null;return f0($,X)}let Q=this.cachedFilter(z);return Q?this.getModelFromFilterWrapper(Q):null}setModelForColumn(z,J){if(this.beans.dataTypeSvc?.isPendingInference){let Q=()=>{},Z=new Promise(($)=>{Q=$});return this.columnModelUpdates.push({key:z,model:J,resolve:Q}),Z}return new Promise((Q)=>{this.setModelForColumnLegacy(z,J).then((Z)=>Q(Z))})}getStateForColumn(z){return this.state.get(z)??{model:f0(this.model,z)}}setModelForColumnLegacy(z,J){let Q=this.beans.colModel.getColDefCol(z),Z=Q?this.getOrCreateFilterWrapper(Q,!0):null;return Z?this.setModelOnFilterWrapper(Z,J):N.resolve()}setColDefPropsForDataType(z,J,Q){let Z=z.filter,$=Z===!0?this.getDefaultFilterFromDataType(()=>J.baseDataType):Z;if(typeof $!=="string")return;let X,Y,q=this.beans,{filterParams:G,filterValueGetter:U}=z;if($==="agMultiColumnFilter")({filterParams:X,filterValueGetter:Y}=q.multiFilter?.getParamsForDataType(G,U,J,Q)??{});else({filterParams:X,filterValueGetter:Y}=F5($,G,U,J,Q,q,this.getLocaleTextFunc()));if(z.filterParams=X,Y)z.filterValueGetter=Y}setColFilterActive(z,J,Q,Z){if(z.filterActive!==J)z.filterActive=J,z.dispatchColEvent("filterActiveChanged",Q);z.dispatchColEvent("filterChanged",Q,Z)}setModelOnFilterWrapper(z,J,Q){return new N((Z)=>{if(z.isHandler){let X=z.column,Y=X.getColId(),q=this.model[Y];if(this.updateStoredModel(Y,J),Q&&J===q){Z();return}this.refreshHandlerAndUi(X,J,"api").then(()=>Z());return}let $=Hz(z);if($){$.then((X)=>{if(typeof X?.setModel!=="function"){V(65),Z();return}(X.setModel(J)||N.resolve()).then(()=>Z())});return}Z()})}updateStoredModel(z,J){if(P(J))this.model[z]=J;else delete this.model[z];let Q=this.state.get(z),Z={model:J,state:Q?.state};this.state.set(z,Z)}filterModified(z,J){this.getOrCreateFilterUi(z)?.then((Q)=>{this.eventSvc.dispatchEvent({type:"filterModified",column:z,filterInstance:Q,...J})})}filterUiChanged(z,J){if(this.gos.get("enableFilterHandlers"))this.eventSvc.dispatchEvent({type:"filterUiChanged",column:z,...J})}floatingFilterUiChanged(z,J){if(this.gos.get("enableFilterHandlers"))this.eventSvc.dispatchEvent({type:"floatingFilterUiChanged",column:z,...J})}updateModel(z,J,Q){let Z=z.getColId(),$=this.cachedFilter(z),X=()=>$?.filterUi;d6({action:J,filterParams:$?.filterUi?.filterParams,getFilterUi:X,getModel:()=>f0(this.model,Z),getState:()=>this.state.get(Z),updateState:(Y)=>this.updateState(z,Y),updateModel:(Y)=>X()?.filterParams?.onModelChange(Y,{...Q,fromAction:J}),processModelToApply:$?.isHandler?$.handler.processModelToApply?.bind($.handler):void 0})}updateAllModels(z,J){let Q=[];if(this.allColumnFilters.forEach((Z,$)=>{let X=this.beans.colModel.getColDefCol($);if(X)d6({action:z,filterParams:Z.filterUi?.filterParams,getFilterUi:()=>Z.filterUi,getModel:()=>f0(this.model,$),getState:()=>this.state.get($),updateState:(Y)=>this.updateState(X,Y),updateModel:(Y)=>{this.updateStoredModel($,Y),this.dispatchLocalEvent({type:"filterAction",column:X,action:z}),Q.push(this.refreshHandlerAndUi(X,Y,"ui"))},processModelToApply:Z?.isHandler?Z.handler.processModelToApply?.bind(Z.handler):void 0})}),Q.length)N.all(Q).then(()=>{this.callOnFilterChangedOutsideRenderCycle({source:"columnFilter",additionalEventAttributes:J,columns:[]})})}updateOrRefreshFilterUi(z){let J=z.getColId();jX(()=>this.cachedFilter(z)?.filterUi,()=>f0(this.model,J),()=>this.state.get(J))}updateState(z,J){this.state.set(z.getColId(),J),this.dispatchLocalEvent({type:"filterStateChanged",column:z,state:J})}canApplyAll(){let{state:z,model:J,activeFilterComps:Q}=this;for(let $ of Q)if($.source==="COLUMN_MENU")return!1;let Z=!1;for(let $ of z.keys()){let X=z.get($);if(X.valid===!1)return!1;if((X.model??null)!==f0(J,$))Z=!0}return Z}hasUnappliedModel(z){let{model:J,state:Q}=this;return(Q.get(z)?.model??null)!==f0(J,z)}setGlobalButtons(z){this.isGlobalButtons=z,this.dispatchLocalEvent({type:"filterGlobalButtons",isGlobal:z})}shouldKeepStateOnDetach(z,J){if(J==="newFiltersToolPanel")return!0;let Q=this.beans.filterPanelSvc;if(Q?.isActive)return!!Q.getState(z.getColId());return!1}onPivotModeChanged(z){let{colModel:J,pivotColsSvc:Q}=this.beans,Z=!!u4(this.gos),$=z.currentValue,X=$?this.activeColumnFilters:this.activeAggregateFilters,Y=$?this.activeAggregateFilters:this.activeColumnFilters,q=[];for(let G of X){let U=J.getColById(G.colId),_=$&&!!Q?.columns.length;if(U&&$===v8(U,$,_,Z))Y.push(G),q.push(G)}P2(X,q)}destroy(){super.destroy(),this.allColumnFilters.forEach((z)=>this.disposeFilterWrapper(z,"gridDestroyed")),this.allColumnListeners.clear(),this.state.clear(),this.activeFilterComps.clear()}};function pD(z){return!!z.filterManager?.isAnyFilterPresent()}function nD(z,J="api"){z.filterManager?.onFilterChanged({source:J})}var dD=class extends S{constructor(){super(...arguments);this.beanName="filterManager",this.advFilterModelUpdateQueue=[]}wireBeans(z){this.quickFilter=z.quickFilter,this.advancedFilter=z.advancedFilter,this.colFilter=z.colFilter}postConstruct(){let z=this.refreshFiltersForAggregations.bind(this),J=this.updateAdvFilterColumns.bind(this);if(this.addManagedEventListeners({columnValueChanged:z,columnPivotChanged:z,columnPivotModeChanged:z,newColumnsLoaded:J,columnVisible:J,advancedFilterEnabledChanged:({enabled:Z})=>this.onAdvFilterEnabledChanged(Z),dataTypesInferred:this.processFilterModelUpdateQueue.bind(this)}),this.externalFilterPresent=this.isExternalFilterPresentCallback(),this.addManagedPropertyListeners(["isExternalFilterPresent","doesExternalFilterPass"],()=>{this.onFilterChanged({source:"api"})}),this.updateAggFiltering(),this.addManagedPropertyListener("groupAggFiltering",()=>{this.updateAggFiltering(),this.onFilterChanged()}),this.quickFilter)this.addManagedListeners(this.quickFilter,{quickFilterChanged:()=>this.onFilterChanged({source:"quickFilter"})});let{gos:Q}=this;this.alwaysPassFilter=Q.get("alwaysPassFilter"),this.addManagedPropertyListener("alwaysPassFilter",()=>{this.alwaysPassFilter=Q.get("alwaysPassFilter"),this.onFilterChanged({source:"api"})})}isExternalFilterPresentCallback(){let z=this.gos.getCallback("isExternalFilterPresent");return typeof z==="function"&&z({})}doesExternalFilterPass(z){let J=this.gos.get("doesExternalFilterPass");return typeof J==="function"&&J(z)}setFilterState(z,J,Q="api"){if(this.isAdvFilterEnabled())return;this.colFilter?.setState(z,J,Q)}setFilterModel(z,J="api",Q){if(this.isAdvFilterEnabled()){if(!Q)this.warnAdvFilters();return}this.colFilter?.setModel(z,J)}getFilterModel(){return this.colFilter?.getModel()??{}}getFilterState(){return this.colFilter?.getState()}isColumnFilterPresent(){return!!this.colFilter?.isFilterPresent()}isAggregateFilterPresent(){return!!this.colFilter?.isAggFilterPresent()}isChildFilterPresent(){return this.isColumnFilterPresent()||this.isQuickFilterPresent()||this.externalFilterPresent||this.isAdvFilterPresent()}isAnyFilterPresent(){return this.isChildFilterPresent()||this.isAggregateFilterPresent()}isAdvFilterPresent(){return this.isAdvFilterEnabled()&&this.advancedFilter.isFilterPresent()}onAdvFilterEnabledChanged(z){if(z){if(this.colFilter?.disableFilters())this.onFilterChanged({source:"advancedFilter"})}else if(this.advancedFilter?.isFilterPresent())this.advancedFilter.setModel(null),this.onFilterChanged({source:"advancedFilter"})}isAdvFilterEnabled(){return!!this.advancedFilter?.isEnabled()}isAdvFilterHeaderActive(){return this.isAdvFilterEnabled()&&this.advancedFilter.isHeaderActive()}refreshFiltersForAggregations(){if(u4(this.gos)&&this.isAnyFilterPresent())this.onFilterChanged()}onFilterChanged(z={}){let{source:J,additionalEventAttributes:Q,columns:Z=[]}=z;this.externalFilterPresent=this.isExternalFilterPresentCallback(),(this.colFilter?this.colFilter.updateBeforeFilterChanged(z):N.resolve()).then(()=>{let $={source:J,type:"filterChanged",columns:Z};if(Q)D0($,Q);this.eventSvc.dispatchEvent($),this.colFilter?.updateAfterFilterChanged()})}isSuppressFlashingCellsBecauseFiltering(){return!!this.colFilter?.isSuppressFlashingCellsBecauseFiltering()}isQuickFilterPresent(){return!!this.quickFilter?.isFilterPresent()}updateAggFiltering(){this.aggFiltering=!!u4(this.gos)}isAggregateQuickFilterPresent(){return this.isQuickFilterPresent()&&this.shouldApplyQuickFilterAfterAgg()}isNonAggregateQuickFilterPresent(){return this.isQuickFilterPresent()&&!this.shouldApplyQuickFilterAfterAgg()}shouldApplyQuickFilterAfterAgg(){return(this.aggFiltering||this.beans.colModel.pivotMode)&&!this.gos.get("applyQuickFilterBeforePivotOrAgg")}doesRowPassAggregateFilters(z){let{rowNode:J}=z;if(this.alwaysPassFilter?.(J))return!0;if(this.isAggregateQuickFilterPresent()&&!this.quickFilter.doesRowPass(J))return!1;if(this.isAggregateFilterPresent()&&!this.colFilter.doFiltersPass(J,z.colIdToSkip,!0))return!1;return!0}doesRowPassFilter(z,J){if(this.alwaysPassFilter?.(z))return!0;if(this.isNonAggregateQuickFilterPresent()&&!this.quickFilter.doesRowPass(z))return!1;if(this.externalFilterPresent&&!this.doesExternalFilterPass(z))return!1;if(this.isColumnFilterPresent()&&!this.colFilter.doFiltersPass(z,J))return!1;if(this.isAdvFilterPresent()&&!this.advancedFilter.doesFilterPass(z))return!1;return!0}isFilterAllowed(z){if(this.isAdvFilterEnabled())return!1;return!!this.colFilter?.isFilterAllowed(z)}getAdvFilterModel(){return this.isAdvFilterEnabled()?this.advancedFilter.getModel():null}setAdvFilterModel(z,J="api"){if(!this.isAdvFilterEnabled())return;if(this.beans.dataTypeSvc?.isPendingInference){this.advFilterModelUpdateQueue.push(z);return}this.advancedFilter.setModel(z??null),this.onFilterChanged({source:J})}toggleAdvFilterBuilder(z,J){if(!this.isAdvFilterEnabled())return;this.advancedFilter.getCtrl().toggleFilterBuilder({source:J,force:z})}updateAdvFilterColumns(){if(!this.isAdvFilterEnabled())return;if(this.advancedFilter.updateValidity())this.onFilterChanged({source:"advancedFilter"})}hasFloatingFilters(){if(this.isAdvFilterEnabled())return!1;return!!this.colFilter?.hasFloatingFilters()}getColumnFilterInstance(z){if(this.isAdvFilterEnabled())return this.warnAdvFilters(),Promise.resolve(void 0);return this.colFilter?.getFilterInstance(z)??Promise.resolve(void 0)}warnAdvFilters(){V(68)}setupAdvFilterHeaderComp(z){this.advancedFilter?.getCtrl().setupHeaderComp(z)}getHeaderRowCount(){return this.isAdvFilterHeaderActive()?1:0}getHeaderHeight(){return this.isAdvFilterHeaderActive()?this.advancedFilter.getCtrl().getHeaderHeight():0}processFilterModelUpdateQueue(){for(let z of this.advFilterModelUpdateQueue)this.setAdvFilterModel(z);this.advFilterModelUpdateQueue=[]}setColumnFilterModel(z,J){if(this.isAdvFilterEnabled())return this.warnAdvFilters(),Promise.resolve();return this.colFilter?.setModelForColumn(z,J)??Promise.resolve()}};function rD(z){return{tag:"div",cls:z}}var M5=class extends x{constructor(z){let{className:J="ag-filter-apply-panel"}=z??{};super(rD(J));this.listeners=[],this.validationMessage=null,this.className=J}updateButtons(z,J){let Q=this.buttons;if(this.buttons=z,Q===z)return;let Z=this.getGui();J0(Z);let $;this.destroyListeners();let X=document.createDocumentFragment(),Y=this.className,q=({type:U,label:_})=>{let H=(L)=>{this.dispatchLocalEvent({type:U,event:L})};if(!["apply","clear","reset","cancel"].includes(U))V(75);let W=U==="apply",E=z0({tag:"button",attrs:{type:W&&J?"submit":"button"},ref:`${U}FilterButton`,cls:`ag-button ag-standard-button ${Y}-button${W?" "+Y+"-apply-button":""}`,children:_});if(this.activateTabIndex([E]),W)$=E;let K=(L)=>{if(L.key===k.ENTER)L.preventDefault(),H(L)},F=this.listeners;E.addEventListener("click",H),F.push(()=>E.removeEventListener("click",H)),E.addEventListener("keydown",K),F.push(()=>E.removeEventListener("keydown",K)),X.append(E)};for(let U of z)q(U);this.eApply=$;let G=this.validationTooltipFeature;if($&&!G)this.validationTooltipFeature=this.createOptionalManagedBean(this.beans.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.eApply,getLocation:()=>"advancedFilter",getTooltipShowDelayOverride:()=>1000}));else if(!$&&G)this.validationTooltipFeature=this.destroyBean(G);Z.append(X)}getApplyButton(){return this.eApply}updateValidity(z,J=null){let Q=this.eApply;if(!Q)return;L2(Q,!z),this.validationMessage=J,this.validationTooltipFeature?.setTooltipAndRefresh(this.validationMessage)}destroyListeners(){for(let z of this.listeners)z();this.listeners=[]}destroy(){this.destroyListeners(),super.destroy()}};var k5=class extends x{constructor(z,J,Q,Z,$,X){super();this.column=z,this.wrapper=J,this.eventParent=Q,this.updateModel=Z,this.isGlobalButtons=$,this.enableGlobalButtonCheck=X,this.hidePopup=null,this.applyActive=!1}postConstruct(){let{comp:z,params:J}=this.wrapper,Q=J,Z=Q.useForm,$=Z?"form":"div";if(this.setTemplate({tag:$,cls:"ag-filter-wrapper"}),Z)this.addManagedElementListeners(this.getGui(),{submit:(X)=>{X?.preventDefault()},keydown:this.handleKeyDown.bind(this)});this.appendChild(z.getGui()),this.params=Q,this.resetButtonsPanel(Q),this.addManagedListeners(this.eventParent,{filterParamsChanged:({column:X,params:Y})=>{if(X===this.column)this.resetButtonsPanel(Y,this.params)},filterStateChanged:({column:X,state:Y})=>{if(X===this.column)this.eButtons?.updateValidity(Y.valid!==!1)},filterAction:({column:X,action:Y,event:q})=>{if(X===this.column)this.afterAction(Y,q)},...this.enableGlobalButtonCheck?{filterGlobalButtons:({isGlobal:X})=>{if(X!==this.isGlobalButtons){this.isGlobalButtons=X;let Y=this.params;this.resetButtonsPanel(Y,Y,!0)}}}:void 0})}afterGuiAttached(z){if(z)this.hidePopup=z.hidePopup}resetButtonsPanel(z,J,Q){let{buttons:Z,readOnly:$}=J??{},{buttons:X,readOnly:Y,useForm:q}=z;if(!Q&&$===Y&&s6(Z,X))return;let G=X&&X.length>0&&!z.readOnly&&!this.isGlobalButtons,U=this.eButtons;if(G){let _=X.map((H)=>{let W=`${H}Filter`;return{type:H,label:k4(this,W)}});if(this.applyActive=d1(this.params),!U){U=this.createBean(new M5),this.appendChild(U.getGui());let H=this.column,W=(B)=>({event:E})=>{this.updateModel(H,B,{fromButtons:!0}),this.afterAction(B,E)};U?.addManagedListeners(U,{apply:W("apply"),clear:W("clear"),reset:W("reset"),cancel:W("cancel")}),this.eButtons=U}U.updateButtons(_,q)}else if(this.applyActive=!1,U)R0(U.getGui()),this.eButtons=this.destroyBean(U)}close(z){let J=this.hidePopup;if(!J)return;let Q=z,Z=Q?.key,$;if(Z===k.ENTER||Z===k.SPACE)$={keyboardEvent:Q};J($),this.hidePopup=null}afterAction(z,J){let{params:Q,applyActive:Z}=this,$=Q?.closeOnApply;switch(z){case"apply":{if(J?.preventDefault(),$&&Z)this.close(J);break}case"reset":{if($&&Z)this.close();break}case"cancel":{if($)this.close(J);break}}}handleKeyDown(z){if(!z.defaultPrevented&&z.key===k.ENTER&&this.applyActive)this.updateModel(this.column,"apply",{fromButtons:!0}),this.afterAction("apply",z)}destroy(){this.hidePopup=null,this.eButtons=this.destroyBean(this.eButtons)}},tD=":where(.ag-menu:not(.ag-tabs) .ag-filter)>:not(.ag-filter-wrapper){min-width:180px}",sD={tag:"div",cls:"ag-filter"},f5=class extends x{constructor(z,J,Q){super(sD);this.column=z,this.source=J,this.enableGlobalButtonCheck=Q,this.wrapper=null}postConstruct(){this.beans.colFilter?.activeFilterComps.add(this),this.createFilter(!0),this.addManagedEventListeners({filterDestroyed:this.onFilterDestroyed.bind(this)})}hasFilter(){return this.wrapper!=null}getFilter(){return this.wrapper?.then((z)=>z.comp)??null}afterInit(){return this.wrapper?.then(()=>{})??N.resolve()}afterGuiAttached(z){this.afterGuiAttachedParams=z,this.wrapper?.then((J)=>{this.comp?.afterGuiAttached(z),J?.comp?.afterGuiAttached?.(z)})}afterGuiDetached(){this.wrapper?.then((z)=>{z?.comp?.afterGuiDetached?.()})}createFilter(z){let{column:J,source:Q,beans:{colFilter:Z}}=this,$=Z.getFilterUiForDisplay(J)??null;this.wrapper=$,$?.then((X)=>{if(!X)return;let{isHandler:Y,comp:q}=X,G;if(Y){let U=!!this.enableGlobalButtonCheck,_=this.createBean(new k5(J,X,Z,Z.updateModel.bind(Z),U&&Z.isGlobalButtons,U));this.comp=_,G=_.getGui()}else if(this.registerCSS(tD),G=q.getGui(),!P(G))V(69,{guiFromFilter:G});if(this.appendChild(G),z)this.eventSvc.dispatchEvent({type:"filterOpened",column:J,source:Q,eGui:this.getGui()});else q.afterGuiAttached?.(this.afterGuiAttachedParams)})}onFilterDestroyed(z){let{source:J,column:Q}=z;if((J==="api"||J==="paramsUpdated")&&Q.getId()===this.column.getId()&&this.beans.colModel.getColDefCol(this.column))J0(this.getGui()),this.comp=this.destroyBean(this.comp),this.createFilter()}destroy(){this.beans.colFilter?.activeFilterComps.delete(this),this.eventSvc.dispatchEvent({type:"filterClosed",column:this.column}),this.wrapper=null,this.comp=this.destroyBean(this.comp),this.afterGuiAttachedParams=void 0,super.destroy()}},lD=class extends S{constructor(){super(...arguments);this.beanName="filterMenuFactory"}wireBeans(z){this.popupSvc=z.popupSvc}hideActiveMenu(){this.hidePopup?.()}showMenuAfterMouseEvent(z,J,Q,Z){if(z&&!z.isColumn)return;this.showPopup(z,($)=>{this.popupSvc?.positionPopupUnderMouseEvent({additionalParams:{column:z},type:Q,mouseEvent:J,ePopup:$})},Q,J.target,F0(this.gos),Z)}showMenuAfterButtonClick(z,J,Q,Z){if(z&&!z.isColumn)return;let $=-1,X="left",Y=F0(this.gos);if(!Y&&this.gos.get("enableRtl"))$=1,X="right";let q=Y?void 0:4*$,G=Y?void 0:4;this.showPopup(z,(U)=>{this.popupSvc?.positionPopupByComponent({type:Q,eventSource:J,ePopup:U,nudgeX:q,nudgeY:G,alignSide:X,keepWithinBounds:!0,position:"under",additionalParams:{column:z}})},Q,J,Y,Z)}showPopup(z,J,Q,Z,$,X){let Y=z?this.createBean(new f5(z,"COLUMN_MENU")):void 0;if(this.activeMenu=Y,!Y?.hasFilter()||!z){r(57);return}let q=z0({tag:"div",cls:`ag-menu${!$?" ag-filter-menu":""}`,role:"presentation"});[this.tabListener]=this.addManagedElementListeners(q,{keydown:(K)=>this.trapFocusWithin(K,q)}),q.appendChild(Y?.getGui());let G,U=()=>Y?.afterGuiDetached(),_=AZ(this.gos)?Z??this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody:void 0,H=(K)=>{O2(z,!1,"contextMenu");let F=K instanceof KeyboardEvent;if(this.tabListener)this.tabListener=this.tabListener();if(F&&Z&&B0(Z))_J(Z)?.focus({preventScroll:!0});U(),this.destroyBean(this.activeMenu),this.dispatchVisibleChangedEvent(!1,Q,z),X?.()},W=this.getLocaleTextFunc(),B=$&&Q!=="columnFilter"?W("ariaLabelColumnMenu","Column Menu"):W("ariaLabelColumnFilter","Column Filter"),E=this.popupSvc?.addPopup({modal:!0,eChild:q,closeOnEsc:!0,closedCallback:H,positionCallback:()=>J(q),anchorToElement:_,ariaLabel:B});if(E)this.hidePopup=G=E.hideFunc;Y.afterInit().then(()=>{J(q),Y.afterGuiAttached({container:Q,hidePopup:G})}),O2(z,!0,"contextMenu"),this.dispatchVisibleChangedEvent(!0,Q,z)}trapFocusWithin(z,J){if(z.key!==k.TAB||z.defaultPrevented||O0(this.beans,J,!1,z.shiftKey))return;z.preventDefault(),E0(J,z.shiftKey)}dispatchVisibleChangedEvent(z,J,Q){this.eventSvc.dispatchEvent({type:"columnMenuVisibleChanged",visible:z,switchingTab:!1,key:J,column:Q??null,columnGroup:null})}isMenuEnabled(z){return z.isFilterAllowed()&&(z.colDef.menuTabs??["filterMenuTab"]).includes("filterMenuTab")}showMenuAfterContextMenuEvent(){}destroy(){this.destroyBean(this.activeMenu),super.destroy()}},aD=class extends S{constructor(){super(...arguments);this.beanName="filterValueSvc"}getValue(z,J,Q){let Z=z.colDef,$=this.beans,X=Q??$.selectableFilter?.getFilterValueGetter(z.colId)??Z.filterValueGetter,Y=$.valueSvc;if(X){let G=typeof X==="function",U=$.expressionSvc;if(!G&&!U)return;let _=$.colModel,H={api:$.gridApi,context:$.gridOptions.context,data:J.data,node:J,column:z,colDef:Z,getValue:(W)=>{let B=_.getColDefColOrCol(W);return B?Y.getValue(B,J,"data"):null}};return G?X(H):U.evaluate(X,H)}let q=Y.getValue(z,J,"data");if(z.colDef.allowFormula){let G=$.formula;if(G?.isFormula(q))return G.resolveValue(z,J)}return q}};var oD=class extends FJ{constructor(z){super(z,"ag-radio-button","radio")}isSelected(){return this.eInput.checked}toggle(){if(this.eInput.disabled)return;if(!this.isSelected())this.setValue(!0)}addInputListeners(){super.addInputListeners(),this.addManagedEventListeners({checkboxChanged:this.onChange.bind(this)})}onChange(z){let J=this.eInput;if(z.selected&&z.name&&J.name&&J.name===z.name&&z.id&&J.id!==z.id)this.setValue(!1,!0)}};var S5=class{constructor(){this.customFilterOptions={}}init(z,J){this.filterOptions=z.filterOptions??J,this.mapCustomOptions(),this.defaultOption=this.getDefaultItem(z.defaultOption)}refresh(z,J){let Q=z.filterOptions??J;if(this.filterOptions!==Q)this.filterOptions=Q,this.customFilterOptions={},this.mapCustomOptions();this.defaultOption=this.getDefaultItem(z.defaultOption)}mapCustomOptions(){let{filterOptions:z}=this;if(!z)return;for(let J of z){if(typeof J==="string")continue;let Q=[["displayKey"],["displayName"],["predicate","test"]],Z=($)=>{if(!$.some((X)=>J[X]!=null))return V(72,{keys:$}),!1;return!0};if(!Q.every(Z)){this.filterOptions=z.filter(($)=>$===J)||[];continue}this.customFilterOptions[J.displayKey]=J}}getDefaultItem(z){let{filterOptions:J}=this;if(z)return z;else if(J.length>=1){let Q=J[0];if(typeof Q==="string")return Q;else if(Q.displayKey)return Q.displayKey;else V(73)}else V(74);return}getCustomOption(z){return this.customFilterOptions[z]}};function F2(z,J,Q){return Q==null?z.splice(J):z.splice(J,Q)}function r6(z){return z==null||typeof z==="string"&&z.trim().length===0}function eD(z){return z==="AND"||z==="OR"?z:"AND"}function zM(z,J,Q){if(z==null)return;let{predicate:Z}=z;if(Z!=null&&!J.some(($)=>$==null))return Z(J,Q)}function JM(z,J){let Q=z.length;if(Q>J)z.splice(J),V(78),Q=J;return Q}var QM=new Set(["empty","notBlank","blank","today","yesterday","tomorrow","thisWeek","lastWeek","nextWeek","thisMonth","lastMonth","nextMonth","thisQuarter","lastQuarter","nextQuarter","thisYear","lastYear","nextYear","yearToDate","last7Days","last30Days","last90Days","last6Months","last12Months","last24Months"]);function J1(z,J){let Q=J.getCustomOption(z);if(Q){let{numberOfInputs:Z}=Q;return Z!=null?Z:1}if(z&&QM.has(z))return 0;else if(z==="inRange")return 2;return 1}var V5=class extends $1{constructor(z,J,Q){super(z,"simple-filter");this.mapValuesFromModel=J,this.defaultOptions=Q,this.eTypes=[],this.eJoinPanels=[],this.eJoinAnds=[],this.eJoinOrs=[],this.eConditionBodies=[],this.listener=()=>this.onUiChanged(),this.lastUiCompletePosition=null,this.joinOperatorId=0}setParams(z){super.setParams(z);let J=new S5;this.optionsFactory=J,J.init(z,this.defaultOptions),this.commonUpdateSimpleParams(z),this.createOption(),this.createMissingConditionsAndOperators()}updateParams(z,J){this.optionsFactory.refresh(z,this.defaultOptions),super.updateParams(z,J),this.commonUpdateSimpleParams(z)}commonUpdateSimpleParams(z){this.setNumConditions(z),this.defaultJoinOperator=eD(z.defaultJoinOperator),this.filterPlaceholder=z.filterPlaceholder,this.createFilterListOptions(),f4(this.getGui(),"tabindex",this.isReadOnly()?"-1":null)}onFloatingFilterChanged(z,J){this.setTypeFromFloatingFilter(z),this.setValueFromFloatingFilter(J),this.onUiChanged("immediately",!0)}setTypeFromFloatingFilter(z){this.eTypes.forEach((J,Q)=>{let Z=Q===0?z:this.optionsFactory.defaultOption;J.setValue(Z,!0)})}getModelFromUi(){let z=this.getUiCompleteConditions();if(z.length===0)return null;if(this.maxNumConditions>1&&z.length>1)return{filterType:this.filterType,operator:this.getJoinOperator(),conditions:z};return z[0]}getConditionTypes(){return this.eTypes.map((z)=>z.getValue())}getConditionType(z){return this.eTypes[z].getValue()}getJoinOperator(){let{eJoinOrs:z,defaultJoinOperator:J}=this;return z.length===0?J:z[0].getValue()===!0?"OR":"AND"}areNonNullModelsEqual(z,J){let Q=!z.operator,Z=!J.operator;if(!Q&&Z||Q&&!Z)return!1;let X;if(Q){let Y=z,q=J;X=this.areSimpleModelsEqual(Y,q)}else{let Y=z,q=J;X=Y.operator===q.operator&&Z0(Y.conditions,q.conditions,(G,U)=>this.areSimpleModelsEqual(G,U))}return X}setModelIntoUi(z,J){if(z==null)return this.resetUiToDefaults(J),N.resolve();if(z.operator){let Z=z,$=Z.conditions;if($==null)$=[],V(77);let X=JM($,this.maxNumConditions),Y=this.getNumConditions();if(XY)for(let G=Y;GG.setValue(!q,!0)),this.eJoinOrs.forEach((G)=>G.setValue(q,!0)),$.forEach((G,U)=>{this.eTypes[U].setValue(G.type,!0),this.setConditionIntoUi(G,U)})}else{let Z=z;if(this.getNumConditions()>1)this.removeConditionsAndOperators(1);this.eTypes[0].setValue(Z.type,!0),this.setConditionIntoUi(Z,0)}if(this.lastUiCompletePosition=this.getNumConditions()-1,this.createMissingConditionsAndOperators(),this.updateUiVisibility(),!J)this.params.onUiChange(this.getUiChangeEventParams());return N.resolve()}setNumConditions(z){let J=z.maxNumConditions??2;if(J<1)V(79),J=1;this.maxNumConditions=J;let Q=z.numAlwaysVisibleConditions??1;if(Q<1)V(80),Q=1;if(Q>J)V(81),Q=J;this.numAlwaysVisibleConditions=Q}createOption(){let z=this.getGui(),J=this.createManagedBean(new nL);this.eTypes.push(J),J.addCss("ag-filter-select"),z.appendChild(J.getGui());let Q=this.createEValue();this.eConditionBodies.push(Q),z.appendChild(Q),this.putOptionsIntoDropdown(J),this.resetType(J);let Z=this.getNumConditions()-1;this.forEachPositionInput(Z,($)=>this.resetInput($)),this.addChangedListeners(J,Z)}createJoinOperatorPanel(){let z=z0({tag:"div",cls:"ag-filter-condition"});this.eJoinPanels.push(z);let J=this.createJoinOperator(this.eJoinAnds,z,"and"),Q=this.createJoinOperator(this.eJoinOrs,z,"or");this.getGui().appendChild(z);let Z=this.eJoinPanels.length-1,$=this.joinOperatorId++;if(this.resetJoinOperatorAnd(J,Z,$),this.resetJoinOperatorOr(Q,Z,$),!this.isReadOnly())J.onValueChange(this.listener),Q.onValueChange(this.listener)}createJoinOperator(z,J,Q){let Z=this.createManagedBean(new oD);z.push(Z);let $="ag-filter-condition-operator";return Z.addCss($),Z.addCss(`${$}-${Q}`),J.appendChild(Z.getGui()),Z}createFilterListOptions(){this.filterListOptions=this.optionsFactory.filterOptions.map((z)=>typeof z==="string"?this.createBoilerplateListOption(z):this.createCustomListOption(z))}putOptionsIntoDropdown(z){let{filterListOptions:J}=this;for(let Q of J)z.addOption(Q);z.setDisabled(J.length<=1)}createBoilerplateListOption(z){return{value:z,text:this.translate(z)}}createCustomListOption(z){let{displayKey:J}=z,Q=this.optionsFactory.getCustomOption(z.displayKey);return{value:J,text:Q?this.getLocaleTextFunc()(Q.displayKey,Q.displayName):this.translate(J)}}createBodyTemplate(){return null}getAgComponents(){return[]}updateUiVisibility(){let z=this.getJoinOperator();this.updateNumConditions(),this.updateConditionStatusesAndValues(this.lastUiCompletePosition,z)}updateNumConditions(){let z=-1,J=!0;for(let Q=0;Q0)this.removeConditionsAndOperators(Z,$);this.createMissingConditionsAndOperators()}}this.lastUiCompletePosition=z}updateConditionStatusesAndValues(z,J){this.eTypes.forEach((Z,$)=>{let X=this.isConditionDisabled($,z);if(Z.setDisabled(X||this.filterListOptions.length<=1),$===1)L2(this.eJoinPanels[0],X),this.eJoinAnds[0].setDisabled(X),this.eJoinOrs[0].setDisabled(X)}),this.eConditionBodies.forEach((Z,$)=>{w(Z,this.isConditionBodyVisible($))});let Q=(J??this.getJoinOperator())==="OR";for(let Z of this.eJoinAnds)Z.setValue(!Q,!0);for(let Z of this.eJoinOrs)Z.setValue(Q,!0);this.forEachInput((Z,$,X,Y)=>{this.setElementDisplayed(Z,$=this.getNumConditions())return;let{eTypes:Q,eConditionBodies:Z,eJoinPanels:$,eJoinAnds:X,eJoinOrs:Y}=this;this.removeComponents(Q,z,J),this.removeElements(Z,z,J),this.removeEValues(z,J);let q=Math.max(z-1,0);this.removeElements($,q,J),this.removeComponents(X,q,J),this.removeComponents(Y,q,J)}removeElements(z,J,Q){let Z=F2(z,J,Q);for(let $ of Z)R0($)}removeComponents(z,J,Q){let Z=F2(z,J,Q);for(let $ of Z)R0($.getGui()),this.destroyBean($)}afterGuiAttached(z){if(super.afterGuiAttached(z),this.resetPlaceholder(),!z?.suppressFocus){let J;if(!this.isReadOnly()){let Q=this.getInputs(0)[0];if(Q instanceof V1&&this.isConditionBodyVisible(0))J=Q.getInputElement();else J=this.eTypes[0]?.getFocusableElement()}(J??this.getGui()).focus({preventScroll:!0})}}shouldKeepInvalidInputState(){return!1}afterGuiDetached(){super.afterGuiDetached();let z=this.params;if(this.beans.colFilter?.shouldKeepStateOnDetach(z.column)||this.shouldKeepInvalidInputState())return;z.onStateChange({model:z.model});let J=-1,Q=-1,Z=!1,$=this.getJoinOperator();for(let Y=this.getNumConditions()-1;Y>=0;Y--)if(this.isConditionUiComplete(Y)){if(J===-1)J=Y,Q=Y}else{let q=Y>=this.numAlwaysVisibleConditions&&!this.isConditionUiComplete(Y-1),G=Y{if(!(Z instanceof V1))return;let q=$===0&&Y>1?"inRangeStart":$===0?"filterOoo":"inRangeEnd",G=$===0&&Y>1?z("ariaFilterFromValue","Filter from value"):$===0?z("ariaFilterValue","Filter Value"):z("ariaFilterToValue","Filter to Value"),U=Q[X].getValue(),_=t9(this,J,q,U);Z.setInputPlaceholder(_),Z.setInputAriaLabel(G)})}setElementValue(z,J,Q){if(z instanceof V1)z.setValue(J!=null?String(J):null,!0)}setElementDisplayed(z,J){if(x1(z))w(z.getGui(),J)}setElementDisabled(z,J){if(x1(z))L2(z.getGui(),J)}attachElementOnChange(z,J){if(z instanceof V1)z.onValueChange(J)}forEachInput(z){this.getConditionTypes().forEach((J,Q)=>{this.forEachPositionTypeInput(Q,J,z)})}forEachPositionInput(z,J){let Q=this.getConditionType(z);this.forEachPositionTypeInput(z,Q,J)}forEachPositionTypeInput(z,J,Q){let Z=J1(J,this.optionsFactory),$=this.getInputs(z);for(let X=0;X<$.length;X++){let Y=$[X];if(Y!=null)Q(Y,X,z,Z)}}isConditionDisabled(z,J){if(this.isReadOnly())return!0;if(z===0)return!1;return z>J+1}isConditionBodyVisible(z){let J=this.getConditionType(z);return J1(J,this.optionsFactory)>0}isConditionUiComplete(z){if(z>=this.getNumConditions())return!1;if(this.getConditionType(z)==="empty")return!1;if(this.getValues(z).some((Q)=>Q==null))return!1;if(this.positionHasInvalidInputs(z))return!1;return!0}getNumConditions(){return this.eTypes.length}getUiCompleteConditions(){let z=[];for(let J=0;Jthis.resetType(J)),this.eJoinAnds.forEach((J,Q)=>this.resetJoinOperatorAnd(J,Q,this.joinOperatorId+Q)),this.eJoinOrs.forEach((J,Q)=>this.resetJoinOperatorOr(J,Q,this.joinOperatorId+Q)),this.joinOperatorId++,this.forEachInput((J)=>this.resetInput(J)),this.resetPlaceholder(),this.createMissingConditionsAndOperators(),this.lastUiCompletePosition=null,this.updateUiVisibility(),!z)this.params.onUiChange(this.getUiChangeEventParams())}resetType(z){let Q=this.getLocaleTextFunc()("ariaFilteringOperator","Filtering operator");z.setValue(this.optionsFactory.defaultOption,!0).setAriaLabel(Q).setDisabled(this.isReadOnly()||this.filterListOptions.length<=1)}resetJoinOperatorAnd(z,J,Q){this.resetJoinOperator(z,J,this.defaultJoinOperator==="AND",this.translate("andCondition"),Q)}resetJoinOperatorOr(z,J,Q){this.resetJoinOperator(z,J,this.defaultJoinOperator==="OR",this.translate("orCondition"),Q)}resetJoinOperator(z,J,Q,Z,$){this.updateJoinOperatorDisabled(z.setValue(Q,!0).setName(`ag-simple-filter-and-or-${this.getCompId()}-${$}`).setLabel(Z),J)}updateJoinOperatorsDisabled(){let z=(J,Q)=>this.updateJoinOperatorDisabled(J,Q);this.eJoinAnds.forEach(z),this.eJoinOrs.forEach(z)}updateJoinOperatorDisabled(z,J){z.setDisabled(this.isReadOnly()||J>0)}resetInput(z){this.setElementValue(z,null),this.setElementDisabled(z,this.isReadOnly())}setConditionIntoUi(z,J){let Q=this.mapValuesFromModel(z,this.optionsFactory);this.forEachInput((Z,$,X)=>{if(X!==J)return;this.setElementValue(Z,Q[$]!=null?Q[$]:null)})}setValueFromFloatingFilter(z){this.forEachInput((J,Q,Z)=>{this.setElementValue(J,Q===0&&Z===0?z:null,!0)})}addChangedListeners(z,J){if(this.isReadOnly())return;z.onValueChange(this.listener),this.forEachPositionInput(J,(Q)=>{this.attachElementOnChange(Q,this.listener)})}hasInvalidInputs(){return!1}positionHasInvalidInputs(z){return!1}isReadOnly(){return!!this.params.readOnly}};var OX=class extends S{constructor(z,J){super();this.mapValuesFromModel=z,this.defaultOptions=J}init(z){let J=z.filterParams,Q=new S5;this.optionsFactory=Q,Q.init(J,this.defaultOptions),this.filterModelFormatter=this.createManagedBean(new this.FilterModelFormatterClass(Q,J)),this.updateParams(z),this.validateModel(z)}refresh(z){if(z.source==="colDef"){let J=z.filterParams,Q=this.optionsFactory;Q.refresh(J,this.defaultOptions),this.filterModelFormatter.updateParams({optionsFactory:Q,filterParams:J}),this.updateParams(z)}this.validateModel(z)}updateParams(z){this.params=z}doesFilterPass(z){let J=z.model;if(J==null)return!0;let{operator:Q}=J,Z=[];if(Q){let Y=J;Z.push(...Y.conditions??[])}else Z.push(J);let $=Q&&Q==="OR"?"some":"every",X=this.params.getValue(z.node);return Z[$]((Y)=>this.individualConditionPasses(z,Y,X))}getModelAsString(z,J){return this.filterModelFormatter.getModelAsString(z,J)??""}validateModel(z){let{model:J,filterParams:{filterOptions:Q,maxNumConditions:Z}}=z;if(J==null)return;let X=u9(J)?J.conditions:[J],Y=Q?.map((_)=>typeof _==="string"?_:_.displayKey)??this.defaultOptions;if(!(!X||X.every((_)=>Y.find((H)=>H===_.type)!==void 0))){this.params={...z,model:null},z.onModelChange(null);return}let G=!1,U=this.filterType;if(X&&!X.every((_)=>_.filterType===U)||J.filterType!==U)X=X.map((_)=>({..._,filterType:U})),G=!0;if(typeof Z==="number"&&X&&X.length>Z)X=X.slice(0,Z),G=!0;if(G){let _=X.length>1?{...J,filterType:U,conditions:X}:{...X[0],filterType:U};this.params={...z,model:_},z.onModelChange(_)}}individualConditionPasses(z,J,Q){let Z=this.optionsFactory,$=this.mapValuesFromModel(J,Z),X=Z.getCustomOption(J.type),Y=zM(X,$,Q);if(Y!=null)return Y;if(Q==null)return this.evaluateNullValue(J.type);return this.evaluateNonNullValue($,Q,J,z)}},PX=class extends OX{evaluateNullValue(z){let{includeBlanksInEquals:J,includeBlanksInNotEqual:Q,includeBlanksInGreaterThan:Z,includeBlanksInLessThan:$,includeBlanksInRange:X}=this.params.filterParams;switch(z){case"equals":if(J)return!0;break;case"notEqual":if(Q)return!0;break;case"greaterThan":case"greaterThanOrEqual":if(Z)return!0;break;case"lessThan":case"lessThanOrEqual":if($)return!0;break;case"inRange":if(X)return!0;break;case"blank":return!0;case"notBlank":return!1}return!1}evaluateNonNullValue(z,J,Q){let Z=Q.type;if(!this.isValid(J))return Z==="notEqual"||Z==="notBlank";let $=this.comparator(),X=z[0]!=null?$(z[0],J):0;switch(Z){case"equals":return X===0;case"notEqual":return X!==0;case"greaterThan":return X>0;case"greaterThanOrEqual":return X>=0;case"lessThan":return X<0;case"lessThanOrEqual":return X<=0;case"inRange":{let Y=$(z[1],J);return this.params.filterParams.inRangeInclusive?X>=0&&Y<=0:X>0&&Y<0}case"blank":return r6(J);case"notBlank":return!r6(J);default:return V(76,{filterModelType:Z}),!0}}},TX={equals:"Equals",notEqual:"NotEqual",greaterThan:"GreaterThan",greaterThanOrEqual:"GreaterThanOrEqual",lessThan:"LessThan",lessThanOrEqual:"LessThanOrEqual",inRange:"InRange"},ZM={contains:"Contains",notContains:"NotContains",equals:"TextEquals",notEqual:"TextNotEqual",startsWith:"StartsWith",endsWith:"EndsWith",inRange:"InRange"},R5=class extends S{constructor(z,J,Q){super();this.optionsFactory=z,this.filterParams=J,this.valueFormatter=Q}getModelAsString(z,J){let Q=this.getLocaleTextFunc(),Z=J==="filterToolPanel";if(!z)return Z?k4(this,"filterSummaryInactive"):null;if(z.operator!=null){let X=z,q=(X.conditions??[]).map((U)=>this.getModelAsString(U,J)),G=X.operator==="AND"?"andCondition":"orCondition";return q.join(` ${k4(this,G)} `)}else if(z.type==="blank"||z.type==="notBlank")return Z?k4(this,z.type==="blank"?"filterSummaryBlank":"filterSummaryNotBlank"):Q(z.type,z.type);else{let X=z,Y=this.optionsFactory.getCustomOption(X.type),{displayKey:q,displayName:G,numberOfInputs:U}=Y||{};if(q&&G&&U===0)return Q(q,G);return this.conditionToString(X,Z,X.type==="inRange"||U===2,q,G)}}updateParams(z){let{optionsFactory:J,filterParams:Q}=z;this.optionsFactory=J,this.filterParams=Q}conditionForToolPanel(z,J,Q,Z,$,X){let Y,q=this.getTypeKey(z);if(q)Y=k4(this,q);if($&&X)Y=this.getLocaleTextFunc()($,X);if(Y!=null)if(J)return`${Y} ${k4(this,"filterSummaryInRangeValues",[Q(),Z()])}`;else return`${Y} ${Q()}`;return null}getTypeKey(z){let J=this.filterTypeKeys[z];return J?`filterSummary${J}`:null}formatValue(z){let J=this.valueFormatter;return J?J(z??null)??"":String(z)}};var vX=class extends S{constructor(z){super();this.params=z,this.eInput=j,this.onValueChanged=()=>{}}setupGui(z){this.eInput=this.createManagedBean(new s1(this.params?.config));let J=this.eInput.getGui();z.appendChild(J);let Q=(Z)=>this.onValueChanged(Z);this.addManagedListeners(J,{input:Q,keydown:Q})}setEditable(z){this.eInput.setDisabled(!z)}getValue(){return this.eInput.getValue()}setValue(z,J){this.eInput.setValue(z,J)}setValueChangedListener(z){this.onValueChanged=z}setParams({ariaLabel:z,autoComplete:J,placeholder:Q}){let{eInput:Z}=this;if(Z.setInputAriaLabel(z),J!==void 0)Z.setAutoComplete(J);Z.toggleCss("ag-floating-filter-search-icon",!!Q),Z.setInputPlaceholder(Q)}};function ZZ(z){let J=z?.trim();return J===""?z:J}function IX(z,J){let{filter:Q,filterTo:Z,type:$}=z||{};return[Q||null,Z||null].slice(0,J1($,J))}var CX=class extends x{constructor(){super(...arguments);this.defaultDebounceMs=0}setLastTypeFromModel(z){if(!z){this.lastType=this.optionsFactory.defaultOption;return}let J=z.operator,Q;if(J)Q=z.conditions[0];else Q=z;this.lastType=Q.type}canWeEditAfterModelFromParentFilter(z){if(!z)return this.isTypeEditable(this.lastType);if(z.operator)return!1;let Q=z;return this.isTypeEditable(Q.type)}init(z){this.params=z;let J=this.gos.get("enableFilterHandlers");if(this.reactive=J,this.setParams(z),J){let Q=z;this.onModelUpdated(Q.model)}}setParams(z){let J=new S5;this.optionsFactory=J,J.init(z.filterParams,this.defaultOptions),this.filterModelFormatter=this.createManagedBean(new this.FilterModelFormatterClass(J,z.filterParams)),this.setSimpleParams(z,!1)}setSimpleParams(z,J=!0){let Q=this.optionsFactory.defaultOption;if(!J)this.lastType=Q;this.readOnly=!!z.filterParams.readOnly;let Z=this.isTypeEditable(Q);this.setEditable(Z)}refresh(z){this.params=z;let J=z,Q=this.reactive;if(!Q||J.source==="colDef")this.updateParams(z);if(Q){let{source:Z,model:$}=J;if(Z==="dataChanged"||Z==="ui")return;this.onModelUpdated($)}}updateParams(z){let J=this.optionsFactory;J.refresh(z.filterParams,this.defaultOptions),this.setSimpleParams(z),this.filterModelFormatter.updateParams({optionsFactory:J,filterParams:z.filterParams})}onParentModelChanged(z,J){if(J?.afterFloatingFilter||J?.afterDataChange)return;this.onModelUpdated(z)}isTypeEditable(z){return!!z&&!this.readOnly&&J1(z,this.optionsFactory)===1}getAriaLabel(z){return`${this.beans.colNames.getDisplayNameForColumn(z,"header",!0)} ${this.getLocaleTextFunc()("ariaFilterInput","Filter Input")}`}},$M={tag:"div",ref:"eFloatingFilterInputContainer",cls:"ag-floating-filter-input",role:"presentation"},yX=class extends CX{constructor(){super(...arguments);this.eFloatingFilterInputContainer=j,this.defaultDebounceMs=500}postConstruct(){this.setTemplate($M)}onModelUpdated(z){this.setLastTypeFromModel(z),this.setEditable(this.canWeEditAfterModelFromParentFilter(z)),this.inputSvc.setValue(this.filterModelFormatter.getModelAsString(z))}setParams(z){this.setupFloatingFilterInputService(z),super.setParams(z),this.setTextInputParams(z)}setupFloatingFilterInputService(z){this.inputSvc=this.createFloatingFilterInputService(z),this.inputSvc.setupGui(this.eFloatingFilterInputContainer)}setTextInputParams(z){let{inputSvc:J,defaultDebounceMs:Q,readOnly:Z}=this,{filterPlaceholder:$,column:X,browserAutoComplete:Y,filterParams:q}=z,G=this.lastType??this.optionsFactory.defaultOption,U=z.filterParams.filterPlaceholder,_=$===!0?t9(this,U,"filterOoo",G):$||void 0;if(J.setParams({ariaLabel:this.getAriaLabel(X),autoComplete:Y??!1,placeholder:_}),this.applyActive=d1(q),!Z){let H=gZ(q,Q);J.setValueChangedListener(i0(this,this.syncUpWithParentFilter.bind(this),H))}}updateParams(z){super.updateParams(z),this.setTextInputParams(z)}recreateFloatingFilterInputService(z){let{inputSvc:J}=this,Q=J.getValue();J0(this.eFloatingFilterInputContainer),this.destroyBean(J),this.setupFloatingFilterInputService(z),J.setValue(Q,!0)}syncUpWithParentFilter(z){let J=z.key===k.ENTER,Q=this.reactive;if(Q)this.params.onUiChange();if(this.applyActive&&!J)return;let{inputSvc:Z,params:$,lastType:X}=this,Y=Z.getValue();if($.filterParams.trimInput)Y=ZZ(Y),Z.setValue(Y,!0);if(Q){let q=$,G=q.model,U=this.convertValue(Y),_=U==null?null:{...G??{filterType:this.filterType,type:X??this.optionsFactory.defaultOption},filter:U};q.onModelChange(_,{afterFloatingFilter:!0})}else $.parentFilterInstance((q)=>{q?.onFloatingFilterChanged(X||null,Y||null)})}convertValue(z){return z||null}setEditable(z){this.inputSvc.setEditable(z)}};var I8=".ag-input-field-input",bX=class{constructor(z,J,Q,Z,$,X){this.context=z,this.eParent=$,this.alive=!0,this.debouncedReport=i0({isAlive:()=>this.alive},C8,500),this.timeoutHandle=null,__(J,Q,Z)?.newAgStackInstance().then((q)=>{if(!this.alive){z.destroyBean(q);return}if(this.dateComp=q,!q)return;$.appendChild(q.getGui()),q?.afterGuiAttached?.();let{tempValue:G,disabled:U}=this;if(G)q.setDate(G);if(U!=null)q.setDisabled?.(U);X?.(this)})}destroy(){this.alive=!1,this.dateComp=this.context.destroyBean(this.dateComp)}getDate(){return this.dateComp?this.dateComp.getDate():this.tempValue}setDate(z){let J=this.dateComp;if(J)J.setDate(z);else this.tempValue=z}setDisabled(z){let J=this.dateComp;if(J)J.setDisabled?.(z);else this.disabled=z}setDisplayed(z){w(this.eParent,z)}setInputPlaceholder(z){this.dateComp?.setInputPlaceholder?.(z)}setInputAriaLabel(z){this.dateComp?.setInputAriaLabel?.(z)}afterGuiAttached(z){this.dateComp?.afterGuiAttached?.(z)}updateParams(z){this.dateComp?.refresh?.(z)}setCustomValidity(z,J=!1){let Q=this.dateComp?.getGui().querySelector(I8);if(Q&&"setCustomValidity"in Q){let Z=z.length>0;if(Q.setCustomValidity(z),Z)if(J)this.timeoutHandle=this.debouncedReport(Q);else C8(Q);else if(this.timeoutHandle)window.clearTimeout(this.timeoutHandle);HZ(Q,Z)}}getValidity(){return this.dateComp?.getGui().querySelector(I8)?.validity}};function C8(z){z.reportValidity()}var A5=["equals","notEqual","lessThan","greaterThan","inRange","blank","notBlank"];function xX(z,J){let{dateFrom:Q,dateTo:Z,type:$}=z||{};return[Q&&g0(Q,void 0,!0)||null,Z&&g0(Z,void 0,!0)||null].slice(0,J1($,J))}var y8=1000,b8=1/0,XM=class extends V5{constructor(){super("dateFilter",xX,A5);this.eConditionPanelsFrom=[],this.eConditionPanelsTo=[],this.dateConditionFromComps=[],this.dateConditionToComps=[],this.minValidYear=y8,this.maxValidYear=b8,this.minValidDate=null,this.maxValidDate=null,this.filterType="date"}afterGuiAttached(z){super.afterGuiAttached(z),this.dateConditionFromComps[0].afterGuiAttached(z),this.refreshInputValidation()}shouldKeepInvalidInputState(){return!oz()&&this.hasInvalidInputs()&&this.getConditionTypes().includes("inRange")}commonUpdateSimpleParams(z){super.commonUpdateSimpleParams(z);let J=(G,U)=>{let _=z[G];if(_!=null)if(!isNaN(_))return _==null?U:Number(_);else V(82,{param:G});return U},Q=J("minValidYear",y8),Z=J("maxValidYear",b8);if(this.minValidYear=Q,this.maxValidYear=Z,Q>Z)V(83);let{minValidDate:$,maxValidDate:X}=z,Y=$ instanceof Date?$:g0($);this.minValidDate=Y;let q=X instanceof Date?X:g0(X);if(this.maxValidDate=q,Y&&q&&Y>q)V(84)}refreshInputValidation(){for(let z=0;z=2?YM(U,_,J):null,W=H?this.translate(H,[String(J?_:U)]):"",B=!oz()&&!Q;if((J?Y:q).setCustomValidity(W,B),(J?q:Y).setCustomValidity("",B),W.length>0)X.ariaAnnounce.announceValue(W,"dateFilter")}createDateCompWrapper(z,J,Q){let{beans:{userCompFactory:Z,context:$,gos:X},params:Y}=this,q=Q==="from",G=new bX($,Z,Y.colDef,C(X,{onDateChanged:()=>{this.refreshInputPairValidation(J,q),this.onUiChanged()},onFocusIn:()=>this.refreshInputPairValidation(J,q),filterParams:Y,location:"filter"}),z);return this.addDestroyFunc(()=>G.destroy()),G}getState(){return{isInvalid:this.hasInvalidInputs()}}areStatesEqual(z,J){return(z?.isInvalid??!1)===(J?.isInvalid??!1)}setElementValue(z,J){if(z.setDate(J),!J)z.setCustomValidity("")}setElementDisplayed(z,J){z.setDisplayed(J)}setElementDisabled(z,J){z.setDisabled(J)}createEValue(){let z=z0({tag:"div",cls:"ag-filter-body"});return this.createFromToElement(z,this.eConditionPanelsFrom,this.dateConditionFromComps,"from"),this.createFromToElement(z,this.eConditionPanelsTo,this.dateConditionToComps,"to"),z}createFromToElement(z,J,Q,Z){let $=z0({tag:"div",cls:`ag-filter-${Z} ag-filter-date-${Z}`});J.push($),z.appendChild($),Q.push(this.createDateCompWrapper($,J.length-1,Z))}removeEValues(z,J){this.removeDateComps(this.dateConditionFromComps,z,J),this.removeDateComps(this.dateConditionToComps,z,J),F2(this.eConditionPanelsFrom,z,J),F2(this.eConditionPanelsTo,z,J)}removeDateComps(z,J,Q){let Z=F2(z,J,Q);for(let $ of Z)$.destroy()}isValidDateValue(z){if(z===null)return!1;let{minValidDate:J,maxValidDate:Q,minValidYear:Z,maxValidYear:$}=this;if(J){if(zQ)return!1}else if(z.getUTCFullYear()>$)return!1;return!0}hasInvalidInputs(){let z=!1;return this.forEachInput((J)=>z||(z=J.getDate()!=null&&!(J.getValidity()?.valid??!0))),z}positionHasInvalidInputs(z){let J=!1;return this.forEachPositionInput(z,(Q)=>J||(J=!(Q.getValidity()?.valid??!0))),J}canApply(z){return!this.hasInvalidInputs()}isConditionUiComplete(z){if(!super.isConditionUiComplete(z))return!1;let J=!0;return this.forEachPositionInput(z,(Q,Z,$,X)=>{if(!J||Z>=X)return;J&&(J=this.isValidDateValue(Q.getDate()))}),J}areSimpleModelsEqual(z,J){return z.dateFrom===J.dateFrom&&z.dateTo===J.dateTo&&z.type===J.type}createCondition(z){let J=this.getConditionType(z),Q={},{params:Z,filterType:$}=this,X=this.getValues(z),Y=Z.useIsoSeparator?"T":" ";if(X.length>0)Q.dateFrom=o4(X[0],!0,Y);if(X.length>1)Q.dateTo=o4(X[1],!0,Y);return{dateFrom:null,dateTo:null,filterType:$,type:J,...Q}}removeConditionsAndOperators(z,J){if(this.hasInvalidInputs())return;return super.removeConditionsAndOperators(z,J)}resetPlaceholder(){let z=this.getLocaleTextFunc(),J=this.translate("dateFormatOoo"),Q=z("ariaFilterValue","Filter Value");this.forEachInput((Z)=>{Z.setInputPlaceholder(J),Z.setInputAriaLabel(Q)})}getInputs(z){let{dateConditionFromComps:J,dateConditionToComps:Q}=this;if(z>=J.length)return[null,null];return[J[z],Q[z]]}getValues(z){let J=[];return this.forEachPositionInput(z,(Q,Z,$,X)=>{if(Z=J))return null;return`${Q?"max":"min"}DateValidation`}var wX=class extends R5{constructor(z,J){super(z,J,(Q)=>{let{dataTypeSvc:Z,valueSvc:$}=this.beans,X=J.column,Y=Z?.getDateFormatterFunction(X),q=Y?Y(Q??void 0):Q;return $.formatValue(X,null,q)});this.filterTypeKeys=TX}conditionToString(z,J,Q,Z,$){let{type:X}=z,Y=g0(z.dateFrom),q=g0(z.dateTo),G=this.filterParams.inRangeFloatingFilterDateFormat,U=J?this.formatValue.bind(this):(W)=>SB(W,G),_=()=>Y!==null?U(Y):"null",H=()=>q!==null?U(q):"null";if(Y==null&&q==null)return k4(this,X);if(J){let W=this.conditionForToolPanel(X,Q,_,H,Z,$);if(W!=null)return W}if(Q)return`${_()}-${H()}`;if(Y!=null)return U(Y);return`${X}`}};function qM(z,J){let Q=J;if(Qz)return 1;return 0}var GM=class extends PX{constructor(){super(xX,A5);this.filterType="date",this.FilterModelFormatterClass=wX,this.filterTypeToRangeCache=new Map}getOrRefreshRangeCacheItem(z,J){let{filterTypeToRangeCache:Q}=this,Z=Date.now(),$=Q.get(z);if($&&$.expires=0&&$(G,J)<0}return super.evaluateNonNullValue(z,J,Q)}},UM=1,F6=null,_M=()=>{if(F6!=null)return F6;let z,J=typeof navigator>"u"?void 0:navigator.languages?.[0]??navigator.language;if(J&&typeof Intl<"u"&&typeof Intl.Locale==="function")try{z=new Intl.Locale(J).getWeekInfo?.()?.firstDay}catch{z=void 0}return F6=z==null?UM:z%7,F6},o0=(z)=>{return z.setHours(0,0,0,0),z},RJ=(z)=>{let J=z.getDay(),Q=_M(),Z=(J-Q+7)%7;return z.setDate(z.getDate()-Z),o0(z)},AJ=(z,J=1)=>{return z.setDate(z.getDate()-J),z},F4=(z)=>{return z.setDate(z.getDate()+1),o0(z)},NX=(z)=>{return RJ(z),z.setDate(z.getDate()+6),F4(z)},jJ=(z)=>{return z.setDate(1),o0(z)},j5=(z)=>{return z.setDate(1),z.setMonth(z.getMonth()+1),o0(z)},O5=(z)=>{let J=Math.floor(z.getMonth()/3);return z.setMonth(J*3),jJ(z)},gX=(z)=>{let J=Math.floor(z.getMonth()/3);return z.setMonth(J*3+2),j5(z)},P5=(z)=>{return z.setMonth(0,1),o0(z)},hX=(z)=>{return z.setMonth(12,0),F4(z)},u1=(z)=>AJ(z),$Z=(z)=>u1(RJ(z)),XZ=(z)=>u1(jJ(z)),YZ=(z)=>u1(O5(z)),T5=(z,J)=>[o0(z),F4(J)],HM=(z,J)=>T5(u1(z),u1(J)),v5=(z,J)=>[RJ(z),NX(J)],WM=(z,J)=>v5($Z(z),$Z(J)),I5=(z,J)=>[jJ(z),j5(J)],BM=(z,J)=>I5(XZ(z),XZ(J)),C5=(z,J)=>[O5(z),gX(J)],EM=(z,J)=>C5(YZ(z),YZ(J)),y5=(z,J)=>[P5(z),hX(J)],KM=(z,J)=>[P5(z),F4(J)],FM=(z,J)=>[o0(AJ(z,7)),F4(J)],LM=(z,J)=>[o0(AJ(z,30)),F4(J)],DM=(z,J)=>[o0(AJ(z,90)),F4(J)],MM=(z,J)=>{return z.setFullYear(z.getFullYear()-1),z.setMonth(z.getMonth()+6),[o0(z),F4(J)]},kM=(z,J)=>{return z.setFullYear(z.getFullYear()-1),[o0(z),F4(J)]},fM=(z,J)=>{return z.setFullYear(z.getFullYear()-2),[o0(z),F4(J)]},SM=(z,J)=>{return z.setFullYear(z.getFullYear()-1),J.setFullYear(J.getFullYear()-1),y5(z,J)},VM=(z,J)=>{return z.setFullYear(z.getFullYear()+1),J.setFullYear(J.getFullYear()+1),y5(z,J)},RM=(z,J)=>{return z.setMonth(z.getMonth()+3),J.setMonth(J.getMonth()+3),C5(z,J)},AM=(z,J)=>{return z.setMonth(z.getMonth()+1),J.setMonth(J.getMonth()+1),I5(z,J)},jM=(z,J)=>{return z.setDate(z.getDate()+7),J.setDate(J.getDate()+7),v5(z,J)},OM=(z,J)=>{return z.setDate(z.getDate()+1),J.setDate(J.getDate()+1),T5(z,J)},PM={today:T5,yesterday:HM,tomorrow:OM,thisWeek:v5,lastWeek:WM,nextWeek:jM,thisMonth:I5,lastMonth:BM,nextMonth:AM,thisQuarter:C5,lastQuarter:EM,nextQuarter:RM,thisYear:y5,lastYear:SM,nextYear:VM,yearToDate:KM,last7Days:FM,last30Days:LM,last90Days:DM,last6Months:MM,last12Months:kM,last24Months:fM,setStartOfDay:o0,setStartOfWeek:RJ,setStartOfNextDay:F4,setStartOfNextWeek:NX,setStartOfMonth:jJ,setStartOfNextMonth:j5,setStartOfQuarter:O5,setStartOfNextQuarter:gX,setStartOfYear:P5,setStartOfNextYear:hX,setPreviousDay:u1,setPreviousWeek:$Z,setPreviousMonth:XZ,setPreviousQuarter:YZ},TM={tag:"div",cls:"ag-floating-filter-input",role:"presentation",children:[{tag:"ag-input-text-field",ref:"eReadOnlyText"},{tag:"div",ref:"eDateWrapper",cls:"ag-date-floating-filter-wrapper"}]},vM=class extends CX{constructor(){super(TM,[Zz]);this.eReadOnlyText=j,this.eDateWrapper=j,this.FilterModelFormatterClass=wX,this.filterType="date",this.defaultOptions=A5}setParams(z){super.setParams(z),this.createDateComponent();let J=this.getLocaleTextFunc();this.eReadOnlyText.setDisabled(!0).setInputAriaLabel(J("ariaDateFilterInput","Date Filter Input"))}updateParams(z){super.updateParams(z),this.dateComp.updateParams(this.getDateComponentParams()),this.updateCompOnModelChange(z.currentParentModel())}updateCompOnModelChange(z){let J=!this.readOnly&&this.canWeEditAfterModelFromParentFilter(z);if(this.setEditable(J),J){let Q=z?g0(z.dateFrom):null;this.dateComp.setDate(Q),this.eReadOnlyText.setValue("")}else this.eReadOnlyText.setValue(this.filterModelFormatter.getModelAsString(z)),this.dateComp.setDate(null)}setEditable(z){w(this.eDateWrapper,z),w(this.eReadOnlyText.getGui(),!z)}onModelUpdated(z){super.setLastTypeFromModel(z),this.updateCompOnModelChange(z)}onDateChanged(){let z=this.dateComp.getDate();if(this.reactive){let J=this.params;J.onUiChange();let Q=J.model,Z=o4(z),$=Z==null?null:{...Q??{filterType:this.filterType,type:this.lastType??this.optionsFactory.defaultOption},dateFrom:Z};J.onModelChange($,{afterFloatingFilter:!0})}else this.params.parentFilterInstance((J)=>{J?.onFloatingFilterChanged(this.lastType||null,z)})}getDateComponentParams(){let{filterParams:z}=this.params,J=gZ(z,this.defaultDebounceMs);return C(this.gos,{onDateChanged:i0(this,this.onDateChanged.bind(this),J),filterParams:z,location:"floatingFilter"})}createDateComponent(){let{beans:{context:z,userCompFactory:J},eDateWrapper:Q,params:{column:Z}}=this;this.dateComp=new bX(z,J,Z.getColDef(),this.getDateComponentParams(),Q,($)=>{$.setInputAriaLabel(this.getAriaLabel(Z))}),this.addDestroyFunc(()=>this.dateComp.destroy())}},IM={tag:"div",cls:"ag-filter-filter",children:[{tag:"ag-input-text-field",ref:"eDateInput",cls:"ag-date-filter"}]},CM=class extends x{constructor(){super(IM,[Zz]);this.eDateInput=j,this.isApply=!1,this.applyOnFocusOut=!1}init(z){this.params=z,this.setParams(z);let J=this.eDateInput.getInputElement();this.addManagedListeners(J,{mouseDown:()=>{if(this.eDateInput.isDisabled()||this.usingSafariDatePicker)return;J.focus({preventScroll:!0})},input:this.handleInput.bind(this,!1),change:this.handleInput.bind(this,!0),focusout:this.handleFocusOut.bind(this),focusin:this.handleFocusIn.bind(this)})}handleInput(z){if(this.eDateInput.isDisabled())return;if(this.isApply){if(this.applyOnFocusOut=!z,z)this.params.onDateChanged();return}if(!z)this.params.onDateChanged()}handleFocusOut(){if(this.applyOnFocusOut)this.applyOnFocusOut=!1,this.params.onDateChanged()}handleFocusIn(){this.params.onFocusIn?.()}setParams(z){let J=this.eDateInput.getInputElement(),Q=this.shouldUseBrowserDatePicker(z);this.usingSafariDatePicker=Q&&jz();let{minValidYear:Z,maxValidYear:$,minValidDate:X,maxValidDate:Y,buttons:q,includeTime:G,colDef:U}=z.filterParams||{},_=this.beans.dataTypeSvc,H=G??_?.getDateIncludesTimeFlag?.(U.cellDataType)??!1;if(Q)if(H)J.type="datetime-local",J.step="1";else J.type="date";else J.type="text";let W=x8(X,Z,!0),B=x8(Y,$,!1);if(W&&B&&W.getTime()>B.getTime())V(87);if(W)J.min=o4(W,H);if(B)J.max=o4(B,H);this.isApply=z.location==="floatingFilter"&&!!q?.includes("apply")}refresh(z){this.params=z,this.setParams(z)}getDate(){return g0(this.eDateInput.getValue())}setDate(z){let J=this.params.filterParams.colDef.cellDataType,Q=this.beans.dataTypeSvc?.getDateIncludesTimeFlag(J)??!1;this.eDateInput.setValue(o4(z,Q))}setInputPlaceholder(z){this.eDateInput.setInputPlaceholder(z)}setInputAriaLabel(z){this.eDateInput.setAriaLabel(z)}setDisabled(z){this.eDateInput.setDisabled(z)}afterGuiAttached(z){if(!z?.suppressFocus)this.eDateInput.getInputElement().focus({preventScroll:!0})}shouldUseBrowserDatePicker(z){return z?.filterParams?.browserDatePicker??!0}};function x8(z,J,Q){if(z&&J)V(Q?85:86);if(z instanceof Date)return z;if(z)return g0(z);else if(J)return g0(`${J}-${Q?"01-01":"12-31"}`);return null}var b5=["equals","notEqual","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","inRange","blank","notBlank"];function qZ(z){return z?.allowedCharPattern??null}function t6(z){if(z==null)return null;return isNaN(z)?null:z}function uX(z,J){let{filter:Q,filterTo:Z,type:$}=z||{};return[t6(Q),t6(Z)].slice(0,J1($,J))}var yM=class extends V5{constructor(){super("numberFilter",uX,b5);this.eValuesFrom=[],this.eValuesTo=[],this.filterType="number",this.defaultDebounceMs=500}afterGuiAttached(z){super.afterGuiAttached(z),this.refreshInputValidation()}shouldKeepInvalidInputState(){return!oz()&&this.hasInvalidInputs()&&this.getConditionTypes().includes("inRange")}refreshInputValidation(){for(let z=0;z0)this.beans.ariaAnnounce.announceValue(q,"dateFilter")}getState(){return{isInvalid:this.hasInvalidInputs()}}areStatesEqual(z,J){return(z?.isInvalid??!1)===(J?.isInvalid??!1)}refresh(z){let J=super.refresh(z),{state:Q,additionalEventAttributes:Z}=z,$=this.state,X=Z?.fromAction;if(X&&X!="apply"||Q.model!==$.model||!this.areStatesEqual(Q.state,$.state))this.refreshInputValidation();return J}setElementValue(z,J,Q){let{numberFormatter:Z}=this.params,$=!Q&&Z?Z(J??null):J;if(super.setElementValue(z,$),$===null)z.setCustomValidity("")}createEValue(){let{params:z,eValuesFrom:J,eValuesTo:Q}=this,Z=qZ(z),$=z0({tag:"div",cls:"ag-filter-body",role:"presentation"}),X=this.createFromToElement($,J,"from",Z),Y=this.createFromToElement($,Q,"to",Z),q=(_,H,W)=>()=>this.refreshInputPairValidation(_,H,W),G=q(X,Y,!0);X.onValueChange(G),X.addGuiEventListener("focusin",G);let U=q(X,Y,!1);return Y.onValueChange(U),Y.addGuiEventListener("focusin",U),$}createFromToElement(z,J,Q,Z){let $=this.createManagedBean(Z?new s1({allowedCharPattern:Z}):new LX);return $.addCss(`ag-filter-${Q}`),$.addCss("ag-filter-filter"),J.push($),z.appendChild($.getGui()),$}removeEValues(z,J){let Q=(Z)=>this.removeComponents(Z,z,J);Q(this.eValuesFrom),Q(this.eValuesTo)}getValues(z){let J=[];return this.forEachPositionInput(z,(Q,Z,$,X)=>{if(Z0)Q.filter=Z[0];if(Z.length>1)Q.filterTo=Z[1];return Q}removeConditionsAndOperators(z,J){if(this.hasInvalidInputs())return;return super.removeConditionsAndOperators(z,J)}getInputs(z){let{eValuesFrom:J,eValuesTo:Q}=this;if(z>=J.length)return[null,null];return[J[z],Q[z]]}hasInvalidInputs(){let z=!1;return this.forEachInput((J)=>z||(z=!J.getInputElement().validity.valid)),z}positionHasInvalidInputs(z){let J=!1;return this.forEachPositionInput(z,(Q)=>J||(J=!Q.getInputElement().validity.valid)),J}canApply(z){return!this.hasInvalidInputs()}};function mX(z,J){if(typeof J==="number")return J;let Q=q0(J);if(Q?.trim()==="")Q=null;if(z)return z(Q);return Q==null||Q.trim()==="-"?null:Number.parseFloat(Q)}function w8(z,J){return t6(mX(z,J.getValue(!0)))}function bM(z,J,Q){if(!(z!=null&&J!=null&&z>=J))return null;return`strict${Q?"Max":"Min"}ValueValidation`}var cX=class extends R5{constructor(z,J){super(z,J,J.numberFormatter);this.filterTypeKeys=TX}conditionToString(z,J,Q,Z,$){let{filter:X,filterTo:Y,type:q}=z,G=this.formatValue.bind(this);if(J){let U=this.conditionForToolPanel(q,Q,()=>G(X),()=>G(Y),Z,$);if(U!=null)return U}if(Q)return`${G(X)}-${G(Y)}`;if(X!=null)return G(X);return`${q}`}},xM=class extends PX{constructor(){super(uX,b5);this.filterType="number",this.FilterModelFormatterClass=cX}comparator(){return(z,J)=>{if(z===J)return 0;return z{},this.numberInputActive=!0}setupGui(z){this.eNumberInput=this.createManagedBean(new LX),this.eTextInput=this.createManagedBean(new s1),this.eTextInput.setDisabled(!0);let J=this.eNumberInput.getGui(),Q=this.eTextInput.getGui();z.appendChild(J),z.appendChild(Q),this.setupListeners(J,(Z)=>this.onValueChanged(Z)),this.setupListeners(Q,(Z)=>this.onValueChanged(Z))}setEditable(z){this.numberInputActive=z,this.eNumberInput.setDisplayed(this.numberInputActive),this.eTextInput.setDisplayed(!this.numberInputActive)}setAutoComplete(z){this.eNumberInput.setAutoComplete(z),this.eTextInput.setAutoComplete(z)}getValue(){return this.getActiveInputElement().getValue()}setValue(z,J){this.getActiveInputElement().setValue(z,J)}getActiveInputElement(){return this.numberInputActive?this.eNumberInput:this.eTextInput}setValueChangedListener(z){this.onValueChanged=z}setupListeners(z,J){this.addManagedListeners(z,{input:J,keydown:J})}setParams({ariaLabel:z,autoComplete:J,placeholder:Q}){if(this.setAriaLabel(z),J!==void 0)this.setAutoComplete(J);this.setPlaceholder(this.eNumberInput,Q),this.setPlaceholder(this.eTextInput,Q)}setPlaceholder(z,J){z.toggleCss("ag-floating-filter-search-icon",!!J),z.setInputPlaceholder(J)}setAriaLabel(z){this.eNumberInput.setInputAriaLabel(z),this.eTextInput.setInputAriaLabel(z)}},NM=class extends yX{constructor(){super(...arguments);this.FilterModelFormatterClass=cX,this.filterType="number",this.defaultOptions=b5}updateParams(z){if(qZ(z.filterParams)!==this.allowedCharPattern)this.recreateFloatingFilterInputService(z);super.updateParams(z)}createFloatingFilterInputService(z){if(this.allowedCharPattern=qZ(z.filterParams),this.allowedCharPattern)return this.createManagedBean(new vX({config:{allowedCharPattern:this.allowedCharPattern}}));return this.createManagedBean(new wM)}convertValue(z){return z?Number(z):null}},x5=["contains","notContains","equals","notEqual","startsWith","endsWith","blank","notBlank"],gM=class extends V5{constructor(){super("textFilter",IX,x5);this.filterType="text",this.eValuesFrom=[],this.eValuesTo=[],this.defaultDebounceMs=500}createCondition(z){let J=this.getConditionType(z),Q={filterType:this.filterType,type:J},Z=this.getValues(z);if(Z.length>0)Q.filter=Z[0];if(Z.length>1)Q.filterTo=Z[1];return Q}areSimpleModelsEqual(z,J){return z.filter===J.filter&&z.filterTo===J.filterTo&&z.type===J.type}getInputs(z){let{eValuesFrom:J,eValuesTo:Q}=this;if(z>=J.length)return[null,null];return[J[z],Q[z]]}getValues(z){let J=[];return this.forEachPositionInput(z,(Q,Z,$,X)=>{if(Zthis.removeComponents(X,z,J),{eValuesFrom:Z,eValuesTo:$}=this;Q(Z),Q($)}},iX=class extends R5{constructor(){super(...arguments);this.filterTypeKeys=ZM}conditionToString(z,J,Q,Z,$){let{filter:X,filterTo:Y,type:q}=z;if(J){let G=(_)=>()=>k4(this,"filterSummaryTextQuote",[_]),U=this.conditionForToolPanel(q,Q,G(X),G(Y),Z,$);if(U!=null)return U}if(Q)return`${X}-${Y}`;if(X!=null)return`${X}`;return`${q}`}},hM=({filterOption:z,value:J,filterText:Q})=>{if(Q==null)return!1;switch(z){case"contains":return J.includes(Q);case"notContains":return!J.includes(Q);case"equals":return J===Q;case"notEqual":return J!=Q;case"startsWith":return J.indexOf(Q)===0;case"endsWith":{let Z=J.lastIndexOf(Q);return Z>=0&&Z===J.length-Q.length}default:return!1}},uM=(z)=>z,mM=(z)=>z==null?null:z.toString().toLowerCase(),cM=class extends OX{constructor(){super(IX,x5);this.filterType="text",this.FilterModelFormatterClass=iX}updateParams(z){super.updateParams(z);let J=z.filterParams;this.matcher=J.textMatcher??hM,this.formatter=J.textFormatter??(J.caseSensitive?uM:mM)}evaluateNullValue(z){return z?["notEqual","notContains","blank"].indexOf(z)>=0:!1}evaluateNonNullValue(z,J,Q,Z){let $=z.map((W)=>this.formatter(W))||[],X=this.formatter(J),{api:Y,colDef:q,column:G,context:U,filterParams:{textFormatter:_}}=this.params;if(Q.type==="blank")return r6(J);else if(Q.type==="notBlank")return!r6(J);let H={api:Y,colDef:q,column:G,context:U,node:Z.node,data:Z.data,filterOption:Q.type,value:X,textFormatter:_};return $.some((W)=>this.matcher({...H,filterText:W}))}processModelToApply(z){if(z&&this.params.filterParams.trimInput){let J=(Q)=>{let Z={...Q},{filter:$,filterTo:X}=Q;if($)Z.filter=ZZ($)??null;if(X)Z.filterTo=ZZ(X)??null;return Z};if(u9(z))return{...z,conditions:z.conditions.map(J)};return J(z)}return z}},iM=class extends yX{constructor(){super(...arguments);this.FilterModelFormatterClass=iX,this.filterType="text",this.defaultOptions=x5}createFloatingFilterInputService(){return this.createManagedBean(new vX)}};function pM(z){return!!z.quickFilter?.isFilterPresent()}function nM(z){return z.quickFilter?.getText()}function dM(z){z.quickFilter?.resetCache()}var rM=class extends S{constructor(){super(...arguments);this.beanName="quickFilter",this.quickFilter=null,this.quickFilterParts=null}postConstruct(){let z=this.resetCache.bind(this),J=this.gos;this.addManagedEventListeners({columnPivotModeChanged:z,newColumnsLoaded:z,columnRowGroupChanged:z,columnVisible:()=>{if(!J.get("includeHiddenColumnsInQuickFilter"))this.resetCache()}}),this.addManagedPropertyListener("quickFilterText",(Q)=>this.setFilter(Q.currentValue)),this.addManagedPropertyListeners(["includeHiddenColumnsInQuickFilter","applyQuickFilterBeforePivotOrAgg"],()=>this.onColumnConfigChanged()),this.quickFilter=this.parseFilter(J.get("quickFilterText")),this.parser=J.get("quickFilterParser"),this.matcher=J.get("quickFilterMatcher"),this.setFilterParts(),this.addManagedPropertyListeners(["quickFilterMatcher","quickFilterParser"],()=>this.setParserAndMatcher())}refreshCols(){let{autoColSvc:z,colModel:J,gos:Q,pivotResultCols:Z}=this.beans,$=J.pivotMode,X=z?.getColumns(),Y=J.getColDefCols(),q=($&&!Q.get("applyQuickFilterBeforePivotOrAgg")?Z?.getPivotResultCols()?.list:Y)??[];if(X)q=q.concat(X);this.colsToUse=Q.get("includeHiddenColumnsInQuickFilter")?q:q.filter((G)=>G.isVisible()||G.isRowGroupActive())}isFilterPresent(){return this.quickFilter!==null}doesRowPass(z){let J=this.gos.get("cacheQuickFilter");if(this.matcher)return this.doesRowPassMatcher(J,z);return this.quickFilterParts.every((Q)=>J?this.doesRowPassCache(z,Q):this.doesRowPassNoCache(z,Q))}resetCache(){this.beans.rowModel.forEachNode((z)=>z.quickFilterAggregateText=null)}getText(){return this.gos.get("quickFilterText")}setFilterParts(){let{quickFilter:z,parser:J}=this;if(z)this.quickFilterParts=J?J(z):z.split(" ");else this.quickFilterParts=null}parseFilter(z){if(!P(z))return null;return z.toUpperCase()}setFilter(z){if(z!=null&&typeof z!=="string"){V(70,{newFilter:z});return}let J=this.parseFilter(z);if(this.quickFilter!==J)this.quickFilter=J,this.setFilterParts(),this.dispatchLocalEvent({type:"quickFilterChanged"})}setParserAndMatcher(){let z=this.gos.get("quickFilterParser"),J=this.gos.get("quickFilterMatcher"),Q=z!==this.parser||J!==this.matcher;if(this.parser=z,this.matcher=J,Q)this.setFilterParts(),this.dispatchLocalEvent({type:"quickFilterChanged"})}onColumnConfigChanged(){if(this.refreshCols(),this.resetCache(),this.isFilterPresent())this.dispatchLocalEvent({type:"quickFilterChanged"})}doesRowPassNoCache(z,J){return this.colsToUse.some((Q)=>{let Z=this.getTextForColumn(Q,z);return P(Z)&&Z.includes(J)})}doesRowPassCache(z,J){return this.checkGenerateAggText(z),z.quickFilterAggregateText.includes(J)}doesRowPassMatcher(z,J){let Q;if(z)this.checkGenerateAggText(J),Q=J.quickFilterAggregateText;else Q=this.getAggText(J);let{quickFilterParts:Z,matcher:$}=this;return $(Z,Q)}checkGenerateAggText(z){if(!z.quickFilterAggregateText)z.quickFilterAggregateText=this.getAggText(z)}getTextForColumn(z,J){let Q=this.beans.filterValueSvc.getValue(z,J),Z=z.colDef;if(Z.getQuickFilterText){let $=C(this.gos,{value:Q,node:J,data:J.data,column:z,colDef:Z});Q=Z.getQuickFilterText($)}return P(Q)?Q.toString().toUpperCase():null}getAggText(z){let J=[];for(let Q of this.colsToUse){let Z=this.getTextForColumn(Q,z);if(P(Z))J.push(Z)}return J.join(` +`)}},pX={moduleName:"FilterCore",version:i,beans:[dD],apiFunctions:{isAnyFilterPresent:pD,onFilterChanged:nD},css:[jD]},nX={moduleName:"FilterValue",version:i,beans:[aD]},G1={moduleName:"ColumnFilter",version:i,beans:[iD,lD],dynamicBeans:{headerFilterCellCtrl:SD},icons:{filter:"filter",filterActive:"filter"},apiFunctions:{isColumnFilterPresent:OD,getColumnFilterInstance:PD,destroyFilter:TD,setFilterModel:vD,getFilterModel:ID,getColumnFilterModel:CD,setColumnFilterModel:yD,showColumnFilter:bD,hideColumnFilter:xD,getColumnFilterHandler:wD,doFilterAction:ND},dependsOn:[pX,q1,nX,K5]};var dX={moduleName:"TextFilter",version:i,dependsOn:[G1],userComponents:{agTextColumnFilter:{classImp:gM,params:{useForm:!0}},agTextColumnFloatingFilter:iM},dynamicBeans:{agTextColumnFilterHandler:cM}},rX={moduleName:"NumberFilter",version:i,dependsOn:[G1],userComponents:{agNumberColumnFilter:{classImp:yM,params:{useForm:!0}},agNumberColumnFloatingFilter:NM},dynamicBeans:{agNumberColumnFilterHandler:xM}};var tX={moduleName:"DateFilter",version:i,dependsOn:[G1],userComponents:{agDateColumnFilter:{classImp:XM,params:{useForm:!0}},agDateInput:CM,agDateColumnFloatingFilter:vM},dynamicBeans:{agDateColumnFilterHandler:GM}},tM={moduleName:"QuickFilterCore",version:i,rowModels:["clientSide"],beans:[rM],dependsOn:[pX,nX]},sX={moduleName:"QuickFilter",version:i,apiFunctions:{isQuickFilterPresent:pM,getQuickFilter:nM,resetQuickFilter:dM},dependsOn:[tM]};var sM=class extends S{constructor(){super(...arguments);this.beanName="apiEventSvc",this.syncListeners=new Map,this.asyncListeners=new Map,this.syncGlobalListeners=new Set,this.globalListenerPairs=new Map}postConstruct(){this.wrapSvc=this.beans.frameworkOverrides.createGlobalEventListenerWrapper?.()}addListener(z,J){let Q=this.wrapSvc?.wrap(z,J)??J,Z=!R6.has(z),$=Z?this.asyncListeners:this.syncListeners;if(!$.has(z))$.set(z,new Set);$.get(z).add(Q),this.eventSvc.addListener(z,Q,Z)}removeListener(z,J){let Q=this.wrapSvc?.unwrap(z,J)??J,$=!!this.asyncListeners.get(z)?.delete(Q);if(!$)this.syncListeners.get(z)?.delete(Q);this.eventSvc.removeListener(z,Q,$)}addGlobalListener(z){let J=this.wrapSvc?.wrapGlobal(z)??z,Q=(X,Y)=>{if(R6.has(X))J(X,Y)},Z=(X,Y)=>{if(!R6.has(X))J(X,Y)};this.globalListenerPairs.set(z,{syncListener:Q,asyncListener:Z});let $=this.eventSvc;$.addGlobalListener(Q,!1),$.addGlobalListener(Z,!0)}removeGlobalListener(z){let{eventSvc:J,wrapSvc:Q,globalListenerPairs:Z}=this,$=Q?.unwrapGlobal(z)??z;if(Z.has($)){let{syncListener:Y,asyncListener:q}=Z.get($);J.removeGlobalListener(Y,!1),J.removeGlobalListener(q,!0),Z.delete(z)}else this.syncGlobalListeners.delete($),J.removeGlobalListener($,!1)}destroyEventListeners(z,J){z.forEach((Q,Z)=>{Q.forEach(($)=>this.eventSvc.removeListener(Z,$,J)),Q.clear()}),z.clear()}destroyGlobalListeners(z,J){for(let Q of z)this.eventSvc.removeGlobalListener(Q,J);z.clear()}destroy(){super.destroy(),this.destroyEventListeners(this.syncListeners,!1),this.destroyEventListeners(this.asyncListeners,!0),this.destroyGlobalListeners(this.syncGlobalListeners,!1);let{globalListenerPairs:z,eventSvc:J}=this;z.forEach(({syncListener:Q,asyncListener:Z})=>{J.removeGlobalListener(Q,!1),J.removeGlobalListener(Z,!0)}),z.clear()}};function lM(z,J,Q){z.apiEventSvc?.addListener(J,Q)}function aM(z,J,Q){z.apiEventSvc?.removeListener(J,Q)}function oM(z,J){z.apiEventSvc?.addGlobalListener(J)}function eM(z,J){z.apiEventSvc?.removeGlobalListener(J)}var lX={moduleName:"EventApi",version:i,apiFunctions:{addEventListener:lM,addGlobalListener:oM,removeEventListener:aM,removeGlobalListener:eM},beans:[sM]};function P4(z,J){if(typeof z!=="number")return"";let Q=J(),Z=Q("thousandSeparator",","),$=Q("decimalSeparator",".");return z.toString().replace(".",$).replace(/(\d)(?=(\d{3})+(?!\d))/g,`$1${Z}`)}var zk="↑",Jk="↓",Qk={tag:"span",children:[{tag:"span",ref:"eDelta",cls:"ag-value-change-delta"},{tag:"span",ref:"eValue",cls:"ag-value-change-value"}]},Zk=class extends x{constructor(){super(Qk);this.eValue=j,this.eDelta=j,this.refreshCount=0}init(z){this.refresh(z,!0)}showDelta(z,J){let Q=Math.abs(J),Z=z.formatValue(Q),$=P(Z)?Z:Q,X=J>=0,Y=this.eDelta;if(X)Y.textContent=zk+$;else Y.textContent=Jk+$;Y.classList.toggle("ag-value-change-delta-up",X),Y.classList.toggle("ag-value-change-delta-down",!X)}setTimerToRemoveDelta(){this.refreshCount++;let z=this.refreshCount;this.beans.frameworkOverrides.wrapIncoming(()=>{window.setTimeout(()=>{if(z===this.refreshCount)this.hideDeltaValue()},2000)})}hideDeltaValue(){this.eValue.classList.remove("ag-value-change-value-highlight"),J0(this.eDelta)}refresh(z,J=!1){let{value:Q,valueFormatted:Z}=z,{eValue:$,lastValue:X,beans:Y}=this;if(Q===X)return!1;if(P(Z))$.textContent=Z;else if(P(Q))$.textContent=Q;else J0($);if(Y.filterManager?.isSuppressFlashingCellsBecauseFiltering())return!1;let q=Q&&typeof Q==="object"&&"toNumber"in Q?Q.toNumber():Q,G=X&&typeof X==="object"&&"toNumber"in X?X.toNumber():X;if(q===G)return!1;if(typeof q==="number"&&typeof G==="number"){let U=q-G;this.showDelta(z,U)}if(X)$.classList.add("ag-value-change-value-highlight");if(!J)this.setTimerToRemoveDelta();return this.lastValue=Q,!0}},$k=".ag-value-slide-out{opacity:1}:where(.ag-ltr) .ag-value-slide-out{margin-right:5px;transition:opacity 3s,margin-right 3s}:where(.ag-rtl) .ag-value-slide-out{margin-left:5px;transition:opacity 3s,margin-left 3s}:where(.ag-ltr,.ag-rtl) .ag-value-slide-out{transition-timing-function:linear}.ag-value-slide-out-end{opacity:0}:where(.ag-ltr) .ag-value-slide-out-end{margin-right:10px}:where(.ag-rtl) .ag-value-slide-out-end{margin-left:10px}",Xk={tag:"span",children:[{tag:"span",ref:"eCurrent",cls:"ag-value-slide-current"}]},Yk=class extends x{constructor(){super(Xk);this.eCurrent=j,this.refreshCount=0,this.registerCSS($k)}init(z){this.refresh(z,!0)}addSlideAnimation(){this.refreshCount++;let z=this.refreshCount;this.ePrevious?.remove();let{beans:J,eCurrent:Q}=this,Z=z0({tag:"span",cls:"ag-value-slide-previous ag-value-slide-out"});this.ePrevious=Z,Z.textContent=Q.textContent,this.getGui().insertBefore(Z,Q),J.frameworkOverrides.wrapIncoming(()=>{window.setTimeout(()=>{if(z!==this.refreshCount)return;this.ePrevious.classList.add("ag-value-slide-out-end")},50),window.setTimeout(()=>{if(z!==this.refreshCount)return;this.ePrevious?.remove(),this.ePrevious=null},3000)})}refresh(z,J=!1){let Q=z.value;if(d(Q))Q="";if(Q===this.lastValue)return!1;if(this.beans.filterManager?.isSuppressFlashingCellsBecauseFiltering())return!1;if(!J)this.addSlideAnimation();this.lastValue=Q;let Z=this.eCurrent;if(P(z.valueFormatted))Z.textContent=z.valueFormatted;else if(P(z.value))Z.textContent=Q;else J0(Z);return!0}},qk=class extends S{constructor(){super(...arguments);this.beanName="cellFlashSvc",this.nextAnimationTime=null,this.nextAnimationCycle=null,this.animations={highlight:new Map,"data-changed":new Map}}animateCell(z,J,Q=this.beans.gos.get("cellFlashDuration"),Z=this.beans.gos.get("cellFadeDuration")){let $=this.animations[J];$.delete(z);let X=Date.now(),Y=X+Q,q=X+Q+Z,G={phase:"flash",flashEndTime:Y,fadeEndTime:q};$.set(z,G);let U=`ag-cell-${J}`,_=`${U}-animation`,{comp:H,eGui:{style:W}}=z;if(H.toggleCss(U,!0),H.toggleCss(_,!1),W.removeProperty("transition"),W.removeProperty("transition-delay"),this.nextAnimationTime&&Y+15{this.nextAnimationCycle=setTimeout(this.advanceAnimations.bind(this),Q)}),this.nextAnimationTime=Y}advanceAnimations(){let z=Date.now(),J=null;for(let Q of Object.keys(this.animations)){let Z=this.animations[Q],$=`ag-cell-${Q}`,X=`${$}-animation`;for(let[Y,q]of Z){if(!Y.isAlive()||!Y.comp){Z.delete(Y);continue}let{phase:G,flashEndTime:U,fadeEndTime:_}=q,H=G==="flash"?U:_;if(!(z+15>=H)){J=Math.min(H,J??1/0);continue}let{comp:B,eGui:{style:E}}=Y;switch(G){case"flash":B.toggleCss($,!1),B.toggleCss(X,!0),E.transition=`background-color ${_-U}ms`,E.transitionDelay=`${U-z}ms`,J=Math.min(_,J??1/0),q.phase="fade";break;case"fade":B.toggleCss($,!1),B.toggleCss(X,!1),E.removeProperty("transition"),E.removeProperty("transition-delay"),Z.delete(Y);break}}}if(J==null)this.nextAnimationTime=null,this.nextAnimationCycle=null;else if(J)this.nextAnimationCycle=setTimeout(this.advanceAnimations.bind(this),J-z),this.nextAnimationTime=J}onFlashCells(z,J){if(!z.comp)return;let Q=n4(z.cellPosition);if(J.cells[Q])this.animateCell(z,"highlight")}flashCell(z,J){this.animateCell(z,"data-changed",J?.flashDuration,J?.fadeDuration)}destroy(){for(let z of Object.keys(this.animations))this.animations[z].clear()}};function Gk(z,J={}){let{cellFlashSvc:Q}=z;if(!Q)return;z.frameworkOverrides.wrapIncoming(()=>{for(let Z of z.rowRenderer.getCellCtrls(J.rowNodes,J.columns))Q.flashCell(Z,J)})}var aX={moduleName:"HighlightChanges",version:i,beans:[qk],userComponents:{agAnimateShowChangeCellRenderer:Zk,agAnimateSlideCellRenderer:Yk},apiFunctions:{flashCells:Gk}};var Uk=class extends S{constructor(){super(...arguments);this.beanName="selectionColSvc"}postConstruct(){this.addManagedPropertyListener("rowSelection",(z)=>{this.onSelectionOptionsChanged(z.currentValue,z.previousValue,Dz(z.source))}),this.addManagedPropertyListener("selectionColumnDef",this.updateColumns.bind(this))}addColumns(z){let J=this.columns;if(J==null)return;z.list=J.list.concat(z.list),z.tree=J.tree.concat(z.tree),g2(z)}createColumns(z,J){let Q=()=>{U4(this.beans,this.columns?.tree),this.columns=null},Z=z.treeDepth,X=(this.columns?.treeDepth??-1)==Z,Y=this.generateSelectionCols();if(N2(Y,this.columns?.list??[])&&X)return;Q();let{colGroupSvc:G}=this.beans,U=G?.findDepth(z.tree)??0,_=G?.balanceTreeForAutoCols(Y,U)??[];this.columns={list:Y,tree:_,treeDepth:U,map:{}},J((W)=>{if(!W)return null;let B=W.filter((E)=>!i4(E));return[...Y,...B]})}updateColumns(z){let J=Dz(z.source),{beans:Q}=this;for(let Z of this.columns?.list??[]){let $=this.createSelectionColDef(z.currentValue);Z.setColDef($,null,J),a0(Q,{state:[vZ($,Z.colId)]},J)}}getColumn(z){return this.columns?.list.find((J)=>h4(J,z))??null}getColumns(){return this.columns?.list??null}isSelectionColumnEnabled(){let{gos:z,beans:J}=this,Q=z.get("rowSelection");if(typeof Q!=="object"||!s4(z))return!1;let Z=(J.autoColSvc?.getColumns()?.length??0)>0;if(Q.checkboxLocation==="autoGroupColumn"&&Z)return!1;let $=!!Fz(Q),X=k6(Q);return $||X}createSelectionColDef(z){let{gos:J}=this,Q=z??J.get("selectionColumnDef"),Z=J.get("enableRtl"),{rowSpan:$,spanRows:X,...Y}=Q??{};return{width:50,resizable:!1,suppressHeaderMenuButton:!0,sortable:!1,suppressMovable:!0,lockPosition:Z?"right":"left",comparator(q,G,U,_){let H=U.isSelected(),W=_.isSelected();return H===W?0:H?1:-1},editable:!1,suppressFillHandle:!0,suppressAutoSize:!0,pinned:null,...Y,colId:T9,chartDataType:"excluded"}}generateSelectionCols(){if(!this.isSelectionColumnEnabled())return[];let z=this.createSelectionColDef(),J=z.colId;this.gos.validateColDef(z,J,!0);let Q=new B4(z,null,J,!1);return this.createBean(Q),[Q]}onSelectionOptionsChanged(z,J,Q){let Z=J&&typeof J!=="string"?Fz(J):void 0,$=z&&typeof z!=="string"?Fz(z):void 0,X=Z!==$,Y=J&&typeof J!=="string"?k6(J):void 0,q=z&&typeof z!=="string"?k6(z):void 0,G=Y!==q,U=b1(z),_=b1(J);if(X||G||U!==_)this.beans.colModel.refreshAll(Q)}destroy(){U4(this.beans,this.columns?.tree),super.destroy()}refreshVisibility(z,J,Q){if(!this.columns?.list.length)return;let Z=z.length+J.length+Q.length;if(Z===0)return;let $=this.columns.list[0];if(!$.isVisible())return;let X=()=>{let G;switch($.pinned){case"left":case!0:G=z;break;case"right":G=Q;break;default:G=J}if(G)X0(G,$)};if((this.beans.rowNumbersSvc?.getColumn(v9)?2:1)===Z)X()}},_k=':where(.ag-selection-checkbox) .ag-checkbox-input-wrapper:before{content:"";cursor:pointer;inset:-8px;position:absolute}';function Hk(z,J){if(!J.nodes.every((Y)=>{if(Y.rowPinned&&!MJ(Y))return V(59),!1;if(Y.id===void 0)return V(60),!1;return!0}))return;let{nodes:Z,source:$,newValue:X}=J;z.selectionSvc?.setNodesSelected({nodes:Z,source:$??"api",newValue:X})}function Wk(z,J,Q="apiSelectAll"){z.selectionSvc?.selectAllRowNodes({source:Q,selectAll:J})}function Bk(z,J,Q="apiSelectAll"){z.selectionSvc?.deselectAllRowNodes({source:Q,selectAll:J})}function Ek(z,J="apiSelectAllFiltered"){z.selectionSvc?.selectAllRowNodes({source:J,selectAll:"filtered"})}function Kk(z,J="apiSelectAllFiltered"){z.selectionSvc?.deselectAllRowNodes({source:J,selectAll:"filtered"})}function Fk(z,J="apiSelectAllCurrentPage"){z.selectionSvc?.selectAllRowNodes({source:J,selectAll:"currentPage"})}function Lk(z,J="apiSelectAllCurrentPage"){z.selectionSvc?.deselectAllRowNodes({source:J,selectAll:"currentPage"})}function Dk(z){return z.selectionSvc?.getSelectedNodes()??[]}function Mk(z){return z.selectionSvc?.getSelectedRows()??[]}var oX=(z,J)=>{for(let Q=0,Z=z.length;Q{if(Q!=null){let X=Q.getSortedRows();for(let Y=0,q=X.length;Y{if(l0(Z),this.eCheckbox.isDisabled())return;this.beans.selectionSvc?.handleSelectionEvent(Z,this.rowNode,"checkboxSelected")}}),this.addManagedListeners(this.rowNode,{rowSelected:this.onSelectionChanged.bind(this),dataChanged:this.onDataChanged.bind(this),selectableChanged:this.onSelectableChanged.bind(this)}),this.addManagedPropertyListener("rowSelection",({currentValue:Z,previousValue:$})=>{let X=typeof Z==="object"?zQ(Z):void 0,Y=typeof $==="object"?zQ($):void 0;if(X!==Y)this.onSelectableChanged()}),NQ(this.gos)||typeof this.getIsVisible()==="function"){let Z=this.showOrHideSelect.bind(this);this.addManagedEventListeners({displayedColumnsChanged:Z}),this.addManagedListeners(this.rowNode,{dataChanged:Z,cellChanged:Z}),this.showOrHideSelect()}this.eCheckbox.getInputElement().setAttribute("tabindex","-1")}showOrHideSelect(){let{column:z,rowNode:J,overrides:Q,gos:Z}=this,$=J.selectable,X=this.getIsVisible(),Y;if(typeof X==="function"){let H=Q?.callbackParams;if(!z)Y=X({...H,node:J,data:J.data});else{let W=z.createColumnFunctionCallbackParams(J);Y=X({...H,...W})}}else Y=X??!1;let q=$&&!Y||!$&&Y,G=$||Y,U=Z.get("rowSelection"),_=U&&typeof U!=="string"?!zQ(U):!!z?.colDef.showDisabledCheckboxes;if(this.setVisible(G&&(q?_:!0)),this.setDisplayed(G&&(q?_:!0)),G)this.eCheckbox.setDisabled(q);if(Q?.removeHidden)this.setDisplayed(G)}getIsVisible(){let z=this.overrides;if(z)return z.isVisible;let J=this.gos.get("rowSelection");if(J&&typeof J!=="string")return Fz(J);return this.column?.colDef?.checkboxSelection}},Sk=class{constructor(z,J){this.rowModel=z,this.pinnedRowModel=J,this.selectAll=!1,this.rootId=null,this.endId=null,this.cachedRange=[]}reset(){this.rootId=null,this.endId=null,this.cachedRange.length=0}setRoot(z){this.rootId=z.id,this.endId=null,this.cachedRange.length=0}setEndRange(z){this.endId=z.id,this.cachedRange.length=0}getRange(){if(this.cachedRange.length===0){let z=this.getRoot(),J=this.getEnd();if(z==null||J==null)return this.cachedRange;this.cachedRange=this.getNodesInRange(z,J)??[]}return this.cachedRange}isInRange(z){if(this.rootId===null)return!1;return this.getRange().some((J)=>J.id===z.id)}getRoot(z){if(this.rootId)return this.getRowNode(this.rootId);if(z)return this.setRoot(z),z}getEnd(){if(this.endId)return this.getRowNode(this.endId)}getRowNode(z){let J,{rowModel:Q,pinnedRowModel:Z}=this;if(J??(J=Q.getRowNode(z)),Z?.isManual())J??(J=Z.getPinnedRowById(z,"top")),J??(J=Z.getPinnedRowById(z,"bottom"));return J}truncate(z){let J=this.getRange();if(J.length===0)return{keep:[],discard:[]};let Q=J[0].id===this.rootId,Z=J.findIndex(($)=>$.id===z.id);if(Z>-1){let $=J.slice(0,Z),X=J.slice(Z+1);return this.setEndRange(z),Q?{keep:$,discard:X}:{keep:X,discard:$}}else return{keep:J,discard:[]}}extend(z,J=!1){let Q=this.getRoot();if(Q==null){let $=this.getRange().slice();if(J)z.depthFirstSearch((X)=>!X.group&&$.push(X));return $.push(z),this.setRoot(z),{keep:$,discard:[]}}let Z=this.getNodesInRange(Q,z);if(!Z)return this.setRoot(z),{keep:[z],discard:[]};if(Z.find(($)=>$.id===this.endId))return this.setEndRange(z),{keep:this.getRange(),discard:[]};else{let $=this.getRange().slice();return this.setEndRange(z),{keep:this.getRange(),discard:$}}}getNodesInRange(z,J){let{pinnedRowModel:Q,rowModel:Z}=this;if(!Q?.isManual())return Z.getNodesInRangeForSelection(z,J);if(z.rowPinned==="top"&&!J.rowPinned)return z4(Q,"top",z,void 0).concat(Z.getNodesInRangeForSelection(Z.getRow(0),J)??[]);if(z.rowPinned==="bottom"&&!J.rowPinned){let $=z4(Q,"bottom",void 0,z),X=Z.getRowCount(),Y=Z.getRow(X-1);return(Z.getNodesInRangeForSelection(J,Y)??[]).concat($)}if(!z.rowPinned&&!J.rowPinned)return Z.getNodesInRangeForSelection(z,J);if(z.rowPinned==="top"&&J.rowPinned==="top")return z4(Q,"top",z,J);if(z.rowPinned==="bottom"&&J.rowPinned==="top"){let $=z4(Q,"top",J,void 0),X=z4(Q,"bottom",void 0,z),Y=Z.getRow(0),q=Z.getRow(Z.getRowCount()-1);return $.concat(Z.getNodesInRangeForSelection(Y,q)??[]).concat(X)}if(!z.rowPinned&&J.rowPinned==="top")return z4(Q,"top",J,void 0).concat(Z.getNodesInRangeForSelection(Z.getRow(0),z)??[]);if(z.rowPinned==="top"&&J.rowPinned==="bottom"){let $=z4(Q,"top",z,void 0),X=z4(Q,"bottom",void 0,J),Y=Z.getRow(0),q=Z.getRow(Z.getRowCount()-1);return $.concat(Z.getNodesInRangeForSelection(Y,q)??[]).concat(X)}if(z.rowPinned==="bottom"&&J.rowPinned==="bottom")return z4(Q,"bottom",z,J);if(!z.rowPinned&&J.rowPinned==="bottom"){let $=z4(Q,"bottom",void 0,J),X=Z.getRow(Z.getRowCount());return(Z.getNodesInRangeForSelection(z,X)??[]).concat($)}return null}},Vk=class extends S{constructor(z){super();this.column=z,this.cbSelectAllVisible=!1,this.processingEventFromCheckbox=!1}onSpaceKeyDown(z){let J=this.cbSelectAll;if(J.isDisplayed()&&!J.getGui().contains(n(this.beans)))z.preventDefault(),J.setValue(!J.getValue())}getCheckboxGui(){return this.cbSelectAll.getGui()}setComp(z){this.headerCellCtrl=z;let J=this.createManagedBean(new FJ);this.cbSelectAll=J,J.addCss("ag-header-select-all"),U0(J.getGui(),"presentation"),this.showOrHideSelectAll();let Q=this.updateStateOfCheckbox.bind(this);this.addManagedEventListeners({newColumnsLoaded:()=>this.showOrHideSelectAll(),displayedColumnsChanged:this.onDisplayedColumnsChanged.bind(this),selectionChanged:Q,paginationChanged:Q,modelUpdated:Q}),this.addManagedPropertyListener("rowSelection",({currentValue:Z,previousValue:$})=>{let X=(Y)=>typeof Y==="string"||!Y||Y.mode==="singleRow"?void 0:Y.selectAll;if(X(Z)!==X($))this.showOrHideSelectAll();this.updateStateOfCheckbox()}),this.addManagedListeners(J,{fieldValueChanged:this.onCbSelectAll.bind(this)}),J.getInputElement().setAttribute("tabindex","-1"),this.refreshSelectAllLabel()}onDisplayedColumnsChanged(z){if(!this.isAlive())return;this.showOrHideSelectAll(z.source==="uiColumnMoved")}showOrHideSelectAll(z=!1){let J=this.isCheckboxSelection();if(this.cbSelectAllVisible=J,this.cbSelectAll.setDisplayed(J),J)this.checkRightRowModelType("selectAllCheckbox"),this.checkSelectionType("selectAllCheckbox"),this.updateStateOfCheckbox();this.refreshSelectAllLabel(z)}updateStateOfCheckbox(){if(!this.cbSelectAllVisible||this.processingEventFromCheckbox)return;this.processingEventFromCheckbox=!0;let z=this.getSelectAllMode(),J=this.beans.selectionSvc,Q=this.cbSelectAll,Z=J.getSelectAllState(z);Q.setValue(Z);let $=J.hasNodesToSelect(z);Q.setDisabled(!$),this.refreshSelectAllLabel(),this.processingEventFromCheckbox=!1}refreshSelectAllLabel(z=!1){let J=this.getLocaleTextFunc(),{headerCellCtrl:Q,cbSelectAll:Z,cbSelectAllVisible:$}=this,X=Z.getValue(),Y=BZ(J,X),q=J("ariaRowSelectAll","Press Space to toggle all rows selection");if(Q.setAriaDescriptionProperty("selectAll",$?`${q} (${Y})`:null),Z.setInputAriaLabel(J("ariaHeaderSelection","Column with Header Selection")),!z)Q.announceAriaDescription()}checkSelectionType(z){if(!S2(this.gos))return V(128,{feature:z}),!1;return!0}checkRightRowModelType(z){let{gos:J,rowModel:Q}=this.beans;if(!(o(J)||Az(J)))return V(129,{feature:z,rowModel:Q.getType()}),!1;return!0}onCbSelectAll(){if(this.processingEventFromCheckbox)return;if(!this.cbSelectAllVisible)return;let z=this.cbSelectAll.getValue(),J=this.getSelectAllMode(),Q="uiSelectAll";if(J==="currentPage")Q="uiSelectAllCurrentPage";else if(J==="filtered")Q="uiSelectAllFiltered";let Z={source:Q,selectAll:J},$=this.beans.selectionSvc;if(z)$.selectAllRowNodes(Z);else $.deselectAllRowNodes(Z)}isCheckboxSelection(){let{column:z,gos:J,beans:Q}=this,X=typeof J.get("rowSelection")==="object"?"headerCheckbox":"headerCheckboxSelection";return eX(Q,z)&&this.checkRightRowModelType(X)&&this.checkSelectionType(X)}getSelectAllMode(){let z=k9(this.gos,!1);if(z)return z;let{headerCheckboxSelectionCurrentPageOnly:J,headerCheckboxSelectionFilteredOnly:Q}=this.column.colDef;if(J)return"currentPage";if(Q)return"filtered";return"all"}destroy(){super.destroy(),this.cbSelectAll=void 0,this.headerCellCtrl=void 0}};function eX({gos:z,selectionColSvc:J},Q){let Z=z.get("rowSelection"),$=Q.colDef,{headerCheckboxSelection:X}=$,Y=!1;if(typeof Z==="object"){let G=i4(Q),U=Z1(Q);if(b1(Z)==="autoGroupColumn"&&U||G&&J?.isSelectionColumnEnabled())Y=k6(Z)}else if(typeof X==="function")Y=X(C(z,{column:Q,colDef:$}));else Y=!!X;return Y}var Rk=class extends S{postConstruct(){let{gos:z,beans:J}=this;this.selectionCtx=new Sk(J.rowModel,J.pinnedRowModel),this.addManagedPropertyListeners(["isRowSelectable","rowSelection"],()=>{let Q=NQ(z);if(Q!==this.isRowSelectable)this.isRowSelectable=Q,this.updateSelectable()}),this.isRowSelectable=NQ(z),this.addManagedEventListeners({cellValueChanged:(Q)=>this.updateRowSelectable(Q.node),rowNodeDataChanged:(Q)=>this.updateRowSelectable(Q.node)})}destroy(){super.destroy(),this.selectionCtx.reset()}createCheckboxSelectionComponent(){return new fk}createSelectAllFeature(z){if(eX(this.beans,z))return new Vk(z)}isMultiSelect(){return S2(this.gos)}onRowCtrlSelected(z,J,Q){let Z=!!z.rowNode.isSelected();z.forEachGui(Q,($)=>{$.rowComp.toggleCss("ag-row-selected",Z);let X=$.element;if(o6(X,Z),X.contains(n(this.beans)))J($)})}announceAriaRowSelection(z){if(this.isRowSelectionBlocked(z))return;let J=z.isSelected(),Q=this.beans.editSvc?.isEditing({rowNode:z});if(!z.selectable||Q)return;let $=this.getLocaleTextFunc()(J?"ariaRowDeselect":"ariaRowSelect",`Press SPACE to ${J?"deselect":"select"} this row`);this.beans.ariaAnnounce?.announceValue($,"rowSelection")}isRowSelectionBlocked(z){return!z.selectable||z.rowPinned&&!MJ(z)||!s4(this.gos)}updateRowSelectable(z,J){let Q=z.rowPinned&&z.pinnedSibling?z.pinnedSibling.selectable:this.isRowSelectable?.(z)??!0;return this.setRowSelectable(z,Q,J),Q}setRowSelectable(z,J,Q){if(z.selectable!==J){if(z.selectable=J,z.dispatchRowEvent("selectableChanged"),Q)return;if(V2(this.gos)){let $=this.calculateSelectedFromChildren(z);this.setNodesSelected({nodes:[z],newValue:$??!1,source:"selectableChanged"});return}if(z.isSelected()&&!z.selectable)this.setNodesSelected({nodes:[z],newValue:!1,source:"selectableChanged"})}}calculateSelectedFromChildren(z){let J=!1,Q=!1;if(!z.childrenAfterGroup?.length)return z.selectable?z.__selected:null;for(let Z=0;Z{let J=V2(z),Q=y6(z),Z=b6(z)==="filteredDescendants";if(this.masterSelectsDetail=f7(z)==="detail",J!==this.groupSelectsDescendants||Z!==this.groupSelectsFiltered||Q!==this.mode)this.deselectAllRowNodes({source:"api"}),this.groupSelectsDescendants=J,this.groupSelectsFiltered=Z,this.mode=Q}),this.addManagedEventListeners({rowSelected:this.onRowSelected.bind(this)})}destroy(){super.destroy(),this.resetNodes()}handleSelectionEvent(z,J,Q){if(this.isRowSelectionBlocked(J))return 0;let Z=this.inferNodeSelections(J,z.shiftKey,z.metaKey||z.ctrlKey,Q);if(Z==null)return 0;if(this.selectionCtx.selectAll=!1,"select"in Z){if(Z.reset)this.resetNodes();else this.selectRange(Z.deselect,!1,Q);return this.selectRange(Z.select,!0,Q)}else{let $=Z.checkFilteredNodes?JY(Z.node):Z.newValue;return this.setNodesSelected({nodes:[Z.node],newValue:$,clearSelection:Z.clearSelection,keepDescendants:Z.keepDescendants,event:z,source:Q})}}setNodesSelected({newValue:z,clearSelection:J,suppressFinishActions:Q,nodes:Z,event:$,source:X,keepDescendants:Y=!1}){if(Z.length===0)return 0;let{gos:q}=this;if(!s4(q)&&z)return V(132),0;if(Z.length>1&&!this.isMultiSelect())return V(130),0;let G=0;for(let U=0;U0)this.updateGroupsFromChildrenSelections(X),this.dispatchSelectionChanged(X)}return G}selectRange(z,J,Q){let Z=0;if(z.forEach(($)=>{let X=$.primaryRow;if(X.group&&this.groupSelectsDescendants)return;if(this.selectRowNode(X,J,void 0,Q))Z++}),Z>0)this.updateGroupsFromChildrenSelections(Q),this.dispatchSelectionChanged(Q);return Z}selectChildren(z,J,Q){let Z=this.groupSelectsFiltered?z.childrenAfterAggFilter:z.childrenAfterGroup;if(!Z)return 0;return this.setNodesSelected({newValue:J,clearSelection:!1,suppressFinishActions:!0,source:Q,nodes:Z})}getSelectedNodes(){return Array.from(this.selectedNodes.values())}getSelectedRows(){let z=[];return this.selectedNodes.forEach((J)=>J.data&&z.push(J.data)),z}getSelectionCount(){return this.selectedNodes.size}filterFromSelection(z){let J=new Map;this.selectedNodes.forEach((Q,Z)=>{if(z(Q))J.set(Z,Q)}),this.selectedNodes=J}updateGroupsFromChildrenSelections(z,J){if(!this.groupSelectsDescendants)return!1;let{gos:Q,rowModel:Z}=this.beans;if(!o(Q,Z))return!1;let $=Z.rootNode;if(!$)return!1;let X=!1,Y=(q)=>{if(q!==$){let G=this.calculateSelectedFromChildren(q);X=this.selectRowNode(q,G===null?!1:G,void 0,z)||X}};return r0($,this.beans.rowModel.hierarchical,J,Y),X}clearOtherNodes(z,J,Q){let Z=new Map,$=0;return this.selectedNodes.forEach((X)=>{let Y=X.id==z.id;if((J?!Ok(z,X):!0)&&!Y){let G=this.selectedNodes.get(X.id);if($+=this.setNodesSelected({nodes:[G],newValue:!1,clearSelection:!1,suppressFinishActions:!0,source:Q}),this.groupSelectsDescendants&&X.parent)Z.set(X.parent.id,X.parent)}}),Z.forEach((X)=>{let Y=this.calculateSelectedFromChildren(X);this.selectRowNode(X,Y===null?!1:Y,void 0,Q)}),$}onRowSelected(z){let J=z.node;if(this.groupSelectsDescendants&&J.group)return;if(J.isSelected())this.selectedNodes.set(J.id,J);else this.selectedNodes.delete(J.id)}syncInRowNode(z,J){this.syncInOldRowNode(z,J),this.syncInNewRowNode(z)}createDaemonNode(z){if(!z.id)return;let J=new Pz(this.beans);return J.id=z.id,J.data=z.data,J.__selected=z.__selected,J.level=z.level,J}syncInOldRowNode(z,J){if(J&&z.id!==J.id){if(this.selectedNodes.get(J.id)==z)this.selectedNodes.set(J.id,J)}}syncInNewRowNode(z){if(this.selectedNodes.has(z.id))z.__selected=!0,this.selectedNodes.set(z.id,z);else z.__selected=!1}reset(z){let J=this.getSelectionCount();if(this.resetNodes(),J)this.dispatchSelectionChanged(z)}resetNodes(){this.selectedNodes.forEach((z)=>{this.selectRowNode(z,!1)}),this.selectedNodes.clear()}getBestCostNodeSelection(){let{gos:z,rowModel:J}=this.beans;if(!o(z,J))return;let Q=J.getTopLevelNodes();if(Q===null)return;let Z=[];function $(X){for(let Y=0,q=X.length;Y{let Y=this.selectRowNode(X.primaryRow,!1,void 0,z);Z||(Z=Y)};if(J==="currentPage"||J==="filtered"){if(!Q){r(102);return}this.getNodesToSelect(J).forEach($)}else this.selectedNodes.forEach($),this.reset(z);if(this.selectionCtx.selectAll=!1,Q&&this.groupSelectsDescendants){let X=this.updateGroupsFromChildrenSelections(z);Z||(Z=X)}if(Z)this.dispatchSelectionChanged(z)}getSelectedCounts(z){let J=0,Q=0;return this.getNodesToSelect(z).forEach((Z)=>{if(this.groupSelectsDescendants&&Z.group)return;if(Z.isSelected())J++;else if(Z.selectable)Q++}),{selectedCount:J,notSelectedCount:Q}}getSelectAllState(z){let{selectedCount:J,notSelectedCount:Q}=this.getSelectedCounts(z);return zY(J,Q)??null}hasNodesToSelect(z){return this.getNodesToSelect(z).filter((J)=>J.selectable).length>0}getNodesToSelect(z){if(!this.canSelectAll())return[];let J=[],Q=($)=>J.push($);if(z==="currentPage")return this.forEachNodeOnPage(($)=>{if(!$.group){Q($);return}if(!$.footer&&!$.expanded){let X=(Y)=>{Q(Y);let q=Y.childrenAfterFilter;if(q)for(let G=0,U=q.length;G{let q=this.selectRowNode(Y.primaryRow,!0,void 0,Z);X||(X=q)}),Q.selectAll=!0,o(J)&&this.groupSelectsDescendants){let Y=this.updateGroupsFromChildrenSelections(Z);X||(X=Y)}if(X)this.dispatchSelectionChanged(Z)}getSelectionState(){return this.isEmpty()?null:Array.from(this.selectedNodes.keys())}setSelectionState(z,J,Q){if(!z)z=[];if(!Array.isArray(z)){r(103);return}let Z=new Set(z),$=[];if(this.beans.rowModel.forEachNode((X)=>{if(Z.has(X.id))$.push(X)}),Q)this.resetNodes();this.setNodesSelected({newValue:!0,nodes:$,source:J})}canSelectAll(){return o(this.beans.gos)}updateSelectable(z){let{gos:J,rowModel:Q}=this.beans;if(!s4(J))return;let Z="selectableChanged",$=o(J)&&this.groupSelectsDescendants,X=[];if($){let Y=Q.rootNode;if(Y)r0(Y,Q.hierarchical,z,(q)=>{let G=!1;for(let U of q.childrenAfterGroup)if(G||(G=U.selectable),!U.group&&!this.updateRowSelectable(U,!0)&&U.isSelected())X.push(U);this.setRowSelectable(q,G,!0)})}else Q.forEachNode((Y)=>{if(!this.updateRowSelectable(Y,!0)&&Y.isSelected())X.push(Y)});if(X.length)this.setNodesSelected({nodes:X,newValue:!1,source:Z});if(!z&&$)this.updateGroupsFromChildrenSelections?.(Z)}updateSelectableAfterGrouping(z){if(this.updateSelectable(z),this.groupSelectsDescendants){if(this.updateGroupsFromChildrenSelections?.("rowGroupChanged",z))this.dispatchSelectionChanged("rowGroupChanged")}}refreshMasterNodeState(z,J){if(!this.masterSelectsDetail)return;let Q=z.detailNode?.detailGridInfo?.api;if(!Q)return;let Z=jk(Q);if(z.isSelected()!==Z){if(this.selectRowNode(z,Z,J,"masterDetail"))this.dispatchSelectionChanged("masterDetail")}if(!Z)this.detailSelection.set(z.id,new Set(Q.getSelectedNodes().map((X)=>X.id)))}setDetailSelectionState(z,J,Q){if(!this.masterSelectsDetail)return;if(!S2(J)){V(269);return}switch(z.isSelected()){case!0:{Q.selectAll();break}case!1:{Q.deselectAll();break}case void 0:{let Z=this.detailSelection.get(z.id);if(Z){let $=[];for(let X of Z){let Y=Q.getRowNode(X);if(Y)$.push(Y)}Q.setNodesSelected({nodes:$,newValue:!0,source:"masterDetail"})}break}default:break}}dispatchSelectionChanged(z){this.eventSvc.dispatchEvent({type:"selectionChanged",source:z,selectedNodes:this.getSelectedNodes(),serverSideState:null})}};function jk(z){let J=0,Q=0;return z.forEachNode((Z)=>{if(Z.isSelected())J++;else if(Z.selectable)Q++}),zY(J,Q)}function zY(z,J){if(z===0&&J===0)return!1;if(z>0&&J>0)return;return z>0}function Ok(z,J){let Q=J.parent;while(Q){if(Q===z)return!0;Q=Q.parent}return!1}function JY(z){let J=z.isSelected()===!1,Q=z.childrenAfterFilter?.some(JY)??!1;return J||Q}var Pk={moduleName:"SharedRowSelection",version:i,beans:[Uk],css:[_k],apiFunctions:{setNodesSelected:Hk,selectAll:Wk,deselectAll:Bk,selectAllFiltered:Ek,deselectAllFiltered:Kk,selectAllOnCurrentPage:Fk,deselectAllOnCurrentPage:Lk,getSelectedNodes:Dk,getSelectedRows:Mk}},QY={moduleName:"RowSelection",version:i,rowModels:["clientSide","infinite","viewport"],beans:[Ak],dependsOn:[Pk]},Tk=class extends S{constructor(z,J){super();this.cellCtrl=z,this.staticClasses=[],this.beans=J,this.column=z.column}setComp(z){this.cellComp=z,this.applyUserStyles(),this.applyCellClassRules(),this.applyClassesFromColDef()}applyCellClassRules(){let{column:z,cellComp:J}=this,Q=z.colDef,Z=Q.cellClassRules,$=this.getCellClassParams(z,Q);ZX(this.beans.expressionSvc,Z===this.cellClassRules?void 0:this.cellClassRules,Z,$,(X)=>J.toggleCss(X,!0),(X)=>J.toggleCss(X,!1)),this.cellClassRules=Z}applyUserStyles(){let z=this.column,J=z.colDef,Q=J.cellStyle;if(!Q)return;let Z;if(typeof Q==="function"){let $=this.getCellClassParams(z,J);Z=Q($)}else Z=Q;if(Z)this.cellComp.setUserStyles(Z)}applyClassesFromColDef(){let{column:z,cellComp:J}=this,Q=z.colDef,Z=this.getCellClassParams(z,Q);for(let X of this.staticClasses)J.toggleCss(X,!1);let $=this.beans.cellStyles.getStaticCellClasses(Q,Z);this.staticClasses=$;for(let X of $)J.toggleCss(X,!0)}getCellClassParams(z,J){let{value:Q,rowNode:Z}=this.cellCtrl;return C(this.beans.gos,{value:Q,data:Z.data,node:Z,colDef:J,column:z,rowIndex:Z.rowIndex})}},vk=class extends S{constructor(){super(...arguments);this.beanName="cellStyles"}processAllCellClasses(z,J,Q,Z){ZX(this.beans.expressionSvc,void 0,z.cellClassRules,J,Q,Z),this.processStaticCellClasses(z,J,Q)}getStaticCellClasses(z,J){let{cellClass:Q}=z;if(!Q)return[];let Z;if(typeof Q==="function")Z=Q(J);else Z=Q;if(typeof Z==="string")Z=[Z];return Z||[]}createCellCustomStyleFeature(z){return new Tk(z,this.beans)}processStaticCellClasses(z,J,Q){this.getStaticCellClasses(z,J).forEach(($)=>{Q($)})}},ZY={moduleName:"CellStyle",version:i,beans:[vk]};var Ik={enableBrowserTooltips:!0,tooltipTrigger:!0,tooltipMouseTrack:!0,tooltipShowMode:!0,tooltipInteraction:!0,defaultColGroupDef:!0,suppressAutoSize:!0,skipHeaderOnAutoSize:!0,autoSizeStrategy:!0,components:!0,stopEditingWhenCellsLoseFocus:!0,undoRedoCellEditing:!0,undoRedoCellEditingLimit:!0,excelStyles:!0,cacheQuickFilter:!0,customChartThemes:!0,chartThemeOverrides:!0,chartToolPanelsDef:!0,loadingCellRendererSelector:!0,localeText:!0,keepDetailRows:!0,keepDetailRowsCount:!0,detailRowHeight:!0,detailRowAutoHeight:!0,tabIndex:!0,valueCache:!0,valueCacheNeverExpires:!0,enableCellExpressions:!0,suppressTouch:!0,suppressBrowserResizeObserver:!0,suppressPropertyNamesCheck:!0,debug:!0,dragAndDropImageComponent:!0,overlayComponent:!0,suppressOverlays:!0,loadingOverlayComponent:!0,suppressLoadingOverlay:!0,noRowsOverlayComponent:!0,paginateChildRows:!0,pivotPanelShow:!0,pivotSuppressAutoColumn:!0,suppressExpandablePivotGroups:!0,aggFuncs:!0,allowShowChangeAfterFilter:!0,ensureDomOrder:!0,enableRtl:!0,suppressColumnVirtualisation:!0,suppressMaxRenderedRowRestriction:!0,suppressRowVirtualisation:!0,rowDragText:!0,groupLockGroupColumns:!0,suppressGroupRowsSticky:!0,rowModelType:!0,cacheOverflowSize:!0,infiniteInitialRowCount:!0,serverSideInitialRowCount:!0,maxBlocksInCache:!0,maxConcurrentDatasourceRequests:!0,blockLoadDebounceMillis:!0,serverSideOnlyRefreshFilteredGroups:!0,serverSidePivotResultFieldSeparator:!0,viewportRowModelPageSize:!0,viewportRowModelBufferSize:!0,debounceVerticalScrollbar:!0,suppressAnimationFrame:!0,suppressPreventDefaultOnMouseWheel:!0,scrollbarWidth:!0,icons:!0,suppressRowTransform:!0,suppressContentVisibilityAuto:!0,gridId:!0,enableGroupEdit:!0,initialState:!0,processUnpinnedColumns:!0,createChartContainer:!0,getLocaleText:!0,getRowId:!0,reactiveCustomComponents:!0,renderingMode:!0,columnMenu:!0,suppressSetFilterByDefault:!0,getDataPath:!0,enableCellSpan:!0,enableFilterHandlers:!0,filterHandlers:!0},u0="clientSide",b0="serverSide",M1="infinite",Ck={onGroupExpandedOrCollapsed:[u0],refreshClientSideRowModel:[u0],isRowDataEmpty:[u0],forEachLeafNode:[u0],forEachNodeAfterFilter:[u0],forEachNodeAfterFilterAndSort:[u0],resetRowHeights:[u0,b0],applyTransaction:[u0],applyTransactionAsync:[u0],flushAsyncTransactions:[u0],getBestCostNodeSelection:[u0],getServerSideSelectionState:[b0],setServerSideSelectionState:[b0],applyServerSideTransaction:[b0],applyServerSideTransactionAsync:[b0],applyServerSideRowData:[b0],retryServerSideLoads:[b0],flushServerSideAsyncTransactions:[b0],refreshServerSide:[b0],getServerSideGroupLevelState:[b0],refreshInfiniteCache:[M1],purgeInfiniteCache:[M1],getInfiniteRowCount:[M1],isLastRowIndexKnown:[M1,b0],expandAll:[u0,b0],collapseAll:[u0,b0],onRowHeightChanged:[u0,b0],setRowCount:[M1,b0],getCacheBlockState:[M1,b0]},yk={showLoadingOverlay:{version:"v32",message:'`showLoadingOverlay` is deprecated. Use the grid option "loading"=true instead or setGridOption("loading", true).'},clearRangeSelection:{version:"v32.2",message:"Use `clearCellSelection` instead."},getInfiniteRowCount:{version:"v32.2",old:"getInfiniteRowCount()",new:"getDisplayedRowCount()"},selectAllFiltered:{version:"v33",old:"selectAllFiltered()",new:'selectAll("filtered")'},deselectAllFiltered:{version:"v33",old:"deselectAllFiltered()",new:'deselectAll("filtered")'},selectAllOnCurrentPage:{version:"v33",old:"selectAllOnCurrentPage()",new:'selectAll("currentPage")'},deselectAllOnCurrentPage:{version:"v33",old:"deselectAllOnCurrentPage()",new:'deselectAll("currentPage")'}};function bk(z,J,Q){let Z=yk[z];if(Z){let{version:X,new:Y,old:q,message:G}=Z,U=q??z;return(..._)=>{let H=Y?`Please use ${Y} instead. `:"";return y4(`Since ${X} api.${U} is deprecated. ${H}${G??""}`),J.apply(J,_)}}let $=Ck[z];if($)return(...X)=>{let Y=Q.rowModel.getType();if(!$.includes(Y)){O1(`api.${z} can only be called when gridOptions.rowModelType is ${$.join(" or ")}`);return}return J.apply(J,X)};return J}var xk={detailCellRendererCtrl:"SharedMasterDetail",dndSourceComp:"DragAndDrop",fillHandle:"CellSelection",groupCellRendererCtrl:"GroupCellRenderer",headerFilterCellCtrl:"ColumnFilter",headerGroupCellCtrl:"ColumnGroup",rangeHandle:"CellSelection",tooltipFeature:"Tooltip",highlightTooltipFeature:"Tooltip",tooltipStateManager:"Tooltip",groupStrategy:"RowGrouping",treeGroupStrategy:"TreeData",rowNumberRowResizer:"RowNumbers",singleCell:"EditCore",fullRow:"EditCore",agSetColumnFilterHandler:"SetFilter",agMultiColumnFilterHandler:"MultiFilter",agGroupColumnFilterHandler:"GroupFilter",agNumberColumnFilterHandler:"NumberFilter",agBigIntColumnFilterHandler:"BigIntFilter",agDateColumnFilterHandler:"DateFilter",agTextColumnFilterHandler:"TextFilter"},wk={expanded:1,contracted:1,"tree-closed":1,"tree-open":1,"tree-indeterminate":1,pin:1,"eye-slash":1,arrows:1,left:1,right:1,group:1,aggregation:1,pivot:1,"not-allowed":1,chart:1,cross:1,cancel:1,tick:1,first:1,previous:1,next:1,last:1,linked:1,unlinked:1,"color-picker":1,loading:1,menu:1,"menu-alt":1,filter:1,"filter-add":1,columns:1,maximize:1,minimize:1,copy:1,cut:1,paste:1,grip:1,save:1,csv:1,excel:1,"small-down":1,"small-left":1,"small-right":1,"small-up":1,asc:1,desc:1,aasc:1,adesc:1,none:1,up:1,down:1,plus:1,minus:1,settings:1,"checkbox-checked":1,"checkbox-indeterminate":1,"checkbox-unchecked":1,"radio-button-on":1,"radio-button-off":1,eye:1,"column-arrow":1,"un-pin":1,"pinned-top":1,"pinned-bottom":1,"chevron-up":1,"chevron-down":1,"chevron-left":1,"chevron-right":1,edit:1,search:1},Nk={chart:"MenuCore",cancel:"EnterpriseCore",first:"Pagination",previous:"Pagination",next:"Pagination",last:"Pagination",linked:"IntegratedCharts",loadingMenuItems:"MenuCore",unlinked:"IntegratedCharts",menu:"ColumnHeaderComp",legacyMenu:"ColumnMenu",filter:"ColumnFilter",filterActive:"ColumnFilter",filterAdd:"NewFiltersToolPanel",filterCardCollapse:"NewFiltersToolPanel",filterCardExpand:"NewFiltersToolPanel",filterCardEditing:"NewFiltersToolPanel",filterTab:"ColumnMenu",filtersToolPanel:"FiltersToolPanel",columns:["MenuCore"],columnsToolPanel:["ColumnsToolPanel"],maximize:"EnterpriseCore",minimize:"EnterpriseCore",save:"MenuCore",columnGroupOpened:"ColumnGroupHeaderComp",columnGroupClosed:"ColumnGroupHeaderComp",accordionOpen:"EnterpriseCore",accordionClosed:"EnterpriseCore",accordionIndeterminate:"EnterpriseCore",columnSelectClosed:["ColumnsToolPanel","ColumnMenu"],columnSelectOpen:["ColumnsToolPanel","ColumnMenu"],columnSelectIndeterminate:["ColumnsToolPanel","ColumnMenu"],columnMovePin:"SharedDragAndDrop",columnMoveHide:"SharedDragAndDrop",columnMoveMove:"SharedDragAndDrop",columnMoveLeft:"SharedDragAndDrop",columnMoveRight:"SharedDragAndDrop",columnMoveGroup:"SharedDragAndDrop",columnMoveValue:"SharedDragAndDrop",columnMovePivot:"SharedDragAndDrop",dropNotAllowed:"SharedDragAndDrop",ensureColumnVisible:["ColumnsToolPanel","ColumnMenu"],groupContracted:"GroupCellRenderer",groupExpanded:"GroupCellRenderer",setFilterGroupClosed:"SetFilter",setFilterGroupOpen:"SetFilter",setFilterGroupIndeterminate:"SetFilter",setFilterLoading:"SetFilter",close:"EnterpriseCore",check:"MenuItem",colorPicker:"CommunityCore",groupLoading:"LoadingCellRenderer",overlayLoading:"Overlay",overlayExporting:"Overlay",menuAlt:"ColumnHeaderComp",menuPin:"MenuCore",menuValue:"MenuCore",menuAddRowGroup:["MenuCore","ColumnsToolPanel"],menuRemoveRowGroup:["MenuCore","ColumnsToolPanel"],clipboardCopy:"MenuCore",clipboardCut:"MenuCore",clipboardPaste:"MenuCore",pivotPanel:["ColumnsToolPanel","RowGroupingPanel"],rowGroupPanel:["ColumnsToolPanel","RowGroupingPanel"],valuePanel:"ColumnsToolPanel",columnDrag:"EnterpriseCore",rowDrag:["RowDrag","DragAndDrop"],csvExport:"MenuCore",excelExport:"MenuCore",smallDown:"CommunityCore",selectOpen:"CommunityCore",richSelectOpen:"RichSelect",richSelectRemove:"RichSelect",richSelectLoading:"RichSelect",smallLeft:"CommunityCore",smallRight:"CommunityCore",subMenuOpen:"MenuItem",subMenuOpenRtl:"MenuItem",panelDelimiter:"RowGroupingPanel",panelDelimiterRtl:"RowGroupingPanel",smallUp:"CommunityCore",sortAscending:["MenuCore","Sort"],sortDescending:["MenuCore","Sort"],sortAbsoluteAscending:["MenuCore","Sort"],sortAbsoluteDescending:["MenuCore","Sort"],sortUnSort:["MenuCore","Sort"],advancedFilterBuilder:"AdvancedFilter",advancedFilterBuilderDrag:"AdvancedFilter",advancedFilterBuilderInvalid:"AdvancedFilter",advancedFilterBuilderMoveUp:"AdvancedFilter",advancedFilterBuilderMoveDown:"AdvancedFilter",advancedFilterBuilderAdd:"AdvancedFilter",advancedFilterBuilderRemove:"AdvancedFilter",advancedFilterBuilderSelectOpen:"AdvancedFilter",chartsMenu:"IntegratedCharts",chartsMenuEdit:"IntegratedCharts",chartsMenuAdvancedSettings:"IntegratedCharts",chartsMenuAdd:"IntegratedCharts",chartsColorPicker:"IntegratedCharts",chartsThemePrevious:"IntegratedCharts",chartsThemeNext:"IntegratedCharts",chartsDownload:"IntegratedCharts",checkboxChecked:"CommunityCore",checkboxIndeterminate:"CommunityCore",checkboxUnchecked:"CommunityCore",radioButtonOn:"CommunityCore",radioButtonOff:"CommunityCore",rowPin:"PinnedRow",rowUnpin:"PinnedRow",rowPinBottom:"PinnedRow",rowPinTop:"PinnedRow",search:"Find"},gk=new Set(["colorPicker","smallUp","checkboxChecked","checkboxIndeterminate","checkboxUnchecked","radioButtonOn","radioButtonOff","smallDown","smallLeft","smallRight"]),hk=class extends S{constructor(){super(...arguments);this.beanName="validation",this.propertyNameCache=new Map}wireBeans(z){this.gridOptions=z.gridOptions,eG(gF)}warnOnInitialPropertyUpdate(z,J){if(z==="api"&&Ik[J])V(22,{key:J})}processGridOptions(z){this.processOptions(z,b3())}validateApiFunction(z,J){return bk(z,J,this.beans)}missingUserComponent(z,J,Q,Z){let $=C1[J];if($)this.gos.assertModuleRegistered($,`AG Grid '${z}' component: ${J}`);else V(101,{propertyName:z,componentName:J,agGridDefaults:Q,jsComps:Z})}missingDynamicBean(z){let J=xk[z];return J?Y4(200,{...this.gos.getModuleErrorParams(),moduleName:J,reasonOrId:z}):void 0}checkRowEvents(z){if(uk.has(z))V(10,{eventType:z})}validateIcon(z){if(gk.has(z))V(43,{iconName:z});if(wk[z])return;let J=Nk[z];if(J){r(200,{reasonOrId:`icon '${z}'`,moduleName:J,gridScoped:SZ(),gridId:this.beans.context.getId(),rowModelType:this.gos.get("rowModelType"),additionalText:"Alternatively, use the CSS icon name directly."});return}V(134,{iconName:z})}isProvidedUserComp(z){return!!C1[z]}validateColDef(z){this.processOptions(z,V3())}processOptions(z,J){let{validations:Q,deprecations:Z,allProperties:$,allValidNames:X,objectName:Y,docsUrl:q}=J,G=Object.keys(z),U=this.propertyNameCache.get(Y);if(!U)U=new Map,this.propertyNameCache.set(Y,U);let _=this.gridOptions.suppressPropertyNamesCheck!==!0,H=!1;for(let B of G){if(U.has(B))continue;let E=Z[B];if(E){let{message:L,version:D}=E;y4(`As of v${D}, ${B} is deprecated. ${L??""}`)}let K=Q[B],F=this.gridOptions.rowModelType??"clientSide";if(K?.supportedRowModels&&!K.supportedRowModels.includes(F)){let L=z[B];if(L==null||L===!1)continue;y4(`${B} is not supported with the '${F}' row model. It is only valid with: ${K.supportedRowModels.join(", ")}.`),U.set(B,!1);continue}if(!X.has(B)){if(_){let L=oQ({inputValue:B,allSuggestions:$}).values,D=`invalid ${Y} property '${B}' did you mean any of these: ${L.slice(0,8).join(", ")}.`;if(X.has("context"))D+=` +If you are trying to annotate ${Y} with application data, use the '${Y}.context' property instead.`;y4(D)}H=!0,U.set(B,!1);continue}U.set(B,!0)}if(H&&q&&_){let B=this.beans.frameworkOverrides.getDocLink(q);y4(`to see all the valid ${Y} properties please check: ${B}`)}let W=new Set;if(G.forEach((B)=>{if(U.get(B)===!1)return;let E=z[B];if(E==null||E===!1)return;let K=Q[B];if(!K)return;let{dependencies:F,validate:L,expectedType:D}=K;if(D){let M=typeof E;if(M!==D){W.add(`${String(B)} should be of type '${D}' but received '${M}' (${E}).`);return}}if(F){let M=this.checkForRequiredDependencies(B,F,z);if(M){W.add(M);return}}if(L){let M=L(z,this.gridOptions,this.beans);if(M){W.add(M);return}}}),W.size>0)for(let B of W)y4(B)}checkForRequiredDependencies(z,J,Q){let $=Object.entries(J).filter(([X,Y])=>{let q=Q[X];return!Y.required.includes(q)});if($.length===0)return null;return $.map(([X,Y])=>`'${String(z)}' requires '${X}' to be one of [${Y.required.map((q)=>{if(q===null)return"null";else if(q===void 0)return"undefined";return q}).join(", ")}]. ${Y.reason??""}`).join(` + `)}},uk=new Set(["firstChildChanged","lastChildChanged","childIndexChanged"]),$Y={moduleName:"Validation",version:i,beans:[hk]};var a1=class extends S{constructor(){super(...arguments);this.dispatchColumnChangedEvent=v$,this.columns=[],this.columnIndexMap={},this.updateIndexMap=()=>{this.columnIndexMap={},this.columns.forEach((z,J)=>this.columnIndexMap[z.getId()]=J)}}wireBeans(z){this.colModel=z.colModel,this.aggFuncSvc=z.aggFuncSvc,this.visibleCols=z.visibleCols,this.groupHierarchCols=z.groupHierarchyColSvc}sortColumns(z){let{groupHierarchCols:J}=this;this.columns.sort((Q,Z)=>J?.compareVirtualColumns(Q,Z)??z(Q,Z)),this.updateIndexMap()}setColumns(z,J){this.setColList(z,this.columns,this.eventName,!0,!0,this.columnProcessors.set,J)}addColumns(z,J){this.updateColList(z,this.columns,!0,!0,this.columnProcessors.add,this.eventName,J)}removeColumns(z,J){this.updateColList(z,this.columns,!1,!0,this.columnProcessors.remove,this.eventName,J)}getColumnIndex(z){return this.columnIndexMap[z]}setColList(z=[],J,Q,Z,$,X,Y){let q=this.colModel.getCols();if(!q||q.length===0)return;let G=new Map;J.forEach((_,H)=>G.set(_,H)),J.length=0;for(let _ of z){let H=this.colModel.getColDefCol(_);if(H)J.push(H)}J.forEach((_,H)=>{let W=G.get(_);if(W===void 0){G.set(_,0);return}if(Z&&W!==H)return;G.delete(_)}),this.updateIndexMap();let U=this.colModel.getColDefCols();for(let _ of U??[]){let H=J.indexOf(_)>=0;X(_,H,Y)}if($)this.colModel.refreshCols(!1,Y);this.visibleCols.refresh(Y),this.dispatchColumnChangedEvent(this.eventSvc,Q,[...G.keys()],Y)}updateColList(z=[],J,Q,Z,$,X,Y){if(!z||z.length===0)return;let q=!1,G=new Set;for(let _ of z){if(!_)continue;let H=this.colModel.getColDefCol(_);if(!H)continue;if(G.add(H),Q){if(J.indexOf(H)>=0)continue;J.push(H)}else{let W=J.indexOf(H);if(W<0)continue;for(let B=W+1;B=0;else if(F)if(I)R=M;else if(b)R=A!=null&&A>=0;else R=!1;else R=Q.indexOf(K)>=0;if(R)if(F?f!=null||A!=null:f!=null)Z.push(K);else $.push(K)}let H=(K)=>{let F=K.colDef;return Y(F)??q(F)};Z.sort((K,F)=>H(K)-H(F));let W=[],B=this.groupHierarchCols,E=(K)=>{if(B)B.expandColumnInto(W,K);else W.push(K)};Z.forEach(E);for(let K of Q)if($.indexOf(K)>=0)E(K);for(let K of $)if(W.indexOf(K)<0)E(K);for(let K of Q)if(W.indexOf(K)<0)X(K,!1,z);for(let K of W)if(Q.indexOf(K)<0)X(K,!0,z);return this.columns=W,this.updateIndexMap(),this.columns}restoreColumnOrder(z,J){let Q=this.columns,Z=this.colModel.getColDefCols();if(!Q.length||!Z)return z;let $=Object.keys(J),X=new Set($),Y=new Set($),q=new Set(Q.map((M)=>{let f=M.colId;return Y.delete(f),f}).concat($)),G=[],U={},_=0;for(let M=0;M{let f=U[M];for(let A=B;A>>32-$,Q)}ff(z,J,Q,Z,$,X,Y){return this.cmn(J&Q|~J&Z,z,J,$,X,Y)}gg(z,J,Q,Z,$,X,Y){return this.cmn(J&Z|Q&~Z,z,J,$,X,Y)}hh(z,J,Q,Z,$,X,Y){return this.cmn(J^Q^Z,z,J,$,X,Y)}ii(z,J,Q,Z,$,X,Y){return this.cmn(Q^(J|~Z),z,J,$,X,Y)}md51(z){let J=z.length,Q=[1732584193,-271733879,-1732584194,271733878],Z;for(Z=64;Z<=z.length;Z+=64)this.md5cycle(Q,this.md5blk(z.substring(Z-64,Z)));z=z.substring(Z-64);let $=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(Z=0;Z>2]|=z.charCodeAt(Z)<<(Z%4<<3);if($[Z>>2]|=128<<(Z%4<<3),Z>55){this.md5cycle(Q,$);for(Z=0;Z<16;Z++)$[Z]=0}return $[14]=J*8,this.md5cycle(Q,$),Q}md5blk(z){let J=[];for(let Q=0;Q<64;Q+=4)J[Q>>2]=z.charCodeAt(Q)+(z.charCodeAt(Q+1)<<8)+(z.charCodeAt(Q+2)<<16)+(z.charCodeAt(Q+3)<<24);return J}rhex(z){let J="0123456789abcdef".split(""),Q="",Z=0;for(;Z<4;Z++)Q+=J[z>>Z*8+4&15]+J[z>>Z*8&15];return Q}hex(z){for(let J=0;J>16)+(J>>16)+(Q>>16)<<16|Q&65535}},OJ={"01":"GRID","02":"CHARTS","0102":"BOTH"};var dY=class z{constructor(J){this.watermarkMessage=void 0,this.totalMessageLength=124,this.document=J,this.md5=new ck,this.md5.init()}validateLicense(){let J=this.getLicenseDetails(z.licenseKey),Q=`AG Grid ${J.currentLicenseType==="BOTH"?"and AG Charts ":""}Enterprise`,Z=J.suppliedLicenseType===void 0?"":`AG ${J.suppliedLicenseType==="BOTH"?"Grid and AG Charts":J.suppliedLicenseType==="GRID"?"Grid":"Charts"} Enterprise`;if(J.missing){if(!this.isWebsiteUrl()||this.isForceWatermark())this.outputMissingLicenseKey(Q)}else if(J.expired){let $=z.getGridReleaseDate(),X=z.formatDate($);this.outputExpiredKey(J.expiry,X,Q,Z)}else if(!J.valid)this.outputInvalidLicenseKey(!!J.incorrectLicenseType,Q,Z);else if(J.isTrial&&J.trialExpired)this.outputExpiredTrialKey(J.expiry,Q,Z)}static extractExpiry(J){let Q=J.substring(J.lastIndexOf("_")+1,J.length);return new Date(parseInt(z.decode(Q),10))}static extractLicenseComponents(J){let Q=J.replace(/[\u200B-\u200D\uFEFF]/g,"");if(Q=Q.replace(/\r?\n|\r/g,""),J.length<=32)return{md5:null,license:J,version:null,isTrial:null};let Z=Q.length-32,$=Q.substring(Z),X=Q.substring(0,Z),[Y,q,G]=z.extractBracketedInformation(Q);return{md5:$,license:X,version:Y,isTrial:q,type:G}}getLicenseDetails(J){let Q=z.chartsLicenseManager?"BOTH":"GRID";if(!J?.length)return{licenseKey:J,valid:!1,missing:!0,currentLicenseType:Q};let Z=z.getGridReleaseDate(),{md5:$,license:X,version:Y,isTrial:q,type:G}=z.extractLicenseComponents(J),U=$===this.md5.md5(X)&&!J.includes("For_Trialing_ag-Grid_Only"),_=void 0,H=void 0,W=null,B=!1,E=void 0;function K(){_=WW,Y){case"legacy":case"2":{if(q)K();break}case"3":if(!G?.length)U=!1;else if(E=G,G!==OJ["01"]&&G!==OJ["0102"]||Q==="BOTH"&&E!=="BOTH")U=!1,B=!0;else if(q)K()}}if(!U)return{licenseKey:J,valid:U,incorrectLicenseType:B,currentLicenseType:Q,suppliedLicenseType:E};return{licenseKey:J,valid:U,expiry:z.formatDate(W),expired:H,version:Y,isTrial:q,trialExpired:_,incorrectLicenseType:B,currentLicenseType:Q,suppliedLicenseType:E}}isDisplayWatermark(){return this.isForceWatermark()||!this.isLocalhost()&&!this.isWebsiteUrl()&&!!this.watermarkMessage?.length}getWatermarkMessage(){return this.watermarkMessage||""}getHostname(){let Q=(this.document.defaultView||window).location,{hostname:Z=""}=Q;return Z}isForceWatermark(){let Q=(this.document.defaultView||window).location,{pathname:Z}=Q;return Z?Z.includes("forceWatermark"):!1}isWebsiteUrl(){return this.getHostname().match(/^(?:[\w-]+\.)?(ag-grid|bryntum)\.com$/)!==null}isLocalhost(){return this.getHostname().match(/^(?:127\.0\.0\.1|localhost)$/)!==null}static formatDate(J){let Q=["January","February","March","April","May","June","July","August","September","October","November","December"],Z=J.getDate(),$=J.getMonth(),X=J.getFullYear();return Z+" "+Q[$]+" "+X}static getGridReleaseDate(){return new Date(parseInt(z.decode(z.RELEASE_INFORMATION),10))}static decode(J){let Z="",$,X,Y,q,G,U,_,H=0,W=J.replace(/[^A-Za-z0-9+/=]/g,"");while(H>4,X=(G&15)<<4|U>>2,Y=(U&3)<<6|_,Z=Z+String.fromCharCode($),U!=64)Z=Z+String.fromCharCode(X);if(_!=64)Z=Z+String.fromCharCode(Y)}return Z=z.utf8_decode(Z),Z}static utf8_decode(J){J=J.replace(/rn/g,"n");let Q="";for(let Z=0;Z127&&$<2048)Q+=String.fromCharCode($>>6|192),Q+=String.fromCharCode($&63|128);else Q+=String.fromCharCode($>>12|224),Q+=String.fromCharCode($>>6&63|128),Q+=String.fromCharCode($&63|128)}return Q}static setChartsLicenseManager(J){this.chartsLicenseManager=J,this.chartsLicenseManager?.setLicenseKey(this.licenseKey,!0)}static setLicenseKey(J){if(P(this.licenseKey)&&this.licenseKey!==J)H9(291,void 0,"AG Grid: License Key being set multiple times with different values. This can result in an incorrect license key being used.");this.licenseKey=J,this.chartsLicenseManager?.setLicenseKey(J,!0)}static extractBracketedInformation(J){if(!J.includes("["))return["legacy",!1,void 0];let Q=J.match(/\[(.*?)\]/g).map((q)=>q.replace("[","").replace("]",""));if(!Q||Q.length===0)return["legacy",!1,void 0];let Z=Q.filter((q)=>q==="TRIAL").length===1,$=Q.filter((q)=>q.indexOf("v")===0)[0],X=$?$.replace("v",""):"legacy",Y=OJ[Q.filter((q)=>OJ[q])[0]];return[X,Z,Y]}centerPadAndOutput(J){let Q=this.totalMessageLength-J.length}padAndOutput(J,Q="*",Z=""){}outputInvalidLicenseKey(J,Q,Z){}outputExpiredTrialKey(J,Q,Z){}outputMissingLicenseKey(J){}outputExpiredKey(J,Q,Z,$){}};dY.RELEASE_INFORMATION="MTc3NDQyNTc0Nzc3NQ==";var YY=dY,ik='.ag-watermark{bottom:20px;color:#9b9b9b;opacity:.7;position:absolute;transition:opacity 1s ease-out 3s}:where(.ag-ltr) .ag-watermark{right:25px}:where(.ag-rtl) .ag-watermark{left:25px}.ag-watermark:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDkiIGhlaWdodD0iMzYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDkgMzYiPjxwYXRoIGZpbGw9IiM5YjliOWIiIGQ9Ik0xOTIuOTkzIDIzLjY1OHYtNy45NDZoLTEzLjU0MWwtNy45NDcgNy45NDZ6TTIwOC4yNSAzLjk1aC0xNi45NzRsLTguMDEgNy45NDdoMjQuOTg0ek0xNjMuNjIyIDMxLjYwNWw0LjA2OS00LjA2OWgxMy43MzJ2Ny45NDdoLTE3LjgwMXoiLz48cGF0aCBmaWxsPSIjOWI5YjliIiBkPSJNMTY2LjYxIDE5Ljc4aDguNzczbDguMDEtNy45NDZIMTY2LjYxek0xNTcuMDExIDMxLjYwNWg2LjYxMWw3Ljg4My03Ljk0N2gtMTQuNDk0ek0xOTEuMjc2IDMuOTVsLTQuMDY4IDQuMDdIMTYxLjI3Vi4wNzJoMzAuMDA2ek0yMC44NCAzMC4yMDZIOC4zNzhsLTIuMTYyIDUuMzRILjc1TDEyLjI1NyA4LjU5Mmg0Ljc2OEwyOC41MyAzNS41NDZoLTUuNTN6bS0xLjcxNy00LjI2TDE0LjYwOSAxNC45NWwtNC41MTQgMTAuOTk4ek0xMDQuNDM3IDE4LjUwOWMxLjU4OS0yLjM1MiA1LjU5NC0yLjYwNyA3LjI0Ny0yLjYwN3Y0LjU3OGMtMi4wMzQgMC00LjA2OS4wNjMtNS4yNzcuOTUzLTEuMjA3Ljg5LTEuODQzIDIuMDk4LTEuODQzIDMuNTZ2MTAuNTUzaC00Ljk1OVYxNS45MDJoNC43Njh6TTExOS4zNzYgMTUuOTAyaC00Ljk1OHYxOS42NDRoNC45NTh6TTExOS4zNzYgNy4xM2gtNC45NTh2NS44NDhoNC45NTh6TTE0My45NzkgNy4xM3YyOC40MTZoLTQuNzY4bC0uMTI3LTIuOTg4YTguMyA4LjMgMCAwIDEtMi42NyAyLjQ4Yy0xLjA4MS41NzItMi40MTYuODktMy45NDIuODktMS4zMzUgMC0yLjYwNi0uMjU1LTMuNjg3LS43LTEuMTQ0LS41MDgtMi4xNjItMS4xNDQtMi45ODgtMi4wMzRhOS42IDkuNiAwIDAgMS0xLjk3MS0zLjE3OWMtLjUwOC0xLjIwNy0uNjk5LTIuNjA2LS42OTktNC4xMzJzLjI1NC0yLjkyNC42OTktNC4xOTZjLjUwOS0xLjI3MSAxLjE0NS0yLjM1MiAxLjk3MS0zLjI0MnMxLjg0NC0xLjU4OSAyLjk4OC0yLjA5OCAyLjM1Mi0uNzYzIDMuNjg3LS43NjNjMS41MjYgMCAyLjc5Ny4yNTUgMy44NzguODI3czEuOTcxIDEuMzM1IDIuNjcgMi40MTZWNy4xOTNoNC45NTl6bS0xMC40MjYgMjQuNTM4YzEuNjUzIDAgMi45MjQtLjU3MiAzLjk0MS0xLjY1M3MxLjUyNi0yLjU0MyAxLjUyNi00LjMyMy0uNTA5LTMuMTc4LTEuNTI2LTQuMzIyYy0xLjAxNy0xLjA4MS0yLjI4OC0xLjY1My0zLjk0MS0xLjY1My0xLjU5IDAtMi45MjUuNTcyLTMuODc4IDEuNjUzLTEuMDE3IDEuMDgtMS41MjYgMi41NDMtMS41MjYgNC4zMjIgMCAxLjc4LjUwOSAzLjE4IDEuNTI2IDQuMjYgMS4wMTcgMS4xNDQgMi4yODggMS43MTYgMy44NzggMS43MTZNNTcuMjAyIDIwLjM1M0g0NC45MzN2NC4yNTloNi45OTNjLS4xOSAyLjE2MS0xLjAxNyAzLjgxNC0yLjQxNiA1LjE1LTEuMzk4IDEuMjctMy4xNzggMS45MDYtNS40NjcgMS45MDYtMS4yNzEgMC0yLjQ4LS4yNTQtMy40OTYtLjY5OWE3IDcgMCAwIDEtMi43MzQtMS45N2MtLjc2My0uODI3LTEuMzM1LTEuODQ0LTEuNzgtMy4wNTJzLS42MzYtMi40OC0uNjM2LTMuOTQyLjE5LTIuNzMzLjYzNi0zLjk0MWMuMzgxLTEuMjA4IDEuMDE3LTIuMTYyIDEuNzgtMy4wNTIuNzYzLS44MjYgMS42NTMtMS40NjIgMi43MzMtMS45N2E5LjEgOS4xIDAgMCAxIDMuNTYtLjdxNC4wMDUgMCA2LjEwMyAxLjkwN2wzLjMwNi0zLjMwNWMtMi40OC0xLjkwNy01LjY1OC0yLjkyNS05LjQwOS0yLjkyNS0yLjA5NyAwLTQuMDA0LjMxOC01LjcyMSAxLjAxOC0xLjcxNi42OTktMy4xNzkgMS41ODktNC4zODYgMi43OTdBMTIuMSAxMi4xIDAgMCAwIDMxLjIgMTYuMjJjLS42MzUgMS43MTctLjk1MyAzLjYyNC0uOTUzIDUuNjU4cy4zMTggMy45NDIgMS4wMTcgNS42NThjLjcgMS43MTcgMS41OSAzLjE3OSAyLjc5NyA0LjM4N2ExMi4xIDEyLjEgMCAwIDAgNC4zODcgMi43OTdjMS43MTYuNyAzLjYyMyAxLjAxNyA1LjY1NyAxLjAxNyAyLjAzNSAwIDMuODc4LS4zMTggNS41MzEtMS4wMTcgMS42NTMtLjcgMy4wNTItMS41OSA0LjE5Ni0yLjc5N3ExLjcxNi0xLjgxMiAyLjY3LTQuMzg3Yy42MzYtMS43MTYuOTU0LTMuNjIzLjk1NC01LjY1OHYtLjgyNmMtLjE5MS0uMTI3LS4yNTUtLjQ0NS0uMjU1LS43TTk1Ljk4MiAyMC4zNTNoLTEyLjI3djQuMjU5aDYuOTkzYy0uMTkgMi4xNjEtMS4wMTcgMy44MTQtMi40MTYgNS4xNS0xLjM5OCAxLjI3LTMuMTc4IDEuOTA2LTUuNDY3IDEuOTA2LTEuMjcxIDAtMi40OC0uMjU0LTMuNDk2LS42OTlhNyA3IDAgMCAxLTIuNzM0LTEuOTdjLS43NjMtLjgyNy0xLjMzNS0xLjg0NC0xLjc4LTMuMDUycy0uNjM2LTIuNDgtLjYzNi0zLjk0Mi4xOS0yLjczMy42MzYtMy45NDFjLjM4MS0xLjIwOCAxLjAxNy0yLjE2MiAxLjc4LTMuMDUyLjc2My0uODI2IDEuNjUzLTEuNDYyIDIuNzM0LTEuOTdhOS4xIDkuMSAwIDAgMSAzLjU2LS43cTQuMDA1IDAgNi4xMDMgMS45MDdsMy4zMDUtMy4zMDVjLTIuNDc5LTEuOTA3LTUuNjU4LTIuOTI1LTkuNDA4LTIuOTI1LTIuMDk4IDAtNC4wMDUuMzE4LTUuNzIyIDEuMDE4LTEuNzE2LjY5OS0zLjE3OCAxLjU4OS00LjM4NiAyLjc5N2ExMi4xIDEyLjEgMCAwIDAtMi43OTcgNC4zODZjLS42MzYgMS43MTctLjk1NCAzLjYyNC0uOTU0IDUuNjU4cy4zMTggMy45NDIgMS4wMTcgNS42NThjLjcgMS43MTcgMS41OSAzLjE3OSAyLjc5NyA0LjM4N2ExMi4xIDEyLjEgMCAwIDAgNC4zODcgMi43OTdjMS43MTYuNyAzLjYyMyAxLjAxNyA1LjY1OCAxLjAxNyAyLjAzNCAwIDMuODc4LS4zMTggNS41My0xLjAxNyAxLjY1My0uNyAzLjA1Mi0xLjU5IDQuMTk2LTIuNzk3cTEuNzE4LTEuODEyIDIuNjctNC4zODdjLjYzNi0xLjcxNi45NTQtMy42MjMuOTU0LTUuNjU4di0uODI2Yy0uMTktLjEyNy0uMjU1LS40NDUtLjI1NS0uNyIvPjwvc3ZnPg==");background-repeat:no-repeat;background-size:170px 40px;content:"";display:block;height:40px;width:170px}.ag-watermark-text{font-family:Impact,sans-serif;font-size:19px;font-weight:700;opacity:.5}:where(.ag-ltr) .ag-watermark-text{padding-left:.7rem}:where(.ag-rtl) .ag-watermark-text{padding-right:.7rem}',pk={tag:"div",cls:"ag-watermark",children:[{tag:"div",ref:"eLicenseTextRef",cls:"ag-watermark-text"}]},nk=class extends x{constructor(){super(pk);this.eLicenseTextRef=j,this.registerCSS(ik)}wireBeans(z){this.licenseManager=z.licenseManager}postConstruct(){let z=this.shouldDisplayWatermark();if(this.setDisplayed(z),z)this.eLicenseTextRef.textContent=this.licenseManager.getWatermarkMessage(),window.setTimeout(()=>this.addCss("ag-opacity-zero"),0),window.setTimeout(()=>this.setDisplayed(!1),5000)}shouldDisplayWatermark(){return this.licenseManager.isDisplayWatermark()}},dk={selector:"AG-WATERMARK",component:nk},qY=class extends S{constructor(){super(...arguments);this.beanName="licenseManager"}postConstruct(){this.validateLicense()}validateLicense(){let z=this.beans;if(z.withinStudio)this.licenseManager={isDisplayWatermark:()=>!1,getWatermarkMessage:()=>""};else{let J=new YY(Y0(z));this.licenseManager=J,J.validateLicense()}}static getLicenseDetails(z){return new YY(null).getLicenseDetails(z)}getWatermarkSelector(){return dk}isDisplayWatermark(){return this.licenseManager.isDisplayWatermark()}getWatermarkMessage(){return this.licenseManager.getWatermarkMessage()}static setLicenseKey(z){}static setChartsLicenseManager(z){}},rk=9525,GY={"0":1,"0.00":2,"#,##0":3,"#,##0.00":4,"0%":9,"0.00%":10,"0.00E+00":11,"# ?/?":12,"# ??/??":13,"mm-dd-yy":14,"d-mmm-yy":15,"d-mmm":16,"mmm-yy":17,"h:mm AM/PM":18,"h:mm:ss AM/PM":19,"h:mm":20,"h:mm:ss":21,"m/d/yy h:mm":22,"#,##0 ;(#,##0)":37,"#,##0 ;[Red](#,##0)":38,"#,##0.00;(#,##0.00)":39,"#,##0.00;[Red](#,##0.00)":40,"mm:ss":45,"[h]:mm:ss":46,"mmss.0":47,"##0.0E+0":48,"@":49},PJ=`\r +`;function UY(z,J,Q){if(!J&&J!==""&&J!==0)return"";let Z=J;if(typeof J==="boolean"){if(Q)Z=Q(J)}return` ${z}="${Z}"`}function tk(z={}){let Z=["version"];if(!z.version)z.version="1.0";if(z.encoding)Z.push("encoding");if(z.standalone)Z.push("standalone");return``${X}="${z[X]}"`).join(" ")} ?>`}function rY(z,J){let Q="";if(z.properties){if(z.properties.prefixedAttributes)z.properties.prefixedAttributes.forEach(($)=>{for(let X of Object.keys($.map))Q+=UY($.prefix+X,$.map[X],J)});if(z.properties.rawMap)for(let $ of Object.keys(z.properties.rawMap))Q+=UY($,z.properties.rawMap[$],J)}let Z="<"+z.name+Q;if(!z.children&&z.textNode==null)return Z+"/>"+PJ;if(z.textNode!=null)return Z+">"+z.textNode+""+PJ;if(Z+=">"+PJ,z.children)for(let $ of z.children)Z+=rY($,J);return Z+""+PJ}var sk=(z)=>{return Math.round(z*96/72)},o1=(z)=>{return Math.ceil(z*rk)},lk=(z)=>{if(z===void 0)return;let Q=["Automatic","Roman","Swiss","Modern","Script","Decorative"].indexOf(z||"Automatic");return Math.max(Q,0)},yJ=(z,J)=>{if(!J)return;let Q;if(typeof J==="number")Q=J;else Q=J({rowIndex:z});return Q},ak=(z,J)=>{let{colSpan:Q,column:Z}=z.position;if(!z.width)return;if(Q){let $=J.slice(Z-1,Z+Q-1),X=0;for(let Y=0;Y<$.length;Y++){let q=$[Y].getActualWidth();if(z.width{let{rowSpan:Q,row:Z}=z.position;if(!z.height)return;if(Q){let $=0,X=0;for(let Y=Z;Y{let Q=tk({encoding:"UTF-8",standalone:"yes"}),Z=rY(z);if(J)return Z;return`${Q}${Z}`},F1=(z)=>{let Z=String.fromCharCode,$=Math.floor(z/26),X=z%26;if(!$||z===26)return Z(65+z-1);if(!X)return F1($-1)+"Z";if($<26)return Z(65+$-1)+Z(65+X-1);return F1($)+Z(65+X-1)},ek=(z)=>{return z.replaceAll(` +`,"_x000a_")},gJ=(z)=>{if(z==null)return null;let J="";for(let Q=0;Q=0&&Z<=31&&Z!==10){let Y=`_x${Z.toString(16).toUpperCase().padStart(4,"0")}_`;J+=Y}else J+=z[Q]}return J},zf=(z)=>{let J=[];for(let Q of z.keys()){let Z=Q.toString(),$={name:"t",textNode:L0(gJ(Z))};if(Z.trim().length!==Z.length)$.properties={rawMap:{"xml:space":"preserve"}};J.push({name:"si",children:[$]})}return J},Jf=class extends E5{constructor(z){super(z);this.mixedStyles={},this.mixedStyleCounter=0,this.rows=[],this.frozenRowCount=0,this.skipFrozenRows=!1,this.frozenColumnCount=0,this.skipFrozenColumns=!1,this.formulaSvc=z.formulaSvc,this.config=Object.assign({},z),this.workbook=z.workbook,this.stylesByIds={};for(let Q of this.config.baseExcelStyles)this.stylesByIds[Q.id]=Q;let J={id:"_quotePrefix",quotePrefix:1};this.stylesByIds[J.id]=J,this.excelStyles=[...this.config.baseExcelStyles,J]}addCustomContent(z){for(let J of z){let Q=this.rows.length+1,Z;if(!this.config.suppressRowOutline&&J.outlineLevel!=null)Z=J.outlineLevel;let $={height:yJ(Q,J.height||this.config.rowHeight),cells:(J.cells||[]).map((X,Y)=>{let q=this.addImage(Q,this.columnsToExport[Y],X.data?.value),G=null;if(X.styleId)G=typeof X.styleId==="string"?[X.styleId]:X.styleId;let U=this.getStyleId(G);if(q)return this.createCell(U,this.getDataTypeForValue(q.value),q.value==null?"":q.value);let _=X.data?.value??"",H=this.getDataTypeForValue(_);if(X.mergeAcross)return this.createMergedCell(U,H,_,X.mergeAcross);return this.createCell(U,H,_)}),outlineLevel:Z};if(J.collapsed!=null)$.collapsed=J.collapsed;if(J.hidden!=null)$.hidden=J.hidden;this.rows.push($)}}onNewHeaderGroupingRow(){let z=[],{freezeRows:J,headerRowHeight:Q}=this.config;if(this.rows.push({cells:z,height:yJ(this.rows.length+1,Q)}),J)this.frozenRowCount++;return{onColumn:(Z,$,X,Y,q)=>{let G=this.config.styleLinker({rowType:"HEADER_GROUPING",rowIndex:1,value:`grouping-${$}`,columnGroup:Z});z.push({...this.createMergedCell(this.getStyleId(G),this.getDataTypeForValue("string"),$,Y),collapsibleRanges:q})}}}onNewHeaderRow(){let{freezeRows:z,headerRowHeight:J}=this.config;if(z)this.frozenRowCount++;return this.onNewRow(this.onNewHeaderColumn,J)}onNewBodyRow(z){let{freezeRows:J,rowHeight:Q}=this.config;if(!this.skipFrozenRows)if(J==="headersAndPinnedRows"&&z?.rowPinned==="top")this.frozenRowCount++;else if(typeof J==="function")if(J(C(this.gos,{node:z})))this.frozenRowCount++;else this.skipFrozenRows=!0;else this.skipFrozenRows=!0;let Z=this.onNewRow(this.onNewBodyColumn,Q);if(z)this.addRowOutlineIfNecessary(z);return Z}prepare(z){super.prepare(z),this.columnsToExport=[...z],this.cols=z.map((J,Q)=>this.convertColumnToExcel(J,Q))}parse(){let z=this.rows.reduce((Q,Z)=>Math.max(Q,Z.cells.length),0);while(this.cols.length{let Z=this.extractHeaderValue(Q),$=this.config.styleLinker({rowType:"HEADER",rowIndex:z,value:Z,column:Q});J.push(this.createCell(this.getStyleId($),this.getDataTypeForValue("string"),Z))}}onNewBodyColumn(z,J){let Q=0,{freezeColumns:Z,rightToLeft:$}=this.config;return(X,Y,q)=>{if(Q>0){Q-=1;return}if(!this.skipFrozenColumns){let F=X.getPinned();if(Z==="pinned"&&F&&(F===!0||F==="left")!==$)this.frozenColumnCount++;else if(typeof Z==="function"&&Z(C(this.gos,{column:X})))this.frozenColumnCount++;else this.skipFrozenColumns=!0}let{value:G,valueFormatted:U}=this.extractRowCellValue({column:X,node:q,currentColumnIndex:Y,accumulatedRowIndex:z,type:"excel",useRawFormula:!0}),_=G,H=typeof _==="bigint"?_.toString():_,W=this.config.styleLinker({rowType:"BODY",rowIndex:z,value:_,column:X,node:q}),B=this.getStyleId(W),E=X.getColSpan(q),K=this.addImage(z,X,H);if(K)J.push(this.createCell(B,this.getDataTypeForValue(K.value),K.value==null?"":K.value));else if(E>1)Q=E-1,J.push(this.createMergedCell(B,this.getDataTypeForValue(_),H,E-1));else{let F=X.isAllowFormula()&&this.formulaSvc?.isFormula(H),L=this.createCell(B,F?"f":this.getDataTypeForValue(_),F?this.formulaSvc?.updateFormulaByOffset({value:H,rowDelta:z-(q.formulaRowIndex+1),useRefFormat:!1}):H,U);J.push(L)}}}onNewRow(z,J){let Q=[];return this.rows.push({cells:Q,height:yJ(this.rows.length+1,J)}),{onColumn:z.bind(this,this.rows.length,Q)()}}addWorksheetToWorkbook(z){let{excelStyles:J,config:Q}=this;if(this.mapSharedStrings(z),this.frozenColumnCount)Q.frozenColumnCount=this.frozenColumnCount;if(this.frozenRowCount)Q.frozenRowCount=this.frozenRowCount;return this.workbook.addWorksheet(J,z,Q)}mapSharedStrings(z){let J;for(let Q of z.table.rows)for(let Z of Q.cells){let $=Z.data;if(!$||$.type!=="s")continue;let X=$.value;if(X==null)continue;if(X===""){J??(J=this.workbook.getStringPosition("").toString()),$.value=J;continue}$.value=this.workbook.getStringPosition(String(X)).toString()}}getDataTypeForValue(z){if(z===void 0)return"empty";let J="s";try{if(this.isNumerical(z))J="n"}catch(Q){}return J}getTypeFromStyle(z,J){if(this.isFormula(J))return"f";if(z?.dataType)switch(z.dataType.toLocaleLowerCase()){case"formula":return"f";case"string":return"s";case"number":return"n";case"datetime":return"d";case"error":return"e";case"boolean":return"b";default:V(162,{id:z.id,dataType:z.dataType})}return null}addImage(z,J,Q){if(!this.config.addImageToCell)return;let Z=this.config.addImageToCell(z,J,Q);if(!Z)return;return this.workbook.addBodyImageToMap(Z.image,z,J,this.columnsToExport,this.config.rowHeight),Z}createCell(z,J,Q,Z){let $=this.getStyleById(z);if(!$?.dataType&&J==="s"&&Z!=null)Q=Z;let X=this.getTypeFromStyle($,Q)||J,{value:Y,escaped:q}=this.getCellValue(X,Q),G=[];if($)G.push(z);if(q)G.push("_quotePrefix");return z=this.getStyleId(G)||void 0,{styleId:z,data:{type:X,value:Y}}}createMergedCell(z,J,Q,Z){let $=Q==null?"":Q;return{styleId:this.getStyleById(z)?z:void 0,data:{type:J,value:J==="s"?String($):Q},mergeAcross:Z}}getCellValue(z,J){let Q=!1;if(J==null||z==="s"&&J==="")return{value:"",escaped:!1};if(z==="s"){if(J=String(J),J[0]==="'")Q=!0,J=J.slice(1)}else if(z==="f")J=this.addXlfnPrefix(J).slice(1);else if(z==="n"){let Z=Number(J);if(isNaN(Z))J="";else if(J!=="")J=Z.toString()}return{value:J,escaped:Q}}addXlfnPrefix(z){if(!z)return z;let J=/(^|[^A-Z0-9._])(CONCAT)(\s*\()/gi;return z.replace(J,(Q,Z,$,X)=>`${Z}_xlfn.${$}${X}`)}getStyleId(z){if(!z?.length)return null;let J=z.filter((Z)=>this.stylesByIds[Z]!=null);if(!J.length)return null;if(J.length===1)return J[0];let Q=J.join("-");if(!this.mixedStyles[Q])this.addNewMixedStyle(J);return this.mixedStyles[Q].excelID}addNewMixedStyle(z){this.mixedStyleCounter+=1;let J=`mixedStyle${this.mixedStyleCounter}`,Q={};for(let $ of z){let X=this.stylesByIds[$];if(X)D0(Q,X,!0,!0)}Q.id=J;let Z=z.join("-");this.mixedStyles[Z]={excelID:J,key:Z,result:Q},this.excelStyles.push(Q),this.stylesByIds[J]=Q}isFormula(z){if(z==null)return!1;let J=String(z);return this.config.autoConvertFormulas&&GZ(J)}isNumerical(z){if(typeof z==="bigint")return!1;return isFinite(z)&&z!==""&&!isNaN(parseFloat(z))}getStyleById(z){if(z==null)return null;return this.stylesByIds[z]||null}},Qf={getTemplate(z){let{name:J,ContentType:Q,Extension:Z,PartName:$}=z;return{name:J,properties:{rawMap:{Extension:Z,PartName:$,ContentType:Q}}}}},Zf=Qf,dJ=(z)=>z==="jpg"?"jpeg":z,$f={getTemplate({sheetLen:z,hasCustomProperties:J}){let Q=Array(z).fill(void 0).map((H,W)=>({name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",PartName:`/xl/worksheets/sheet${W+1}.xml`})),Z=hz.size,$=Yz.size,X={};Q2.forEach((H)=>{X[dJ(H.type)]=!0});let Y=Array(Z).fill(void 0).map((H,W)=>({name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.drawing+xml",PartName:`/xl/drawings/drawing${W+1}.xml`})),q=[];r4.forEach(({name:H})=>{q.push({name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml",PartName:`/xl/tables/${H}.xml`})});let G=J?[{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.custom-properties+xml",PartName:"/docProps/custom.xml"}]:[],U=Object.keys(X).map((H)=>({name:"Default",ContentType:`image/${H}`,Extension:H}));if($)U.push({name:"Default",Extension:"vml",ContentType:"application/vnd.openxmlformats-officedocument.vmlDrawing"});let _=[...U,{name:"Default",Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"},{name:"Default",ContentType:"application/xml",Extension:"xml"},{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",PartName:"/xl/workbook.xml"},...Q,{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.theme+xml",PartName:"/xl/theme/theme1.xml"},{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",PartName:"/xl/styles.xml"},{name:"Override",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",PartName:"/xl/sharedStrings.xml"},...Y,...q,{name:"Override",ContentType:"application/vnd.openxmlformats-package.core-properties+xml",PartName:"/docProps/core.xml"},...G].map((H)=>Zf.getTemplate(H));return{name:"Types",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"}},children:_}}},Xf=$f,Yf={getTemplate(z){let Q=new Date().toJSON();return{name:"cp:coreProperties",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{cp:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",xsi:"http://www.w3.org/2001/XMLSchema-instance"}}]},children:[{name:"dc:creator",textNode:z},{name:"dc:title",textNode:"Workbook"},{name:"dcterms:created",properties:{rawMap:{"xsi:type":"dcterms:W3CDTF"}},textNode:Q},{name:"dcterms:modified",properties:{rawMap:{"xsi:type":"dcterms:W3CDTF"}},textNode:Q}]}}},qf=Yf,Gf="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",Uf=(z)=>{return Object.keys(z).filter((Q)=>Q&&z[Q]!=null).map((Q,Z)=>({name:"property",properties:{rawMap:{fmtid:Gf,pid:(Z+2).toString(),name:L0(Q)??""}},children:[{name:"vt:lpwstr",textNode:L0(gJ(String(z[Q])))??""}]}))},_f={getTemplate(z){return{name:"Properties",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties","xmlns:vt":"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"}},children:Uf(z)}}},Hf=_f,_Y=(z,J)=>({name:`xdr:${z}`,children:[{name:"xdr:col",textNode:J.col.toString()},{name:"xdr:colOff",textNode:J.offsetX.toString()},{name:"xdr:row",textNode:J.row.toString()},{name:"xdr:rowOff",textNode:J.offsetY.toString()}]}),Wf=(z)=>{let J=[{name:"a:ext",properties:{rawMap:{uri:"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"}},children:[{name:"a16:creationId",properties:{rawMap:{id:"{822E6D20-D7BC-2841-A643-D49A6EF008A2}","xmlns:a16":"http://schemas.microsoft.com/office/drawing/2014/main"}}}]}];switch(z.recolor?.toLowerCase()){case"grayscale":case"sepia":case"washout":J.push({name:"a:ext",properties:{rawMap:{uri:"{C183D7F6-B498-43B3-948B-1728B52AA6E4}"}},children:[{name:"adec:decorative",properties:{rawMap:{val:"0","xmlns:adec":"http://schemas.microsoft.com/office/drawing/2017/decorative"}}}]})}return{name:"a:extLst",children:J}},Bf=(z,J)=>({name:"xdr:nvPicPr",children:[{name:"xdr:cNvPr",properties:{rawMap:{id:J,name:z.id,descr:z.altText!=null?z.altText:void 0}},children:[Wf(z)]},{name:"xdr:cNvPicPr",properties:{rawMap:{preferRelativeResize:"0"}},children:[{name:"a:picLocks"}]}]}),HY=(z)=>{if(!z.saturation&&!z.tint)return;let J=[];if(z.saturation)J.push({name:"a:satMod",properties:{rawMap:{val:z.saturation*1000}}});if(z.tint)J.push({name:"a:tint",properties:{rawMap:{val:z.tint*1000}}});return J},Ef=(z,J)=>{return{name:"a:duotone",children:[{name:"a:prstClr",properties:{rawMap:{val:z.color}},children:HY(z)},{name:"a:srgbClr",properties:{rawMap:{val:J.color}},children:HY(J)}]}},Kf=(z,J)=>{let Q;if(z.transparency){let Z=Math.min(Math.max(z.transparency,0),100);Q=[{name:"a:alphaModFix",properties:{rawMap:{amt:1e5-Math.round(Z*1000)}}}]}if(z.recolor){if(!Q)Q=[];switch(z.recolor.toLocaleLowerCase()){case"grayscale":Q.push({name:"a:grayscl"});break;case"sepia":Q.push(Ef({color:"black"},{color:"D9C3A5",tint:50,saturation:180}));break;case"washout":Q.push({name:"a:lum",properties:{rawMap:{bright:"70000",contrast:"-70000"}}});break;default:}}return{name:"xdr:blipFill",children:[{name:"a:blip",properties:{rawMap:{cstate:"print","r:embed":`rId${J}`,"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships"}},children:Q},{name:"a:stretch",children:[{name:"a:fillRect"}]}]}},Ff=(z,J)=>{let Q={name:"a:xfrm",children:[{name:"a:off",properties:{rawMap:{x:0,y:0}}},{name:"a:ext",properties:{rawMap:{cx:J.width,cy:J.height}}}]};if(z.rotation){let X=z.rotation;Q.properties={rawMap:{rot:Math.min(Math.max(X,0),360)*60000}}}return{name:"xdr:spPr",children:[Q,{name:"a:prstGeom",properties:{rawMap:{prst:"rect"}},children:[{name:"a:avLst"}]}]}},Lf=(z)=>{z.fitCell=!!z.fitCell||!z.width||!z.height;let{position:J={},fitCell:Q,width:Z=0,height:$=0,totalHeight:X,totalWidth:Y}=z,{offsetX:q=0,offsetY:G=0,row:U=1,rowSpan:_=1,column:H=1,colSpan:W=1}=J;return{from:{row:U-1,col:H-1,offsetX:o1(q),offsetY:o1(G)},to:{row:U-1+(Q?1:_-1),col:H-1+(Q?1:W-1),offsetX:o1(Z+q),offsetY:o1($+G)},height:o1(X||$),width:o1(Y||Z)}},Df=(z,J,Q,Z)=>{return{name:"xdr:pic",children:[Bf(z,J+1),Kf(z,Q+1),Ff(z,Z)]}},Mf={getTemplate(z){let{sheetIndex:J}=z,Q=hz.get(J),Z=Z2.get(J),$=Q.map((X,Y)=>{let q=Lf(X);return{name:"xdr:twoCellAnchor",properties:{rawMap:{editAs:"absolute"}},children:[_Y("from",q.from),_Y("to",q.to),Df(X,Y,Z.get(X.id).index,q),{name:"xdr:clientData"}]}});return{name:"xdr:wsDr",properties:{rawMap:{"xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main","xmlns:xdr":"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"}},children:$}}},kf=Mf,ff={getTemplate(z){let{Id:J,Type:Q,Target:Z}=z;return{name:"Relationship",properties:{rawMap:{Id:J,Type:Q,Target:Z}}}}},Sf=ff,Vf={getTemplate(z){let J=z.map((Q)=>Sf.getTemplate(Q));return{name:"Relationships",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"}},children:J}}},$6=Vf,Rf={getTemplate(z){return{name:"sst",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",count:z.size,uniqueCount:z.size}},children:zf(z)}}},Af=Rf,jf=(z)=>{switch(z){case 1:return"thin";case 2:return"medium";case 3:return"thick";default:return"hair"}},Of={None:"None",Dot:"Dotted",Dash:"Dashed",Double:"Double",DashDot:"DashDot",DashDotDot:"DashDotDot",SlantDashDot:"SlantDashDot",Continuous:"Continuous"},Pf=["Dashed","DashDot","DashDotDot"],Tf={None:"none",Solid:"solid",Gray50:"mediumGray",Gray75:"darkGray",Gray25:"lightGray",HorzStripe:"darkHorizontal",VertStripe:"darkVertical",ReverseDiagStripe:"darkDown",DiagStripe:"darkUp",DiagCross:"darkGrid",ThickDiagCross:"darkTrellis",ThinHorzStripe:"lightHorizontal",ThinVertStripe:"lightVertical",ThinReverseDiagStripe:"lightDown",ThinDiagStripe:"lightUp",ThinHorzCross:"lightGrid",ThinDiagCross:"lightTrellis",Gray125:"gray125",Gray0625:"gray0625"},vf={Automatic:"general",Left:"left",Center:"center",Right:"right",Fill:"fill",Justify:"justify",CenterAcrossSelection:"centerContinuous",Distributed:"distributed",JustifyDistributed:"justify"},If={Automatic:void 0,Top:"top",Bottom:"bottom",Center:"center",Justify:"justify",Distributed:"distributed",JustifyDistributed:"justify"},Cf=(z)=>{if(!z)return"none";return Tf[z]||z},Nz=(z)=>{if(z==null)return z;if(z.charAt(0)==="#")z=z.substring(1);return z.length===6?"FF"+z:z},TJ=(z,J)=>{if(!z)return"thin";let Q=jf(J);if(z==="Continuous")return Q;let Z=Of[z];if(Q==="medium"&&Pf.some(($)=>$===Z))return`medium${Z}`;return`${Z.charAt(0).toLowerCase()}${Z.substring(1)}`},yf=(z)=>{return vf[z]||"general"},bf=(z)=>{return If[z]||void 0},r2=(z)=>{return{name:"color",properties:{rawMap:{rgb:Nz(z||"#000000")}}}},xf={getTemplate(z){let{left:J,right:Q,top:Z,bottom:$,diagonal:X}=z,Y=J?[r2(J.color)]:void 0,q=Q?[r2(Q.color)]:void 0,G=Z?[r2(Z.color)]:void 0,U=$?[r2($.color)]:void 0,_=X?[r2(X.color)]:void 0;return{name:"border",children:[{name:"left",properties:{rawMap:{style:J?.style}},children:Y},{name:"right",properties:{rawMap:{style:Q?.style}},children:q},{name:"top",properties:{rawMap:{style:Z?.style}},children:G},{name:"bottom",properties:{rawMap:{style:$?.style}},children:U},{name:"diagonal",properties:{rawMap:{style:X?.style}},children:_}]}}},wf=xf,Nf={getTemplate(z){return{name:"borders",properties:{rawMap:{count:z.length}},children:z.map((J)=>wf.getTemplate(J))}}},gf=Nf,hf=(z)=>{let Q=["Context","LeftToRight","RightToLeft"].indexOf(z);return Math.max(Q,0)},uf={getTemplate(z){let{horizontal:J,indent:Q,readingOrder:Z,rotate:$,shrinkToFit:X,vertical:Y,wrapText:q}=z;return{name:"alignment",properties:{rawMap:{horizontal:J&&yf(J),indent:Q,readingOrder:Z&&hf(Z),textRotation:$,shrinkToFit:X,vertical:Y&&bf(Y),wrapText:q}}}}},mf=uf,cf={getTemplate(z){let J=z.protected===!1?0:1;return{name:"protection",properties:{rawMap:{hidden:z.hideFormula===!0?1:0,locked:J}}}}},pf=cf,nf={getTemplate(z){let{alignment:J,borderId:Q,fillId:Z,fontId:$,numFmtId:X,protection:Y,quotePrefix:q,xfId:G}=z,U=[];if(J)U.push(mf.getTemplate(J));if(Y)U.push(pf.getTemplate(Y));return{name:"xf",properties:{rawMap:{applyAlignment:J?1:void 0,applyProtection:Y?1:void 0,applyBorder:Q?1:void 0,applyFill:Z?1:void 0,borderId:Q,fillId:Z,applyFont:$?1:void 0,fontId:$,applyNumberFormat:X?1:void 0,numFmtId:X,quotePrefix:q?1:void 0,xfId:G}},children:U.length?U:void 0}}},tY=nf,df={getTemplate(z){return{name:"cellStyleXfs",properties:{rawMap:{count:z.length}},children:z.map((J)=>tY.getTemplate(J))}}},rf=df,tf={getTemplate(z){let{builtinId:J,name:Q,xfId:Z}=z;return{name:"cellStyle",properties:{rawMap:{builtinId:J,name:Q,xfId:Z}}}}},sf=tf,lf={getTemplate(z){return{name:"cellStyles",properties:{rawMap:{count:z.length}},children:z.map((J)=>sf.getTemplate(J))}}},af=lf,of={getTemplate(z){return{name:"cellXfs",properties:{rawMap:{count:z.length}},children:z.map((J)=>tY.getTemplate(J))}}},ef=of,zS={getTemplate(z){let{patternType:J,fgTheme:Q,fgTint:Z,fgRgb:$,bgRgb:X,bgIndexed:Y}=z,q={name:"patternFill",properties:{rawMap:{patternType:J}}};if(Q||Z||$)q.children=[{name:"fgColor",properties:{rawMap:{theme:Q,tint:Z,rgb:$}}}];if(Y||X){if(!q.children)q.children=[];q.children.push({name:"bgColor",properties:{rawMap:{indexed:Y,rgb:X}}})}return{name:"fill",children:[q]}}},JS=zS,QS={getTemplate(z){return{name:"fills",properties:{rawMap:{count:z.length}},children:z.map((J)=>JS.getTemplate(J))}}},ZS=QS,$S={getTemplate(z){let{size:J,colorTheme:Q,color:Z="FF000000",fontName:$="Calibri",family:X,scheme:Y,italic:q,bold:G,strikeThrough:U,outline:_,shadow:H,underline:W,verticalAlign:B}=z,E=[{name:"sz",properties:{rawMap:{val:J}}},{name:"color",properties:{rawMap:{theme:Q,rgb:Z}}},{name:"name",properties:{rawMap:{val:$}}}];if(X)E.push({name:"family",properties:{rawMap:{val:X}}});if(Y)E.push({name:"scheme",properties:{rawMap:{val:Y}}});if(q)E.push({name:"i"});if(G)E.push({name:"b"});if(U)E.push({name:"strike"});if(_)E.push({name:"outline"});if(H)E.push({name:"shadow"});if(W)E.push({name:"u",properties:{rawMap:{val:W}}});if(B)E.push({name:"vertAlign",properties:{rawMap:{val:B}}});return{name:"font",children:E}}},XS=$S,YS={getTemplate(z){return{name:"fonts",properties:{rawMap:{count:z.length}},children:z.map((J)=>XS.getTemplate(J))}}},qS=YS;function GS(z){let J=z.split(/(\[[^\]]*\])/);for(let Q=0;Q_S.getTemplate(J))}}},WS=HS,hJ,e1,l2,a2,o2,sY,uJ,lY,l5,aY=(z,J)=>{if(z.includes("mixedStyle")&&J>1)z+=`_${J}`;return z},oY=()=>{hJ={base:0},e1=[],l2=[{fontName:"Calibri",colorTheme:"1",family:"2",scheme:"minor"}],a2=[{patternType:"none"},{patternType:"gray125"}],o2=[{left:void 0,right:void 0,top:void 0,bottom:void 0,diagonal:void 0}],sY=[{borderId:0,fillId:0,fontId:0,numFmtId:0}],uJ=[{borderId:0,fillId:0,fontId:0,numFmtId:0,xfId:0}],lY=[{builtinId:0,name:"Normal",xfId:0}]},BS=(z)=>{let J=Cf(z.pattern),Q=Nz(z.color),Z=Nz(z.patternColor),$=a2.findIndex((X)=>{let{patternType:Y,fgRgb:q,bgRgb:G}=X;return!(Y!=J||q!=Q||G!=Z)});if($===-1)$=a2.length,a2.push({patternType:J,fgRgb:Q,bgRgb:Z});return $},ES=(z)=>{if(GY[z])return GY[z];let J=e1.findIndex((Q)=>Q.formatCode===z);if(J===-1)J=e1.length+164,e1.push({formatCode:z,numFmtId:J});else J=e1[J].numFmtId;return J},KS=(z)=>{let{borderBottom:J,borderTop:Q,borderLeft:Z,borderRight:$}=z,X,Y,q,G,U,_,H,W;if(Z)q=TJ(Z.lineStyle,Z.weight),H=Nz(Z.color);if($)G=TJ($.lineStyle,$.weight),W=Nz($.color);if(J)X=TJ(J.lineStyle,J.weight),U=Nz(J.color);if(Q)Y=TJ(Q.lineStyle,Q.weight),_=Nz(Q.color);let B=o2.findIndex((E)=>{let{left:K,right:F,top:L,bottom:D}=E;if(!K&&(q||H))return!1;if(!F&&(G||W))return!1;if(!L&&(Y||_))return!1;if(!D&&(X||U))return!1;let{style:M,color:f}=K||{},{style:A,color:R}=F||{},{style:O,color:v}=L||{},{style:I,color:b}=D||{};if(M!=q||f!=H)return!1;if(A!=G||R!=W)return!1;if(O!=Y||v!=_)return!1;if(I!=X||b!=U)return!1;return!0});if(B===-1)B=o2.length,o2.push({left:{style:q,color:H},right:{style:G,color:W},top:{style:Y,color:_},bottom:{style:X,color:U},diagonal:{style:void 0,color:void 0}});return B},FS=(z)=>{let{fontName:J="Calibri",color:Q,size:Z,bold:$,italic:X,outline:Y,shadow:q,strikeThrough:G,underline:U,family:_,verticalAlign:H}=z,W=Nz(Q),B=lk(_),E=U?U.toLocaleLowerCase():void 0,K=H?H.toLocaleLowerCase():void 0,F=l2.findIndex((L)=>{return!(L.fontName!=J||L.color!=W||L.size!=Z||L.bold!=$||L.italic!=X||L.outline!=Y||L.shadow!=q||L.strikeThrough!=G||L.underline!=E||L.verticalAlign!=K||L.family!=B)});if(F===-1)F=l2.length,l2.push({fontName:J,color:W,size:Z,bold:$,italic:X,outline:Y,shadow:q,strikeThrough:G,underline:E,verticalAlign:K,family:B!=null?B.toString():void 0});return F},LS=(z)=>{let{alignment:J,borders:Q,font:Z,interior:$,numberFormat:X,protection:Y,quotePrefix:q}=z,{id:G}=z,U=0,_=0,H=0,W=0;if(!G)return;if(G=aY(G,l5),hJ[G]!=null)return;if($)U=BS($);if(Q)_=KS(Q);if(Z)H=FS(Z);if(X)W=ES(X.format);hJ[G]=uJ.length,uJ.push({alignment:J,borderId:_||0,fillId:U||0,fontId:H||0,numFmtId:W||0,protection:Y,quotePrefix:q,xfId:0})},DS={getTemplate(z){let J=WS.getTemplate(e1),Q=qS.getTemplate(l2.map((G)=>({...G,size:G.size!=null?G.size:z}))),Z=ZS.getTemplate(a2),$=gf.getTemplate(o2),X=rf.getTemplate(sY),Y=ef.getTemplate(uJ),q=af.getTemplate(lY);return oY(),{name:"styleSheet",properties:{rawMap:{"mc:Ignorable":"x14ac x16r2 xr",xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac","xmlns:x16r2":"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision"}},children:[J,Q,Z,$,X,Y,q,{name:"tableStyles",properties:{rawMap:{count:0,defaultPivotStyle:"PivotStyleLight16",defaultTableStyle:"TableStyleMedium2"}}}]}}},MS=(z,J)=>{return hJ[aY(z,J)]||0},kS=(z,J)=>{if(l5=J,l5===1)oY();z.forEach(LS)},fS=DS,SS={getTemplate(z,J){let{name:Q,columns:Z,rowRange:$,displayName:X,showRowStripes:Y,showColumnStripes:q,showFilterButtons:G,highlightFirstColumn:U,highlightLastColumn:_}=z||{},H=!$||$[0]-$[1]===0;if(!z||!Q||!Array.isArray(Z)||!Z.length||H)return{name:"table"};let W=Z.map((D,M)=>({name:"filterColumn",properties:{rawMap:{colId:M.toString(),hiddenButton:G[M]?0:1}}})),B=`A${$[0]}`,E=`${F1(Z.length)}${$[1]}`,K=`${B}:${E}`,F=`${J+1}`,L=J?`${X}_${F}`:X;return{name:"table",properties:{rawMap:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"xr xr3","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision","xmlns:xr3":"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3",name:L,displayName:L,ref:K,totalsRowShown:0,id:F}},children:[{name:"autoFilter",properties:{rawMap:{ref:K}},children:W},{name:"tableColumns",properties:{rawMap:{count:Z.length}},children:Z.map((D,M)=>({name:"tableColumn",properties:{rawMap:{id:(M+1).toString(),name:L0(ek(D)),dataCellStyle:"Normal"}}}))},{name:"tableStyleInfo",properties:{rawMap:{name:"TableStyleLight1",showFirstColumn:U?1:0,showLastColumn:_?1:0,showRowStripes:Y?1:0,showColumnStripes:q?1:0}}}]}}},VS=SS,L4=(z)=>{let[J,Q,Z,$]=z;return{name:`a:${J}`,children:[{name:`a:${Q}`,properties:{rawMap:{val:Z,lastClr:$}}}]}},RS={getTemplate(){return{name:"a:clrScheme",properties:{rawMap:{name:"Office"}},children:[L4(["dk1","sysClr","windowText","000000"]),L4(["lt1","sysClr","window","FFFFFF"]),L4(["dk2","srgbClr","44546A"]),L4(["lt2","srgbClr","E7E6E6"]),L4(["accent1","srgbClr","4472C4"]),L4(["accent2","srgbClr","ED7D31"]),L4(["accent3","srgbClr","A5A5A5"]),L4(["accent4","srgbClr","FFC000"]),L4(["accent5","srgbClr","5B9BD5"]),L4(["accent6","srgbClr","70AD47"]),L4(["hlink","srgbClr","0563C1"]),L4(["folHlink","srgbClr","954F72"])]}}},AS=RS,T=(z)=>{let[J,Q,Z,$]=z;return{name:`a:${J}`,properties:{rawMap:{script:Z,typeface:Q,panose:$}}}},jS={getTemplate(){return{name:"a:fontScheme",properties:{rawMap:{name:"Office"}},children:[{name:"a:majorFont",children:[T(["latin","Calibri Light",void 0,"020F0302020204030204"]),T(["ea",""]),T(["cs",""]),T(["font","游ゴシック Light","Jpan"]),T(["font","맑은 고딕","Hang"]),T(["font","等线 Light","Hans"]),T(["font","新細明體","Hant"]),T(["font","Times New Roman","Arab"]),T(["font","Times New Roman","Hebr"]),T(["font","Tahoma","Thai"]),T(["font","Nyala","Ethi"]),T(["font","Vrinda","Beng"]),T(["font","Shruti","Gujr"]),T(["font","MoolBoran","Khmr"]),T(["font","Tunga","Knda"]),T(["font","Raavi","Guru"]),T(["font","Euphemia","Cans"]),T(["font","Plantagenet Cherokee","Cher"]),T(["font","Microsoft Yi Baiti","Yiii"]),T(["font","Microsoft Himalaya","Tibt"]),T(["font","MV Boli","Thaa"]),T(["font","Mangal","Deva"]),T(["font","Gautami","Telu"]),T(["font","Latha","Taml"]),T(["font","Estrangelo Edessa","Syrc"]),T(["font","Kalinga","Orya"]),T(["font","Kartika","Mlym"]),T(["font","DokChampa","Laoo"]),T(["font","Iskoola Pota","Sinh"]),T(["font","Mongolian Baiti","Mong"]),T(["font","Times New Roman","Viet"]),T(["font","Microsoft Uighur","Uigh"]),T(["font","Sylfaen","Geor"]),T(["font","Arial","Armn"]),T(["font","Leelawadee UI","Bugi"]),T(["font","Microsoft JhengHei","Bopo"]),T(["font","Javanese Text","Java"]),T(["font","Segoe UI","Lisu"]),T(["font","Myanmar Text","Mymr"]),T(["font","Ebrima","Nkoo"]),T(["font","Nirmala UI","Olck"]),T(["font","Ebrima","Osma"]),T(["font","Phagspa","Phag"]),T(["font","Estrangelo Edessa","Syrn"]),T(["font","Estrangelo Edessa","Syrj"]),T(["font","Estrangelo Edessa","Syre"]),T(["font","Nirmala UI","Sora"]),T(["font","Microsoft Tai Le","Tale"]),T(["font","Microsoft New Tai Lue","Talu"]),T(["font","Ebrima","Tfng"])]},{name:"a:minorFont",children:[T(["latin","Calibri",void 0,"020F0502020204030204"]),T(["ea",""]),T(["cs",""]),T(["font","游ゴシック","Jpan"]),T(["font","맑은 고딕","Hang"]),T(["font","等线","Hans"]),T(["font","新細明體","Hant"]),T(["font","Arial","Arab"]),T(["font","Arial","Hebr"]),T(["font","Tahoma","Thai"]),T(["font","Nyala","Ethi"]),T(["font","Vrinda","Beng"]),T(["font","Shruti","Gujr"]),T(["font","DaunPenh","Khmr"]),T(["font","Tunga","Knda"]),T(["font","Raavi","Guru"]),T(["font","Euphemia","Cans"]),T(["font","Plantagenet Cherokee","Cher"]),T(["font","Microsoft Yi Baiti","Yiii"]),T(["font","Microsoft Himalaya","Tibt"]),T(["font","MV Boli","Thaa"]),T(["font","Mangal","Deva"]),T(["font","Gautami","Telu"]),T(["font","Latha","Taml"]),T(["font","Estrangelo Edessa","Syrc"]),T(["font","Kalinga","Orya"]),T(["font","Kartika","Mlym"]),T(["font","DokChampa","Laoo"]),T(["font","Iskoola Pota","Sinh"]),T(["font","Mongolian Baiti","Mong"]),T(["font","Arial","Viet"]),T(["font","Microsoft Uighur","Uigh"]),T(["font","Sylfaen","Geor"]),T(["font","Arial","Armn"]),T(["font","Leelawadee UI","Bugi"]),T(["font","Microsoft JhengHei","Bopo"]),T(["font","Javanese Text","Java"]),T(["font","Segoe UI","Lisu"]),T(["font","Myanmar Text","Mymr"]),T(["font","Ebrima","Nkoo"]),T(["font","Nirmala UI","Olck"]),T(["font","Ebrima","Osma"]),T(["font","Phagspa","Phag"]),T(["font","Estrangelo Edessa","Syrn"]),T(["font","Estrangelo Edessa","Syrj"]),T(["font","Estrangelo Edessa","Syre"]),T(["font","Nirmala UI","Sora"]),T(["font","Microsoft Tai Le","Tale"]),T(["font","Microsoft New Tai Lue","Talu"]),T(["font","Ebrima","Tfng"])]}]}}},OS=jS,d4=(z,J,Q)=>({name:`a:${z}`,properties:{rawMap:{val:J}},children:Q}),N5=(z)=>{let[J,Q,Z,$,X,Y]=z,q=[];if(q.push(d4("satMod",Z)),$)q.push(d4("lumMod",$));if(X)q.push(d4("tint",X));if(Y)q.push(d4("shade",Y));return{name:"a:gs",properties:{rawMap:{pos:J}},children:[{name:"a:schemeClr",properties:{rawMap:{val:Q}},children:q}]}},mJ=(z,J)=>({name:"a:solidFill",children:[d4("schemeClr",z,J)]}),a5=(z)=>{let[J,Q,Z,$,X]=z,[Y,q]=X;return{name:"a:gradFill",properties:{rawMap:{rotWithShape:J}},children:[{name:"a:gsLst",children:[N5(Q),N5(Z),N5($)]},{name:"a:lin",properties:{rawMap:{ang:Y,scaled:q}}}]}},g5=(z)=>{let[J,Q,Z,$]=z;return{name:"a:ln",properties:{rawMap:{w:J,cap:Q,cmpd:Z,algn:$}},children:[mJ("phClr"),d4("prstDash","solid"),{name:"a:miter",properties:{rawMap:{lim:"800000"}}}]}},h5=(z)=>{let J=[];if(z){let[Q,Z,$,X,Y]=z;J.push({name:"a:outerShdw",properties:{rawMap:{blurRad:Q,dist:Z,dir:$,algn:X,rotWithShape:Y}},children:[d4("srgbClr","000000",[d4("alpha","63000")])]})}return{name:"a:effectStyle",children:[Object.assign({},{name:"a:effectLst"},J.length?{children:J}:{})]}},PS=()=>({name:"a:fillStyleLst",children:[mJ("phClr"),a5(["1",["0","phClr","105000","110000","67000"],["50000","phClr","103000","105000","73000"],["100000","phClr","109000","105000","81000"],["5400000","0"]]),a5(["1",["0","phClr","103000","102000","94000"],["50000","phClr","110000","100000",void 0,"100000"],["100000","phClr","120000","99000",void 0,"78000"],["5400000","0"]])]}),TS=()=>({name:"a:lnStyleLst",children:[g5(["6350","flat","sng","ctr"]),g5(["12700","flat","sng","ctr"]),g5(["19050","flat","sng","ctr"])]}),vS=()=>({name:"a:effectStyleLst",children:[h5(),h5(),h5(["57150","19050","5400000","ctr","0"])]}),IS=()=>({name:"a:bgFillStyleLst",children:[mJ("phClr"),mJ("phClr",[d4("tint","95000"),d4("satMod","170000")]),a5(["1",["0","phClr","150000","102000","93000","98000"],["50000","phClr","130000","103000","98000","90000"],["100000","phClr","120000",void 0,void 0,"63000"],["5400000","0"]])]}),CS={getTemplate(){return{name:"a:fmtScheme",properties:{rawMap:{name:"Office"}},children:[PS(),TS(),vS(),IS()]}}},yS=CS,bS={getTemplate(){return{name:"a:themeElements",children:[AS.getTemplate(),OS.getTemplate(),yS.getTemplate()]}}},xS=bS,wS={getTemplate(){return{name:"a:theme",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{a:"http://schemas.openxmlformats.org/drawingml/2006/main"}}],rawMap:{name:"Office Theme"}},children:[xS.getTemplate(),{name:"a:objectDefaults"},{name:"a:extraClrSchemeLst"}]}}},NS=wS,gS=()=>({name:"o:shapelayout",properties:{prefixedAttributes:[{prefix:"v:",map:{ext:"edit"}}]},children:[{name:"o:idmap",properties:{prefixedAttributes:[{prefix:"v:",map:{ext:"edit"}}],rawMap:{data:"1"}}}]}),hS=()=>({name:"v:stroke",properties:{rawMap:{joinstyle:"miter"}}}),uS=(z)=>({name:"v:formulas",children:z.map((J)=>({name:"v:f",properties:{rawMap:{eqn:J}}}))}),mS=()=>({name:"v:path",properties:{prefixedAttributes:[{prefix:"o:",map:{connecttype:"rect",extrusionok:"f"}}],rawMap:{gradientshapeok:"t"}}}),eY=(z)=>{let{aspectratio:J,rotation:Q}=z||{},Z={};if(J)Z.aspectratio="t";if(Q)Z.rotation="t";return{name:"o:lock",properties:{prefixedAttributes:[{prefix:"v:",map:{ext:"edit"}}],rawMap:Z}}};function cS(z,J,Q,Z,$){return(z-J)/(Q-J)*($-Z)+Z}var iS=(z,J)=>{let Q,{recolor:Z,brightness:$,contrast:X,id:Y}=z;if(Z){if(Q={},Z==="Washout"||Z==="Grayscale")Q.gain="19661f",Q.blacklevel="22938f";if(Z==="Black & White"||Z==="Grayscale"){if(Q.grayscale="t",Z==="Black & White")Q.bilevel="t"}}if(!Z||Z==="Grayscale"){if(!Q)Q={};if(X!=null&&X!==50){let q="1";if(X>=0){if(X<50)q=String(X/50);else if(X<100)q=String(50/(100-X));else if(X===100)q="2147483647f"}Q.gain=q}if($!=null&&$!==50)Q.blacklevel=cS($,0,100,-0.5,0.5).toString()}return{name:"v:imagedata",properties:{prefixedAttributes:[{prefix:"o:",map:{relid:`rId${J}`,title:Y}}],rawMap:Q}}},pS=()=>{let z=["if lineDrawn pixelLineWidth 0","sum @0 1 0","sum 0 0 @1","prod @2 1 2","prod @3 21600 pixelWidth","prod @3 21600 pixelHeight","sum @0 0 1","prod @6 1 2","prod @7 21600 pixelWidth","sum @8 21600 0","prod @7 21600 pixelHeight","sum @10 21600 0"];return{name:"v:shapetype",properties:{prefixedAttributes:[{prefix:"o:",map:{spt:"75",preferrelative:"t"}}],rawMap:{coordsize:"21600,21600",filled:"f",id:"_x0000_t75",path:"m@4@5l@4@11@9@11@9@5xe",stroked:"f"}},children:[hS(),uS(z),mS(),eY({aspectratio:!0})]}},WY=(z)=>Math.floor((z??0)*0.74999943307122),nS=(z,J)=>{let{width:Q=0,height:Z=0,altText:$}=z,X=WY(Q),Y=WY(Z);return{name:"v:shape",properties:{rawMap:{id:z.headerFooterPosition,"o:spid":"_x0000_s1025",style:`position: absolute; margin-left: 0; margin-top: 10in; margin-bottom: 0; margin-right: 0; width: ${X}pt; height: ${Y}pt; z-index: ${J+1}`,type:"#_x0000_t75",alt:$}},children:[iS(z,J+1),eY({rotation:!0})]}},dS={getTemplate(z){let J=Yz.get(z.sheetIndex)||[],Q=[gS(),pS(),...J.map((Z,$)=>nS(Z,$))];return{name:"xml",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{v:"urn:schemas-microsoft-com:vml",o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel"}}]},children:Q}}},rS=dS,tS={getTemplate(z,J){let Q=(J+1).toString();return{name:"sheet",properties:{rawMap:{name:z,sheetId:Q,"r:id":`rId${Q}`}}}}},sS=tS,lS={getTemplate(z){return{name:"sheets",children:z.map((J,Q)=>sS.getTemplate(J,Q))}}},aS=lS,oS={getTemplate(z,J){return{name:"workbook",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships"}}],rawMap:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},children:[{name:"bookViews",children:[{name:"workbookView",properties:{rawMap:{activeTab:J}}}]},aS.getTemplate(z)]}}},eS=oS,zV=(z)=>Math.ceil((z-12)/7+1),JV={getTemplate(z){let{min:J,max:Q,outlineLevel:Z,s:$,width:X,hidden:Y,bestFit:q}=z,G=1,U="0";if(X>1)G=zV(X),U="1";return{name:"col",properties:{rawMap:{min:J,max:Q,outlineLevel:Z!=null?Z:void 0,width:G,style:$,hidden:Y?"1":"0",bestFit:q?"1":"0",customWidth:U}}}}},QV=JV,ZV={getTemplate(z){return{name:"mergeCell",properties:{rawMap:{ref:z}}}}},$V=ZV,XV=(z)=>{let J=z.charAt(0).toLowerCase();return J==="s"?"inlineStr":J},YV={getTemplate(z,J,Q){let{ref:Z,data:$,styleId:X}=z,{type:Y,value:q}=$||{type:"empty",value:null},G=Y;if(Y==="f")G="str";else if(Y.charAt(0)===Y.charAt(0).toUpperCase())G=XV(Y);let U={name:"c",properties:{rawMap:{r:Z,t:G==="empty"?void 0:G,s:X?MS(X,Q):void 0}}};if(G==="empty")return U;let _;if(G==="str"&&Y==="f")_=[{name:"f",textNode:L0(gJ(q))}];else if(G==="inlineStr")_=[{name:"is",children:[{name:"t",textNode:L0(gJ(q))}]}];else _=[{name:"v",textNode:q}];return Object.assign({},U,{children:_})}},qV=YV,GV=(z,J)=>{let Q=[],Z=0;for(let $=0;$=0;$--){let X=[],Y=z[Q[$].pos];for(let q=1;q<=Y.mergeAcross;q++)X.push({ref:`${F1(Q[$].excelPos+1+q)}${J+1}`,styleId:Y.styleId,data:{type:"empty",value:null}});if(X.length)z.splice(Q[$].pos+1,0,...X)}},UV=(z)=>z.data?.value!==""||z.styleId!==void 0,_V={getTemplate(z,J,Q){let{collapsed:Z,hidden:$,height:X,outlineLevel:Y,cells:q=[]}=z;GV(q,J);let G=q.filter(UV).map((U,_)=>qV.getTemplate(U,_,Q));return{name:"row",properties:{rawMap:{r:J+1,collapsed:Z?"1":"0",hidden:$?"1":"0",ht:X,customHeight:X!=null?"1":"0",spans:"1:1",outlineLevel:Y||void 0}},children:G}}},HV=_V,WV=(z,J,Q)=>{let Z=[],$=[];z.forEach((q,G)=>{let U=q.cells,_=0,H;U.forEach((W,B)=>{let E=B+_+1,K=F1(E),F=G+1;if(W.mergeAcross){_+=W.mergeAcross;let D=F1(B+_+1);Z.push(`${K}${F}:${D}${F}`)}if(!J[E-1])J[E-1]={};let{collapsibleRanges:L}=W;if(L)L.forEach((D)=>{$.push([E+D[0],E+D[1]])});H=J[E-1],H.min=E,H.max=E,W.ref=`${K}${F}`})}),$.sort((q,G)=>{if(q[0]!==G[0])return q[0]-G[0];return G[1]-q[1]});let X=new Map,Y=new Map;return $.filter((q)=>{let G=q.toString();if(X.get(G))return!1;return X.set(G,!0),!0}).forEach((q)=>{let G=J.find((_)=>_.min==q[0]&&_.max==q[1]),U=Y.get(q[0]);J.push({min:q[0],max:q[1],outlineLevel:Q?void 0:U||1,width:(G||{width:100}).width}),Y.set(q[0],(U||0)+1)}),Z},BV=(z)=>{if(!z||z!=="Portrait"&&z!=="Landscape")return"portrait";return z.toLocaleLowerCase()},EV=(z)=>{if(z==null)return 1;let Q=["Letter","Letter Small","Tabloid","Ledger","Legal","Statement","Executive","A3","A4","A4 Small","A5","A6","B4","B5","Folio","Envelope","Envelope DL","Envelope C5","Envelope B5","Envelope C3","Envelope C4","Envelope C6","Envelope Monarch","Japanese Postcard","Japanese Double Postcard"].indexOf(z);return Q===-1?1:Q+1},KV=(z)=>{let J={"&[Page]":"&P","&[Pages]":"&N","&[Date]":"&D","&[Time]":"&T","&[Tab]":"&A","&[Path]":"&Z","&[File]":"&F","&[Picture]":"&G"};for(let Q of Object.keys(J))z=z.replace(Q,J[Q]);return z},FV=(z)=>{if(z==="Center")return"C";if(z==="Right")return"R";return"L"},LV=(z,J)=>{if(!J)return z;if(z+="&"",z+=J.fontName||"Calibri",J.bold!==J.italic)z+=J.bold?",Bold":",Italic";else if(J.bold)z+=",Bold Italic";else z+=",Regular";if(z+=""",J.size)z+=`&${J.size}`;if(J.strikeThrough)z+="&S";if(J.underline)z+=`&${J.underline==="Double"?"E":"U"}`;if(J.color)z+=`&K${J.color.replace("#","").toUpperCase()}`;return z},DV=(z,J,Q)=>z.reduce((Z,$,X)=>{let Y=FV($.position),q=LV(`${Z}&${Y}`,$.font),G=["Left","Center","Right"];if(!$.position)$.position=G[X];let{image:U}=$;if($.value==="&[Picture]"&&U){let _=`${Y}${J}${Q}`;zq(U,_)}return`${q}${L0(KV($.value))}`},""),MV=(z)=>{let J=["all","first","even"],Q=[];return J.forEach((Z)=>{let $=z[Z],X=Z==="all"?"odd":Z;if(!$)return;for(let Y of Object.keys($)){let q=$[Y],G=`${Y.charAt(0).toUpperCase()}${Y.slice(1)}`,U=Y[0].toUpperCase();if(q){let _=Z==="all"?"":Z.toUpperCase();Q.push({name:`${X}${G}`,properties:{rawMap:{"xml:space":"preserve"}},textNode:DV(q,U,_)})}}}),Q},kV=(z)=>{return(J)=>{if(z.length)J.children.push({name:"cols",children:z.map((Q)=>QV.getTemplate(Q))});return J}},fV=(z,J)=>{return(Q)=>{if(z.length)Q.children.push({name:"sheetData",children:z.map((Z,$)=>HV.getTemplate(Z,$,J))});return Q}},SV=(z)=>{let J=z.length;if(!J)return"";let Q=Array(J+1);Q[0]=J;for(let $=1;$<=J;$++)Q[$]=z.charCodeAt($-1)&255;let Z=0;for(let $=Q.length-1;$>=0;$--){let X=Q[$],Y=(Z&16384)===0?0:1,q=Z<<1&32767;Z=(Y|q)^X}return(Z^52811).toString(16).toUpperCase().padStart(4,"0")},VV=(z)=>{return(J)=>{if(!z)return J;let Q=typeof z==="boolean"?{}:z,Z={sheet:1},$=Q.password?SV(Q.password):"";if($)Z.password=$;let X={autoFilter:!1,deleteColumns:!1,deleteRows:!1,formatCells:!1,formatColumns:!1,formatRows:!1,insertColumns:!1,insertHyperlinks:!1,insertRows:!1,pivotTables:!1,selectLockedCells:!0,selectUnlockedCells:!0};return Object.keys(X).forEach((Y)=>{let q=Q[Y];if(q==null||q===X[Y])return;Z[Y]=q?0:1}),J.children.push({name:"sheetProtection",properties:{rawMap:Z}}),J}},RV=(z)=>{return(J)=>{if(z.length)J.children.push({name:"mergeCells",properties:{rawMap:{count:z.length}},children:z.map((Q)=>$V.getTemplate(Q))});return J}},AV=(z)=>{return(J)=>{let{top:Q=0.75,right:Z=0.7,bottom:$=0.75,left:X=0.7,header:Y=0.3,footer:q=0.3}=z;return J.children.push({name:"pageMargins",properties:{rawMap:{bottom:$,footer:q,header:Y,left:X,right:Z,top:Q}}}),J}},jV=(z)=>{return(J)=>{if(z)J.children.push({name:"pageSetup",properties:{rawMap:{horizontalDpi:0,verticalDpi:0,orientation:BV(z.orientation),paperSize:EV(z.pageSize)}}});return J}},OV=(z)=>{return(J)=>{if(!z)return J;let Q=z.first!=null?1:0,Z=z.even!=null?1:0;return J.children.push({name:"headerFooter",properties:{rawMap:{differentFirst:Q,differentOddEven:Z}},children:MV(z)}),J}},PV=(z)=>{return(J)=>{if(z)J.children.push({name:"tableParts",properties:{rawMap:{count:"1"}},children:[{name:"tablePart",properties:{rawMap:{"r:id":`rId${++J.rIdCounter}`}}}]});return J}},TV=(z)=>{return(J)=>{if(hz.get(z)?.length)J.children.push({name:"drawing",properties:{rawMap:{"r:id":`rId${++J.rIdCounter}`}}});return J}},vV=(z)=>{return(J)=>{if(Yz.get(z))J.children.push({name:"legacyDrawingHF",properties:{rawMap:{"r:id":`rId${++J.rIdCounter}`}}});return J}},IV=(z=0,J=0)=>{let Q=z>0||J>0;return Q?[{name:"pane",properties:{rawMap:{state:Q?"frozen":void 0,topLeftCell:Q?`${F1(z+1)}${J+1}`:void 0,xSplit:z===0?void 0:z,ySplit:J===0?void 0:J}}}]:void 0},CV=(z=!1,J,Q)=>{return(Z)=>{return Z.children.push({name:"sheetViews",children:[{name:"sheetView",properties:{rawMap:{rightToLeft:z===!0?"1":"0",workbookViewId:"0"}},children:IV(J,Q)}]}),Z}},yV=()=>{return(z)=>{return z.children.push({name:"sheetPr",children:[{name:"outlinePr",properties:{rawMap:{summaryBelow:0}}}]}),z}},bV=(z)=>{return(J)=>{let Q=z.reduce((Z,$)=>{if($.outlineLevel&&$.outlineLevel>Z)return $.outlineLevel;return Z},0);return J.children.push({name:"sheetFormatPr",properties:{rawMap:{baseColWidth:10,defaultRowHeight:16,outlineLevelRow:Q?Q:void 0}}}),J}},xV={getTemplate(z){let{worksheet:J,currentSheet:Q,config:Z}=z,{margins:$={},pageSetup:X,headerFooterConfig:Y,suppressColumnOutline:q,rightToLeft:G,frozenRowCount:U,frozenColumnCount:_,protectSheet:H}=Z,{table:W}=J,{rows:B,columns:E}=W,K=E?.length?WV(B,E,!!q):[],F=r4.get(Q),{children:L}=[yV(),CV(G,_,U),bV(B),kV(E),fV(B,Q+1),VV(H),RV(K),AV($),jV(X),OV(Y),TV(Q),vV(Q),PV(F)].reduce((D,M)=>M(D),{children:[],rIdCounter:0});return{name:"worksheet",properties:{prefixedAttributes:[{prefix:"xmlns:",map:{r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships"}}],rawMap:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},children:L}}},wV=xV,H1=new Map,e0=[],E1=[],K1=new Map,gz=new Map,hz=new Map,Yz=new Map,Q2=new Map,Z2=new Map,r4=new Map,NV="AG-GRID-TABLE",Z7="SINGLE_SHEET";function gV(){return Z7}function hV(z){Z7=z}function uV(z,J,Q){nV(J),kS(z,e0.length);let Z=Object.assign({},Q);if(Q.exportAsExcelTable&&Q.pivotModeActive)V(163,{featureName:"pivot mode"}),Z.exportAsExcelTable=!1;iV(J,Z);let $=UR(J,Z);return _R($),$}function mV(z){return z.replace(/^[^a-zA-Z_]+/,"_").replace(/\s/g,"_").replace(/[^a-zA-Z0-9_]/g,"_")}function cV(z,J){if(r4.has(z)){V(164);return}r4.set(z,J)}function iV(z,J){let{exportAsExcelTable:Q,prependContent:Z,appendContent:$,headerRowCount:X=0}=J;if(!Q)return;let Y=typeof Q==="boolean"?{}:Q,{name:q,showColumnStripes:G,showRowStripes:U,showFilterButton:_,highlightFirstColumn:H,highlightLastColumn:W}=Y,B=mV(q||NV),E=e0.length-1,{table:K}=z,{rows:F,columns:L}=K,D=Z?Z.length:0,M=$?$.length:0,f=F.length,A=L.length,R=[],O=[];for(let v=0;vX.id===z.id))$.push(z)}function pV(z,J,Q,Z,$){let X=e0.length,{row:Y,column:q}=z.position||{},G=z;if(Z){if(J!=null&&Q!=null&&(!Y||!q)){if(!z.position)z.position={};z.position=Object.assign({},z.position,{row:J,column:Z.indexOf(Q)+1})}ak(G,Z),ok(G,$)}Jq({imageToAdd:G,idx:X});let U=Z2.get(X);if(!U)U=new Map,Z2.set(X,U);let _=hz.get(X);if(!_)hz.set(X,[G]);else _.push(G);if(!U.get(z.id))U.set(z.id,{index:U.size,type:z.imageType})}function Jq(z){let{imageToAdd:J,idx:Q}=z,Z=gz.get(J.id);if(Z){let $=Z.find((X)=>X.sheetId===Q);if($)$.image.push(J);else Z.push({sheetId:Q,image:[J]})}else gz.set(J.id,[{sheetId:Q,image:[J]}]),Q2.set(J.id,{type:J.imageType,index:Q2.size})}function nV(z){let J=L0(z.name)||"",Q="";while(e0.indexOf(`${J}${Q}`)!==-1)if(Q==="")Q="_1";else Q=`_${parseInt(Q.slice(1),10)+1}`;z.name=`${J}${Q}`,e0.push(z.name)}function dV(z){if(H1.has(z))return H1.get(z);return H1.set(z,H1.size),H1.size-1}function rV(){H1.clear(),gz.clear(),hz.clear(),Yz.clear(),Q2.clear(),Z2.clear(),r4.clear(),e0=[],E1=[],K1=new Map,Z7="SINGLE_SHEET"}function tV(z){return N0(eS.getTemplate(e0,z))}function sV(z){return N0(fS.getTemplate(z))}function lV(){return N0(Af.getTemplate(H1))}function aV(z){return N0(qf.getTemplate(z))}function oV(z){return N0(Hf.getTemplate(z))}function eV(z,J){return N0(Xf.getTemplate({sheetLen:z,hasCustomProperties:J}))}function zR(z){let J=[{Id:"rId1",Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",Target:"xl/workbook.xml"},{Id:"rId2",Type:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",Target:"docProps/core.xml"}];if(z)J.push({Id:"rId3",Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",Target:"docProps/custom.xml"});let Q=$6.getTemplate(J);return N0(Q)}function JR(){return N0(NS.getTemplate())}function QR(z,J){return N0(VS.getTemplate(z,J))}function ZR(z){let J=Array(z).fill(void 0).map((Z,$)=>({Id:`rId${$+1}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",Target:`worksheets/sheet${$+1}.xml`})),Q=$6.getTemplate([...J,{Id:`rId${z+1}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",Target:"theme/theme1.xml"},{Id:`rId${z+2}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",Target:"styles.xml"},{Id:`rId${z+3}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",Target:"sharedStrings.xml"}]);return N0(Q)}function $R(z){return N0(kf.getTemplate({sheetIndex:z}))}function XR(z){let J=Z2.get(z)||[],Q=[];for(let[Z,$]of J){let{index:X,type:Y}=$;Q.push({Id:`rId${X+1}`,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:`../media/image${Q2.get(Z).index+1}.${dJ(Y)}`})}return N0($6.getTemplate(Q))}function YR(z){return N0(rS.getTemplate({sheetIndex:z}),!0)}function qR(z){let J=Yz.get(z)||[],Q=[];for(let Z=0;Z{if(!z.size)return;let Q=new Map;J.forEach((Z,$)=>{if(z.has(Z))Q.set($,z.get(Z))}),z.clear(),Q.forEach((Z,$)=>z.set($,Z))},_R=(z)=>{let J=K1.get(z)??[];J.push(e0.length-1),K1.set(z,J),E1.push(z)},HR=(z)=>{let J=new Map(K1),Q=[];for(let Z of z){let $=J.get(Z);if(!$?.length)return null;let X=$.shift();Q.push(X),J.set(Z,$)}return Q},WR=(z)=>{if(!z.length||E1.length===0)return null;let J=new Set,Q=[];for(let Z of z){let $=E1.findIndex((X,Y)=>!J.has(Y)&&X===Z);if($===-1)return null;J.add($),Q.push($)}return Q},BR=(z)=>{let J=new Map;z.forEach((Q,Z)=>J.set(Q,Z)),e0=z.map((Q)=>e0[Q]),E1=z.map((Q)=>E1[Q]),vJ(hz,z),vJ(Yz,z),vJ(r4,z),vJ(Z2,z),gz.forEach((Q)=>{Q.forEach((Z)=>{let $=J.get(Z.sheetId);if($!=null)Z.sheetId=$})}),K1=new Map,E1.forEach((Q,Z)=>{let $=K1.get(Q)??[];$.push(Z),K1.set(Q,$)})},ER=(z)=>{if(z.length<=1)return;let J=HR(z)??WR(z);if(!J)return;BR(J)},$7=class{getStringPosition(z){return dV(z)}addBodyImageToMap(z,J,Q,Z,$){pV(z,J,Q,Z,$)}addHeaderFooterImageToMap(z,J){zq(z,J)}addWorksheet(z,J,Q){return uV(z,J,Q)}syncOrderWithSheetData(z){ER(z)}reset(){rV()}setFactoryMode(z){hV(z)}getFactoryMode(){return gV()}getSheetNames(){return[...e0]}},KR=async(z)=>{let J=0,Q=[],Z=new WritableStream({write:(Y)=>{Q.push(Y),J+=Y.length}}),$=new ReadableStream({start:(Y)=>{let q=new FileReader;q.onload=(G)=>{if(G.target?.result)Y.enqueue(G.target.result);Y.close()},q.readAsArrayBuffer(z)}}),X=new window.CompressionStream("deflate-raw");return await $.pipeThrough(X).pipeTo(Z),{size:J,content:new Blob(Q)}},FR=async(z)=>{let J=new Blob([z]),{size:Q,content:Z}=await KR(J),$=new Uint8Array(await Z.arrayBuffer());return{size:Q,content:$}},LR=(z)=>{let J=z.getHours();return J<<=6,J=J|z.getMinutes(),J<<=5,J=J|z.getSeconds()/2,J},DR=(z)=>{let J=z.getFullYear()-1980;return J<<=4,J=J|z.getMonth()+1,J<<=5,J=J|z.getDate(),J};function w0(z,J){let Q="";for(let Z=0;Z>>=8;return Q}var BY=(z)=>{if(!z.length)return 0;let J=-1,Q=0,Z=0,$=0;for(let X=0;X>>8^$;return J^-1},EY=(z)=>{if(!z.length)return 0;if(typeof z==="string")return BY(new TextEncoder().encode(z));return BY(z)},MR=new Uint32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918000,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function kR(z){let J=String.fromCharCode;function Q(H){let W=[];if(!H)return[];let B=H.length,E=0,K,F;while(E=55296&&K<=56319&&E=55296&&H<=57343)throw Error(Y4(255,{point:H}))}function $(H,W){return J(H>>W&63|128)}function X(H){if((H&4294967168)==0)return J(H);let W="";if((H&4294965248)==0)W=J(H>>6&31|192);else if((H&4294901760)==0)Z(H),W=J(H>>12&15|224),W+=$(H,6);else if((H&4292870144)==0)W=J(H>>18&7|240),W+=$(H,12),W+=$(H,6);return W+=J(H&63|128),W}let Y=Q(z),q=Y.length,G=-1,U,_="";while(++G{let{content:Y,path:q,created:G}=z,U=LR(G),_=DR(G),H=EY($),W=X!==void 0?X:Z,B=kR(q),E=B!==q,K="";if(E){let M=w0(1,1)+w0(EY(B),4)+B;K="up"+w0(M.length,2)+M}let F="\x14\x00"+(E?"\x00\b":"\x00\x00")+w0(J?8:0,2)+w0(U,2)+w0(_,2)+w0(W?H:0,4)+w0(X??Z,4)+w0(Z,4)+w0(B.length,2)+w0(K.length,2),L="PK\x03\x04"+F+B+K,D="PK\x01\x02\x14\x00"+F+"\x00\x00\x00\x00\x00\x00"+(Y?"\x00\x00\x00\x00":"\x10\x00\x00\x00")+w0(Q,4)+B+K;return{localFileHeader:Uint8Array.from(L,(M)=>M.charCodeAt(0)),centralDirectoryHeader:Uint8Array.from(D,(M)=>M.charCodeAt(0))}},Zq=(z)=>{let J;if(typeof z==="string"){let Q=atob(z.split(";base64,")[1]);J=Uint8Array.from(Q,(Z)=>Z.charCodeAt(0))}else J=z;return{size:J.length,content:J}},fR=async(z)=>{let{content:J}=z,{size:Q,content:Z}=!J?{size:0,content:Uint8Array.from([])}:Zq(J),$,X,Y=!1;if(z.type==="file"&&Z&&Q>0){let G=await FR(Z);$=G.content,X=G.size,Y=!0}return{rawContent:Z,rawSize:Q,deflatedContent:$,deflatedSize:X,isCompressed:Y}},SR=(z,J)=>{let{content:Q}=z,{content:Z}=!Q?{content:Uint8Array.from([])}:Zq(Q);return{...Qq(z,!1,J,Z.length,Z,void 0),content:Z,isCompressed:!1}},VR=(z,J,Q)=>{let Z="PK\x05\x06\x00\x00\x00\x00"+w0(z,2)+w0(z,2)+w0(J,4)+w0(Q,4)+"\x00\x00";return Uint8Array.from(Z,($)=>$.charCodeAt(0))},$q=class{constructor(){this.folders=[],this.files=[]}addFolders(z){z.forEach(this.addFolder.bind(this))}addFolder(z){this.folders.push({path:z,created:new Date,isBase64:!1,type:"folder"})}addFile(z,J,Q=!1){this.files.push({path:z,created:new Date,content:Q?J:new TextEncoder().encode(J),isBase64:Q,type:"file"})}async getZipFile(z="application/zip"){let J=await this.buildCompressedFileStream();return this.clearStream(),new Blob([J],{type:z})}getUncompressedZipFile(z="application/zip"){let J=this.buildFileStream();return this.clearStream(),new Blob([J],{type:z})}clearStream(){this.folders=[],this.files=[]}packageFiles(z){let J=0,Q=0;for(let U of z){let{localFileHeader:_,centralDirectoryHeader:H,content:W}=U;J+=_.length+W.length,Q+=H.length}let Z=new Uint8Array(J),$=new Uint8Array(Q),X=0,Y=0;for(let U of z){let{localFileHeader:_,centralDirectoryHeader:H,content:W}=U;Z.set(_,X),X+=_.length,Z.set(W,X),X+=W.length,$.set(H,Y),Y+=H.length}let q=VR(z.length,Q,J),G=new Uint8Array(Z.length+$.length+q.length);return G.set(Z),G.set($,Z.length),G.set(q,Z.length+$.length),G}async buildCompressedFileStream(){let z=[...this.folders,...this.files],J=await Promise.all(z.map(fR)),Q=[],Z=0;for(let $=0;${if(z.addFolders(["_rels/","docProps/","xl/","xl/theme/","xl/_rels/","xl/worksheets/"]),!gz.size)return;z.addFolders(["xl/worksheets/_rels","xl/drawings/","xl/drawings/_rels","xl/media/"]);let J=0;gz.forEach((Q)=>{let Z=Q[0].image[0],{base64:$,imageType:X}=Z;z.addFile(`xl/media/image${++J}.${dJ(X)}`,$,!0)})},AR=(z,J)=>{let Q=0,Z=0;for(let $=0;$0&&hz.has($),q=r4.size>0&&r4.get($),G=gz.size&&Yz.has($);if(!Y&&!q&&!G)continue;let U,_,H;if(Y)jR(z,$,Q),_=Q,Q++;if(G)OR(z,$,Z),H=Z,Z++;if(q)U=q.name;let W=`xl/worksheets/_rels/sheet${$+1}.xml.rels`;z.addFile(W,GR({tableName:U,drawingIndex:_,vmlDrawingIndex:H}))}},jR=(z,J,Q)=>{let $=`xl/drawings/drawing${Q+1}.xml`,X=`xl/drawings/_rels/drawing${Q+1}.xml.rels`;z.addFile(X,XR(J)),z.addFile($,$R(J))},OR=(z,J,Q)=>{let $=`xl/drawings/vmlDrawing${Q+1}.vml`,X=`xl/drawings/_rels/vmlDrawing${Q+1}.vml.rels`;z.addFile($,YR(J)),z.addFile(X,qR(J))},PR=(z)=>{let J=r4,Q=Array.from(J.keys());for(let Z=0;Z{let Y=!!X&&Object.keys(X).some((q)=>X[q]!=null);if(z.addFile("xl/workbook.xml",tV($)),z.addFile("xl/styles.xml",sV(J)),z.addFile("xl/sharedStrings.xml",lV()),z.addFile("xl/theme/theme1.xml",JR()),z.addFile("xl/_rels/workbook.xml.rels",ZR(Z)),z.addFile("docProps/core.xml",aV(Q)),Y)z.addFile("docProps/custom.xml",oV(X));z.addFile("[Content_Types].xml",eV(Z,Y)),z.addFile("_rels/.rels",zR(Y))},Xq=(z,J,Q={},Z)=>{if(!J||J.length===0)return V(159),Z.reset(),!1;Z.syncOrderWithSheetData(J);let{fontSize:$=11,author:X="AG Grid",activeTab:Y=0,customMetadata:q}=Q,G=J.length,U=Math.max(Math.min(Y,G-1),0);return RR(z),PR(z),AR(z,J),TR(z,$,X,G,U,q),Z.reset(),!0},KY=(z,J=new $7)=>{let{data:Q,fontSize:Z,author:$,activeSheetIndex:X,customMetadata:Y}=z,q=z.mimeType||"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",G=new $q;if(!Xq(G,Q,{author:$,fontSize:Z,activeTab:X,customMetadata:Y},J))return Promise.resolve(void 0);return G.getZipFile(q)},FY=(z,J=new $7)=>{let{data:Q,fontSize:Z,author:$,activeSheetIndex:X,customMetadata:Y}=z,q=z.mimeType||"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",G=new $q;if(!Xq(G,Q,{author:$,fontSize:Z,activeTab:X,customMetadata:Y},J))return;return G.getUncompressedZipFile(q)};var vR=class extends B5{constructor(){super(...arguments);this.beanName="excelCreator",this.workbook=new $7}getMergedParams(z){let J=this.gos.get("defaultExcelExportParams");return Object.assign({},J,z)}export(z){if(this.isExportSuppressed()){V(160);return}let J=()=>{let Z=this.getMergedParams(z),$=this.getData(Z),{fontSize:X,author:Y,mimeType:q,customMetadata:G}=Z,U={data:[$],fontSize:X,author:Y,mimeType:q,customMetadata:G};this.packageCompressedFile(U).then((_)=>{if(_){let{fileName:H}=Z,W=typeof H==="function"?H(C(this.gos,{})):H;SJ(this.getFileName(W),_)}})},{overlays:Q}=this.beans;if(Q)Q.showExportOverlay(J);else J()}exportDataAsExcel(z){this.export(z)}getDataAsExcel(z){let J=this.getMergedParams(z),Q=this.getData(J),{fontSize:Z,author:$,mimeType:X,customMetadata:Y}=J,q={data:[Q],fontSize:Z,author:$,mimeType:X,customMetadata:Y};return this.packageFile(q)}setFactoryMode(z){this.workbook.setFactoryMode(z)}getFactoryMode(){return this.workbook.getFactoryMode()}getSheetDataForExcel(z){let J=this.getMergedParams(z);return this.getData(J)}getMultipleSheetsAsExcel(z){return FY(z,this.workbook)}exportMultipleSheetsAsExcel(z){KY(z,this.workbook).then((J)=>{let{fileName:Q="export.xlsx"}=z;if(J){let Z=typeof Q==="function"?Q():Q;SJ(Z,J)}})}getDefaultFileExtension(){return"xlsx"}createSerializingSession(z){let{colModel:J,colNames:Q,rowGroupColsSvc:Z,valueSvc:$,formula:X,gos:Y}=this.beans,q=Y.get("excelStyles")||[],G=this.createStyleLinker(q),U={...z,colModel:J,colNames:Q,rowGroupColsSvc:Z,valueSvc:$,formulaSvc:X,gos:Y,suppressRowOutline:z.suppressRowOutline||z.skipRowGroups,headerRowHeight:z.headerRowHeight||z.rowHeight,baseExcelStyles:q,rightToLeft:z.rightToLeft??Y.get("enableRtl"),styleLinker:G,headerRowCount:J$(J),pivotModeActive:J.isPivotActive(),workbook:this.workbook};return new Jf(U)}createStyleLinker(z){let J=[],Q=new Set,Z=new Map;z.forEach((Y,q)=>{J.push(Y.id),Q.add(Y.id),Z.set(Y.id,q)});let{gos:$,cellStyles:X}=this.beans;return(Y)=>{let{rowType:q,rowIndex:G,value:U,column:_,columnGroup:H,node:W}=Y,B=q==="HEADER",E=q==="HEADER_GROUPING",K=B?_:H,F=[];if(B||E){if(F.push("header"),E)F.push("headerGroup");if(K)F=F.concat(WJ(K.getDefinition(),$,_||null,H||null));return F}let L=["cell"];if(!J.length)return L;let D=_.getDefinition();return X?.processAllCellClasses(D,C($,{value:U,data:W.data,node:W,colDef:D,column:_,rowIndex:G}),(M)=>{if(Q.has(M))L.push(M)}),L.sort((M,f)=>{let A=Z.get(M)??-1,R=Z.get(f)??-1;return A===R?0:Athis.onFocusIn(z),onFocusOut:(z)=>this.onFocusOut(z),focusInnerElement:(z)=>this.focusInnerElement(z),onTabKeyDown:(z)=>this.onTabKeyDown(z),handleKeyDown:(z)=>this.handleKeyDown(z)},this.stopPropagationCallbacks),this.refreshAriaProperties(),this.addManagedEventListeners({stylesChanged:this.onStylesChanged.bind(this)})}onStylesChanged(z){if(z.listItemHeightChanged)this.rowHeight=this.getItemHeight(),this.refresh()}refreshAriaProperties(){let J=this.getLocaleTextFunc()("ariaDefaultListName",this.listName||"List"),Q=this.eContainer;U0(Q,this.model?.getRowCount()>0?this.ariaRole:"presentation"),_0(Q,J)}addResizeObserver(){let z=()=>O4(this.beans,()=>this.drawVirtualRows()),J=j4(this.beans,this.getGui(),z);this.addDestroyFunc(J)}focusInnerElement(z){return this.focusRow(z?this.model.getRowCount()-1:0),!0}onFocusIn(z){let J=z.target;if(J.classList.contains("ag-virtual-list-item"))this.lastFocusedRowIndex=g8(J)-1}onFocusOut(z){if(!this.getFocusableElement().contains(z.relatedTarget))this.lastFocusedRowIndex=null}handleKeyDown(z){let{key:J,shiftKey:Q}=z;switch(J){case k.UP:case k.DOWN:{let Z=J===k.UP;if(z.preventDefault(),Q)this.moveItem(Z);else this.navigate(Z)}break;case k.PAGE_HOME:case k.PAGE_END:case k.PAGE_UP:case k.PAGE_DOWN:if(this.navigateToPage(J)!==null)z.preventDefault();break}}onTabKeyDown(z){this.stopPropagationCallbacks?.stopPropagation(z),this.forceFocusOutOfContainer(z.shiftKey)}getNextRow(z){if(this.lastFocusedRowIndex==null)return;let J=this.lastFocusedRowIndex+(z?-1:1);if(J<0||J>=this.model.getRowCount())return;return J}moveItem(z){if(!this.moveItemCallback)return;let J=this.getComponentAt(this.lastFocusedRowIndex);if(!J)return;this.moveItemCallback(J,z)}navigate(z){let J=this.getNextRow(z);if(J===void 0)return;this.focusRow(J)}navigateToPage(z,J="focused"){let Q=!1;if(J==="focused")J=this.getLastFocusedRow(),Q=!0;let Z=this.model.getRowCount()-1,$=-1;if(z===k.PAGE_HOME)$=0;else if(z===k.PAGE_END)$=Z;else if(z===k.PAGE_DOWN)$=Math.min(J+this.pageSize,Z);else if(z===k.PAGE_UP)$=Math.max(J-this.pageSize,0);if($===-1)return null;if(Q)this.focusRow($);else this.ensureIndexVisible($);return $}getLastFocusedRow(){return this.lastFocusedRowIndex}focusRow(z){if(this.isScrolling)return;this.isScrolling=!0,this.ensureIndexVisible(z),O4(this.beans,()=>{if(this.isScrolling=!1,!this.isAlive())return;let J=this.renderedRows.get(z);if(J)J.eDiv.focus()})}getComponentAt(z){let J=this.renderedRows.get(z);return J&&J.rowComponent}forEachRenderedRow(z){this.renderedRows.forEach((J,Q)=>z(J.rowComponent,Q))}getItemHeight(){if(!this.isHeightFromTheme)return this.rowHeight;return this.beans.environment.getDefaultListItemHeight()}ensureIndexVisible(z,J=!0){let Q=this.model.getRowCount();if(typeof z!=="number"||z<0||z>=Q)return!1;let Z=z*this.rowHeight,$=Z+this.rowHeight,X=this.getGui(),Y=X.scrollTop,q=X.offsetHeight,G=Y+q,U=J?0:this.rowHeight,_=Y>Z+U,H=G<$-U;if(_)return X.scrollTop=Z,!0;if(H){let W=$-q;return X.scrollTop=W,!0}return!1}setComponentCreator(z){this.componentCreator=z}setComponentUpdater(z){this.componentUpdater=z}getRowHeight(){return this.rowHeight}getScrollTop(){return this.getGui().scrollTop}setRowHeight(z){this.isHeightFromTheme=!1,this.rowHeight=z,this.refresh()}refresh(z){if(this.model==null||!this.isAlive())return;let J=this.model.getRowCount();this.eContainer.style.height=`${J*this.rowHeight}px`,this.refreshAriaProperties(),this.awaitStable(()=>{if(!this.isAlive())return;if(this.canSoftRefresh(z))this.drawVirtualRows(!0);else this.clearVirtualRows(),this.drawVirtualRows()})}awaitStable(z){if(this.awaitStableCallbacks.push(z),this.awaitStableCallbacks.length>1)return;let J=this.model.getRowCount();MZ(this,()=>this.eContainer.clientHeight>=J*this.rowHeight,()=>{if(!this.isAlive())return;let Q=this.awaitStableCallbacks;this.awaitStableCallbacks=[];for(let Z of Q)Z()})}canSoftRefresh(z){return!!(z&&this.renderedRows.size&&typeof this.model.areRowsEqual==="function"&&this.componentUpdater)}clearVirtualRows(){this.renderedRows.forEach((z,J)=>this.removeRow(J))}drawVirtualRows(z){if(!this.isAlive()||!this.model)return;let J=this.getGui(),Q=J.scrollTop,Z=Q+J.offsetHeight;if(Q===Z)this.clearVirtualRows();else{let $=Math.floor(Q/this.rowHeight),X=Math.floor(Z/this.rowHeight);this.pageSize=Math.floor((Z-Q)/this.rowHeight),this.ensureRowsRendered($,X,z)}}ensureRowsRendered(z,J,Q){if(this.renderedRows.forEach((Z,$)=>{if(($J)&&$!==this.lastFocusedRowIndex)this.removeRow($)}),Q)this.refreshRows();for(let Z=z;Z<=J;Z++){if(this.renderedRows.has(Z))continue;if(Z=J.getRowCount())return;let{cssIdentifier:Q,ariaRole:Z,renderedRows:$,eContainer:X}=this,Y=J.getRow(z),q=Z==="tree"?"treeitem":"option",G=H0({tag:"div",cls:`ag-virtual-list-item ag-${Q}-virtual-list-item`,role:q,attrs:{tabindex:"-1"}});v2(G,J.getRowCount()),I2(G,z+1);let U=this.rowHeight;G.style.height=`${U}px`,G.style.top=`${U*z}px`;let _=this.componentCreator(Y,G);if(_.addGuiEventListener("focusin",()=>this.lastFocusedRowIndex=z),G.appendChild(_.getGui()),$.has(z-1))$.get(z-1).eDiv.insertAdjacentElement("afterend",G);else if($.has(z+1))$.get(z+1).eDiv.insertAdjacentElement("beforebegin",G);else X.appendChild(G);$.set(z,{rowComponent:_,eDiv:G,value:Y})}removeRow(z){let J=this.renderedRows.get(z);J.eDiv.remove(),this.destroyBean(J.rowComponent),this.renderedRows.delete(z)}refreshRows(){let z=this.model.getRowCount();this.renderedRows.forEach((J,Q)=>{if(Q>=z)this.removeRow(Q);else{let Z=this.model.getRow(Q);if(this.model.areRowsEqual?.(J.value,Z))this.componentUpdater(Z,J.rowComponent);else this.removeRow(Q)}})}addScrollListener(){this.addGuiEventListener("scroll",()=>this.drawVirtualRows(),{passive:!0})}setModel(z){this.model=z}getAriaElement(){return this.eContainer}destroy(){if(!this.isAlive())return;this.clearVirtualRows(),this.awaitStableCallbacks.length=0,super.destroy()}},bR='.ag-list-item-hovered:after{background-color:var(--ag-accent-color);content:"";height:1px;left:0;position:absolute;right:0}.ag-item-highlight-top:after{top:0}.ag-item-highlight-bottom:after{bottom:0}',u5="ag-list-item-hovered",xR=class extends k0{constructor(z,J,Q){super();this.comp=z,this.virtualList=J,this.params=Q,this.currentDragValue=null,this.lastHoveredListItem=null}postConstruct(){this.beans.environment.addGlobalCSS(bR,"component-AgVirtualListDragFeature"),this.params.addListeners(this,this.listItemDragStart.bind(this),this.listItemDragEnd.bind(this)),this.createDropTarget(),this.createAutoScrollService()}listItemDragStart(z){this.currentDragValue=this.params.getCurrentDragValue(z),this.moveBlocked=this.params.isMoveBlocked(this.currentDragValue)}listItemDragEnd(){window.setTimeout(()=>{this.currentDragValue=null,this.moveBlocked=!1},10)}createDropTarget(){let z={isInterestedIn:(J)=>J===this.params.dragSourceType,getIconName:()=>this.moveBlocked?"pinned":"move",getContainer:()=>this.comp.getGui(),onDragging:(J)=>this.onDragging(J),onDragStop:()=>this.onDragStop(),onDragLeave:()=>this.onDragLeave(),onDragCancel:()=>this.onDragCancel()};this.beans.dragAndDrop?.addDropTarget(z)}createAutoScrollService(){let z=this.virtualList.getGui();this.autoScrollService=new EJ({scrollContainer:z,scrollAxis:"y",getVerticalPosition:()=>z.scrollTop,setVerticalPosition:(J)=>z.scrollTop=J})}onDragging(z){if(!this.currentDragValue||this.moveBlocked)return;let J=this.getListDragItem(z),Q=this.virtualList.getComponentAt(J.rowIndex);if(!Q)return;let Z=Q.getGui().parentElement;if(this.lastHoveredListItem&&this.lastHoveredListItem.rowIndex===J.rowIndex&&this.lastHoveredListItem.position===J.position)return;this.autoScrollService.check(z.event),this.clearHoveredItems(),this.lastHoveredListItem=J,EZ(Z,u5),EZ(Z,`ag-item-highlight-${J.position}`)}getListDragItem(z){let J=this.virtualList.getGui(),Q=Number.parseFloat(window.getComputedStyle(J).paddingTop),Z=this.virtualList.getRowHeight(),$=this.virtualList.getScrollTop(),X=Math.max(0,(z.y-Q+$)/Z),Y=this.params.getNumRows(this.comp)-1,q=Math.min(Y,X)|0;return{rowIndex:q,position:Math.round(X)>X||X>Y?"bottom":"top",component:this.virtualList.getComponentAt(q)}}onDragStop(){if(this.moveBlocked)return;this.params.moveItem(this.currentDragValue,this.lastHoveredListItem),this.clearDragProperties()}onDragCancel(){this.clearDragProperties()}onDragLeave(){this.clearDragProperties()}clearDragProperties(){this.clearHoveredItems(),this.autoScrollService.ensureCleared()}clearHoveredItems(){let z=this.virtualList.getGui();for(let J of z.querySelectorAll(`.${u5}`))for(let Q of[u5,"ag-item-highlight-top","ag-item-highlight-bottom"])J.classList.remove(Q);this.lastHoveredListItem=null}};var wR=".ag-panel{background-color:var(--ag-panel-background-color);display:flex;flex-direction:column;overflow:hidden;position:relative}.ag-dialog{border:var(--ag-dialog-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dialog-shadow);position:absolute}.ag-panel-title-bar{align-items:center;background-color:var(--ag-panel-title-bar-background-color);border-bottom:var(--ag-panel-title-bar-border);color:var(--ag-panel-title-bar-text-color);cursor:default;display:flex;flex:none;font-family:var(--ag-panel-title-bar-font-family);font-size:var(--ag-panel-title-bar-font-size);font-weight:var(--ag-panel-title-bar-font-weight);height:var(--ag-panel-title-bar-height);padding:var(--ag-spacing) var(--ag-cell-horizontal-padding)}.ag-panel-title-bar-button{cursor:pointer;:where(.ag-icon){color:var(--ag-panel-title-bar-icon-color)}}:where(.ag-ltr) .ag-panel-title-bar-button{margin-left:calc(var(--ag-spacing)*2);margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-panel-title-bar-button{margin-left:var(--ag-spacing);margin-right:calc(var(--ag-spacing)*2)}.ag-panel-title-bar-title{flex:1 1 auto}.ag-panel-title-bar-buttons{display:flex}.ag-panel-content-wrapper{display:flex;flex:1 1 auto;overflow:hidden;position:relative}:where(.ag-dragging-fill-handle) .ag-dialog,:where(.ag-dragging-range-handle) .ag-dialog{opacity:.7;pointer-events:none}";function NR(z){return z??(z=z||"default"),{tag:"div",cls:`ag-panel ag-${z}-panel`,attrs:{tabindex:"-1"},children:[{tag:"div",ref:"eTitleBar",cls:`ag-panel-title-bar ag-${z}-panel-title-bar ag-unselectable`,children:[{tag:"span",ref:"eTitle",cls:`ag-panel-title-bar-title ag-${z}-panel-title-bar-title`},{tag:"div",ref:"eTitleBarButtons",cls:`ag-panel-title-bar-buttons ag-${z}-panel-title-bar-buttons`}]},{tag:"div",ref:"eContentWrapper",cls:`ag-panel-content-wrapper ag-${z}-panel-content-wrapper`}]}}var gR=class extends I0{constructor(z){super(NR(z.cssIdentifier));this.config=z,this.closable=!0,this.eContentWrapper=j,this.eTitleBar=j,this.eTitleBarButtons=j,this.eTitle=j,this.registerCSS(wR)}postConstruct(){let{component:z,closable:J,hideTitleBar:Q,title:Z,minWidth:$=250,width:X,minHeight:Y=250,height:q,centered:G,popup:U,x:_,y:H,postProcessPopupParams:W}=this.config,B=this.beans,E=this.createManagedBean(new xZ(this.getGui(),{minWidth:$,width:X,minHeight:Y,height:q,centered:G,x:_,y:H,popup:U,calculateTopBuffer:()=>this.positionableFeature.getHeight()-this.getBodyHeight()}));this.positionableFeature=E;let K=this.getGui();if(z)this.setBodyComponent(z);if(!Q){if(Z)this.setTitle(Z);this.setClosable(J!=null?J:this.closable)}else w(this.eTitleBar,!1);if(this.addManagedElementListeners(this.eTitleBar,{mousedown:(L)=>{if(K.contains(L.relatedTarget)||K.contains(n(B))||this.eTitleBarButtons.contains(L.target)){L.preventDefault();return}let D=this.eContentWrapper.querySelector("button, [href], input, select, textarea, [tabindex]");if(D)D.focus()}}),U&&E.isPositioned())return;if(this.renderComponent)this.renderComponent();let F;if(W){let{type:L,eventSource:D,mouseEvent:M}=W;F=()=>B.popupSvc?.callPostProcessPopup(W,L,K,D,M)}E.initialisePosition(F),this.eContentWrapper.style.height="0"}renderComponent(){let z=this.getGui();z.focus(),this.close=()=>{z.remove(),this.destroy()}}getHeight(){return this.positionableFeature.getHeight()}setHeight(z){this.positionableFeature.setHeight(z)}getWidth(){return this.positionableFeature.getWidth()}setWidth(z){this.positionableFeature.setWidth(z)}setClosable(z){if(z!==this.closable)this.closable=z;if(z){let J=this.closeButtonComp=new I0({tag:"div",cls:"ag-button"});this.createBean(J);let Q=J.getGui(),Z=this.beans.iconSvc.createIconNoSpan("close",this.beans);Z.classList.add("ag-panel-title-bar-button-icon"),Q.appendChild(Z),this.addTitleBarButton(J),J.addManagedElementListeners(Q,{click:this.onBtClose.bind(this)})}else if(this.closeButtonComp)this.closeButtonComp.getGui().remove(),this.closeButtonComp=this.destroyBean(this.closeButtonComp)}setBodyComponent(z){z.setParentComponent(this),this.eContentWrapper.appendChild(z.getGui())}addTitleBarButton(z,J){let Q=this.eTitleBarButtons,Z=Q.children,$=Z.length;if(J==null)J=$;J=Math.max(0,Math.min(J,$)),z.addCss("ag-panel-title-bar-button");let X=z.getGui();if(J===0)Q.prepend(X);else if(J===$)Q.append(X);else Z[J-1].after(X);z.setParentComponent(this)}getBodyHeight(){return C2(this.eContentWrapper)}getBodyWidth(){return lz(this.eContentWrapper)}setTitle(z){this.eTitle.innerText=z}onBtClose(){this.close()}destroy(){if(this.closeButtonComp)this.closeButtonComp=this.destroyBean(this.closeButtonComp);let z=this.getGui();if(z&&B0(z))this.close();super.destroy()}},hR=class extends gR{constructor(z,J){super({...z,popup:!0});this.callbacks=J,this.isMaximizable=!1,this.isMaximized=!1,this.maximizeListeners=[],this.resizeListenerDestroy=null,this.lastPosition={x:0,y:0,width:0,height:0}}wireBeans(z){this.popupSvc=z.popupSvc}postConstruct(){let z=this.getGui(),{movable:J,resizable:Q,maximizable:Z,modal:$}=this.config;if(this.addCss("ag-dialog"),super.postConstruct(),this.tabGuardFeature=this.createManagedBean(new oZ(this,this.callbacks?.stopPropagationCallbacks)),this.tabGuardFeature.initialiseTabGuard({isFocusableContainer:!0,onFocusIn:()=>{this.popupSvc?.bringPopupToFront(z)},onTabKeyDown:(X)=>{if($)return;let Y=X.shiftKey,q=O0(this.beans,z,!1,Y);if(!q||this.tabGuardFeature.getTabGuardCtrl().isTabGuard(q)){if(this.callbacks?.focusNextContainer(this.beans,Y))X.preventDefault()}}}),J)this.setMovable(J);if(Z)this.setMaximizable(Z);if(Q)this.setResizable(Q);if(!this.config.modal)this.callbacks?.configureFocusableContainer(this.beans,this)}setAllowFocus(z){this.tabGuardFeature.getTabGuardCtrl().setAllowFocus(z)}renderComponent(){let z=this.getGui(),{alwaysOnTop:J,modal:Q,title:Z,afterGuiAttached:$}=this.config,X=this.getLocaleTextFunc(),Y=this.popupSvc?.addPopup({modal:Q,eChild:z,closeOnEsc:!0,closedCallback:this.onClosed.bind(this),alwaysOnTop:J,ariaLabel:Z||X("ariaLabelDialog","Dialog"),afterGuiAttached:$});if(Y)this.close=Y.hideFunc}onClosed(z){this.destroy(),this.config.closedCallback?.(z)}setMaximized(z){if(this.isMaximizable&&z!==this.isMaximized)this.toggleMaximize()}toggleMaximize(){let z=this.positionableFeature.getPosition();if(this.isMaximized){let{x:J,y:Q,width:Z,height:$}=this.lastPosition;this.setWidth(Z),this.setHeight($),this.positionableFeature.offsetElement(J,Q)}else this.lastPosition.width=this.getWidth(),this.lastPosition.height=this.getHeight(),this.lastPosition.x=z.x,this.lastPosition.y=z.y,this.positionableFeature.offsetElement(0,0),this.setHeight("100%"),this.setWidth("100%");this.isMaximized=!this.isMaximized,this.refreshMaximizeIcon()}refreshMaximizeIcon(){w(this.maximizeIcon,!this.isMaximized),w(this.minimizeIcon,this.isMaximized)}clearMaximizebleListeners(){if(this.maximizeListeners.length){for(let z of this.maximizeListeners)z();this.maximizeListeners.length=0}if(this.resizeListenerDestroy)this.resizeListenerDestroy(),this.resizeListenerDestroy=null}destroy(){this.maximizeButtonComp=this.destroyBean(this.maximizeButtonComp),this.clearMaximizebleListeners(),super.destroy()}setResizable(z){this.positionableFeature.setResizable(z)}setMovable(z){this.positionableFeature.setMovable(z,this.eTitleBar)}setMaximizable(z){if(!z){if(this.clearMaximizebleListeners(),this.maximizeButtonComp)this.destroyBean(this.maximizeButtonComp),this.maximizeButtonComp=this.maximizeIcon=this.minimizeIcon=void 0;return}let J=this.eTitleBar;if(!J||z===this.isMaximizable)return;this.isMaximizable=z;let Q=this.buildMaximizeAndMinimizeElements();this.refreshMaximizeIcon(),Q.addManagedElementListeners(Q.getGui(),{click:this.toggleMaximize.bind(this)}),this.addTitleBarButton(Q,0),this.maximizeListeners.push(...this.addManagedElementListeners(J,{dblclick:this.toggleMaximize.bind(this)})),[this.resizeListenerDestroy]=this.addManagedListeners(this.positionableFeature,{resize:()=>{this.isMaximized=!1,this.refreshMaximizeIcon()}})}buildMaximizeAndMinimizeElements(){let z=this.maximizeButtonComp=this.createBean(new I0({tag:"div",cls:"ag-dialog-button"})),J=z.getGui(),Q=this.beans.iconSvc;return this.maximizeIcon=Q.createIconNoSpan("maximize"),J.appendChild(this.maximizeIcon),this.maximizeIcon.classList.add("ag-panel-title-bar-button-icon"),this.minimizeIcon=Q.createIconNoSpan("minimize"),J.appendChild(this.minimizeIcon),this.minimizeIcon.classList.add("ag-panel-title-bar-button-icon"),z}};var uR=class extends Qz{constructor(z){super();this.setTemplateFromElement(z.getGui(),void 0,void 0,!0)}postConstruct(){this.initialiseTabGuard({onTabKeyDown:(z)=>this.onTabKeyDown(z),handleKeyDown:(z)=>this.handleKeyDown(z)})}handleKeyDown(z){if(z.key===k.ESCAPE)this.closePanel()}onTabKeyDown(z){if(z.defaultPrevented)return;this.closePanel(),z.preventDefault()}closePanel(){let z=this.parentComponent;z.closeSubMenu(),setTimeout(()=>z.getGui().focus(),0)}},o5=class extends k0{constructor(z){super();this.callbacks=z,this.ACTIVATION_DELAY=80,this.isActive=!1,this.subMenuIsOpen=!1,this.subMenuIsOpening=!1,this.suppressRootStyles=!0,this.suppressAria=!0,this.suppressFocus=!0}init(z){let{menuItemDef:J,isAnotherSubMenuOpen:Q,level:Z,childComponent:$,contextParams:X}=z;return this.params=z.menuItemDef,this.level=Z,this.isAnotherSubMenuOpen=Q,this.childComponent=$,this.contextParams=X,this.cssClassPrefix=this.params.menuItemParams?.cssClassPrefix??"ag-menu-option",this.callbacks.getMenuItemComp(this.beans,this.params,{...J,level:Z,isAnotherSubMenuOpen:Q,openSubMenu:(Y)=>this.openSubMenu(Y),closeSubMenu:()=>this.closeSubMenu(),closeMenu:(Y)=>this.closeMenu(Y),updateTooltip:(Y,q)=>this.refreshTooltip(Y,q),onItemActivated:()=>this.onItemActivated()}).then((Y)=>{if(!Y)return;this.menuItemComp=Y;let q=Y.configureDefaults?.();if(q)this.configureDefaults(q===!0?void 0:q)})}addListeners(z,J){if(!J?.suppressClick)this.addManagedElementListeners(z,{click:(Q)=>this.onItemSelected(Q)});if(!J?.suppressKeyboardSelect)this.addManagedElementListeners(z,{keydown:(Q)=>{if(Q.key===k.ENTER||Q.key===k.SPACE)Q.preventDefault(),this.onItemSelected(Q)}});if(!J?.suppressMouseDown)this.addManagedElementListeners(z,{mousedown:(Q)=>{Q.stopPropagation(),Q.preventDefault()}});if(!J?.suppressMouseOver)this.addManagedElementListeners(z,{mouseenter:()=>this.onMouseEnter(),mouseleave:()=>this.onMouseLeave()})}isDisabled(){return!!this.params.disabled}openSubMenu(z=!1,J){if(this.closeSubMenu(),!this.params.subMenu)return;this.subMenuIsOpening=!0;let Q=z0({tag:"div",cls:"ag-menu",role:"presentation"});this.eSubMenuGui=Q;let Z,$=()=>{this.subMenuIsOpening=!1};if(this.childComponent){let U=this.createBean(new uR(this.childComponent));U.setParentComponent(this);let _=U.getGui(),H="mouseenter",W=()=>this.cancelDeactivate();if(_.addEventListener(H,W),Z=()=>{_.removeEventListener(H,W),this.destroyBean(U)},Q.appendChild(_),this.childComponent.afterGuiAttached)$=()=>{this.childComponent.afterGuiAttached(),this.subMenuIsOpening=!1}}else if(this.params.subMenu){let U=this.createBean(new X7(this.level+1,this.contextParams,this.callbacks));if(U.setParentComponent(this),U.addMenuItems(this.params.subMenu),Q.appendChild(U.getGui()),this.addManagedListeners(U,{closeMenu:(_)=>this.dispatchLocalEvent(_)}),U.addGuiEventListener("mouseenter",()=>this.cancelDeactivate()),Z=()=>this.destroyBean(U),z)$=()=>{U.activateFirstItem(),this.subMenuIsOpening=!1}}let X=this.beans.popupSvc,Y=()=>{let U=this.eGui;X?.positionPopupForMenu({eventSource:U,ePopup:Q,event:J instanceof MouseEvent?J:void 0,additionalParams:this.callbacks.getPostProcessPopupParams(this.contextParams)})},q=this.getLocaleTextFunc(),G=X?.addPopup({modal:!0,eChild:Q,positionCallback:Y,anchorToElement:this.eGui,ariaLabel:q("ariaLabelSubMenu","SubMenu"),afterGuiAttached:$});this.subMenuIsOpen=!0,this.setAriaExpanded(!0),this.hideSubMenu=()=>{if(G)G.hideFunc();this.subMenuIsOpen=!1,this.setAriaExpanded(!1),Z(),this.menuItemComp.setExpanded?.(!1),this.eSubMenuGui=void 0},this.menuItemComp.setExpanded?.(!0)}setAriaExpanded(z){if(!this.suppressAria)j0(this.eGui,z)}closeSubMenu(){if(!this.hideSubMenu)return;this.hideSubMenu(),this.hideSubMenu=null,this.setAriaExpanded(!1)}isSubMenuOpen(){return this.subMenuIsOpen}isSubMenuOpening(){return this.subMenuIsOpening}activate(z,J){if(this.cancelActivate(),this.params.disabled&&!J)return;if(this.isActive=!0,!this.suppressRootStyles)this.eGui.classList.add(`${this.cssClassPrefix}-active`);if(this.menuItemComp.setActive?.(!0),!this.suppressFocus)this.callbacks.preserveRangesWhile(this.beans,()=>this.eGui.focus({preventScroll:!J}));if(z&&this.params.subMenu)window.setTimeout(()=>{if(this.isAlive()&&this.isActive)this.openSubMenu()},300);this.onItemActivated()}deactivate(){if(this.cancelDeactivate(),!this.suppressRootStyles)this.eGui.classList.remove(`${this.cssClassPrefix}-active`);if(this.menuItemComp.setActive?.(!1),this.isActive=!1,this.subMenuIsOpen)this.closeSubMenu()}getGui(){return this.menuItemComp.getGui()}getParentComponent(){return this.parentComponent}setParentComponent(z){this.parentComponent=z}getSubMenuGui(){return this.eSubMenuGui}onItemSelected(z){if(this.menuItemComp.select?.(),this.params.action)this.beans.frameworkOverrides.wrapOutgoing(()=>this.params.action(this.gos.addCommon({...this.contextParams})));else this.openSubMenu(z&&z.type==="keydown",z);if(this.params.subMenu&&!this.params.action||this.params.suppressCloseOnSelect)return;this.closeMenu(z)}closeMenu(z){let J={type:"closeMenu"};if(z)if(z instanceof MouseEvent)J.mouseEvent=z;else J.keyboardEvent=z;this.dispatchLocalEvent(J)}onItemActivated(){let z={type:"menuItemActivated",menuItem:this};this.dispatchLocalEvent(z)}cancelActivate(){if(this.activateTimeoutId)window.clearTimeout(this.activateTimeoutId),this.activateTimeoutId=0}cancelDeactivate(){if(this.deactivateTimeoutId)window.clearTimeout(this.deactivateTimeoutId),this.deactivateTimeoutId=0}onMouseEnter(){if(this.cancelDeactivate(),this.isAnotherSubMenuOpen())this.activateTimeoutId=window.setTimeout(()=>this.activate(!0),this.ACTIVATION_DELAY);else this.activate(!0)}onMouseLeave(){if(this.cancelActivate(),this.isSubMenuOpen())this.deactivateTimeoutId=window.setTimeout(()=>this.deactivate(),this.ACTIVATION_DELAY);else this.deactivate()}refreshRootElementGui(z){let J=this.menuItemComp.getGui(),{cssClassPrefix:Q,params:{cssClasses:Z,disabled:$}}=this,X=this.menuItemComp.getRootElement?.();if(X){if(!z)J.classList.add("ag-menu-option-custom");J=X}if(this.suppressRootStyles=!!z,!this.suppressRootStyles){J.classList.add(Q);for(let Y of Z??[])J.classList.add(Y);if($)J.classList.add(`${Q}-disabled`)}return J}applyAriaProperties(z){let{params:{checked:J,subMenu:Q,subMenuRole:Z,disabled:$}}=this,X=J!=null;if(U0(z,X?"menuitemcheckbox":"menuitem"),Q)i8(z,Z??"menu");if($)u8(z,!0)}configureDefaults(z){if(!this.menuItemComp){setTimeout(()=>this.configureDefaults(z));return}let{suppressRootStyles:J,suppressTooltip:Q,suppressAria:Z,suppressTabIndex:$,suppressFocus:X}=z||{},{params:{tooltip:Y,disabled:q}}=this,G=this.eGui=this.refreshRootElementGui(!!J);if(this.suppressAria=!!Z,!Z)this.applyAriaProperties(G);if(!$)G.setAttribute("tabindex","-1");if(!Q)this.refreshTooltip(Y);if(!q)this.addListeners(G,z);this.suppressFocus=!!X}refreshTooltip(z,J){if(this.tooltip=z,this.tooltipFeature=this.destroyBean(this.tooltipFeature),!z||!this.menuItemComp)return;let Q=this.beans.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.getGui(),getTooltipValue:()=>this.tooltip,getLocation:()=>"menu",shouldDisplayTooltip:J});if(Q)this.tooltipFeature=this.createBean(Q)}destroy(){this.tooltipFeature=this.destroyBean(this.tooltipFeature),this.menuItemComp?.destroy?.(),super.destroy()}},X7=class extends Qz{constructor(z=0,J,Q){super({tag:"div",cls:"ag-menu-list",role:"menu"});this.level=z,this.menuActionParams=J,this.callbacks=Q,this.menuItems=[]}postConstruct(){this.initialiseTabGuard({onTabKeyDown:(z)=>this.onTabKeyDown(z),handleKeyDown:(z)=>this.callbacks.preserveRangesWhile(this.beans,()=>this.handleKeyDown(z)),onFocusIn:(z)=>this.handleFocusIn(z),onFocusOut:(z)=>this.handleFocusOut(z)})}onTabKeyDown(z){if(!this.getParentComponent()?.getGui()?.classList.contains("ag-focus-managed"))z.preventDefault();if(z.shiftKey)this.closeIfIsChild(z)}handleKeyDown(z){switch(z.key){case k.UP:case k.RIGHT:case k.DOWN:case k.LEFT:z.preventDefault(),this.handleNavKey(z.key);break;case k.ESCAPE:if(this.closeIfIsChild())this.callbacks.stopPropagationCallbacks.stopPropagation(z);break}}handleFocusIn(z){let J=z.relatedTarget;if(!this.tabGuardFeature.getTabGuardCtrl().isTabGuard(J)&&(this.getGui().contains(J)||this.activeMenuItem?.getSubMenuGui()?.contains(J)))return;if(this.activeMenuItem)this.activeMenuItem.activate();else this.activateFirstItem()}handleFocusOut(z){let J=z.relatedTarget;if(!this.activeMenuItem||this.getGui().contains(J)||this.activeMenuItem.getSubMenuGui()?.contains(J))return;if(!this.activeMenuItem.isSubMenuOpening())this.activeMenuItem.deactivate()}clearActiveItem(){if(this.activeMenuItem)this.activeMenuItem.deactivate(),this.activeMenuItem=null}addMenuItems(z){if(z==null)return;N.all(z.map((J)=>{if(J==="separator")return N.resolve({eGui:this.createSeparator()});else if(typeof J==="string")return this.callbacks.warnNoItem?.(J),N.resolve({eGui:null});else return this.addItem(J)})).then((J)=>{for(let Q of J??[])if(Q?.eGui){if(this.appendChild(Q.eGui),Q.comp)this.menuItems.push(Q.comp)}})}addItem(z){let J=this.createManagedBean(new o5(this.callbacks));return J.init({menuItemDef:z,isAnotherSubMenuOpen:()=>this.menuItems.some((Q)=>Q.isSubMenuOpen()),level:this.level,contextParams:this.menuActionParams}).then(()=>{return J.setParentComponent(this),this.addManagedListeners(J,{closeMenu:(Q)=>{this.dispatchLocalEvent(Q)},menuItemActivated:(Q)=>{if(this.activeMenuItem&&this.activeMenuItem!==Q.menuItem)this.activeMenuItem.deactivate();this.activeMenuItem=Q.menuItem}}),{comp:J,eGui:J.getGui()}})}activateFirstItem(){let z=this.menuItems.filter((J)=>!J.isDisabled())[0];if(!z)return;z.activate()}createSeparator(){let z={tag:"div",cls:"ag-menu-separator-part"};return H0({tag:"div",cls:"ag-menu-separator",attrs:{"aria-hidden":"true"},children:[z,z,z,z]})}handleNavKey(z){switch(z){case k.UP:case k.DOWN:{let Q=this.findNextItem(z===k.UP);if(Q&&Q!==this.activeMenuItem)Q.activate(!1,!0);return}}let J=this.gos.get("enableRtl")?k.RIGHT:k.LEFT;if(z===J)this.closeIfIsChild();else this.openChild()}closeIfIsChild(z){let J=this.getParentComponent();if(J&&J instanceof o5){if(z)z.preventDefault();return J.closeSubMenu(),J.getGui().focus(),!0}return!1}openChild(){if(this.activeMenuItem)this.activeMenuItem.openSubMenu(!0)}findNextItem(z){let J=[...this.menuItems];if(!J.length)return;if(!this.activeMenuItem)return z?y(J):J[0];if(z)J.reverse();let Q,Z=!1;for(let $ of J){if(!Z){if($===this.activeMenuItem)Z=!0;continue}Q=$;break}if(Z&&!Q)return J[0];return Q||this.activeMenuItem}destroy(){this.clearActiveItem(),super.destroy()}},mR="ag-menu",cR="ag-context-menu-loading-icon",iR=class extends k0{constructor(z){super();this.params=z,this.destroyLoadingSpinner=null,this.lastPromise=0}hideActiveMenu(){this.destroyBean(this.activeMenu)}showMenu(z,J,Q){let{getMenuItems:Z,shouldBlockMenuOpen:$}=this.params,X=Z(z,J);if(x9(X)){let Y=this.lastPromise+1;if(this.lastPromise=Y,!this.destroyLoadingSpinner)this.createLoadingIcon(J);return X.then((q)=>{if(this.lastPromise!==Y)return;let{target:G}=J,U=!G;if(q?.length&&(U||B0(G))&&!$?.())this.createContextMenu({menuItems:q,menuActionParams:z,mouseEvent:J,anchorToElement:Q});this.destroyLoadingSpinner?.()}),!0}if(!X?.length)return!1;return this.createContextMenu({menuItems:X,menuActionParams:z,mouseEvent:J,anchorToElement:Q}),!0}createLoadingIcon(z){let{beans:J}=this,Q=this.getLocaleTextFunc(),Z=J.iconSvc.createIconNoSpan("loadingMenuItems"),$=H0({tag:"div",cls:cR});$.appendChild(Z);let X=m0(J),Y=Rz(J);if(!Y)return;Y.appendChild($),J.ariaAnnounce?.announceValue(Q("ariaLabelLoadingContextMenu","Loading Context Menu"),"contextmenu"),J.environment.applyThemeClasses($),JJ($,z,J);let q=(G)=>{JJ($,G,J)};X.addEventListener("mousemove",q),this.destroyLoadingSpinner=()=>{X.removeEventListener("mousemove",q),$.remove(),this.destroyLoadingSpinner=null}}createContextMenu(z){let{mapMenuItems:J,menuItemCallbacks:Q,beforeMenuOpen:Z,onMenuClose:$,afterMenuDestroyed:X,onVisibleChanged:Y,onMenuOpen:q}=this.params,{menuItems:G,menuActionParams:U,mouseEvent:_,anchorToElement:H}=z,W=this.beans.popupSvc,E=new pR(J?(f)=>J(G,U,f):()=>G,U,Q);this.createBean(E);let K=E.getGui();Z?.(U);let F={additionalParams:Q.getPostProcessPopupParams(U),type:"contextMenu",mouseEvent:_,ePopup:K,nudgeY:1},L=this.getLocaleTextFunc(),D=W?.addPopup({modal:!0,eChild:K,closeOnEsc:!0,closedCallback:(f)=>{Q.preserveRangesWhile(this.beans,()=>{$?.(),this.destroyBean(E),X?.(),Y?.(!1,f===void 0?"api":"ui")})},click:_,positionCallback:()=>{let f=this.gos.get("enableRtl");W?.positionPopupUnderMouseEvent({...F,nudgeX:f?(K.offsetWidth+1)*-1:1})},anchorToElement:H,ariaLabel:L("ariaLabelContextMenu","Context Menu")});if(D)q?.(),E.afterGuiAttached({container:"contextMenu",hidePopup:D.hideFunc});if(this.activeMenu)this.hideActiveMenu();if(this.activeMenu=E,E.addEventListener("destroyed",()=>{if(this.activeMenu===E)this.activeMenu=null}),D)E.addEventListener("closeMenu",(f)=>D.hideFunc({mouseEvent:f.mouseEvent??void 0,keyboardEvent:f.keyboardEvent??void 0,forceHide:!0}));let M=_&&_ instanceof MouseEvent&&_.type==="mousedown";Y?.(!0,M?"api":"ui")}destroy(){this.destroyLoadingSpinner?.(),super.destroy()}},pR=class extends I0{constructor(z,J,Q){super({tag:"div",cls:mR,role:"presentation"});this.getMenuItems=z,this.menuActionParams=J,this.callbacks=Q,this.menuList=null}postConstruct(){let z=this.createManagedBean(new X7(0,this.menuActionParams,this.callbacks)),J=this.getMenuItems(()=>this.getGui());z.addMenuItems(J),this.appendChild(z),this.menuList=z,z.addEventListener("closeMenu",(Q)=>this.dispatchLocalEvent(Q))}afterGuiAttached({hidePopup:z}){if(z)this.addDestroyFunc(z);let J=this.menuList;if(J)this.callbacks.preserveRangesWhile(this.beans,()=>E0(J.getGui()))}},nR=class extends I0{constructor(z){super({tag:"div"});this.callbacks=z}init(z){this.params=z,this.cssClassPrefix=this.params.cssClassPrefix??"ag-menu-option",this.addAriaAttributes(),this.addIcon(),this.addName(),this.addShortcut(),this.addSubMenu()}configureDefaults(){return!0}addAriaAttributes(){let{checked:z,subMenu:J}=this.params,Q=this.getGui();if(z)e6(Q,z);if(J)j0(Q,!1)}addIcon(){if(this.params.isCompact)return;let z=H0({tag:"span",ref:"eIcon",cls:`${this.getClassName("part")} ${this.getClassName("icon")}`,role:"presentation"}),{checked:J,icon:Q}=this.params;if(J)z.appendChild(this.beans.iconSvc.createIconNoSpan("check"));else if(Q)if(b2(Q))z.appendChild(Q);else if(typeof Q==="string")z.innerHTML=Q;else this.callbacks?.warnNoIcon?.();this.getGui().appendChild(z)}addName(){let z=H0({tag:"span",ref:"eName",cls:`${this.getClassName("part")} ${this.getClassName("text")}`,children:this.params.name||""});this.getGui().appendChild(z)}addShortcut(){if(this.params.isCompact)return;let z=H0({tag:"span",ref:"eShortcut",cls:`${this.getClassName("part")} ${this.getClassName("shortcut")}`,children:this.params.shortcut||""});this.getGui().appendChild(z)}addSubMenu(){let z=H0({tag:"span",ref:"ePopupPointer",cls:`${this.getClassName("part")} ${this.getClassName("popup-pointer")}`}),J=this.getGui();if(this.params.subMenu){let Q=this.gos.get("enableRtl")?"subMenuOpenRtl":"subMenuOpen";z.appendChild(this.beans.iconSvc.createIconNoSpan(Q))}J.appendChild(z)}getClassName(z){return`${this.cssClassPrefix}-${z}`}};function e5(z,J){if(!J)return null;let Q=V4(z),Z=Q.indexOf(J);if(Z===-1)return null;let $=-1;for(let X=Z-1;X>=0;X--)if(Q[X].classList.contains(W2.TAB_GUARD_TOP)){$=X;break}if($<=0)return null;return Q[$-1]}function Yq(z,J){if(!J)return!1;let Q=z.querySelectorAll(`.${NZ}`);if(!Q.length)return!1;for(let Z=0;Zthis.activeItem?.tabbedItem?.afterDetachedCallback?.())}setupHeader(){let{enableCloseButton:z,cssClass:J}=this.params,Q=(Z,$)=>{if(Z.classList.add(`ag-tabs-${$}`),J)Z.classList.add(`${J}-${$}`)};if(z)this.setupCloseButton(Q),this.eTabHeader=H0({tag:"div",role:"presentation"}),Q(this.eHeader,"header-wrapper"),this.eHeader.appendChild(this.eTabHeader);else this.eTabHeader=this.eHeader;U0(this.eTabHeader,"tablist"),Q(this.eTabHeader,"header")}setupCloseButton(z){let J=H0({tag:"button"});z(J,"close-button");let Q=this.beans.iconSvc.createIconNoSpan("close");_0(J,this.params.closeButtonAriaLabel),J.appendChild(Q),this.addManagedElementListeners(J,{click:()=>this.params.onCloseClicked?.()});let Z=H0({tag:"div",role:"presentation"});z(Z,"close-button-wrapper"),Z.appendChild(J),this.eHeader.appendChild(Z),this.eCloseButton=J}handleKeyDown(z){switch(z.key){case k.RIGHT:case k.LEFT:{if(!this.eTabHeader.contains(n(this.beans)))return;let J=z.key===k.RIGHT,Q=this.gos.get("enableRtl"),Z=this.items.indexOf(this.activeItem),$=J!==Q?Math.min(Z+1,this.items.length-1):Math.max(Z-1,0);if(Z===$)return;z.preventDefault();let X=this.items[$];this.showItemWrapper(X),X.eHeaderButton.focus();break}case k.UP:case k.DOWN:z.stopPropagation();break}}onTabKeyDown(z){if(z.defaultPrevented)return;let{beans:J,eHeader:Q,eBody:Z,activeItem:$,params:X}=this,{suppressTrapFocus:Y,enableCloseButton:q}=X,G=n(J),U=z.target,_=z.shiftKey;if(Q.contains(G)){if(z.preventDefault(),q&&_&&!this.eCloseButton?.contains(G))this.eCloseButton?.focus();else if(Y&&_)e5(Y0(J).body,U)?.focus();else this.focusBody(z.shiftKey);return}let H=null;if(Yq(Z,U)){if(_)H=e5(Z,U);if(!H&&!Y)H=$.eHeaderButton}if(!H&&Z.contains(G)){if(H=O0(J,Z,!1,_),!H){if(Y&&!_)this.forceFocusOutOfContainer(_);else if(q&&!_)z.preventDefault(),this.eCloseButton?.focus();else z.preventDefault(),this.focusHeader();return}}if(H)z.preventDefault(),H.focus()}focusInnerElement(z){if(z)return this.focusBody(!0);else return this.focusHeader(),!0}focusHeader(z){this.activeItem.eHeaderButton.focus({preventScroll:z})}focusBody(z){return E0(this.eBody,z)}setAfterAttachedParams(z){this.afterAttachedParams=z}showFirstItem(){if(this.items.length>0)this.showItemWrapper(this.items[0])}addItem(z){let J=H0({tag:"span",cls:"ag-tab",role:"tab",attrs:{tabindex:"-1"}});J.appendChild(z.title),this.eTabHeader.appendChild(J),_0(J,z.titleLabel);let Q={tabbedItem:z,eHeaderButton:J};this.items.push(Q),J.addEventListener("click",this.showItemWrapper.bind(this,Q))}showItem(z){let J=this.items.find((Q)=>Q.tabbedItem===z);if(J)this.showItemWrapper(J)}showItemWrapper(z){let{tabbedItem:J,eHeaderButton:Q}=z;if(this.params.onItemClicked?.({item:J}),this.activeItem===z){this.params.onActiveItemClicked?.();return}if(this.lastScrollListener)this.lastScrollListener=this.lastScrollListener();if(J0(this.eBody),J.bodyPromise.then((Z)=>{this.eBody.appendChild(Z);let $=!n1();if(!this.params.suppressFocusBodyOnOpen)E0(this.eBody,!1,$);if(J.afterAttachedCallback)J.afterAttachedCallback(this.afterAttachedParams);if(this.params.keepScrollPosition){let X=J.getScrollableContainer?.()||Z;[this.lastScrollListener]=this.addManagedElementListeners(X,{scroll:()=>{this.tabbedItemScrollMap.set(J.name,X.scrollTop)}});let Y=this.tabbedItemScrollMap.get(J.name);if(Y!==void 0)setTimeout(()=>{X.scrollTop=Y},0)}}),this.activeItem)this.activeItem.eHeaderButton.classList.remove("ag-tab-selected"),this.activeItem.tabbedItem.afterDetachedCallback?.();Q.classList.add("ag-tab-selected"),this.activeItem=z}},tR=".ag-group{position:relative;width:100%}.ag-group-title-bar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-title{display:inline;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.ag-group-title-bar) .ag-group-title{cursor:default}.ag-group-toolbar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-container{display:flex}.ag-disabled .ag-group-container{pointer-events:none}.ag-disabled-group-container,.ag-disabled-group-title-bar{opacity:.5}.ag-group-container-horizontal{flex-flow:row wrap}.ag-group-container-vertical{flex-direction:column}.ag-group-title-bar-icon{cursor:pointer;flex:none}:where(.ag-ltr) .ag-group-title-bar-icon{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-group-title-bar-icon{margin-left:var(--ag-spacing)}:where(.ag-group-item-alignment-stretch) .ag-group-item{align-items:stretch}:where(.ag-group-item-alignment-start) .ag-group-item{align-items:flex-start}:where(.ag-group-item-alignment-end) .ag-group-item{align-items:flex-end}";function sR(z){let J=z.cssIdentifier||"default",Q=z.direction||"vertical";return{tag:"div",cls:`ag-group ag-${J}-group`,role:"presentation",children:[{tag:"div",ref:"eToolbar",cls:`ag-group-toolbar ag-${J}-group-toolbar`,children:[{tag:"ag-checkbox",ref:"cbGroupEnabled"}]},{tag:"div",ref:"eContainer",cls:`ag-group-container ag-group-container-${Q} ag-${J}-group-container`}]}}var lR=class extends I0{constructor(z={}){super(sR(z),[K4]);this.params=z,this.suppressEnabledCheckbox=!0,this.suppressToggleExpandOnEnableChange=!1,this.eToolbar=j,this.cbGroupEnabled=j,this.eContainer=j,this.registerCSS(tR);let{enabled:J,items:Q,suppressEnabledCheckbox:Z,expanded:$,suppressToggleExpandOnEnableChange:X,useToggle:Y}=z;if(this.cssIdentifier=z.cssIdentifier||"default",this.enabled=J!=null?J:!0,this.items=Q||[],this.useToggle=Y??!1,this.alignItems=z.alignItems||"center",this.expanded=$==null?!0:$,Z!=null)this.suppressEnabledCheckbox=Z;if(X!=null)this.suppressToggleExpandOnEnableChange=X}postConstruct(){if(this.setupTitleBar(),this.items.length){let $=this.items;this.items=[],this.addItems($)}let z=this.getLocaleTextFunc();if(this.cbGroupEnabled.setLabel(z("enabled","Enabled")),this.enabled)this.setEnabled(this.enabled,void 0,!0);this.setAlignItems(this.alignItems);let{onEnableChange:J,onExpandedChange:Q,suppressOpenCloseIcons:Z}=this.params;if(this.hideEnabledCheckbox(this.suppressEnabledCheckbox),this.hideOpenCloseIcons(Z??!1),this.refreshChildDisplay(),w(this.eContainer,this.expanded),this.cbGroupEnabled.onValueChange(($)=>{this.setEnabled($,!0,this.suppressToggleExpandOnEnableChange),this.dispatchEnableChangeEvent($)}),J!=null)this.onEnableChange(J);if(Q!=null)this.onExpandedChange(Q)}refreshChildDisplay(){w(this.eToolbar,this.expanded&&!this.suppressEnabledCheckbox),this.eTitleBar?.refreshOnExpand(this.expanded)}isExpanded(){return this.expanded}setAlignItems(z){if(this.alignItems!==z)this.removeCss(`ag-group-item-alignment-${this.alignItems}`);this.alignItems=z;let J=`ag-group-item-alignment-${this.alignItems}`;return this.addCss(J),this}toggleGroupExpand(z,J){if(this.eTitleBar?.isSuppressCollapse()&&!this.useToggle)z=!0,J=!0;else if(z=z!=null?z:!this.expanded,this.expanded===z)return this;if(this.expanded=z,this.refreshChildDisplay(),w(this.eContainer,z),!J)this.dispatchLocalEvent({type:z?"expanded":"collapsed"});return this}addItems(z){for(let J of z)this.addItem(J)}prependItem(z){this.insertItem(z,!0)}addItem(z){this.insertItem(z,!1)}updateItems(z){let J=this.items,Q=0;for(let Z=0;Zz(J.enabled)}),this}onExpandedChange(z){return this.addManagedListeners(this,{expanded:()=>z(!0),collapsed:()=>z(!1)}),this}hideEnabledCheckbox(z){return this.suppressEnabledCheckbox=z,this.refreshChildDisplay(),this.refreshDisabledStyles(),this}hideOpenCloseIcons(z){return this.eTitleBar?.hideOpenCloseIcons(z),this}refreshDisabledStyles(){let z=!this.enabled;this.eContainer.classList.toggle("ag-disabled",z),this.eTitleBar?.refreshDisabledStyles(this.suppressEnabledCheckbox&&z),this.eContainer.classList.toggle("ag-disabled-group-container",z)}setupTitleBar(){let z=this.useToggle?this.createToggleTitleBar():this.createDefaultTitleBar();this.eToolbar.insertAdjacentElement("beforebegin",z.getGui())}createDefaultTitleBar(){let z=this.createManagedBean(new oR(this.params));return this.eTitleBar=z,z.refreshOnExpand(this.expanded),this.addManagedListeners(z,{expandedChanged:(J)=>this.toggleGroupExpand(J.expanded)}),z}createToggleTitleBar(){let z=this.createManagedBean(new w5({value:this.enabled,label:this.params.title,labelAlignment:"left",labelWidth:"flex",onValueChange:(J)=>{this.setEnabled(J,!0),this.dispatchEnableChangeEvent(J)}}));return z.addCss("ag-group-title-bar"),z.addCss(`ag-${this.params.cssIdentifier??"default"}-group-title-bar ag-unselectable`),this.eToggle=z,this.toggleGroupExpand(this.enabled),z}},m5="ag-disabled-group-title-bar";function aR(z){let J=z.cssIdentifier??"default";return{tag:"div",cls:`ag-group-title-bar ag-${J}-group-title-bar ag-unselectable`,role:z.suppressKeyboardNavigation?"presentation":"group",children:[{tag:"span",ref:"eGroupOpenedIcon",cls:`ag-group-title-bar-icon ag-${J}-group-title-bar-icon`,role:"presentation"},{tag:"span",ref:"eGroupClosedIcon",cls:`ag-group-title-bar-icon ag-${J}-group-title-bar-icon`,role:"presentation"},{tag:"span",ref:"eTitle",cls:`ag-group-title ag-${J}-group-title`}]}}var oR=class extends I0{constructor(z={}){super(aR(z));this.suppressOpenCloseIcons=!1,this.suppressKeyboardNavigation=!1,this.eGroupOpenedIcon=j,this.eGroupClosedIcon=j,this.eTitle=j;let{title:J,suppressOpenCloseIcons:Q,suppressKeyboardNavigation:Z}=z;if(!!J&&J.length>0)this.title=J;if(Q!=null)this.suppressOpenCloseIcons=Q;this.suppressKeyboardNavigation=Z??!1}postConstruct(){this.setTitle(this.title),this.hideOpenCloseIcons(this.suppressOpenCloseIcons),this.setupExpandContract()}setupExpandContract(){let z=this.beans.iconSvc;this.eGroupClosedIcon.appendChild(z.createIconNoSpan("accordionClosed")),this.eGroupOpenedIcon.appendChild(z.createIconNoSpan("accordionOpen")),this.addManagedElementListeners(this.getGui(),{click:()=>this.dispatchExpandChanged(),keydown:(J)=>{switch(J.key){case k.ENTER:case k.SPACE:J.preventDefault(),this.dispatchExpandChanged();break;case k.RIGHT:case k.LEFT:J.preventDefault(),this.dispatchExpandChanged(J.key===k.RIGHT);break}}})}refreshOnExpand(z){this.refreshAriaStatus(z),this.refreshOpenCloseIcons(z)}refreshAriaStatus(z){if(!this.suppressOpenCloseIcons)j0(this.getGui(),z)}refreshOpenCloseIcons(z){let J=!this.suppressOpenCloseIcons;w(this.eGroupOpenedIcon,J&&z),w(this.eGroupClosedIcon,J&&!z)}isSuppressCollapse(){return this.suppressOpenCloseIcons}dispatchExpandChanged(z){let J={type:"expandedChanged",expanded:z};this.dispatchLocalEvent(J)}setTitle(z){let J=this.getGui(),Q=!!z&&z.length>0;if(z=Q?z:void 0,this.eTitle.textContent=z??"",w(J,Q),z!==this.title)this.title=z;let Z=J.classList.contains(m5);return this.refreshDisabledStyles(Z),this}addWidget(z){return this.getGui().appendChild(z),this}hideOpenCloseIcons(z){if(this.suppressOpenCloseIcons=z,z)this.dispatchExpandChanged(!0);return this}refreshDisabledStyles(z){let J=this.getGui();if(z)J.classList.add(m5),J.removeAttribute("tabindex"),U0(J,"presentation");else if(J.classList.remove(m5),typeof this.title==="string"&&!this.suppressKeyboardNavigation)this.activateTabIndex([J]),U0(J,"group");else J.removeAttribute("tabindex"),U0(J,"presentation")}};var $0="35.2.0",C0={moduleName:"EnterpriseCore",version:$0,beans:[qY],icons:{accordionOpen:"tree-open",accordionClosed:"tree-closed",accordionIndeterminate:"tree-indeterminate",close:"cross",cancel:"cancel",maximize:"maximize",minimize:"minimize",columnDrag:"grip"},dependsOn:[],setLicenseKey:qY.setLicenseKey};var eR={stopPropagationCallbacks:Oz,focusNextContainer:(z,J)=>{return _4(z,J)},configureFocusableContainer:(z,J)=>{let Q=z.ctrlsSvc.get("gridCtrl");Q.addFocusableContainer(J),J.addDestroyFunc(()=>Q.removeFocusableContainer(J))}},zA=class extends hR{constructor(z){super(z,eR)}getFocusableContainerName(){return"dialog"}};var Y7=class extends yR{constructor(z){super(Oz,z)}};var JA=class extends xR{};function QA(z){return z.sideBar?.comp.isDisplayed()??!1}function ZA(z,J){z.sideBar?.comp.setDisplayed(J)}function $A(z,J){z.sideBar?.comp.setSideBarPosition(J)}function XA(z,J,Q){z.sideBar?.comp.openToolPanel(J,"api",Q)}function YA(z){z.sideBar?.comp.close("api")}function qA(z){return z.sideBar?.comp.openedItem()??null}function GA(z){z.sideBar?.comp.refresh()}function UA(z){return z.sideBar?.comp.isToolPanelShowing()??!1}function _A(z,J){let Q=z.sideBar?.comp.getToolPanelInstance(J);return zz(Q)}function HA(z){return z.sideBar?.comp.getDef()}var WA=`.ag-tool-panel-wrapper{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--ag-horizontal-size,var(--ag-side-bar-panel-width))}.ag-tool-panel-content{display:flex;height:100%;overflow:hidden auto}.ag-tool-panel-wrapper.ag-tool-panel-animating{ + /* !important required to override .ag-hidden to tool panel remains visible while animating */display:block!important;transition:width var(--ag-side-bar-panel-animation-duration) ease-in-out}@media (prefers-reduced-motion:reduce){.ag-tool-panel-wrapper.ag-tool-panel-animating{transition:none}}.ag-tool-panel-external{display:flex;flex-direction:row}:where(.ag-tool-panel-external) .ag-tool-panel-wrapper{flex-grow:1}.ag-select-agg-func-item{align-items:center;display:flex;flex:1 1 auto;flex-flow:row nowrap;height:100%;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap}.ag-tool-panel-horizontal-resize{cursor:ew-resize;height:100%;position:absolute;top:0;width:5px;z-index:1}.ag-side-bar{background-color:var(--ag-side-bar-background-color);display:flex;flex-direction:row-reverse;position:relative}:where(.ag-ltr) :where(.ag-side-bar-left) .ag-tool-panel-horizontal-resize{right:-3px}:where(.ag-rtl) :where(.ag-side-bar-left) .ag-tool-panel-horizontal-resize{left:-3px}:where(.ag-ltr) :where(.ag-side-bar-right) .ag-tool-panel-horizontal-resize{left:-3px}:where(.ag-rtl) :where(.ag-side-bar-right) .ag-tool-panel-horizontal-resize{right:-3px}.ag-side-bar-left{flex-direction:row;order:-1}.ag-side-buttons{background-color:var(--ag-side-button-bar-background-color);padding-top:var(--ag-side-button-bar-top-padding);position:relative}.ag-side-button{background-color:var(--ag-side-button-background-color);border-bottom:var(--ag-side-button-border);border-top:var(--ag-side-button-border);color:var(--ag-side-button-text-color);margin-top:-1px;position:relative}.ag-side-button:before{background-color:transparent;bottom:0;content:"";display:block;position:absolute;top:0;transition:background-color var(--ag-side-button-selected-underline-transition-duration);width:var(--ag-side-button-selected-underline-width)}:where(.ag-ltr) .ag-side-button:before{left:0}:where(.ag-rtl) .ag-side-button:before{right:0}.ag-side-button:hover{background-color:var(--ag-side-button-hover-background-color);color:var(--ag-side-button-hover-text-color)}.ag-side-button.ag-selected{background-color:var(--ag-side-button-selected-background-color);border-bottom:var(--ag-side-button-selected-border);border-top:var(--ag-side-button-selected-border);color:var(--ag-side-button-selected-text-color)}.ag-side-button.ag-selected:before{background-color:var(--ag-side-button-selected-underline-color)}.ag-side-button-button{align-items:center;display:flex;flex-direction:column;gap:var(--ag-spacing);position:relative;white-space:nowrap;width:100%;&:focus{box-shadow:none}}:where(.ag-ltr) .ag-side-button-button{padding:var(--ag-side-button-vertical-padding) var(--ag-side-button-right-padding) var(--ag-side-button-vertical-padding) var(--ag-side-button-left-padding)}:where(.ag-rtl) .ag-side-button-button{padding:var(--ag-side-button-vertical-padding) var(--ag-side-button-left-padding) var(--ag-side-button-vertical-padding) var(--ag-side-button-right-padding)}.ag-side-button-button:focus-visible{box-shadow:inset var(--ag-focus-shadow)}.ag-side-button-label{writing-mode:vertical-lr}@media (resolution <= 1.5x){.ag-side-button-label{font-family:"Segoe UI",var(--ag-font-family)}:where(.ag-ltr) .ag-side-button-label{transform:rotate(.05deg)}:where(.ag-rtl) .ag-side-button-label{transform:rotate(-.05deg)}}:where(.ag-ltr) .ag-side-bar-left,:where(.ag-rtl) .ag-side-bar-right{border-right:var(--ag-side-panel-border);:where(.ag-tool-panel-wrapper){border-left:var(--ag-side-panel-border)}}:where(.ag-ltr) .ag-side-bar-right,:where(.ag-rtl) .ag-side-bar-left{border-left:var(--ag-side-panel-border);:where(.ag-tool-panel-wrapper){border-right:var(--ag-side-panel-border)}}`,BA={tag:"div",cls:"ag-side-button",role:"presentation",children:[{tag:"button",ref:"eToggleButton",cls:"ag-button ag-side-button-button",role:"tab",attrs:{type:"button",tabindex:"-1","aria-expanded":"false"},children:[{tag:"div",ref:"eIconWrapper",cls:"ag-side-button-icon-wrapper",attrs:{"aria-hidden":"true"}},{tag:"span",ref:"eLabel",cls:"ag-side-button-label"}]}]},EA=class extends x{constructor(z){super();this.toolPanelDef=z,this.eToggleButton=j,this.eIconWrapper=j,this.eLabel=j}getToolPanelId(){return this.toolPanelDef.id}postConstruct(){this.setTemplate(BA,[]),this.setLabel(),this.setIcon(),this.addManagedElementListeners(this.eToggleButton,{click:this.onButtonPressed.bind(this)}),this.eToggleButton.setAttribute("id",`ag-${this.getCompId()}-button`)}setLabel(){let z=this.toolPanelDef,J=this.getLocaleTextFunc()(z.labelKey,z.labelDefault);this.eLabel.textContent=J}setIcon(){this.eIconWrapper.insertAdjacentElement("afterbegin",h(this.toolPanelDef.iconKey,this.beans))}onButtonPressed(){this.dispatchLocalEvent({type:"toggleButtonClicked"})}setSelected(z){this.toggleCss("ag-selected",z),j0(this.eToggleButton,z)}},KA={tag:"div",cls:"ag-side-buttons",role:"tablist"},FA=class extends x{constructor(){super(KA);this.buttonComps=[]}postConstruct(){this.addManagedElementListeners(this.getFocusableElement(),{keydown:this.handleKeyDown.bind(this)})}handleKeyDown(z){if(z.key!==k.TAB||!z.shiftKey)return;if(_4(this.beans,!0)){z.preventDefault();return}l0(z)}setActiveButton(z){for(let J of this.buttonComps)J.setSelected(z===J.getToolPanelId())}addButtonComp(z){let J=this.createBean(new EA(z));return this.buttonComps.push(J),this.appendChild(J),J.addEventListener("toggleButtonClicked",()=>{this.dispatchLocalEvent({type:"sideBarButtonClicked",toolPanelId:z.id})}),J}clearButtons(){this.buttonComps=this.destroyBeans(this.buttonComps),J0(this.getGui())}destroy(){this.clearButtons(),super.destroy()}},LA={selector:"AG-SIDE-BAR-BUTTONS",component:FA},qq={id:"columns",labelDefault:"Columns",labelKey:"columns",iconKey:"columnsToolPanel",toolPanel:"agColumnsToolPanel"},Gq={id:"filters",labelDefault:"Filters",labelKey:"filters",iconKey:"filtersToolPanel",toolPanel:"agFiltersToolPanel"},DA={id:"filters-new",labelDefault:"Filters",labelKey:"filters",iconKey:"filtersToolPanel",toolPanel:"agNewFiltersToolPanel"},e2={columns:qq,filters:Gq,"filters-new":DA};function z7(z){if(!z)return;if(z===!0)return{toolPanels:[qq,Gq],defaultToolPanel:"columns"};if(typeof z==="string")return z7([z]);if(Array.isArray(z)){let J=[];for(let Q of z){let Z=e2[Q];if(!Z){V(215,{key:Q,defaultByKey:e2});continue}J.push(Z)}if(J.length===0)return;return{toolPanels:J,defaultToolPanel:J[0].id}}return{toolPanels:MA(z.toolPanels),defaultToolPanel:z.defaultToolPanel,hiddenByDefault:z.hiddenByDefault,position:z.position,hideButtons:z.hideButtons}}function MA(z){let J=[];if(!z)return J;return z.forEach((Q)=>{let Z=kA(Q);if(!Z)return;J.push(Z)}),J}function kA(z){if(typeof z!=="string")return z;if(e2[z])return e2[z];return V(215,{key:z,defaultByKey:e2}),null}var fA=class extends x{constructor(){super({tag:"div",cls:"ag-tool-panel-horizontal-resize"});this.minWidth=100,this.maxWidth=null}postConstruct(){let z=this.beans.horizontalResizeSvc.addResizeBar({eResizeBar:this.getGui(),dragStartPixels:1,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this),onResizeEnd:this.onResizeEnd.bind(this)});this.addDestroyFunc(z),this.inverted=this.gos.get("enableRtl")}dispatchResizeEvent(z,J,Q){this.eventSvc.dispatchEvent({type:"toolPanelSizeChanged",width:Q,started:z,ended:J})}onResizeStart(){this.startingWidth=this.elementToResize.offsetWidth,this.dispatchResizeEvent(!0,!1,this.startingWidth)}onResizeEnd(z){return this.onResizing(z,!0)}onResizing(z,J=!1){let Q=this.inverted?-1:1,Z=Math.max(this.minWidth,Math.floor(this.startingWidth-z*Q));if(this.maxWidth!=null)Z=Math.min(this.maxWidth,Z);this.elementToResize.style.setProperty("--ag-horizontal-size",`${Z}px`),this.dispatchResizeEvent(!1,J,Z)}};function SA(z,J,Q){return z.getCompDetails(J,VA,void 0,Q,!0)}var VA={name:"toolPanel",optionalMethods:["refresh","getState"]},RA={tag:"div",cls:"ag-tool-panel-wrapper",role:"tabpanel",children:[{tag:"div",cls:"ag-tool-panel-content",ref:"eContent"}]},AA=class extends x{constructor(){super(RA);this.eContent=j,this.animationId=0,this.defParent=null}postConstruct(){let z=this.getGui(),J=this.resizeBar=this.createManagedBean(new fA);z.setAttribute("id",`ag-${this.getCompId()}`),J.elementToResize=z,this.appendChild(J)}getToolPanelId(){return this.toolPanelId}getDefParent(){return this.defParent}setDefParent(z){this.defParent=z}setToolPanelDef(z,J){let{id:Q,minWidth:Z,maxWidth:$,width:X,parent:Y}=z;if(this.toolPanelId=Q,this.defParent=Y??null,X)this.getGui().style.setProperty("--ag-side-bar-panel-width",`${X}px`);let q=SA(this.beans.userCompFactory,z,J);if(q==null)return!1;let G=q.newAgStackInstance();this.params=q.params,G.then(this.setToolPanelComponent.bind(this));let U=this.resizeBar;if(Z!=null)U.minWidth=Z;if($!=null)U.maxWidth=$;return!0}setToolPanelComponent(z){this.toolPanelCompInstance=z;let{eContent:J}=this;J.appendChild(z.getGui()),this.addDestroyFunc(()=>{this.destroyBean(z)})}getToolPanelInstance(){return this.toolPanelCompInstance}setResizerSizerSide(z){let J=this.gos.get("enableRtl"),Q=z==="left",Z=J?Q:!Q;this.resizeBar.inverted=Z}refresh(){this.toolPanelCompInstance?.refresh(this.params)}animateDisplayed(z){if(this.isDisplayed()===z)return;let J=++this.animationId,{eContent:Q}=this,Z=()=>{if(this.animationId===J)$.classList.remove("ag-tool-panel-animating"),Q.style.width="",$.style.width=""},$=this.getGui(),X=$.offsetWidth;this.setDisplayed(z),$.classList.add("ag-tool-panel-animating");let Y=getComputedStyle($).transitionDuration;if(!parseFloat(Y)){Z();return}$.style.transition="none",$.style.width="",Q.style.width=`${Q.offsetWidth}px`,$.style.width=`${X}px`;let q=$.offsetWidth;$.style.transition="",$.style.width=z?"":"0";let G=setTimeout(Z,100);$.addEventListener("transitionstart",()=>clearTimeout(G),{once:!0}),$.addEventListener("transitionend",Z,{once:!0})}},jA={tag:"div",cls:"ag-side-bar ag-unselectable",children:[{tag:"ag-side-bar-buttons",ref:"sideBarButtons"}]},OA=class extends x{constructor(){super(jA,[LA]);this.sideBarButtons=j,this.toolPanelWrappers=[],this.registerCSS(WA)}postConstruct(){this.sideBarButtons.addEventListener("sideBarButtonClicked",this.onToolPanelButtonClicked.bind(this));let{beans:z,gos:J}=this,{sideBar:Q}=J.get("initialState")??{};this.setSideBarDef({sideBarDef:z7(J.get("sideBar")),sideBarState:Q}),this.addManagedPropertyListener("sideBar",()=>this.setState()),z.sideBar.comp=this;let Z=this.getFocusableElement();this.createManagedBean(new Jz(Z,{onTabKeyDown:this.onTabKeyDown.bind(this),handleKeyDown:this.handleKeyDown.bind(this)})),Tz(z,this,Z),this.addManagedPropertyListener("enableAdvancedFilter",this.onAdvancedFilterChanged.bind(this))}getFocusableContainerName(){return"sideBar"}onTabKeyDown(z){if(z.defaultPrevented)return;let{beans:J,sideBarButtons:Q}=this,Z=this.getGui(),$=Q.getGui(),X=n(J),Y=Z.querySelector(".ag-tool-panel-wrapper:not(.ag-hidden)"),q=z.target,G=z.shiftKey;if(!Y){if(_4(J,G,!0))return z.preventDefault(),!0;return z$(z),!1}if($.contains(X)){if(E0(Y,G))z.preventDefault();return}if(!G)return;let U=null;if(Y.contains(X))U=O0(J,Y,void 0,!0);else if(Yq(Y,q))U=e5(Y,q);if(!U)U=$.querySelector(".ag-selected button"),U=B0(U)?U:null;if(U&&U!==z.target)z.preventDefault(),U.focus()}handleKeyDown(z){let J=n(this.beans),Q=this.sideBarButtons;if(!Q.getGui().contains(J))return;let Z=Q.getGui(),$=Array.prototype.slice.call(Z.querySelectorAll(".ag-side-button")),X=$.findIndex((G)=>G.contains(J)),Y=null;switch(z.key){case k.LEFT:case k.UP:Y=Math.max(0,X-1);break;case k.RIGHT:case k.DOWN:Y=Math.min(X+1,$.length-1);break}if(Y===null)return;let q=$[Y].querySelector("button");if(q)q.focus(),z.preventDefault()}onToolPanelButtonClicked(z){let J=z.toolPanelId;if(this.openedItem()===J)this.openToolPanel(void 0,"sideBarButtonClicked");else this.openToolPanel(J,"sideBarButtonClicked")}clearDownUi(){this.sideBarButtons.clearButtons(),this.destroyToolPanelWrappers()}setSideBarDef({sideBarDef:z,sideBarState:J,existingToolPanelWrappers:Q}){if(this.setDisplayed(!1),this.sideBar=z,z)this.sideBarButtons.setDisplayed(!z.hideButtons);if(z?.toolPanels){let Z=z.toolPanels;if(this.createToolPanelsAndSideButtons(Z,J,Q),!this.toolPanelWrappers.length)return;let $=J?J.visible:!z.hiddenByDefault;if(this.setDisplayed($),this.setSideBarPosition(J?J.position:z.position),$)if(J){let{openToolPanel:X}=J;if(X)this.openToolPanel(X,"sideBarInitializing")}else this.openToolPanel(z.defaultToolPanel,"sideBarInitializing")}}getDef(){return this.sideBar}setSideBarPosition(z){if(!z)z="right";this.position=z;let J=z==="left",Q=J?"right":"left";this.toggleCss("ag-side-bar-left",J),this.toggleCss("ag-side-bar-right",!J);for(let Z of this.toolPanelWrappers)Z.setResizerSizerSide(Q);return this.dispatchSideBarUpdated(),this}setDisplayed(z,J){super.setDisplayed(z,J),this.dispatchSideBarUpdated()}getState(){let z={};for(let J of this.toolPanelWrappers)z[J.getToolPanelId()]=J.getToolPanelInstance()?.getState?.();return{visible:this.isDisplayed(),position:this.position,openToolPanel:this.openedItem(),toolPanels:z}}createToolPanelsAndSideButtons(z,J,Q){for(let Z of z)this.createToolPanelAndSideButton(Z,J?.toolPanels?.[Z.id],Q?.[Z.id])}validateDef(z){let{id:J,toolPanel:Q}=z;if(J==null)return V(212),!1;if(LY(Q)){if(this.beans.filterManager?.isAdvFilterEnabled())return V(213),!1}return!0}createToolPanelAndSideButton(z,J,Q){if(!this.validateDef(z)){this.destroyBean(Q);return}let Z;if(Q)Z=Q,Z.setDefParent(z.parent??null);else if(Z=this.createBean(new AA),!Z.setToolPanelDef(z,C(this.gos,{initialState:J,onStateUpdated:()=>this.dispatchSideBarUpdated()})))return;Z.setDisplayed(!1),this.renderToolPanelUnderParent(Z,z.parent),this.toolPanelWrappers.push(Z);let $=this.sideBarButtons.addButtonComp(z);WZ($.eToggleButton,Z.getGui())}refresh(){for(let z of this.toolPanelWrappers)z.refresh()}renderToolPanelUnderParent(z,J){let Q=z.getGui();if(J)this.beans.environment.applyThemeClasses(J,["ag-external","ag-tool-panel-external"]),Q.classList.add(this.gos.get("enableRtl")?"ag-rtl":"ag-ltr");let Z=J??z.getDefParent()??this.getGui();if(Q.parentElement!==Z)Z.appendChild(Q)}getWrapper(z){return this.toolPanelWrappers.find((J)=>J.getToolPanelId()===z)}openToolPanel(z,J="api",Q){let Z=this.openedItem(),X=!!z&&!!Z||J==="sideBarInitializing";for(let G of this.toolPanelWrappers){let U=z===G.getToolPanelId();if(U)this.renderToolPanelUnderParent(G,Q??null);if(X)G.setDisplayed(U);else G.animateDisplayed(U)}let Y=this.openedItem();if(Z!==Y)this.sideBarButtons.setActiveButton(z),this.raiseToolPanelVisibleEvent(z,Z??void 0,J)}getToolPanelInstance(z){let J=this.getWrapper(z);if(!J){V(214,{key:z});return}return J.getToolPanelInstance()}raiseToolPanelVisibleEvent(z,J,Q){let Z=!!z&&!!J,$=this.eventSvc;if(J)$.dispatchEvent({type:"toolPanelVisibleChanged",source:Q,key:J,visible:!1,switchingToolPanel:Z});if(z)$.dispatchEvent({type:"toolPanelVisibleChanged",source:Q,key:z,visible:!0,switchingToolPanel:Z})}close(z="api"){this.openToolPanel(void 0,z)}isToolPanelShowing(){return!!this.openedItem()}openedItem(){let z=null;for(let J of this.toolPanelWrappers)if(J.isDisplayed())z=J.getToolPanelId();return z}setState(z){let J=z7(this.gos.get("sideBar")),Q={};if(J&&this.sideBar)J.toolPanels?.forEach((Z)=>{let{id:$}=Z;if(!$)return;let X=this.sideBar.toolPanels?.find((U)=>U.id===$);if(!X||Z.toolPanel!==X.toolPanel)return;let Y=this.getWrapper($);if(!Y)return;let q=C(this.gos,{...Z.toolPanelParams??{},initialState:z?.toolPanels?.[$],onStateUpdated:()=>this.dispatchSideBarUpdated()});if(Y.getToolPanelInstance()?.refresh(q)!==!0)return;this.toolPanelWrappers=this.toolPanelWrappers.filter((U)=>U!==Y),R0(Y.getGui()),Q[$]=Y});this.clearDownUi(),this.setSideBarDef({sideBarDef:J,sideBarState:z,existingToolPanelWrappers:Q})}dispatchSideBarUpdated(){this.eventSvc.dispatchEvent({type:"sideBarUpdated"})}destroyToolPanelWrappers(){for(let z of this.toolPanelWrappers)R0(z.getGui()),this.destroyBean(z);this.toolPanelWrappers.length=0}onAdvancedFilterChanged(){if(this.sideBar?.toolPanels?.some((J)=>LY(typeof J==="string"?J:J.toolPanel)))this.setState()}destroy(){this.destroyToolPanelWrappers(),super.destroy()}};function LY(z){return z==="agFiltersToolPanel"||z==="agNewFiltersToolPanel"}var PA={selector:"AG-SIDE-BAR",component:OA},TA=class extends S{constructor(){super(...arguments);this.beanName="sideBar"}getSelector(){return PA}},q7={moduleName:"SideBar",version:$0,beans:[TA],apiFunctions:{isSideBarVisible:QA,setSideBarVisible:ZA,setSideBarPosition:$A,openToolPanel:XA,closeToolPanel:YA,getOpenedToolPanel:qA,refreshToolPanel:GA,isToolPanelShowing:UA,getToolPanelInstance:_A,getSideBar:HA},dependsOn:[C0,Q5]},vA='.ag-menu-list{cursor:default;display:table;padding:var(--ag-spacing) 0;width:100%}.ag-menu-option,.ag-menu-separator{display:table-row}.ag-menu-option-part,.ag-menu-separator-part{display:table-cell;vertical-align:middle}.ag-menu-option{cursor:pointer;font-weight:500}:where(.ag-ltr) :where(.ag-menu-option-popup-pointer) .ag-icon{text-align:right}:where(.ag-rtl) :where(.ag-menu-option-popup-pointer) .ag-icon{text-align:left}.ag-menu-option-text{white-space:nowrap}.ag-menu-option-custom{display:contents}.ag-compact-menu-option{display:flex;flex-wrap:nowrap;width:100%}.ag-compact-menu-option-text{flex:1 1 auto;white-space:nowrap}.ag-menu-separator{height:calc(var(--ag-spacing)*2 + 1px)}.ag-menu-separator-part:after{border-top:solid var(--ag-border-width) var(--ag-menu-separator-color);content:"";display:block}.ag-compact-menu-option-active,.ag-menu-option-active{background-color:var(--ag-row-hover-color)}.ag-compact-menu-option-part,.ag-menu-option-part{line-height:var(--ag-icon-size);padding:calc(var(--ag-spacing) + 2px) 0}.ag-compact-menu-option-disabled,.ag-menu-option-disabled{cursor:not-allowed;opacity:.5}.ag-compact-menu-option-icon,.ag-menu-option-icon{width:var(--ag-icon-size)}:where(.ag-ltr) .ag-compact-menu-option-icon,:where(.ag-ltr) .ag-menu-option-icon{padding-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-compact-menu-option-icon,:where(.ag-rtl) .ag-menu-option-icon{padding-right:calc(var(--ag-spacing)*2)}.ag-compact-menu-option-text,.ag-menu-option-text{padding-left:calc(var(--ag-spacing)*2);padding-right:calc(var(--ag-spacing)*2)}:where(.ag-ltr) .ag-compact-menu-option-shortcut,:where(.ag-ltr) .ag-menu-option-shortcut{padding-right:var(--ag-spacing)}:where(.ag-rtl) .ag-compact-menu-option-shortcut,:where(.ag-rtl) .ag-menu-option-shortcut{padding-left:var(--ag-spacing)}:where(.ag-ltr) .ag-compact-menu-option-popup-pointer,:where(.ag-ltr) .ag-menu-option-popup-pointer{padding-right:var(--ag-spacing)}:where(.ag-rtl) .ag-compact-menu-option-popup-pointer,:where(.ag-rtl) .ag-menu-option-popup-pointer{padding-left:var(--ag-spacing)}.ag-menu-column-select-wrapper{height:265px;overflow:auto;:where(.ag-column-select){height:100%}}.ag-menu:where(.ag-tabs){min-width:290px}.ag-context-menu-loading-icon{pointer-events:none;position:absolute}',Uq=class extends nR{constructor(){super({warnNoIcon:()=>V(227)})}},G7={moduleName:"MenuItem",version:$0,userComponents:{agMenuItem:Uq},icons:{check:"tick",subMenuOpen:"small-right",subMenuOpenRtl:"small-left"},css:[vA]},IA=".ag-column-select{display:flex;flex:3 1 0px;flex-direction:column;overflow:hidden;position:relative}.ag-column-select-header{flex:none;height:var(--ag-header-height);padding-left:var(--ag-widget-container-horizontal-padding);padding-right:var(--ag-widget-container-horizontal-padding)}.ag-column-select-column,.ag-column-select-column-group,.ag-column-select-header{align-items:center;display:flex;gap:var(--ag-widget-horizontal-spacing);position:relative}.ag-column-select-column,.ag-column-select-column-group{height:100%}:where(.ag-ltr) .ag-column-select-column,:where(.ag-ltr) .ag-column-select-column-group{padding-left:calc(var(--ag-indentation-level)*var(--ag-column-select-indent-size))}:where(.ag-rtl) .ag-column-select-column,:where(.ag-rtl) .ag-column-select-column-group{padding-right:calc(var(--ag-indentation-level)*var(--ag-column-select-indent-size))}.ag-column-select-column-group:where(:not(:last-child)),.ag-column-select-column:where(:not(:last-child)){margin-bottom:var(--ag-widget-vertical-spacing)}.ag-column-select-header-icon{border-radius:var(--ag-border-radius);cursor:pointer;height:var(--ag-icon-size);position:relative;width:var(--ag-icon-size);&:focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-column-select-header-filter-wrapper{flex:1 1 auto}.ag-column-select-header-filter{width:100%}.ag-column-select-list{flex:1 1 0px;overflow:hidden}:where(.ag-ltr) .ag-column-select-add-group-indent{margin-left:calc(var(--ag-icon-size) + var(--ag-spacing)*1.5)}:where(.ag-rtl) .ag-column-select-add-group-indent{margin-right:calc(var(--ag-icon-size) + var(--ag-spacing)*1.5)}.ag-column-select-column-group-readonly,.ag-column-select-column-readonly{opacity:.5;pointer-events:none;.ag-icon{opacity:.5}&.ag-icon-grip{opacity:.35}}.ag-column-select-column-readonly{&.ag-icon-grip,.ag-icon-grip{opacity:.35}}.ag-column-select-virtual-list-viewport{padding:calc(var(--ag-widget-container-vertical-padding)*.5) 0}.ag-column-select-virtual-list-item{padding:0 var(--ag-widget-container-horizontal-padding)}.ag-column-select-column-label{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-column-select-checkbox{display:flex}",CA=300,yA={tag:"div",cls:"ag-column-select-header",role:"presentation",children:[{tag:"div",ref:"eExpand",cls:"ag-column-select-header-icon"},{tag:"ag-checkbox",ref:"eSelect",cls:"ag-column-select-header-checkbox"},{tag:"ag-input-text-field",ref:"eFilterTextField",cls:"ag-column-select-header-filter-wrapper"}]},bA=class extends x{constructor(){super(yA,[K4,Zz]);this.eExpand=j,this.eSelect=j,this.eFilterTextField=j}postConstruct(){this.createExpandIcons(),this.addManagedListeners(this.eExpand,{click:this.onExpandClicked.bind(this),keydown:(J)=>{if(J.key===k.SPACE)J.preventDefault(),this.onExpandClicked()}}),this.addManagedElementListeners(this.eSelect.getInputElement(),{click:this.onSelectClicked.bind(this)}),this.addManagedPropertyListener("functionsReadOnly",()=>this.onFunctionsReadOnlyPropChanged()),this.eFilterTextField.setAutoComplete(!1).onValueChange(()=>this.onFilterTextChanged()),this.addManagedEventListeners({newColumnsLoaded:this.showOrHideOptions.bind(this)});let z=this.getLocaleTextFunc();this.eSelect.setInputAriaLabel(z("ariaColumnSelectAll","Toggle All Columns Visibility")),this.eFilterTextField.setInputAriaLabel(z("ariaFilterColumnsInput","Filter Columns Input")),this.activateTabIndex([this.eExpand])}onFunctionsReadOnlyPropChanged(){let z=this.gos.get("functionsReadOnly");this.eSelect.setReadOnly(z),this.eSelect.toggleCss("ag-column-select-column-readonly",z)}init(z){this.params=z;let J=this.gos.get("functionsReadOnly");if(this.eSelect.setReadOnly(J),this.eSelect.toggleCss("ag-column-select-column-readonly",J),this.beans.colModel.ready)this.showOrHideOptions()}createExpandIcons(){let z=this.beans;this.eExpand.appendChild(this.eExpandChecked=h("columnSelectOpen",z)),this.eExpand.appendChild(this.eExpandUnchecked=h("columnSelectClosed",z)),this.eExpand.appendChild(this.eExpandIndeterminate=h("columnSelectIndeterminate",z)),this.setExpandState(0)}showOrHideOptions(){let z=this.params,J=!z.suppressColumnFilter,Q=!z.suppressColumnSelectAll,Z=!z.suppressColumnExpandAll,$=!!this.beans.colModel.colDefCols?.treeDepth,X=this.getLocaleTextFunc();this.eFilterTextField.setInputPlaceholder(X("searchOoo","Search...")),w(this.eFilterTextField.getGui(),J),w(this.eSelect.getGui(),Q),w(this.eExpand,Z&&$)}onFilterTextChanged(){if(!this.onFilterTextChangedDebounced)this.onFilterTextChangedDebounced=i0(this,()=>{let z=this.eFilterTextField.getValue();this.dispatchLocalEvent({type:"filterChanged",filterText:z})},CA);this.onFilterTextChangedDebounced()}onSelectClicked(){this.dispatchLocalEvent({type:this.selectState?"unselectAll":"selectAll"})}onExpandClicked(){this.dispatchLocalEvent({type:this.expandState===0?"collapseAll":"expandAll"})}setExpandState(z){this.expandState=z,w(this.eExpandChecked,z===0),w(this.eExpandUnchecked,z===1),w(this.eExpandIndeterminate,z===2)}setSelectionState(z){this.selectState=z,this.eSelect.setValue(this.selectState)}},xA={selector:"AG-PRIMARY-COLS-HEADER",component:bA};function J2(z){return!!z&&typeof z.children<"u"}function bz(z){return J2(z)?z.groupId:z.colId}function _q(z,J,Q){let Z=(Y,q)=>{let U=Y.children.map(bz).includes(bz(q)),_=y(Y.children),H=_&&bz(_)!==bz(q);return U&&H};if(!J2(z))return!0;let $=z,X=Q;if(Z($,X))return $.children.push(X),!0;if($.groupId===J){if(!$.children.map(bz).includes(bz(X)))return $.children.push(X),!0}for(let Y=$.children.length-1;Y>=0;Y--)if(_q($.children[Y],J,Q))break;return!1}function Hq(z){let J=($,X)=>{return J2($)&&J2(X)&&bz($)===bz(X)},Q=($,X)=>{if(!J2(X))return $;let Y=$,q=X;if(q.children&&q.groupId){if(_q(Y,q.groupId,q.children[0]))return Y}for(let G of q.children)Q(Y,G);return Y},Z=[];for(let $=1;$<=z.length;$++){let X=z[$-1],Y=z[$];if(J(X,Y))z[$]=Q(X,Y);else Z.push(X)}return Z}function wA(z,J){let Q=[],Z=(X,Y)=>{if(J2(X)){let q=X,G=typeof q.groupId<"u"?q.groupId:q.headerName,U=new rz(q,G,!1,Y),_=[];for(let H of q.children){let W=Z(H,Y+1);if(W)_.push(W)}return U.setChildren(_),U}else{let q=X,G=q.colId?q.colId:q.field,U=z.getColDefCol(G);if(!U)Q.push(q);return U}},$=[];for(let X of J){let Y=Z(X,0);if(Y)$.push(Y)}if(Q.length>0)V(217,{invalidColIds:Q});return $}function NA(z,J){let Q=Wq(hA(z)),Z=Hq(Q);J(Z)}function gA(z,J){let Q=Wq(z),Z=Hq(Q);J(Z)}function Wq(z){let J=(Q,Z)=>{let $;if(G0(Q))if(Q.isPadding())$=Z;else{let Y=Object.assign({},Q.getColGroupDef());Y.groupId=Q.getGroupId(),Y.children=[Z],$=Y}else{let Y=Object.assign({},Q.getColDef());Y.colId=Q.getColId(),$=Y}let X=Q.getOriginalParent();if(X)return J(X,$);else return $};return z.map((Q)=>J(Q,Q.getColDef()))}function hA(z){return z.getCols().filter((J)=>{let Q=J.getColDef();return J.isPrimary()&&!Q.showRowGroup})}var DY=class{constructor(z,J,Q,Z=!1,$){if(this.displayName=z,this.depth=Q,this.group=Z,this.localEventService=new R4,Z)this.columnGroup=J,this._expanded=$,this.children=[];else this.column=J}get expanded(){return!!this._expanded}set expanded(z){if(z===this._expanded)return;this._expanded=z,this.localEventService.dispatchEvent({type:"expandedChanged"})}addEventListener(z,J){this.localEventService.addEventListener(z,J)}removeEventListener(z,J){this.localEventService.removeEventListener(z,J)}};function p(z){return!!z?.buttons?.includes("apply")}function h0(z,J){if(!p(J))return;let Q=z.sideBar?.comp.openedItem();if(!Q)return;z.sideBar?.comp.getToolPanelInstance(Q)?.refreshDeferredUi()}function Bq(z,J,Q,Z,$){let X=uA(J);Eq(z,X,Q,Z,$)}function Eq(z,J,Q,Z,$){if(z.columnStateUpdateStrategy.getPivotMode(p($)))cA(z,J,Q,Z,$);else mA(z,J,Q,Z,$)}function uA(z){let J=[],Q=(Z)=>{for(let $ of Z){if(!$.passesFilter)continue;if($.group)Q($.children);else J.push($.column)}};return Q(z),J}function mA(z,J,Q,Z,$){let X=z.columnStateUpdateStrategy,Y=[];for(let q of J){if(q.getColDef().lockVisible)continue;if(X.isColumnVisibleInToolPanel(p($),q)!==Q)Y.push({colId:q.getId(),hide:!Q})}X.applyColumnState(p($),Y,Z),h0(z,$)}function cA(z,J,Q,Z,$){iA(z,J,Q,Z,$)}function iA(z,J,Q,Z,$){let X=z.columnStateUpdateStrategy,Y=[],U=Q?(_)=>{if(X.isColumnSelectedInPivotModeToolPanel(p($),_))return;if(_.isAllowValue()){let H=typeof _.getAggFunc()==="string"?_.getAggFunc():z.aggFuncSvc?.getDefaultAggFunc(_);Y.push({colId:_.getId(),aggFunc:H})}else if(_.isAllowRowGroup())Y.push({colId:_.getId(),rowGroup:!0});else if(_.isAllowPivot())Y.push({colId:_.getId(),pivot:!0})}:(_)=>{if(X.isColumnSelectedInPivotModeToolPanel(p($),_))Y.push({colId:_.getId(),pivot:!1,rowGroup:!1,aggFunc:null})};J.forEach(U),X.applyColumnState(p($),Y,Z),h0(z,$)}function Kq(z,J){let{columns:Q,visibleState:Z,pivotState:$,eventType:X}=J,Y=z.columnStateUpdateStrategy,q=Y.getPivotMode(p(J)),G=Q.map((U)=>{let _=U.getColId();if(q){let H=$?.[_];return{colId:_,pivot:H?.pivot,rowGroup:H?.rowGroup,aggFunc:H?.aggFunc}}else return{colId:_,hide:!Z?.[_]}});Y.applyColumnState(p(J),G,X),h0(z,J)}function pA(z){return{pivot:z.isPivotActive(),rowGroup:z.isRowGroupActive(),aggFunc:z.isValueActive()?z.getAggFunc():void 0}}function Fq(z,J,Q){if(!Q)return pA(z);let Z=J.getRowGroupColumns(Q).includes(z),$=J.getPivotColumns(Q).includes(z),X=J.getValueColumns(Q).includes(z);return{pivot:$,rowGroup:Z,aggFunc:X?J.getColumnAggFunc(Q,z):void 0}}var Lq=(z,J)=>{if(!J)return[];let Q=z;for(let Z=0,$=J.length;Z<$&&Q;++Z)Q=Q[J[Z]];return Array.isArray(Q)?Q:[]},z2=(z,J,Q)=>{let Z=z.aggData;if(Z===J)return;if(z.aggData=J,z.__localEventService)nA(z,Z,J,Q)},MY=(z,J,Q)=>{z2(z,J,Q);let Z=z.pinnedSibling;if(Z)z2(Z,J,Q);let $=z.sibling;if($){z2($,J,Q);let X=$.pinnedSibling;if(X)z2(X,J,Q)}},nA=(z,J,Q,Z)=>{if(!Q){if(!J)return;let Y=Object.keys(J);for(let q=0,G=Y.length;q{if(!z)return;let Z=z.group;if(Z===Q)return;if(z.group=Q,z.updateHasChildren(),Z&&!Q)z2(z,null,J.colModel),z.setAllChildrenCount(null);J.selectionSvc?.updateRowSelectable(z),z.dispatchRowEvent("groupChanged")},Dq=(z,J,Q)=>{kY(z,J,Q),kY(z.pinnedSibling,J,Q)},Q6=(z,J)=>{let{gos:Q,rowGroupColsSvc:Z}=J;if(!Z||!z)return!1;let $=Q.get("groupLockGroupColumns");if(!z.isRowGroupActive()||$===0)return!1;if($===-1)return!0;let X=Z.columns.findIndex((Y)=>Y.getColId()===z.getColId());return $>X},z6=(z,J,Q)=>{let $=z(J,`${J==="groupBy"?"Group by":"Un-Group by"} ${Q}`,[Q]);if($.indexOf(Q)>=0)return $;else return`${$} ${Q}`};function dA(z){let J=m0(z),Q="getSelection"in J?J.getSelection():null,Z=[];for(let $=0;$<(Q?.rangeCount??0);$++){let X=Q?.getRangeAt($);if(X)Z.push(X)}return{selection:Q,ranges:Z}}function rA(z,J){if(!z.gos.get("enableCellTextSelection"))return J();if(!oz()&&!jz())return J();let{selection:Z,ranges:$}=dA(z);J(),Z?.removeAllRanges();for(let X of $)Z?.addRange(X)}var tA={name:"menuItem",optionalMethods:["setActive","select","setExpanded","configureDefaults"]},U7={getMenuItemComp:(z,J,Q)=>{return z.userCompFactory.getCompDetails(J,tA,"agMenuItem",C(z.gos,Q),!0)?.newAgStackInstance()??N.resolve()},getPostProcessPopupParams:({column:z,node:J})=>({column:z,rowNode:J}),preserveRangesWhile:rA,stopPropagationCallbacks:Oz,warnNoItem:(z)=>{V(228,{menuItemOrString:z})}},sA=class extends o5{constructor(){super(U7)}},Mq=class extends X7{constructor(z,J={column:null,node:null,value:null}){super(z,J,U7)}},kq=class extends x{constructor(z,J,Q,Z={}){super({tag:"div",cls:"ag-menu"});this.column=z,this.mouseEventOrTouch=J,this.parentEl=Q,this.params=Z,this.displayName=null}postConstruct(){let{column:z,beans:{colNames:J}}=this;this.initializeProperties(z);let Q;if(G4(z))Q=J.getDisplayNameForColumn(z,"columnToolPanel");else Q=J.getDisplayNameForProvidedColumnGroup(null,z,"columnToolPanel");if(this.displayName=Q,this.buildMenuItemMap(),this.isActive()){let Z=this.mouseEventOrTouch;if("preventDefault"in Z)Z.preventDefault();let $=this.getMappedMenuItems();if($.length===0)return;this.displayContextMenu($)}}initializeProperties(z){let J=this.beans.columnStateUpdateStrategy,Q;if(G0(z))Q=z.getLeafColumns();else Q=[z];this.columns=Q;let Z=J.getPivotMode(p(this.params));this.allowScrollIntoView=!Z&&Q.some(this.isColumnValidForScrollIntoView),this.allowGrouping=Q.some(($)=>$.isPrimary()&&$.isAllowRowGroup()),this.allowValues=Q.some(($)=>$.isPrimary()&&$.isAllowValue()),this.allowPivoting=Z&&Q.some(($)=>$.isPrimary()&&$.isAllowPivot())}buildMenuItemMap(){let z=this.getLocaleTextFunc(),{beans:J,displayName:Q}=this,Z=this.beans.columnStateUpdateStrategy,$=new Map;this.menuItemMap=$;let X=p(this.params),Y=Z.getPivotMode(X),q=new Set(Z.getRowGroupColumns(X).map((B)=>B.getColId())),G=new Set(Z.getValueColumns(X).map((B)=>B.getColId())),U=new Set(Z.getPivotColumns(X).map((B)=>B.getColId()));$.set("scrollIntoView",{allowedFunction:(B)=>!B.isPinned()&&!Y&&this.isColumnValidForScrollIntoView(B),activeFunction:()=>!1,activateLabel:()=>z("scrollColumnIntoView",`Scroll ${Q} into View`,[Q]),activateFunction:()=>{let B=this.columns.find(this.isColumnValidForScrollIntoView);if(B)this.beans.ctrlsSvc.getScrollFeature().ensureColumnVisible(B)},deActivateFunction:()=>{},addIcon:"ensureColumnVisible"});let _=(B)=>B.isPrimary()&&B.isAllowRowGroup()&&!Q6(B,J);$.set("rowGroup",{allowedFunction:_,activeFunction:(B)=>q.has(B.getColId()),activateLabel:()=>z6(z,"groupBy",Q),deactivateLabel:()=>z6(z,"ungroupBy",Q),activateFunction:()=>{let B=this.addColumnsToList(Z.getRowGroupColumns(X),_);Z.setRowGroupColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},deActivateFunction:()=>{let B=this.removeColumnsFromList(Z.getRowGroupColumns(X),_);Z.setRowGroupColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},addIcon:"menuAddRowGroup",removeIcon:"menuRemoveRowGroup"});let H=(B)=>B.isPrimary()&&B.isAllowValue();$.set("value",{allowedFunction:H,activeFunction:(B)=>G.has(B.getColId()),activateLabel:()=>z("addToValues",`Add ${Q} to values`,[Q]),deactivateLabel:()=>z("removeFromValues",`Remove ${Q} from values`,[Q]),activateFunction:()=>{let B=this.addColumnsToList(Z.getValueColumns(X),H);Z.setValueColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},deActivateFunction:()=>{let B=this.removeColumnsFromList(Z.getValueColumns(X),H);Z.setValueColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},addIcon:"valuePanel",removeIcon:"valuePanel"});let W=(B)=>Y&&B.isPrimary()&&B.isAllowPivot();$.set("pivot",{allowedFunction:W,activeFunction:(B)=>U.has(B.getColId()),activateLabel:()=>z("addToLabels",`Add ${Q} to labels`,[Q]),deactivateLabel:()=>z("removeFromLabels",`Remove ${Q} from labels`,[Q]),activateFunction:()=>{let B=this.addColumnsToList(Z.getPivotColumns(X),W);Z.setPivotColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},deActivateFunction:()=>{let B=this.removeColumnsFromList(Z.getPivotColumns(X),W);Z.setPivotColumns(X,B,"toolPanelUi"),h0(this.beans,this.params)},addIcon:"pivotPanel",removeIcon:"pivotPanel"})}isColumnValidForScrollIntoView(z){if(!z.isVisible())return!1;let Q=z.getParent();if(!Q)return!0;return Q.getDisplayedChildren()?.includes(z)??!0}addColumnsToList(z,J){return[...z].concat(this.columns.filter((Q)=>J(Q)&&!z.includes(Q)))}removeColumnsFromList(z,J){return z.filter((Q)=>!J(Q)||!this.columns.includes(Q))}displayContextMenu(z){let J=this.getGui(),Q=this.createBean(new Mq),Z=this.getLocaleTextFunc(),$=()=>{};J.appendChild(Q.getGui()),Q.addMenuItems(z),Q.addManagedListeners(Q,{closeMenu:()=>{this.parentEl.focus(),$()}});let X=this.beans.popupSvc,Y=X.addPopup({modal:!0,eChild:J,closeOnEsc:!0,afterGuiAttached:()=>E0(Q.getGui()),ariaLabel:Z("ariaLabelContextMenu","Context Menu"),closedCallback:(q)=>{if(q instanceof KeyboardEvent)this.parentEl.focus();this.destroyBean(Q)}});if(Y)$=Y.hideFunc;X.positionPopupUnderMouseEvent({type:"columnContextMenu",mouseEvent:this.mouseEventOrTouch,ePopup:J})}isActive(){return this.allowScrollIntoView||this.allowGrouping||this.allowValues||this.allowPivoting}getMappedMenuItems(){let z=[],{menuItemMap:J,columns:Q,displayName:Z,beans:$}=this;for(let X of J.values()){let Y=Q.some((G)=>X.allowedFunction(G)&&!X.activeFunction(G)),q=Q.some((G)=>X.allowedFunction(G)&&X.activeFunction(G));if(Y)z.push({name:X.activateLabel(Z),icon:h(X.addIcon,$,null),action:()=>X.activateFunction()});if(q&&X.removeIcon&&X.deactivateLabel)z.push({name:X.deactivateLabel(Z),icon:h(X.removeIcon,$,null),action:()=>X.deActivateFunction?.()})}return z}},lA={tag:"div",cls:"ag-column-select-column-group",children:[{tag:"span",ref:"eColumnGroupIcons",cls:"ag-column-group-icons",children:[{tag:"span",ref:"eGroupClosedIcon",cls:"ag-column-group-closed-icon"},{tag:"span",ref:"eGroupOpenedIcon",cls:"ag-column-group-opened-icon"}]},{tag:"ag-checkbox",ref:"cbSelect",cls:"ag-column-select-checkbox"},{tag:"span",ref:"eLabel",cls:"ag-column-select-column-label"}]},fq=class extends x{constructor(z,J,Q,Z,$){super();this.modelItem=z,this.allowDragging=J,this.eventType=Q,this.focusWrapper=Z,this.params=$,this.cbSelect=j,this.eLabel=j,this.eGroupOpenedIcon=j,this.eGroupClosedIcon=j,this.eColumnGroupIcons=j,this.processingColumnStateChange=!1;let{columnGroup:X,depth:Y,displayName:q}=z;this.columnGroup=X,this.columnDepth=Y,this.displayName=q}postConstruct(){this.setTemplate(lA,[K4]);let{beans:z,cbSelect:J,eLabel:Q,displayName:Z,columnDepth:$,modelItem:X,focusWrapper:Y,columnGroup:q}=this,{registry:G,gos:U}=z,_=h("columnDrag",z);this.eDragHandle=_,_.classList.add("ag-drag-handle","ag-column-select-column-group-drag-handle");let H=J.getGui(),W=J.getInputElement();H.after(_),W.setAttribute("tabindex","-1"),Q.textContent=Z??"",this.setupExpandContract(),this.addCss("ag-column-select-indent-"+$),this.getGui().style.setProperty("--ag-indentation-level",String($)),this.tooltipFeature=this.createOptionalManagedBean(G.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.focusWrapper,getLocation:()=>"columnToolPanelColumnGroup",shouldDisplayTooltip:t1(U,()=>Q)})),this.addManagedEventListeners({columnPivotModeChanged:this.onColumnStateChanged.bind(this)}),this.addManagedElementListeners(Q,{click:this.onLabelClicked.bind(this)}),this.addManagedListeners(J,{fieldValueChanged:this.onCheckboxChanged.bind(this)}),this.addManagedListeners(X,{expandedChanged:this.onExpandChanged.bind(this)});let B=new c0(this.getGui(),!1);this.addManagedListeners(B,{longTap:(K)=>this.onContextMenu(K.touchStart)}),this.addDestroyFunc(B.destroy.bind(B)),this.addManagedListeners(Y,{keydown:this.handleKeyDown.bind(this),contextmenu:this.onContextMenu.bind(this)}),this.setOpenClosedIcons(),this.setupDragging(),this.onColumnStateChanged(),this.addVisibilityListenersToAllChildren(),this.refreshAriaExpanded(),this.refreshAriaLabel(),this.setupTooltip();let E=BJ(q.getColGroupDef(),U,null,q);for(let K of E)this.toggleCss(K,!0)}getColumns(){return this.columnGroup.getLeafColumns()}setupTooltip(){let z=this.columnGroup.getColGroupDef();if(!z)return;let J=()=>this.tooltipFeature?.setTooltipAndRefresh(z.headerTooltip);J(),this.addManagedEventListeners({newColumnsLoaded:J})}handleKeyDown(z){switch(z.key){case k.LEFT:z.preventDefault(),this.modelItem.expanded=!1;break;case k.RIGHT:z.preventDefault(),this.modelItem.expanded=!0;break;case k.SPACE:if(z.preventDefault(),this.isSelectable())this.onSelectAllChanged(!this.isSelected());break}}onContextMenu(z){let{columnGroup:J,gos:Q}=this;if(Q.get("functionsReadOnly"))return;let Z=this.createBean(new kq(J,z,this.focusWrapper,this.params));this.addDestroyFunc(()=>{if(Z.isAlive())this.destroyBean(Z)})}addVisibilityListenersToAllChildren(){let z=this.onColumnStateChanged.bind(this);for(let J of this.columnGroup.getLeafColumns())this.addManagedListeners(J,{visibleChanged:z,columnValueChanged:z,columnPivotChanged:z,columnRowGroupChanged:z})}setupDragging(){if(!this.allowDragging){w(this.eDragHandle,!1);return}let z=this.beans,{gos:J,eventSvc:Q,dragAndDrop:Z}=z,$=!J.get("suppressDragLeaveHidesColumns"),X={type:E4.ToolPanel,eElement:this.eDragHandle,dragItemName:this.displayName,getDefaultIconName:()=>$?"hide":"notAllowed",getDragItem:()=>this.createDragItem(),onDragStarted:()=>{$=!J.get("suppressDragLeaveHidesColumns"),Q.dispatchEvent({type:"columnPanelItemDragStart",column:this.columnGroup})},onDragStopped:()=>{Q.dispatchEvent({type:"columnPanelItemDragEnd"})},onGridEnter:(Y)=>{if($)Kq(z,{columns:this.columnGroup.getLeafColumns(),visibleState:Y?.visibleState,pivotState:Y?.pivotState,eventType:this.eventType,buttons:this.params.buttons})},onGridExit:()=>{if($)this.onChangeCommon(!1)}};Z.addDragSource(X,!0),this.addDestroyFunc(()=>Z.removeDragSource(X))}createDragItem(){let z=this.columnGroup.getLeafColumns(),J={},Q={},Z=this.beans.columnStateUpdateStrategy,$=p(this.params);for(let X of z){let Y=X.getId();J[Y]=X.isVisible(),Q[Y]=Fq(X,Z,$)}return{columns:z,visibleState:J,pivotState:Q}}setupExpandContract(){let{beans:z,eGroupClosedIcon:J,eGroupOpenedIcon:Q,eColumnGroupIcons:Z}=this;J.appendChild(vz("columnSelectClosed",z,null)),Q.appendChild(vz("columnSelectOpen",z,null));let $=this.onExpandOrContractClicked.bind(this);this.addManagedElementListeners(J,{click:$}),this.addManagedElementListeners(Q,{click:$});let X=new c0(Z,!0);this.addManagedListeners(X,{tap:$}),this.addDestroyFunc(X.destroy.bind(X))}onLabelClicked(){let z=!this.cbSelect.getValue();this.onChangeCommon(z)}onCheckboxChanged(z){this.onChangeCommon(z.selected)}getVisibleLeafColumns(){let z=[],J=(Q)=>{for(let Z of Q)if(Z.passesFilter)if(Z.group)J(Z.children);else z.push(Z.column)};return J(this.modelItem.children),z}onChangeCommon(z){if(this.refreshAriaLabel(),this.processingColumnStateChange)return;Bq(this.beans,this.modelItem.children,z,this.eventType,this.params)}refreshAriaLabel(){let{cbSelect:z,focusWrapper:J,displayName:Q}=this,Z=this.getLocaleTextFunc(),$=Z("ariaColumnGroup","Column Group"),X=z.getValue(),Y=X===void 0?Z("ariaIndeterminate","indeterminate"):X?Z("ariaVisible","visible"):Z("ariaHidden","hidden"),q=Z("ariaToggleVisibility","Press SPACE to toggle visibility");_0(J,`${Q} ${$}`),z.setInputAriaLabel(`${q} (${Y})`),c1(J,z.getInputElement().id)}onColumnStateChanged(){let z=this.workOutSelectedValue(),J=this.workOutReadOnlyValue();this.processingColumnStateChange=!0;let Q=this.cbSelect;Q.setValue(z),Q.setReadOnly(J),this.toggleCss("ag-column-select-column-group-readonly",J),this.processingColumnStateChange=!1}workOutSelectedValue(){let J=this.beans.columnStateUpdateStrategy.getPivotMode(p(this.params)),Q=this.getVisibleLeafColumns(),Z=0,$=0;for(let X of Q)if(J||!X.getColDef().lockVisible)if(this.isColumnChecked(X))Z++;else $++;if(Z>0&&$>0)return;return Z>0}workOutReadOnlyValue(){let z=this.beans.columnStateUpdateStrategy.getPivotMode(p(this.params)),J=0;for(let Q of this.columnGroup.getLeafColumns())if(z){if(Q.isAnyFunctionAllowed())J++}else if(!Q.getColDef().lockVisible)J++;return J===0}isColumnChecked(z){let J=this.beans.columnStateUpdateStrategy;if(J.getPivotMode(p(this.params)))return J.isColumnSelectedInPivotModeToolPanel(p(this.params),z);return J.isColumnVisibleInToolPanel(p(this.params),z)}onExpandOrContractClicked(){let z=this.modelItem,J=z.expanded;z.expanded=!J}onExpandChanged(){this.setOpenClosedIcons(),this.refreshAriaExpanded()}setOpenClosedIcons(){let z=this.modelItem.expanded;w(this.eGroupClosedIcon,!z),w(this.eGroupOpenedIcon,z)}refreshAriaExpanded(){j0(this.focusWrapper,this.modelItem.expanded)}getDisplayName(){return this.displayName}onSelectAllChanged(z){let J=this.cbSelect,Q=J.getValue();if(!J.isReadOnly()&&(z&&!Q||!z&&Q))J.toggle()}isSelected(){return this.cbSelect.getValue()}isSelectable(){return!this.cbSelect.isReadOnly()}setSelected(z){this.cbSelect.setValue(z,!0)}},c5=(z)=>{if(G0(z))return z.getLeafColumns();return z?[z]:[]},aA=(z,J,Q,Z)=>{if(!J||!z)return null;let $=Z.indexOf(J),X=Q?$:$+1,Y=oA(Z,z,X);return X-Y},oA=(z,J,Q)=>{if(!J)return 0;let Z=J[0],$=J.length;if(z.indexOf(Z){let $=p(Z);if(z.get("suppressMovableColumns")||J.columnStateUpdateStrategy.getPivotMode($))return!0;return!!Q.find(({colDef:q})=>!!q.suppressMovable||!!q.lockPosition)},SY=(z,J,Q,Z)=>{if(!Q)return;let{component:$}=Q,X=null,Y=Q.position==="top";if($ instanceof fq)X=$.getColumns()[0],Y=!0;else if($)X=$.column;if(!X)return;let q=p(Z),G=q?z.columnStateUpdateStrategy.getPrimaryColumns(q):z.colModel.getCols(),U=aA(J,X,Y,G);if(U!=null)z.columnStateUpdateStrategy.moveColumns(q,J,U,"toolPanelUi"),h0(z,Z)},eA=(z)=>{return z.column},zj={tag:"div",cls:"ag-column-select-column",children:[{tag:"ag-checkbox",ref:"cbSelect",cls:"ag-column-select-checkbox"},{tag:"span",ref:"eLabel",cls:"ag-column-select-column-label"}]},Jj=class extends x{constructor(z,J,Q,Z,$){super();this.modelItem=z,this.allowDragging=J,this.groupsExist=Q,this.focusWrapper=Z,this.params=$,this.eLabel=j,this.cbSelect=j,this.processingColumnStateChange=!1;let{column:X,depth:Y,displayName:q}=z;this.column=X,this.columnDepth=Y,this.displayName=q}postConstruct(){this.setTemplate(zj,[K4]);let{beans:z,cbSelect:J,displayName:Q,eLabel:Z,columnDepth:$,groupsExist:X,column:Y,gos:q,focusWrapper:G}=this,U=h("columnDrag",z);this.eDragHandle=U,U.classList.add("ag-drag-handle","ag-column-select-column-drag-handle");let _=J.getGui(),H=J.getInputElement();if(_.after(U),H.setAttribute("tabindex","-1"),Z.textContent=Q,X)this.addCss("ag-column-select-add-group-indent");this.addCss(`ag-column-select-indent-${$}`),this.getGui().style.setProperty("--ag-indentation-level",String($)),this.tooltipFeature=this.createOptionalManagedBean(z.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.focusWrapper,getLocation:()=>"columnToolPanelColumn",shouldDisplayTooltip:t1(q,()=>Z),getAdditionalParams:()=>({colDef:Y.getColDef()})})),this.setupDragging();let W=this.onColumnStateChanged.bind(this);this.addManagedEventListeners({columnPivotModeChanged:W}),this.addManagedListeners(Y,{columnValueChanged:W,columnPivotChanged:W,columnRowGroupChanged:W,visibleChanged:W}),this.addManagedListeners(G,{keydown:this.handleKeyDown.bind(this),contextmenu:this.onContextMenu.bind(this)});let B=new c0(G);this.addManagedListeners(B,{longTap:(K)=>this.onContextMenu(K.touchStart)}),this.addDestroyFunc(B.destroy.bind(B)),this.addManagedPropertyListener("functionsReadOnly",this.onColumnStateChanged.bind(this)),this.addManagedListeners(J,{fieldValueChanged:this.onCheckboxChanged.bind(this)}),this.addManagedElementListeners(Z,{click:this.onLabelClicked.bind(this)}),this.onColumnStateChanged(),this.refreshAriaLabel(),this.setupTooltip();let E=BJ(Y.getColDef(),q,Y,null);for(let K of E)this.toggleCss(K,!0)}getColumn(){return this.column}setupTooltip(){let z=()=>this.tooltipFeature?.setTooltipAndRefresh(this.column.getColDef().headerTooltip);z(),this.addManagedEventListeners({newColumnsLoaded:z})}onContextMenu(z){let{column:J,gos:Q}=this;if(Q.get("functionsReadOnly"))return;let Z=this.createBean(new kq(J,z,this.focusWrapper,this.params));this.addDestroyFunc(()=>{if(Z.isAlive())this.destroyBean(Z)})}handleKeyDown(z){if(z.key===k.SPACE){if(z.preventDefault(),this.isSelectable())this.onSelectAllChanged(!this.isSelected())}}onLabelClicked(){if(this.gos.get("functionsReadOnly"))return;let z=!this.cbSelect.getValue();this.onChangeCommon(z)}onCheckboxChanged(z){this.onChangeCommon(z.selected)}onChangeCommon(z){if(this.cbSelect.isReadOnly())return;if(this.refreshAriaLabel(),this.processingColumnStateChange)return;Eq(this.beans,[this.column],z,"toolPanelUi",this.params)}refreshAriaLabel(){let{cbSelect:z,focusWrapper:J,displayName:Q}=this,Z=this.getLocaleTextFunc(),$=Z("ariaColumn","Column"),X=z.getValue()?Z("ariaVisible","visible"):Z("ariaHidden","hidden"),Y=Z("ariaToggleVisibility","Press SPACE to toggle visibility");_0(J,`${Q} ${$}`),this.cbSelect.setInputAriaLabel(`${Y} (${X})`),c1(J,z.getInputElement().id)}setupDragging(){let z=this.eDragHandle;if(!this.allowDragging){w(z,!1);return}let J=this.beans,{gos:Q,eventSvc:Z,dragAndDrop:$}=J;if(p(this.params))z.setAttribute("data-column-tool-panel-deferred","");let X=!Q.get("suppressDragLeaveHidesColumns"),Y={type:E4.ToolPanel,eElement:z,dragItemName:this.displayName,getDefaultIconName:()=>X&&!p(this.params)?"hide":"notAllowed",getDragItem:()=>this.createDragItem(),onDragStarted:()=>{X=!Q.get("suppressDragLeaveHidesColumns"),Z.dispatchEvent({type:"columnPanelItemDragStart",column:this.column})},onDragStopped:()=>{Z.dispatchEvent({type:"columnPanelItemDragEnd"})},onGridEnter:(q)=>{if(X&&!p(this.params))Kq(J,{columns:[this.column],visibleState:q?.visibleState,pivotState:q?.pivotState,eventType:"toolPanelUi",buttons:this.params.buttons})},onGridExit:()=>{if(X&&!p(this.params))this.onChangeCommon(!1)}};$.addDragSource(Y,!0),this.addDestroyFunc(()=>$.removeDragSource(Y))}createDragItem(){let z=this.column.getColId(),J={[z]:this.column.isVisible()},Q=this.beans.columnStateUpdateStrategy,Z={[z]:Fq(this.column,Q,p(this.params))};return{columns:[this.column],visibleState:J,pivotState:Z}}onColumnStateChanged(){this.processingColumnStateChange=!0;let z=this.beans.columnStateUpdateStrategy,J=z.getPivotMode(p(this.params));if(J){let $=z.isColumnSelectedInPivotModeToolPanel(p(this.params),this.column);this.cbSelect.setValue($)}else this.cbSelect.setValue(z.isColumnVisibleInToolPanel(p(this.params),this.column));let Q=!0,Z=!0;if(J){let $=this.gos.get("functionsReadOnly"),X=!this.column.isAnyFunctionAllowed();Q=!$&&!X,Z=Q}else{let{enableRowGroup:$,enableValue:X,lockPosition:Y,suppressMovable:q,lockVisible:G}=this.column.getColDef(),U=!!$||!!X,_=!!Y||!!q;Q=!G,Z=U||!_}this.cbSelect.setReadOnly(!Q),this.eDragHandle.classList.toggle("ag-column-select-column-readonly",!Z),this.toggleCss("ag-column-select-column-readonly",!Z&&!Q),this.cbSelect.setPassive(!1),this.processingColumnStateChange=!1}getDisplayName(){return this.displayName}onSelectAllChanged(z){let J=this.cbSelect;if(z!==J.getValue()){if(!J.isReadOnly())J.toggle()}}isSelected(){return this.cbSelect.getValue()}isSelectable(){return!this.cbSelect.isReadOnly()}isExpandable(){return!1}setExpanded(z){V(158)}},Qj=class{constructor(z){this.items=z}getRowCount(){return this.items.length}getRow(z){return this.items[z]}},Zj="ag-column-select-list",$j=class extends x{constructor(){super({tag:"div",cls:Zj,role:"presentation"});this.destroyColumnItemFuncs=[],this.hasLoadedInitialState=!1,this.isInitialState=!1,this.skipRefocus=!1}wireBeans(z){this.colModel=z.colModel}destroy(){this.destroyColumnTree(),super.destroy()}destroyColumnTree(){this.allColsTree=[];for(let z of this.destroyColumnItemFuncs)z();this.destroyColumnItemFuncs=[]}init(z,J,Q){this.params=z;let{suppressSyncLayoutWithGrid:Z,contractColumnSelection:$,suppressColumnMove:X}=z;if(this.allowDragging=J,this.eventType=Q,!Z)this.addManagedEventListeners({columnMoved:this.onColumnsChanged.bind(this)});this.addManagedEventListeners({newColumnsLoaded:this.onColumnsChanged.bind(this)});let Y=this.fireSelectionChangedEvent.bind(this);this.addManagedEventListeners({columnPivotChanged:Y,columnPivotModeChanged:Y,columnRowGroupChanged:Y,columnValueChanged:Y,columnVisible:Y,newColumnsLoaded:Y}),this.expandGroupsByDefault=!$;let q=X||Z,G=this.createManagedBean(new Y7({cssIdentifier:"column-select",ariaRole:"tree",moveItemCallback:(U,_)=>{if(q)return;this.moveItems(U,_)}}));if(this.virtualList=G,this.appendChild(G.getGui()),G.setComponentCreator((U,_)=>{return l6(_,U.depth+1),this.createComponentFromItem(U,_)}),this.colModel.ready)this.onColumnsChanged();if(q)return;this.createItemDragFeature()}createItemDragFeature(){let{gos:z,beans:J,virtualList:Q}=this;this.createManagedBean(new JA(this,Q,{dragSourceType:E4.ToolPanel,addListeners:(Z,$,X)=>{Z.addManagedEventListeners({columnPanelItemDragStart:$,columnPanelItemDragEnd:X})},getCurrentDragValue:(Z)=>eA(Z),isMoveBlocked:(Z)=>fY(z,J,c5(Z),this.params),getNumRows:(Z)=>Z.getDisplayedColsList().length,moveItem:(Z,$)=>SY(J,c5(Z),$,this.params)}))}moveItems(z,J){let{gos:Q,beans:Z}=this,{modelItem:$}=z,{group:X,columnGroup:Y,column:q,expanded:G}=$,U=c5(X?Y:q);if(fY(Q,Z,U,this.params))return;let _=this.displayedColsList.indexOf($),H=J?-1:1,W=0;if(J){let E=z.columnDepth>0?q.getParent()?.getChildren():null;if(E?.length&&q===E[0])W=-1}else if(X)W=G?$.children.length:0;let B=Math.min(Math.max(_+W+H,0),this.displayedColsList.length-1);this.skipRefocus=!0,SY(Z,U,{rowIndex:B,position:J?"top":"bottom",component:this.virtualList.getComponentAt(B)},this.params),this.focusRowIfAlive(B-W).then(()=>{this.skipRefocus=!1})}createComponentFromItem(z,J){let Q=this.allowDragging;if(z.group){let $=new fq(z,Q,this.eventType,J,this.params);return this.createBean($),$}let Z=new Jj(z,Q,this.groupsExist,J,this.params);return this.createBean(Z),Z}onColumnsChanged(){let z=this.params;if(!this.hasLoadedInitialState)this.hasLoadedInitialState=!0,this.isInitialState=!!z.initialState;let J=this.getExpandedStates(),Q=this.colModel.isPivotMode(),Z=p(z),$=Z&&this.beans.columnStateUpdateStrategy.hasDeferredColumnOrder(Z);if((!z.suppressSyncLayoutWithGrid||Z)&&!Q||$)this.buildTreeFromWhatGridIsDisplaying();else this.buildTreeFromProvidedColumnDefs();this.setExpandedStates(J),this.markFilteredColumns(),this.flattenAndFilterModel(),this.isInitialState=!1}getDisplayedColsList(){return this.displayedColsList}getExpandedStates(){let z={};if(this.isInitialState){let{expandedGroupIds:J}=this.params.initialState;for(let Q of J)z[Q]=!0;return z}if(!this.allColsTree)return{};return this.forEachItem((J)=>{if(!J.group)return;let Q=J.columnGroup;if(Q)z[Q.getId()]=J.expanded}),z}setExpandedStates(z){if(!this.allColsTree)return;let{isInitialState:J}=this;this.forEachItem((Q)=>{if(!Q.group)return;let Z=Q.columnGroup;if(Z){let $=z[Z.getId()];if($!=null||J)Q.expanded=!!$}})}buildTreeFromWhatGridIsDisplaying(){let z=p(this.params);if(z&&this.beans.columnStateUpdateStrategy.hasDeferredColumnOrder(z)){let J=this.beans.columnStateUpdateStrategy.getPrimaryColumns(z);if(J.length>0){gA(J,this.setColumnLayout.bind(this));return}}if(this.params.suppressSyncLayoutWithGrid){this.buildTreeFromProvidedColumnDefs();return}NA(this.colModel,this.setColumnLayout.bind(this))}setColumnLayout(z){let J=wA(this.colModel,z);this.buildListModel(J),this.groupsExist=z.some((Q)=>{return Q&&typeof Q.children<"u"}),this.markFilteredColumns(),this.flattenAndFilterModel()}buildTreeFromProvidedColumnDefs(){let z=this.colModel;this.buildListModel(z.getColDefColTree()),this.groupsExist=!!z.colDefCols?.treeDepth}buildListModel(z){let J=this.onColumnExpanded.bind(this),Q=(q)=>{q.addEventListener("expandedChanged",J);let G=q.removeEventListener.bind(q,"expandedChanged",J);this.destroyColumnItemFuncs.push(G)},Z=this.beans.colNames,$=(q,G,U)=>{for(let _ of q)if(G0(_))X(_,G,U);else Y(_,G,U)},X=(q,G,U)=>{if(q.getColGroupDef()?.suppressColumnsToolPanel)return;if(q.isPadding()){$(q.getChildren(),G,U);return}let W=Z.getDisplayNameForProvidedColumnGroup(null,q,"columnToolPanel"),B=new DY(W,q,G,!0,this.expandGroupsByDefault);U.push(B),Q(B),$(q.getChildren(),G+1,B.children)},Y=(q,G,U)=>{if(q.getColDef()?.suppressColumnsToolPanel)return;let H=Z.getDisplayNameForColumn(q,"columnToolPanel");U.push(new DY(H,q,G))};this.destroyColumnTree(),$(z,0,this.allColsTree)}onColumnExpanded(){this.flattenAndFilterModel()}flattenAndFilterModel(){this.displayedColsList=[];let z=(Z)=>{if(!Z.passesFilter)return;if(this.displayedColsList.push(Z),Z.group&&Z.expanded)Z.children.forEach(z)},J=this.virtualList;this.allColsTree.forEach(z),J.setModel(new Qj(this.displayedColsList));let Q=null;if(!this.skipRefocus)Q=J.getLastFocusedRow();if(J.refresh(),Q!=null)this.focusRowIfAlive(Q);this.notifyListeners(),this.refreshAriaLabel()}refreshAriaLabel(){let z=this.getLocaleTextFunc(),J=z("ariaColumnPanelList","Column List"),Q=z("columns","Columns"),Z=this.displayedColsList.length;_0(this.virtualList.getAriaElement(),`${J} ${Z} ${Q}`)}focusRowIfAlive(z){if(z===-1)return Promise.resolve();return new Promise((J)=>{window.setTimeout(()=>{if(this.isAlive())this.virtualList.focusRow(z);J()},0)})}forEachItem(z){let J=(Z)=>{for(let $ of Z)if(z($),$.group)J($.children)},Q=this.allColsTree;if(!Q)return;J(Q)}doSetExpandedAll(z){this.forEachItem((J)=>{if(J.group)J.expanded=z})}setGroupsExpanded(z,J){if(!J){this.doSetExpandedAll(z);return}let Q=[];this.forEachItem(($)=>{if(!$.group)return;let X=$.columnGroup.getId();if(J.indexOf(X)>=0)$.expanded=z,Q.push(X)});let Z=J.filter(($)=>!Q.includes($));if(Z.length>0)V(157,{unrecognisedGroupIds:Z})}getExpandState(){let z=0,J=0;if(this.forEachItem((Q)=>{if(!Q.group)return;if(Q.expanded)z++;else J++}),z>0&&J>0)return 2;if(J>0)return 1;return 0}doSetSelectedAll(z){Bq(this.beans,this.allColsTree,z,this.eventType,this.params),this.syncVisibleSelectionState(),this.fireSelectionChangedEvent()}syncVisibleSelectionState(){for(let z=0;z{if($.group)return;if(!$.passesFilter)return;let X=$.column,Y=X.getColDef(),q;if(Z){if(!X.isAllowPivot()&&!X.isAllowRowGroup()&&!X.isAllowValue())return;q=Q.isColumnSelectedInPivotModeToolPanel(p(this.params),X)??!1}else{if(Y.lockVisible)return;q=Q.isColumnVisibleInToolPanel(p(this.params),X)??!1}if(q)z++;else J++}),z>0&&J>0)return;return!(z===0||J>0)}setFilterText(z){this.filterText=P(z)?z.toLowerCase():null,this.markFilteredColumns(),this.flattenAndFilterModel()}markFilteredColumns(){let z=(Q)=>{if(!P(this.filterText))return!0;let Z=Q.displayName;return Z==null||Z.toLowerCase().indexOf(this.filterText)!==-1},J=(Q,Z)=>{let $=!1;if(Q.group){let Y=z(Q);for(let q of Q.children){let G=J(q,Y||Z);if(G)$=G}}let X=Z||$?!0:z(Q);return Q.passesFilter=X,X};for(let Q of this.allColsTree)J(Q,!1)}notifyListeners(){this.fireGroupExpandedEvent(),this.fireSelectionChangedEvent()}fireGroupExpandedEvent(){let z=this.getExpandState();this.dispatchLocalEvent({type:"groupExpanded",state:z})}fireSelectionChangedEvent(){if(!this.allColsTree)return;let z=this.getSelectionState();this.dispatchLocalEvent({type:"selectionChanged",state:z})}getExpandedGroups(){let z=[];if(!this.allColsTree)return z;return this.forEachItem((J)=>{if(J.group&&J.expanded)z.push(J.columnGroup.getId())}),z}},Xj={selector:"AG-PRIMARY-COLS-LIST",component:$j},Yj={tag:"div",cls:"ag-column-select",children:[{tag:"ag-primary-cols-header",ref:"primaryColsHeaderPanel"},{tag:"ag-primary-cols-list",ref:"primaryColsListPanel"}]},Sq=class extends x{constructor(){super(Yj,[xA,Xj]);this.primaryColsHeaderPanel=j,this.primaryColsListPanel=j,this.registerCSS(IA)}init(z,J,Q){let{primaryColsHeaderPanel:Z,primaryColsListPanel:$}=this;Z.init(J);let{suppressColumnFilter:X,suppressColumnSelectAll:Y}=J;if(J.suppressColumnExpandAll&&X&&Y)Z.setDisplayed(!1);this.addManagedListeners($,{groupExpanded:(G)=>{Z.setExpandState(G.state),J.onStateUpdated()},selectionChanged:(G)=>Z.setSelectionState(G.state)}),$.init(J,z,Q),this.addManagedListeners(Z,{expandAll:$.doSetExpandedAll.bind($,!0),collapseAll:$.doSetExpandedAll.bind($,!1),selectAll:$.doSetSelectedAll.bind($,!0),unselectAll:$.doSetSelectedAll.bind($,!1),filterChanged:(G)=>$.setFilterText(G.filterText)}),this.positionableFeature=this.createManagedBean(new u2(this.getGui(),{minHeight:100}))}toggleResizable(z){this.positionableFeature.setResizable(z?{bottom:!0}:!1)}expandGroups(z){this.primaryColsListPanel.setGroupsExpanded(!0,z)}collapseGroups(z){this.primaryColsListPanel.setGroupsExpanded(!1,z)}setColumnLayout(z){this.primaryColsListPanel.setColumnLayout(z)}syncLayoutWithGrid(){this.primaryColsListPanel.onColumnsChanged()}getExpandedGroups(){return this.primaryColsListPanel.getExpandedGroups()}},qj=".ag-column-panel{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.ag-pivot-mode-panel{display:flex;height:var(--ag-header-height)}.ag-pivot-mode-select{align-items:center;display:flex}:where(.ag-ltr) .ag-pivot-mode-select{margin-left:var(--ag-widget-container-horizontal-padding)}:where(.ag-rtl) .ag-pivot-mode-select{margin-right:var(--ag-widget-container-horizontal-padding)}.ag-column-panel-column-select:where(:not(.ag-last-visible-child)){border-bottom:var(--ag-tool-panel-separator-border)}.ag-column-panel-column-select:where(:nth-child(n+2 of :not(.ag-hidden))){border-top:var(--ag-tool-panel-separator-border)}:where(.ag-column-panel) .ag-column-drop-vertical{flex:1 1 0px;min-height:50px}:where(.ag-column-panel) .ag-column-drop-vertical:where(:not(.ag-last-column-drop)){border-bottom:var(--ag-tool-panel-separator-border)}.ag-column-panel-buttons{display:flex;flex-wrap:wrap;gap:var(--ag-widget-vertical-spacing) var(--ag-widget-horizontal-spacing);justify-content:flex-end;overflow:hidden;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding) 0;:where(.ag-standard-button){transition:background-color .25s ease-in-out,color .25s ease-in-out}}.ag-column-panel-buttons:where(:last-child){padding-bottom:var(--ag-widget-container-vertical-padding)}.ag-column-panel-buttons-button{line-height:1.5}:where(.ag-column-panel) .ag-column-panel-buttons-apply-button:not(:disabled){background-color:var(--ag-column-panel-apply-button-background-color);color:var(--ag-column-panel-apply-button-color)}",Gj="ag-column-panel-deferred",Uj=class extends x{constructor(){super({tag:"div",cls:"ag-column-panel"});this.initialised=!1,this.childDestroyFuncs=[],this.isDeferModeEnabled=!1,this.isCommitting=!1,this.onDeferredApply=()=>{this.isCommitting=!0;try{this.beans.columnStateUpdateStrategy.commit(this.isDeferModeEnabled)}finally{this.isCommitting=!1}this.deferredButtonsComp?.updateValidity(!1),this.lastKnownGridState=this.captureGridState()},this.onDeferredCancel=()=>{this.beans.columnStateUpdateStrategy.reset(this.isDeferModeEnabled),this.deferredButtonsComp?.updateValidity(!1),this.refreshToolPanelLayouts(),this.pivotModePanel?.refreshEditStrategy(),this.lastKnownGridState=this.captureGridState()},this.onPivotModePanelValueChanged=()=>{this.refreshToolPanelLayouts(),this.setLastVisible(),this.deferredButtonsComp?.updateValidity(this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled))},this.onColumnEverythingChanged=()=>{if(!this.isDeferModeEnabled||this.isCommitting)return;let z=this.captureGridState();if(!this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled)){this.lastKnownGridState=z;return}let J=this.lastKnownGridState&&this.isGridStateEqual(this.lastKnownGridState,z);if(this.lastKnownGridState=z,!J)return;this.resetDeferredState()},this.onExternalGridChange=()=>{if(!this.isDeferModeEnabled||this.isCommitting)return;if(!this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled))return;this.resetDeferredState(),this.lastKnownGridState=this.captureGridState()},this.registerCSS(qj)}wireBeans(z){this.colToolPanelFactory=z.colToolPanelFactory}setVisible(z){if(super.setDisplayed(z),z&&!this.initialised)this.init(this.params)}init(z){let Q={...C(this.gos,{suppressColumnMove:!1,suppressColumnSelectAll:!1,suppressColumnFilter:!1,suppressColumnExpandAll:!1,contractColumnSelection:!1,suppressPivotMode:!1,suppressRowGroups:!1,suppressValues:!1,suppressPivots:!1,suppressSyncLayoutWithGrid:!1}),...z};this.params=Q;let{childDestroyFuncs:Z,colToolPanelFactory:$,gos:X}=this,Y=X.isModuleRegistered("SharedPivot"),q=Y||X.isModuleRegistered("SharedRowGrouping");if(this.isDeferModeEnabled=p(Q),this.toggleCss(Gj,this.isDeferModeEnabled),!Q.suppressPivotMode&&$&&Y)this.pivotModePanel=$.createPivotModePanel(this,Z,Q,this.onPivotModePanelValueChanged);let G=this.createBean(new Sq);if(this.primaryColsPanel=G,Z.push(()=>this.destroyBean(this.primaryColsPanel)),G.init(!0,Q,"toolPanelUi"),G.addCss("ag-column-panel-column-select"),this.appendChild(G),$){if(!Q.suppressRowGroups&&q)this.rowGroupDropZonePanel=$.createRowGroupPanel(this,Z,Q);if(!Q.suppressValues&&q)this.valuesDropZonePanel=$.createValuesPanel(this,Z,Q);if(!Q.suppressPivots&&Y)this.pivotDropZonePanel=$.createPivotPanel(this,Z,Q);this.setLastVisible();let[U]=this.addManagedEventListeners({columnPivotModeChanged:()=>{this.resetChildrenHeight(),this.setLastVisible()}});Z.push(()=>U())}if(this.isDeferModeEnabled){let U=this.onExternalGridChange;Z.push(...this.addManagedEventListeners({columnEverythingChanged:this.onColumnEverythingChanged,sortChanged:U,columnVisible:U,columnRowGroupChanged:U,columnValueChanged:U,columnPivotChanged:U,columnPivotModeChanged:U,newColumnsLoaded:U,...Q.suppressSyncLayoutWithGrid?{}:{columnMoved:U}}))}if(Q.buttons){if(!Q.buttons.includes("apply"))V(298);if(Q.buttons.length)this.initDeferredButtons(Q.buttons)}this.initialised=!0}initDeferredButtons(z){let J=this.createBean(new M5({className:"ag-column-panel-buttons"}));this.deferredButtonsComp=J,this.childDestroyFuncs.push(()=>{this.deferredButtonsComp=this.destroyBean(this.deferredButtonsComp)});let Q=this.getLocaleTextFunc(),Z=z.map(($)=>({type:$,label:Q($==="apply"?"applyColumnToolPanel":"cancelColumnToolPanel",$==="apply"?"Apply":"Cancel")}));J.updateButtons(Z),J.updateValidity(!1),J.addManagedListeners(J,{apply:this.onDeferredApply,cancel:this.onDeferredCancel}),this.appendChild(J)}resetDeferredState(){this.beans.columnStateUpdateStrategy.reset(this.isDeferModeEnabled),this.deferredButtonsComp?.updateValidity(!1),this.refreshToolPanelLayouts(),this.pivotModePanel?.refreshEditStrategy()}captureGridState(){let{beans:z}=this,J=(Q)=>(Q??[]).map((Z)=>Z.getColId());return{rowGroupColIds:J(z.rowGroupColsSvc?.columns),valueColIds:J(z.valueColsSvc?.columns),pivotColIds:J(z.pivotColsSvc?.columns),pivotMode:z.colModel.isPivotMode(),columnOrder:z.colModel.getCols().map((Q)=>Q.getColId()),visibleColIds:z.colModel.getCols().filter((Q)=>Q.isVisible()).map((Q)=>Q.getColId()),sortState:z.colModel.getCols().filter((Q)=>Q.getSort()).map((Q)=>`${Q.getColId()}:${Q.getSort()}:${Q.getSortIndex()}`),aggFuncState:(z.valueColsSvc?.columns??[]).map((Q)=>Q.getAggFunc()),widthState:z.colModel.getCols().map((Q)=>`${Q.getColId()}:${Q.getActualWidth()}`)}}isGridStateEqual(z,J){return Z0(z.rowGroupColIds,J.rowGroupColIds)&&Z0(z.valueColIds,J.valueColIds)&&Z0(z.pivotColIds,J.pivotColIds)&&z.pivotMode===J.pivotMode&&Z0(z.columnOrder,J.columnOrder)&&Z0(z.visibleColIds,J.visibleColIds)&&Z0(z.sortState,J.sortState)&&Z0(z.aggFuncState,J.aggFuncState)&&Z0(z.widthState,J.widthState)}refreshDeferredUi(){this.refreshToolPanelLayouts(),this.setLastVisible(),this.pivotModePanel?.refreshEditStrategy(),this.deferredButtonsComp?.updateValidity(this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled))}refreshToolPanelLayouts(){this.primaryColsPanel.syncLayoutWithGrid(),this.rowGroupDropZonePanel?.refreshGui(),this.valuesDropZonePanel?.refreshGui(),this.pivotDropZonePanel?.refresh()}setPivotModeSectionVisible(z){let J=this.colToolPanelFactory;if(!J)return;this.pivotModePanel=J.setPanelVisible(this.pivotModePanel,z,J.createPivotModePanel.bind(J,this,this.childDestroyFuncs,this.params,this.onPivotModePanelValueChanged,!0)),this.setLastVisible()}setRowGroupsSectionVisible(z){let J=this.colToolPanelFactory;if(!J)return;this.rowGroupDropZonePanel=J.setPanelVisible(this.rowGroupDropZonePanel,z,J.createRowGroupPanel.bind(J,this,this.childDestroyFuncs,this.params)),this.setLastVisible()}setValuesSectionVisible(z){let J=this.colToolPanelFactory;if(!J)return;this.valuesDropZonePanel=J.setPanelVisible(this.valuesDropZonePanel,z,J.createValuesPanel.bind(J,this,this.childDestroyFuncs,this.params)),this.setLastVisible()}setPivotSectionVisible(z){let J=this.colToolPanelFactory;if(!J)return;this.pivotDropZonePanel=J.setPanelVisible(this.pivotDropZonePanel,z,J.createPivotPanel.bind(J,this,this.childDestroyFuncs,this.params)),this.pivotDropZonePanel?.setDisplayed(z),this.setLastVisible()}setResizers(){for(let z of[this.primaryColsPanel,this.rowGroupDropZonePanel,this.valuesDropZonePanel,this.pivotDropZonePanel]){if(!z)continue;let J=z.getGui();z.toggleResizable(!J.classList.contains("ag-last-column-drop")&&!J.classList.contains("ag-hidden")&&!J.classList.contains("ag-last-visible-child"))}}setLastVisible(){let z=this.getGui(),J=Array.prototype.slice.call(z.querySelectorAll(".ag-column-drop"));for(let $ of J)$.classList.remove("ag-last-column-drop");let Q=z.querySelectorAll(".ag-column-drop:not(.ag-hidden)"),Z=y(Q);if(Z)Z.classList.add("ag-last-column-drop");this.primaryColsPanel.getGui().classList.toggle("ag-last-visible-child",!Z),this.setResizers()}resetChildrenHeight(){let J=this.getGui().children;for(let Q=0;QX.getGui().getBoundingClientRect()),$=Z.findIndex((X)=>this.horizontal?X.right>Q&&X.leftQ);if($===-1){let X=this.gos.get("enableRtl");if(Z.every((G)=>Q>(this.horizontal?G.right:G.bottom)))return X&&this.horizontal?0:this.childPillComponents.length;if(Z.every((G)=>Q<(this.horizontal?G.left:G.top)))return X&&this.horizontal?this.childPillComponents.length:0;return this.insertIndex}if(this.insertIndex<=$)return $+1;return $}checkDragStartedBySelf(z){if(this.state!=="notDragging")return;this.state="rearrangeItems",this.potentialDndItems=this.getItems(z.dragSource.getDragItem()),this.refreshGui(),this.checkInsertIndex(z),this.refreshGui()}onDragging(z){if(this.checkDragStartedBySelf(z),this.checkInsertIndex(z))this.refreshGui()}handleDragEnterEnd(z){}onDragEnter(z){let J=this.getItems(z.dragSource.getDragItem());this.state="newItemsIn";let Q=J.filter(($)=>this.isItemDroppable($,z)),Z=Q.every(($)=>this.childPillComponents.map((X)=>X.getItem()).indexOf($)!==-1);if(Q.length===0)return;if(this.potentialDndItems=Q,Z){this.state="notDragging";return}this.handleDragEnterEnd(z),this.checkInsertIndex(z),this.refreshGui()}isPotentialDndItems(){return!!this.potentialDndItems?.length}handleDragLeaveEnd(z){}onDragLeave(z){if(this.state==="rearrangeItems"){let J=this.getItems(z.dragSource.getDragItem());this.removeItems(J)}if(this.isPotentialDndItems())this.handleDragLeaveEnd(z),this.potentialDndItems=[],this.refreshGui();this.state="notDragging"}onDragCancel(z){if(this.isPotentialDndItems()){if(this.state==="newItemsIn")this.handleDragLeaveEnd(z);this.potentialDndItems=[],this.refreshGui()}this.state="notDragging"}onDragStop(){if(this.isPotentialDndItems()){if(this.state==="newItemsIn")this.addItems(this.potentialDndItems);else this.rearrangeItems(this.potentialDndItems);this.potentialDndItems=[],this.refreshGui()}this.state="notDragging"}removeItems(z){let J=this.getExistingItems().filter((Q)=>!z.includes(Q));this.updateItems(J),this.refreshGui()}addItems(z){if(!z)return;let J=this.getExistingItems().slice(),Q=z.filter((Z)=>J.indexOf(Z)<0);VY(J,Q,this.insertIndex),this.updateItems(J),this.refreshGui()}addItem(z){this.insertIndex=this.getExistingItems().length,this.addItems([z])}rearrangeItems(z,J){let Q;if(!J)Q=this.getNonGhostItems().slice();else Q=this.getExistingItems().filter((Z)=>z.indexOf(Z)===-1);if(VY(Q,z,this.insertIndex),Z0(Q,this.getExistingItems()))return!1;return this.updateItems(Q),this.refreshGui(),!0}refreshGui(){let z=0;if(!this.horizontal)z=this.ePillDropList.scrollTop;let J=this.resizeEnabled,Q=this.getFocusedItem(),{eGridDiv:Z}=this.beans,$=n1(),X=null;if($)X=O0(this.beans,Z)??O0(this.beans,Z,!1,!0);if(this.toggleResizable(!1),this.destroyGui(),this.addIconAndTitleToGui(),this.addEmptyMessageToGui(),this.addItemsToGui(),z!==0)this.ePillDropList.scrollTop=z;if(J)this.toggleResizable(J);if($)this.restoreFocus(Q,X)}getFocusedItem(){let z=this.getGui(),J=n(this.beans);if(!z.contains(J))return-1;return Array.from(z.querySelectorAll(".ag-column-drop-cell")).indexOf(J)}focusItemAtIndex(z){let J=this.getGui(),Z=Array.from(J.querySelectorAll(".ag-column-drop-cell"))[z];if(!Z)return;Z.focus({preventScroll:!0})}restoreFocus(z,J){let Q=this.getGui(),Z=Array.from(Q.querySelectorAll(".ag-column-drop-cell"));if(z===-1)return;if(Z.length===0)J.focus();let $=Math.min(Z.length-1,z),X=Z[$];if(X)X.focus()}focusList(z){let J=z?this.childPillComponents.length-1:0;this.restoreFocus(J,this.getFocusableElement())}getNonGhostItems(){let z=this.getExistingItems();if(this.isPotentialDndItems())return z.filter((J)=>!this.potentialDndItems.includes(J));return z}addItemsToGui(){let J=this.getNonGhostItems().map((Q)=>this.createItemComponent(Q,!1));if(this.isPotentialDndItems()){let Q=this.potentialDndItems.map((Z)=>this.createItemComponent(Z,!0));if(this.insertIndex>=J.length)J.push(...Q);else J.splice(this.insertIndex,0,...Q)}this.appendChild(this.ePillDropList),J.forEach((Q,Z)=>{if(Z>0)this.addArrow(this.ePillDropList);this.ePillDropList.appendChild(Q.getGui())}),this.addAriaLabelsToComponents()}addAriaLabelsToComponents(){let{childPillComponents:z,ePillDropList:J}=this,Q=z.length;U0(J,Q===0?"presentation":"listbox");for(let Z=0;Zthis.destroyBean(Q)),!J)this.childPillComponents.push(Q);return Q}addIconAndTitleToGui(){let{title:z,icon:J}=this.params;if(!z||!J)return;let Q=z0({tag:"div"});if(a6(Q,!0),this.addElementClasses(Q,"title-bar"),this.addElementClasses(J,"icon"),this.toggleCss("ag-column-drop-empty",this.isExistingItemsEmpty()),Q.appendChild(J),!this.horizontal){let Z=z0({tag:"span"});this.addElementClasses(Z,"title"),Z.textContent=z,Q.appendChild(Z)}this.appendChild(Q)}isExistingItemsEmpty(){return this.getExistingItems().length===0}addEmptyMessageToGui(){let{emptyMessage:z}=this.params;if(!z||!this.isExistingItemsEmpty()||this.isPotentialDndItems())return;let J=z0({tag:"span"});J.textContent=z,this.addElementClasses(J,"empty-message"),this.ePillDropList.appendChild(J)}addArrow(z){if(this.horizontal){let J=this.gos.get("enableRtl"),Q=h(J?"panelDelimiterRtl":"panelDelimiter",this.beans);this.addElementClasses(Q,"cell-separator"),z.appendChild(Q)}}},Bj={tag:"span",role:"option",children:[{tag:"span",ref:"eDragHandle",cls:"ag-drag-handle ag-column-drop-cell-drag-handle",role:"presentation"},{tag:"span",ref:"eText",cls:"ag-column-drop-cell-text",attrs:{"aria-hidden":"true"}},{tag:"span",ref:"eButton",cls:"ag-column-drop-cell-button",role:"presentation"}]},Ej=class extends x{constructor(z,J,Q,Z,$){super();this.dragSourceDropTarget=z,this.ghost=J,this.horizontal=Q,this.template=Z,this.agComponents=$,this.eText=j,this.eDragHandle=j,this.eButton=j}postConstruct(){this.setTemplate(this.template??Bj,this.agComponents);let z=this.getGui(),{beans:J,eDragHandle:Q,eText:Z,eButton:$}=this;if(this.addElementClasses(z),this.addElementClasses(Q,"drag-handle"),this.addElementClasses(Z,"text"),this.addElementClasses($,"button"),Q.appendChild(h("columnDrag",J)),$.appendChild(h("cancel",J)),this.tooltipFeature=this.createOptionalManagedBean(J.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.getGui()})),this.setupComponents(),!this.ghost&&this.isDraggable())this.addDragSource();this.setupAria(),this.setupTooltip(),this.activateTabIndex(),this.refreshDraggable()}isDraggable(){return!0}refreshDraggable(){this.eDragHandle.classList.toggle("ag-column-select-column-readonly",!this.isDraggable())}setupAria(){let z=this.getLocaleTextFunc(),J=[this.getAriaDisplayName()];this.addAdditionalAriaInstructions(J,z),_0(this.getGui(),J.join(". "))}addAdditionalAriaInstructions(z,J){if(this.isRemovable()){let Q=J("ariaDropZoneColumnComponentDescription","Press DELETE to remove");z.push(Q)}}setupTooltip(){let z=()=>this.tooltipFeature?.setTooltipAndRefresh(this.getTooltip());z(),this.addManagedEventListeners({newColumnsLoaded:z})}getDragSourceId(){return}getDefaultIconName(){return"notAllowed"}addDragSource(){let{beans:{dragAndDrop:z},eDragHandle:J}=this,Q=this.createGetDragItem(),Z=this.getDefaultIconName(),$={type:this.getDragSourceType(),sourceId:this.getDragSourceId(),eElement:J,getDefaultIconName:()=>Z,getDragItem:Q,dragItemName:this.getDisplayName()};z?.addDragSource($,!0),this.addDestroyFunc(()=>z?.removeDragSource($))}setupComponents(){if(this.eText.textContent=this.getDisplayValue(),this.setupRemove(),this.ghost)this.addCss("ag-column-drop-cell-ghost")}isRemovable(){return!0}refreshRemove(){w(this.eButton,this.isRemovable())}setupRemove(){this.refreshRemove();let z={type:"columnRemove"};this.addGuiEventListener("keydown",(Q)=>this.onKeyDown(Q)),this.addManagedElementListeners(this.eButton,{click:(Q)=>{this.dispatchLocalEvent(z),Q.stopPropagation()}});let J=new c0(this.eButton);this.addManagedListeners(J,{tap:()=>this.dispatchLocalEvent(z)}),this.addDestroyFunc(J.destroy.bind(J))}onKeyDown(z){if(z.key===k.DELETE){if(this.isRemovable())z.preventDefault(),this.dispatchLocalEvent({type:"columnRemove"})}}getDisplayValue(){return this.getDisplayName()}addElementClasses(z,J){J=J?`-${J}`:"";let Q=this.horizontal?"horizontal":"vertical";z.classList.add(`ag-column-drop-cell${J}`,`ag-column-drop-${Q}-cell${J}`)}destroy(){super.destroy(),this.dragSourceDropTarget=null}},Kj=class extends Ej{constructor(z,J,Q,Z,$,X){super(J,Q,$);this.column=z,this.dropZonePurpose=Z,this.updateParams=X,this.eSortIndicator=j,this.popupShowing=!1,this.deferApply=p(X)}postConstruct(){let{sortSvc:z,colNames:J}=this.beans;if(this.template={tag:"span",role:"option",children:[{tag:"span",ref:"eDragHandle",cls:"ag-drag-handle ag-column-drop-cell-drag-handle",role:"presentation"},{tag:"span",ref:"eText",cls:"ag-column-drop-cell-text",attrs:{"aria-hidden":"true"}},z?{tag:"ag-sort-indicator",ref:"eSortIndicator"}:void 0,{tag:"span",ref:"eButton",cls:"ag-column-drop-cell-button",role:"presentation"}]},z)this.agComponents=[z.getSortIndicatorSelector()];if(this.displayName=J.getDisplayNameForColumn(this.column,"columnDrop"),super.postConstruct(),this.deferApply)this.eDragHandle.setAttribute("data-column-tool-panel-deferred","");if(z)this.setupSort(),this.addManagedEventListeners({sortChanged:()=>{this.setupAria()}});if(this.isGroupingZone())this.addManagedPropertyListener("groupLockGroupColumns",()=>{this.refreshRemove(),this.refreshDraggable(),this.setupAria()})}getItem(){return this.column}getDisplayName(){return this.displayName}getTooltip(){return this.column.getColDef().headerTooltip}addAdditionalAriaInstructions(z,J){let Q=this.gos.get("rowGroupPanelSuppressSort"),Z=this.gos.get("functionsReadOnly");if(this.isAggregationZone()&&!Z){let $=J("ariaDropZoneColumnValueItemDescription","Press ENTER to change the aggregation type");z.push($)}if(this.isGroupingZone()&&this.column.isSortable()&&!Q){let $=J("ariaDropZoneColumnGroupItemDescription","Press ENTER to sort");z.push($)}super.addAdditionalAriaInstructions(z,J)}isMovable(){return this.isDraggable()}isDraggable(){return this.isReadOnly()}isRemovable(){return this.isReadOnly()}isReadOnly(){return!this.isGroupingAndLocked()&&!this.gos.get("functionsReadOnly")}getAriaDisplayName(){let z=this.getLocaleTextFunc(),{name:J,aggFuncName:Q}=this.getColumnAndAggFuncName(),Z=z("ariaDropZoneColumnComponentAggFuncSeparator"," of "),$={asc:z("ariaDropZoneColumnComponentSortAscending","ascending"),desc:z("ariaDropZoneColumnComponentSortDescending","descending")},X=this.getCurrentSortDirection(this.column),Y=this.gos.get("rowGroupPanelSuppressSort");return[Q&&`${Q}${Z}`,J,this.isGroupingZone()&&!Y&&X&&`, ${$[X]}`].filter((q)=>!!q).join("")}getColumnAndAggFuncName(){let z=this.displayName,J="";if(this.isAggregationZone()){let Q=this.beans.columnStateUpdateStrategy.getColumnAggFunc(this.deferApply,this.column),Z=typeof Q==="string"?Q:"agg";J=this.getLocaleTextFunc()(Z,Z)}return{name:z,aggFuncName:J}}setupSort(){if(!this.column.isSortable()||!this.isGroupingZone())return;let{gos:z,column:J,eSortIndicator:Q}=this;if(!z.get("rowGroupPanelSuppressSort")){Q.setupSort(J,!0,this.getSortDefOverride.bind(this));let Z=($)=>{$.preventDefault(),this.beans.columnStateUpdateStrategy.progressSortFromEvent(this.deferApply,J,$),Q.refresh(),this.setupAria(),h0(this.beans,this.updateParams)};this.addGuiEventListener("click",Z),this.addGuiEventListener("keydown",($)=>{if($.key===k.ENTER&&this.isGroupingZone())Z($)})}}getCurrentSortDirection(z){return this.beans.columnStateUpdateStrategy.getSortDef(this.deferApply,z)?.direction??null}getSortDefOverride(){if(!this.deferApply)return;return this.beans.columnStateUpdateStrategy.getSortDef(this.deferApply,this.column)}getDefaultIconName(){return"hide"}createGetDragItem(){let{column:z}=this;return()=>{let J={};return J[z.getId()]=z.isVisible(),{columns:[z],visibleState:J}}}setupComponents(){if(super.setupComponents(),this.isAggregationZone()&&!this.gos.get("functionsReadOnly"))this.addGuiEventListener("click",this.onShowAggFuncSelection.bind(this))}onKeyDown(z){if(super.onKeyDown(z),z.key===k.ENTER&&this.isAggregationZone()&&!this.gos.get("functionsReadOnly"))z.preventDefault(),this.onShowAggFuncSelection()}getDisplayValue(){let{name:z,aggFuncName:J}=this.getColumnAndAggFuncName();return this.isAggregationZone()?`${J}(${z})`:z}onShowAggFuncSelection(){if(this.popupShowing)return;this.popupShowing=!0;let{aggFuncSvc:z,popupSvc:J}=this.beans,Q=new Y7({cssIdentifier:"select-agg-func"}),Z=z.getFuncNames(this.column),$=this.getGui(),X=Q.getGui();Q.setModel({getRow:function(B){return Z[B]},getRowCount:function(){return Z.length}}),this.createBean(Q);let Y=z0({tag:"div",cls:"ag-select-agg-func-popup"});Y.style.top="0px",Y.style.left="0px",Y.appendChild(X),Y.style.width=`${$.clientWidth}px`;let[q]=this.addManagedElementListeners(Y,{focusout:(B)=>{if(!Y.contains(B.relatedTarget)&&_)_.hideFunc()}}),G=(B)=>{if(this.destroyBean(Q),this.popupShowing=!1,B?.key==="Escape")$.focus();if(q)q()},U=this.getLocaleTextFunc(),_=J.addPopup({modal:!0,eChild:Y,closeOnEsc:!0,closedCallback:G,ariaLabel:U("ariaLabelAggregationFunction","Aggregation Function")});if(_)Q.setComponentCreator(this.createAggSelect.bind(this,_.hideFunc));Q.addGuiEventListener("keydown",(B)=>{if(B.key===k.ENTER||B.key===k.SPACE){let E=Q.getLastFocusedRow();if(E==null)return;let K=Q.getComponentAt(E);if(K)K.selectItem()}}),J.positionPopupByComponent({type:"aggFuncSelect",eventSource:$,ePopup:Y,keepWithinBounds:!0,additionalParams:{column:this.column},position:"under"}),Q.refresh();let H=this.beans.columnStateUpdateStrategy.getColumnAggFunc(this.deferApply,this.column),W=Z.findIndex((B)=>B===H);if(W===-1)W=0;Q.focusRow(W)}createAggSelect(z,J){let Q=()=>{if(z(),this.getGui().focus(),this.beans.columnStateUpdateStrategy.setColumnAggFunc(this.deferApply,this.column,J,"toolPanelDragAndDrop"),this.column){let q=this.getGui().querySelector(".ag-column-drop-cell-text");if(q)q.textContent=this.getDisplayValue();this.setupAria()}h0(this.beans,this.updateParams)},Z=this.getLocaleTextFunc(),$=(J||"").toString(),X=Z($,$);return new Fj(Q,X)}isGroupingAndLocked(){return this.isGroupingZone()&&Q6(this.column,this.beans)}isAggregationZone(){return this.dropZonePurpose==="aggregation"}isGroupingZone(){return this.dropZonePurpose==="rowGroup"}getDragSourceType(){return E4.ToolPanel}destroy(){super.destroy(),this.column=null}},Fj=class extends x{constructor(z,J){super({tag:"div",cls:"ag-select-agg-func-item",children:J});this.selectItem=z,this.addGuiEventListener("click",this.selectItem)}},_7=class extends Wj{constructor(z,J,Q){super(z);this.dropZonePurpose=J,this.updateParams=Q,this.addElementClasses(this.getGui(),this.dropZonePurpose.toLowerCase())}init(z){super.init(z),this.addManagedEventListeners({newColumnsLoaded:this.refreshGui.bind(this)}),this.addManagedPropertyListeners(["functionsReadOnly","rowGroupPanelSuppressSort","groupLockGroupColumns"],this.refreshGui.bind(this))}getItems(z){return z.columns??[]}isInterestedIn(z,J){if(z===E4.HeaderCell)return!0;if(z!==E4.ToolPanel)return!1;if(!this.horizontal)return!0;return!J.hasAttribute("data-column-tool-panel-deferred")}minimumAllowedNewInsertIndex(){let{gos:z,rowGroupColsSvc:J}=this.beans,Q=z.get("groupLockGroupColumns"),Z=J?.columns.length??0;if(Q===-1)return Z;return Math.min(Q,Z)}showOrHideColumnOnExit(z){return this.isRowGroupPanel()&&YJ(this.gos,!0)&&!z.fromNudge}handleDragEnterEnd(z){if(this.showOrHideColumnOnExit(z)){let Z=z.dragSource.getDragItem().columns;this.setColumnsVisible(Z,!1,"uiColumnDragged")}}handleDragLeaveEnd(z){if(this.showOrHideColumnOnExit(z)){let Q=z.dragSource.getDragItem();this.setColumnsVisible(Q.columns,!0,"uiColumnDragged")}}setColumnsVisible(z,J,Q){if(!z)return;if(p(this.updateParams))return;let Z=z.filter(($)=>!$.getColDef().lockVisible);this.beans.columnStateUpdateStrategy.setColumnsVisible(!1,Z,J,Q)}isRowGroupPanel(){return this.dropZonePurpose==="rowGroup"}createPillComponent(z,J,Q,Z){return new Kj(z,J,Q,this.dropZonePurpose,Z,this.updateParams)}},Lj=class extends _7{constructor(z,J){super(z,"pivot",J)}postConstruct(){let z=this.getLocaleTextFunc(),J=z("pivotColumnsEmptyMessage","Drag here to set column labels"),Q=z("pivots","Column Labels");if(super.init({icon:h("pivotPanel",this.beans,null),emptyMessage:J,title:Q}),this.horizontal)Tz(this.beans,this,this.getGui());this.addManagedEventListeners({newColumnsLoaded:this.refresh.bind(this),columnPivotChanged:this.refresh.bind(this),columnPivotModeChanged:this.checkVisibility.bind(this)}),this.refresh()}getAriaLabel(){return this.getLocaleTextFunc()("ariaPivotDropZonePanelLabel","Column Labels")}refresh(){this.checkVisibility(),this.refreshGui()}checkVisibility(){let z=this.beans.colModel,J=z.isPivotMode();if(this.horizontal)switch(this.gos.get("pivotPanelShow")){case"always":this.setDisplayed(J);break;case"onlyWhenPivoting":{let Q=z.isPivotActive();this.setDisplayed(J&&Q);break}default:this.setDisplayed(!1);break}else this.setDisplayed(this.beans.columnStateUpdateStrategy.getPivotMode(p(this.updateParams)))}isItemDroppable(z,J){if(this.gos.get("functionsReadOnly")||!z.isPrimary())return!1;let Q=this.beans.columnStateUpdateStrategy.getPivotColumns(p(this.updateParams)).includes(z);return z.isAllowPivot()&&(!Q||this.isSourceEventFromTarget(J))}updateItems(z){this.beans.columnStateUpdateStrategy.setPivotColumns(p(this.updateParams),z,"toolPanelUi"),h0(this.beans,this.updateParams)}getIconName(){return this.isPotentialDndItems()?"pivot":"notAllowed"}getExistingItems(){return this.beans.columnStateUpdateStrategy.getPivotColumns(p(this.updateParams))}getFocusableContainerName(){return"pivotToolbar"}},Dj=class extends _7{constructor(z,J){super(z,"rowGroup",J)}postConstruct(){let z=this.getLocaleTextFunc(),J=z("rowGroupColumnsEmptyMessage","Drag here to set row groups"),Q=z("groups","Row Groups");if(super.init({icon:h("rowGroupPanel",this.beans,null),emptyMessage:J,title:Q}),this.horizontal)Tz(this.beans,this,this.getGui());this.addManagedEventListeners({columnRowGroupChanged:this.refreshGui.bind(this)})}getAriaLabel(){return this.getLocaleTextFunc()("ariaRowGroupDropZonePanelLabel","Row Groups")}isItemDroppable(z,J){if(this.gos.get("functionsReadOnly")||!z.isPrimary()||z.colDef.showRowGroup)return!1;let Q=this.beans.columnStateUpdateStrategy.getRowGroupColumns(p(this.updateParams)).includes(z);return z.isAllowRowGroup()&&(!Q||this.isSourceEventFromTarget(J))}updateItems(z){this.beans.columnStateUpdateStrategy.setRowGroupColumns(p(this.updateParams),z,"toolPanelUi"),h0(this.beans,this.updateParams)}getIconName(){return this.isPotentialDndItems()?"group":"notAllowed"}getExistingItems(){return this.beans.columnStateUpdateStrategy.getRowGroupColumns(p(this.updateParams))}getFocusableContainerName(){return"rowGroupToolbar"}},Mj=class extends _7{constructor(z,J){super(z,"aggregation",J)}postConstruct(){let z=this.getLocaleTextFunc(),J=z("valueColumnsEmptyMessage","Drag here to aggregate"),Q=z("values","Values");super.init({icon:h("valuePanel",this.beans,null),emptyMessage:J,title:Q}),this.addManagedEventListeners({columnValueChanged:this.refreshGui.bind(this)})}getAriaLabel(){return this.getLocaleTextFunc()("ariaValuesDropZonePanelLabel","Values")}getIconName(){return this.isPotentialDndItems()?"aggregate":"notAllowed"}isItemDroppable(z,J){if(this.gos.get("functionsReadOnly")||!z.isPrimary())return!1;let Q=this.beans.columnStateUpdateStrategy.getValueColumns(p(this.updateParams)).includes(z);return z.isAllowValue()&&(!Q||this.isSourceEventFromTarget(J))}updateItems(z){this.beans.columnStateUpdateStrategy.setValueColumns(p(this.updateParams),z,"toolPanelUi"),h0(this.beans,this.updateParams)}getExistingItems(){return this.beans.columnStateUpdateStrategy.getValueColumns(p(this.updateParams))}},kj={tag:"div",cls:"ag-pivot-mode-panel",children:[{tag:"ag-toggle-button",ref:"cbPivotMode",cls:"ag-pivot-mode-select"}]},fj=class extends x{constructor(z,J){super();this.params=z,this.onPivotModeValueChanged=J,this.cbPivotMode=j}getCurrentPivotMode(){return this.beans.columnStateUpdateStrategy.getPivotMode(p(this.params))}syncFromGrid(){this.cbPivotMode.setValue(this.getCurrentPivotMode())}refreshEditStrategy(){this.syncFromGrid()}postConstruct(){this.setTemplate(kj,[XY]);let z=this.cbPivotMode;z.setValue(this.getCurrentPivotMode());let J=this.getLocaleTextFunc();z.setLabel(J("pivotMode","Pivot Mode"));let Q=()=>{let $=!!z.getValue();this.beans.columnStateUpdateStrategy.setPivotMode(p(this.params),$,"toolPanelUi"),this.onPivotModeValueChanged?.()},Z=()=>{z.setValue(this.getCurrentPivotMode())};this.addManagedListeners(z,{fieldValueChanged:Q}),this.addManagedEventListeners({newColumnsLoaded:Z,columnPivotModeChanged:Z})}},Sj=class extends S{constructor(){super(...arguments);this.beanName="colToolPanelFactory"}setPanelVisible(z,J,Q){if(z)z.setDisplayed(J);else if(J)z=Q();return z}createRowGroupPanel(z,J,Q){return this.createPanel(z,J,new Dj(!1,Q))}createValuesPanel(z,J,Q){return this.createPanel(z,J,new Mj(!1,Q))}createPivotPanel(z,J,Q){return this.createPanel(z,J,new Lj(!1,Q))}createPivotModePanel(z,J,Q,Z,$){return this.createPanel(z,J,new fj(Q,Z),$)}createPanel(z,J,Q,Z){if(Q=z.createBean(Q),J.push(()=>z.destroyBean(Q)),Z)z.prependChild(Q);else z.appendChild(Q);return Q}},RY=()=>{},Vj=class extends S{constructor(){super(...arguments);this.beanName="columnStateUpdateExecutionStrategy"}applyColumnState(z,J,Q){this.getUpdateStrategy(z).applyColumnState(J,Q)}commit(z){this.getUpdateStrategy(z).commit()}hasPendingChanges(z){return this.getUpdateStrategy(z).hasPendingChanges()}moveColumns(z,J,Q,Z){this.getUpdateStrategy(z).moveColumns(J,Q,Z)}reset(z){this.getUpdateStrategy(z).reset()}setColumnsVisible(z,J,Q,Z){this.getUpdateStrategy(z).setColumnsVisible(J,Q,Z)}isColumnVisibleInToolPanel(z,J){return this.getUpdateStrategy(z).isColumnVisibleInToolPanel(J)}setRowGroupColumns(z,J,Q){this.getUpdateStrategy(z).setRowGroupColumns(J,Q)}getRowGroupColumns(z){return this.getUpdateStrategy(z).getRowGroupColumns()}getPrimaryColumns(z){return this.getUpdateStrategy(z).getPrimaryColumns()}hasDeferredColumnOrder(z){return this.getUpdateStrategy(z).hasDeferredColumnOrder()}setValueColumns(z,J,Q){this.getUpdateStrategy(z).setValueColumns(J,Q)}getValueColumns(z){return this.getUpdateStrategy(z).getValueColumns()}setColumnAggFunc(z,J,Q,Z){this.getUpdateStrategy(z).setColumnAggFunc(J,Q,Z)}getColumnAggFunc(z,J){return this.getUpdateStrategy(z).getColumnAggFunc(J)}setPivotColumns(z,J,Q){this.getUpdateStrategy(z).setPivotColumns(J,Q)}getPivotColumns(z){return this.getUpdateStrategy(z).getPivotColumns()}setPivotMode(z,J,Q){this.getUpdateStrategy(z).setPivotMode(J,Q)}getPivotMode(z){return this.getUpdateStrategy(z).getPivotMode()}isColumnSelectedInPivotModeToolPanel(z,J){return this.getUpdateStrategy(z).isColumnSelectedInPivotModeToolPanel(J)}progressSortFromEvent(z,J,Q){this.getUpdateStrategy(z).progressSortFromEvent(J,Q)}getSortDef(z,J){return this.getUpdateStrategy(z).getSortDef(J)}getUpdateStrategy(z){return z?this.getDeferredUpdateStrategy():this.getSyncUpdateStrategy()}getSyncUpdateStrategy(){return this.syncUpdateStrategy??(this.syncUpdateStrategy=new Rj(this.beans))}getDeferredUpdateStrategy(){return this.deferredUpdateStrategy??(this.deferredUpdateStrategy=new Aj(this.beans))}},Rj=class{constructor(z){this.beans=z,this.lastPivotColIds=[],this.reset=RY,this.commit=RY,this.hasPendingChanges=()=>!1,this.hasDeferredColumnOrder=()=>!1}applyColumnState(z,J){if(z.length===0)return;a0(this.beans,{state:z},J)}moveColumns(z,J,Q){this.beans.colMoves?.moveColumns(z,J,Q),jj(this.beans)}setColumnsVisible(z,J,Q){let Z=z.filter(($)=>!$.getColDef().lockVisible);this.beans.colModel.setColsVisible(Z,J,Q)}setRowGroupColumns(z,J){this.beans.rowGroupColsSvc?.setColumns(z,J)}getRowGroupColumns(){return this.beans.rowGroupColsSvc?.columns??[]}getPrimaryColumns(){return H7(this.beans)}setValueColumns(z,J){this.beans.valueColsSvc?.setColumns(z,J)}getValueColumns(){return this.beans.valueColsSvc?.columns??[]}setColumnAggFunc(z,J,Q){this.beans.valueColsSvc?.setColumnAggFunc?.(z,J,Q)}getColumnAggFunc(z){return z.getAggFunc()}setPivotColumns(z,J){this.lastPivotColIds=z.map((Q)=>Q.getColId()),this.beans.pivotColsSvc?.setColumns(z,J)}getPivotColumns(){return this.beans.pivotColsSvc?.columns??[]}setPivotMode(z,J){let{colModel:Q,gos:Z,ctrlsSvc:$}=this.beans;if(z===Q.isPivotMode())return;let X=this.beans.pivotColsSvc?.columns.map((Y)=>Y.getColId())??[];if(X.length>0)this.lastPivotColIds=X;if(!z){let Y=this.beans.colModel.getColDefCols()??[];a0(this.beans,{state:Y.map((q)=>({colId:q.getColId(),pivot:!1,pivotIndex:null}))},J)}if(Z.updateGridOptions({options:{pivotMode:z},source:J}),z&&this.lastPivotColIds.length>0)this.beans.pivotColsSvc?.setColumns(this.lastPivotColIds,J);for(let Y of $.getHeaderRowContainerCtrls())Y.refresh()}progressSortFromEvent(z,J){this.beans.sortSvc?.progressSortFromEvent(z,J)}isColumnVisibleInToolPanel(z){return z.isVisible()}isColumnSelectedInPivotModeToolPanel(z){return z.isAnyFunctionActive()}getPivotMode(){return this.beans.colModel.isPivotMode()}getSortDef(z){return z.getSortDef()}},Aj=class{constructor(z){this.beans=z,this.state={},this.sequence=0,this.lastPivotColIds=[]}reset(){this.sequence=0,this.state={}}hasPendingChanges(){let{state:z,beans:J}=this,{columnState:Q,columnOrder:Z,rowGroup:$,aggregation:X,pivot:Y,pivotMode:q,sort:G,aggFuncs:U}=z,_=(H)=>(H??[]).map((W)=>W.getColId());if(Q)for(let[H,W]of Q.patches){let B=J.colModel.getColDefCol(H);if(!B)continue;if(W.hide!==void 0&&W.hide!==!B.isVisible()||W.rowGroup!==void 0&&!!W.rowGroup!==B.isRowGroupActive()||W.pivot!==void 0&&!!W.pivot!==B.isPivotActive()||W.aggFunc!==void 0&&(W.aggFunc??null)!==(B.getAggFunc()??null))return!0}if(Z&&!Z0(Z.colIds,p5(J)))return!0;if($&&!Z0($.colIds,_(J.rowGroupColsSvc?.columns)))return!0;if(X&&!Z0(X.colIds,_(J.valueColsSvc?.columns)))return!0;if(Y&&!Z0(Y.colIds,_(J.pivotColsSvc?.columns)))return!0;if(q&&q.pivotMode!==J.colModel.isPivotMode())return!0;if(G){for(let[H,W]of G.sortDefsByColId){let B=J.colModel.getColDefCol(H);if(!B)continue;if((W?.direction??null)!==(B.getSortDef()?.direction??null))return!0}if(G.baselineCleared){let H=H7(J);for(let W of H)if(!G.sortDefsByColId.has(W.getColId())&&W.getSortDef()!==null)return!0}}if(U)for(let[H,W]of U.values){let B=J.colModel.getColDefCol(H);if(!B)continue;if(W!==B.getAggFunc())return!0}return!1}commit(){let{beans:z,state:J}=this,Q=[];for(let $ of Object.keys(J)){let X=J[$];if(X)Q.push({type:$,...X})}let Z=Q.sort(($,X)=>$.seq-X.seq);for(let $ of Z)switch($.type){case"columnState":{a0(z,{state:[...$.patches.values()]},$.eventType);break}case"columnOrder":{let X=$.colIds.map((Y)=>z.colModel.getColDefCol(Y)).filter((Y)=>!!Y&&Z6(Y));if(!z.colModel.isPivotMode())for(let Y=0;YZ6(H)),_=(U>=0?U:0)+Y;if(G[_]!==q)z.colMoves?.moveColumns([q],_,$.eventType,!0)}Vq(z,X);break}case"rowGroup":{z.rowGroupColsSvc?.setColumns($.colIds,$.eventType);break}case"aggregation":{z.valueColsSvc?.setColumns($.colIds,$.eventType);break}case"pivot":{this.lastPivotColIds=$.colIds,z.pivotColsSvc?.setColumns($.colIds,$.eventType);break}case"pivotMode":{let{colModel:X,ctrlsSvc:Y,gos:q,stateSvc:G}=z;if($.pivotMode!==X.isPivotMode()){let U=z.pivotColsSvc?.columns.map((W)=>W.getColId())??[];if(U.length>0)this.lastPivotColIds=U;let _=G?.getState().pivot?.pivotColIds??U,H=$.pivotMode?this.state.pivot?.colIds??this.lastPivotColIds:_;if(G?.setState({...G.getState(),pivot:{pivotMode:$.pivotMode,pivotColIds:H}},["pivot"]),!$.pivotMode){let W=z.colModel.getColDefCols()??[];a0(z,{state:W.map((B)=>({colId:B.getColId(),pivot:!1,pivotIndex:null}))},$.eventType)}if(q.updateGridOptions({options:{pivotMode:$.pivotMode},source:$.eventType}),$.pivotMode&&H.length>0)z.pivotColsSvc?.setColumns(H,$.eventType);for(let W of Y.getHeaderRowContainerCtrls())W.refresh()}break}case"sort":{let X=[],Y=0;for(let[q,G]of $.sortDefsByColId)X.push({colId:q,sort:G?.direction??null,sortIndex:G?.direction?Y++:null,sortType:G?.type??void 0});a0(z,{state:X,defaultState:$.baselineCleared?{sort:null,sortIndex:null,sortType:void 0}:void 0},$.eventType);break}case"aggFuncs":{for(let[X,Y]of $.values){let q=z.colModel.getColDefCol(X);if(!q)continue;z.valueColsSvc?.setColumnAggFunc?.(q,Y,$.eventType)}break}}this.reset()}applyColumnState(z,J){for(let Z of z)n5(this.state,Z);let Q=bJ(this.state);Q.seq=$z(this.sequence),this.sequence=Q.seq,Q.eventType=J}moveColumns(z,J,Q){let Z=new Set(z.map((G)=>G.getColId())),X=(this.state.columnOrder?.colIds??p5(this.beans)).filter((G)=>!Z.has(G)),Y=z.map((G)=>G.getColId()),q=$z(this.sequence);this.sequence=q,this.state.columnOrder={colIds:[...X.slice(0,J),...Y,...X.slice(J)],eventType:Q,seq:q}}setColumnsVisible(z,J,Q){for(let $ of z){if($.getColDef().lockVisible)continue;n5(this.state,{colId:$.getColId(),hide:!J})}let Z=bJ(this.state);Z.seq=$z(this.sequence),this.sequence=Z.seq,Z.eventType=Q}setRowGroupColumns(z,J){d5(this.state,"rowGroup");let Q=$z(this.sequence);this.sequence=Q,this.state.rowGroup={colIds:z.map((Z)=>Z.getColId()),eventType:J,seq:Q}}setValueColumns(z,J){d5(this.state,"aggFunc");let Q=new Set((this.beans.valueColsSvc?.columns??[]).map((X)=>X.getColId())),Z=AY(this.state);for(let X of z)if(!Q.has(X.getColId())&&!Z.values.has(X.getColId())){let Y=X.getAggFunc(),q=Y!=null?Y:this.beans.aggFuncSvc?.getDefaultAggFunc(X);if(q!=null)Z.values.set(X.getColId(),q)}let $=$z(this.sequence);this.sequence=$,Z.seq=$,Z.eventType=J,this.state.aggregation={colIds:z.map((X)=>X.getColId()),eventType:J,seq:$}}setColumnAggFunc(z,J,Q){n5(this.state,{colId:z.getColId(),aggFunc:J});let Z=bJ(this.state);Z.seq=$z(this.sequence),this.sequence=Z.seq,Z.eventType=Q;let $=AY(this.state);$.seq=Z.seq,$.eventType=Q,$.values.set(z.getColId(),J)}getColumnAggFunc(z){let J=z.getColId();if(this.state.aggFuncs?.values.has(J))return this.state.aggFuncs.values.get(J);return z.getAggFunc()}isColumnVisibleInToolPanel(z){let J=this.state.columnState?.patches.get(z.getColId());if(J?.hide!==void 0)return!J.hide;return z.isVisible()}isColumnSelectedInPivotModeToolPanel(z){let J=z.getColId(),Q=this.state.columnState?.patches.get(J),Z;if(Q?.rowGroup!==void 0)Z=!!Q.rowGroup;else if(this.state.rowGroup)Z=this.state.rowGroup.colIds.includes(J);else Z=z.isRowGroupActive();let $;if(Q?.pivot!==void 0)$=!!Q.pivot;else if(this.state.pivot)$=this.state.pivot.colIds.includes(J);else $=z.isPivotActive();let X;if(Q?.aggFunc!==void 0)X=Q.aggFunc!=null;else if(this.state.aggregation)X=this.state.aggregation.colIds.includes(J);else X=z.isValueActive();return Z||$||X}setPivotColumns(z,J){d5(this.state,"pivot");let Q=$z(this.sequence);this.sequence=Q,this.state.pivot={colIds:z.map((Z)=>Z.getColId()),eventType:J,seq:Q}}setPivotMode(z,J){let Q=$z(this.sequence);this.sequence=Q,this.state.pivotMode={pivotMode:z,eventType:J,seq:Q}}getRowGroupColumns(){return t2(this.beans,i5(this.state.rowGroup?.colIds,this.beans.rowGroupColsSvc?.columns,this.state.columnState?.patches,(z)=>z.rowGroup==null?void 0:!!z.rowGroup))}getPrimaryColumns(){return t2(this.beans,this.state.columnOrder?.colIds??p5(this.beans))}hasDeferredColumnOrder(){return!!this.state.columnOrder}getValueColumns(){return t2(this.beans,i5(this.state.aggregation?.colIds,this.beans.valueColsSvc?.columns,this.state.columnState?.patches,(z)=>z.aggFunc===void 0?void 0:z.aggFunc!=null))}getPivotColumns(){if(!this.getPivotMode())return[];let z=this.beans.pivotColsSvc?.columns,J=z?.length?z:t2(this.beans,this.lastPivotColIds);return t2(this.beans,i5(this.state.pivot?.colIds,J,this.state.columnState?.patches,(Q)=>Q.pivot==null?void 0:!!Q.pivot))}getPivotMode(){return this.state.pivotMode?.pivotMode??this.beans.colModel.isPivotMode()}getSortDef(z){let J=this.state.sort,Q=z.getColId(),Z=J?.sortDefsByColId;if(Z?.has(Q))return Z.get(Q)??null;if(J?.baselineCleared)return null;return z.getSortDef()}progressSortFromEvent(z,J){let Q=this.state.sort??{sortDefsByColId:new Map,baselineCleared:!1,seq:0,eventType:"toolPanelUi"},{sortSvc:Z}=this.beans,$=z.getColId(),X;if(Q.sortDefsByColId.has($))X=Q.sortDefsByColId.get($);else if(Q.baselineCleared)X=null;else X=z.getSortDef();let Y=Z?.getNextSortDirection(z,X);if(!Y)return;let{gos:q}=this.beans;if(!(((q.get("multiSortKey")==="ctrl"?J.ctrlKey||J.metaKey:J.shiftKey)||q.get("alwaysMultiSort"))&&!q.get("suppressMultiSort")))Q.sortDefsByColId.clear(),Q.baselineCleared=!0;Q.sortDefsByColId.set($,Y.direction?Y:null),Q.seq=$z(this.sequence),this.sequence=Q.seq,this.state.sort=Q}};function t2(z,J){if(!J)return[];return J.map((Q)=>z.colModel.getColDefCol(Q)).filter((Q)=>!!Q)}function i5(z,J,Q,Z){let $=[...z??J?.map((Y)=>Y.getColId())??[]];if(!Q?.size)return $;let X=new Set($);for(let[Y,q]of Q){let G=Z(q);if(G===void 0)continue;if(G){if(!X.has(Y))$.push(Y),X.add(Y);continue}if(!X.has(Y))continue;X.delete(Y);let U=$.indexOf(Y);if(U>=0)$.splice(U,1)}return $}function jj(z){let J=z.colModel.getCols().filter((Q)=>Z6(Q)).map((Q)=>z.colModel.getColDefCol(Q.getColId())).filter((Q)=>!!Q);Vq(z,J)}function Vq(z,J){let Q=Oj(z);if(!Q)return;let Z=new Set(J);Q.list=[...J,...Q.list.filter(($)=>Z6($)&&!Z.has($))]}function p5(z){return H7(z).map((J)=>J.getColId())}function H7(z){return(z.colModel.getColDefCols()??z.colModel.getCols()).filter((J)=>Z6(J))}function Oj(z){let J=z.colModel.colDefCols,Q=J?.list;if(!Array.isArray(Q))return;return J}function Z6(z){if(!z.isPrimary())return!1;return!Z1(z)&&!w2(z)}function $z(z){return z+1}function n5(z,J){let Q=bJ(z),Z=Q.patches.get(J.colId);Q.patches.set(J.colId,Z?{...Z,...J}:J)}function d5(z,J){let Q=z.columnState?.patches;if(!Q?.size)return;for(let[Z,$]of Q){if(!(J in $))continue;let X={...$};if(delete X[J],Object.keys(X).length===1){Q.delete(Z);continue}Q.set(Z,X)}}function bJ(z){let{columnState:J}=z;if(!J)J={patches:new Map,seq:0,eventType:"toolPanelUi"},z.columnState=J;return J}function AY(z){let{aggFuncs:J}=z;if(!J)J={values:new Map,seq:0,eventType:"toolPanelUi"},z.aggFuncs=J;return J}var Pj=class extends S{constructor(){super(...arguments);this.beanName="columnStateUpdateStrategy"}applyColumnState(z,J,Q){this.delegate("applyColumnState",z,J,Q)}commit(z){this.delegate("commit",z)}hasPendingChanges(z){return this.delegate("hasPendingChanges",z)}moveColumns(z,J,Q,Z){this.delegate("moveColumns",z,J,Q,Z)}reset(z){this.delegate("reset",z)}setColumnsVisible(z,J,Q,Z){this.delegate("setColumnsVisible",z,J,Q,Z)}isColumnVisibleInToolPanel(z,J){return this.delegate("isColumnVisibleInToolPanel",z,J)}setRowGroupColumns(z,J,Q){this.delegate("setRowGroupColumns",z,J,Q)}getRowGroupColumns(z){return this.delegate("getRowGroupColumns",z)}getPrimaryColumns(z){return this.delegate("getPrimaryColumns",z)}hasDeferredColumnOrder(z){return this.delegate("hasDeferredColumnOrder",z)}setValueColumns(z,J,Q){this.delegate("setValueColumns",z,J,Q)}getValueColumns(z){return this.delegate("getValueColumns",z)}setColumnAggFunc(z,J,Q,Z){this.delegate("setColumnAggFunc",z,J,Q,Z)}getColumnAggFunc(z,J){return this.delegate("getColumnAggFunc",z,J)}setPivotColumns(z,J,Q){this.delegate("setPivotColumns",z,J,Q)}getPivotColumns(z){return this.delegate("getPivotColumns",z)}setPivotMode(z,J,Q){this.delegate("setPivotMode",z,J,Q)}getPivotMode(z){return this.delegate("getPivotMode",z)}isColumnSelectedInPivotModeToolPanel(z,J){return this.delegate("isColumnSelectedInPivotModeToolPanel",z,J)}progressSortFromEvent(z,J,Q){this.delegate("progressSortFromEvent",z,J,Q)}getSortDef(z,J){return this.delegate("getSortDef",z,J)}getUpdateStrategy(){return this.executionStrategy??(this.executionStrategy=this.createManagedBean(new Vj))}delegate(z,...J){let Q=this.getUpdateStrategy();return Q[z].bind(Q)(...J)}},Tj={moduleName:"SharedColumnStateUpdateStrategy",version:$0,beans:[Pj],dependsOn:[C0]},Rq={moduleName:"ColumnsToolPanel",version:$0,beans:[Sj],userComponents:{agColumnsToolPanel:Uj},icons:{ensureColumnVisible:"column-arrow",columnsToolPanel:"columns",menuAddRowGroup:"group",menuRemoveRowGroup:"group",pivotPanel:"pivot",rowGroupPanel:"group",valuePanel:"aggregation",columnSelectClosed:"tree-closed",columnSelectOpen:"tree-open",columnSelectIndeterminate:"tree-indeterminate"},dependsOn:[C0,Tj,q7,n2,p2,q1,G7]},vj=class extends S{constructor(){super(...arguments);this.beanName="chartMenuItemMapper"}getChartItems(z){let J=this.beans,Q=J.chartSvc,Z=z==="pivotChart";if(!Q)return null;let $=this.getLocaleTextFunc.bind(this),X=Z?new Ij(J,Q,$):new Cj(J,Q,$),Y=Q.isEnterprise(),q=X.getMenuItem();if(q?.subMenu&&!Y){let U=(_)=>({..._,subMenu:_.subMenu?.filter((H)=>!H._enterprise).map((H)=>U(H))});q=U(q)}let G=this.gos.get("chartToolPanelsDef")?.settingsPanel?.chartGroupsDef;if(G)q=this.filterAndOrderChartMenu(q,G,X.getConfigLookup());return this.cleanInternals(q)}cleanInternals(z){if(!z)return z;let J=(Q)=>{delete Q?._key,delete Q?._enterprise;for(let Z of Q?.subMenu??[])J(Z);return Q};return J(z)}buildLookup(z){let J={},Q=(Z)=>{if(J[Z._key]=Z,Z.subMenu)for(let $ of Z.subMenu)Q($)};return Q(z),J}filterAndOrderChartMenu(z,J,Q){let Z=this.buildLookup(z),$={...z,subMenu:[]};for(let X of Object.keys(J)){let Y=J[X],q=Q[X];if(q===null)continue;if(q==null){V(173,{group:X});continue}let G=Z[q._key];if(G)if(G.subMenu){let U=Y.map((_)=>{let H=q[_];if(H==null){V(174,{group:X,chartType:_});return}return Z[H]}).filter((_)=>_!==void 0);if(U.length>0)G.subMenu=U,$.subMenu?.push(G)}else $.subMenu?.push(G)}if($.subMenu?.length==0)return null;return $}},Ij=class{constructor(z,J,Q){this.beans=z,this.chartSvc=J,this.getLocaleTextFunc=Q}getMenuItem(){let z=this.getLocaleTextFunc(),J=(Q,Z,$,X,Y=!1)=>{return{name:z(Q,Z+"‎"),action:()=>this.chartSvc.createPivotChart({chartType:$}),_key:X,_enterprise:Y}};return{name:z("pivotChart","Pivot Chart"),_key:"pivotChart",subMenu:[{_key:"pivotColumnChart",name:z("columnChart","Column"),subMenu:[J("groupedColumn","Grouped","groupedColumn","pivotGroupedColumn"),J("stackedColumn","Stacked","stackedColumn","pivotStackedColumn"),J("normalizedColumn","100% Stacked","normalizedColumn","pivotNormalizedColumn")]},{_key:"pivotBarChart",name:z("barChart","Bar"),subMenu:[J("groupedBar","Grouped","groupedBar","pivotGroupedBar"),J("stackedBar","Stacked","stackedBar","pivotStackedBar"),J("normalizedBar","100% Stacked","normalizedBar","pivotNormalizedBar")]},{_key:"pivotPieChart",name:z("pieChart","Pie"),subMenu:[J("pie","Pie","pie","pivotPie"),J("donut","Donut","donut","pivotDonut")]},{_key:"pivotLineChart",name:z("lineChart","Line"),subMenu:[J("lineChart","Line","line","pivotLineChart"),J("stackedLine","Stacked","stackedLine","pivotStackedLine"),J("normalizedLine","100% Stacked","normalizedLine","pivotNormalizedLine")]},{_key:"pivotAreaChart",name:z("areaChart","Area"),subMenu:[J("areaChart","Area","area","pivotArea"),J("stackedArea","Stacked","stackedArea","pivotStackedArea"),J("normalizedArea","100% Stacked","normalizedArea","pivotNormalizedArea")]},{_key:"pivotXYChart",name:z("xyChart","X Y (Scatter)"),subMenu:[J("scatter","Scatter","scatter","pivotScatter"),J("bubble","Bubble","bubble","pivotBubble")]},{_key:"pivotStatisticalChart",_enterprise:!1,name:z("statisticalChart","Statistical"),subMenu:[J("histogramChart","Histogram","histogram","pivotHistogram",!1)]},{_key:"pivotHierarchicalChart",_enterprise:!0,name:z("hierarchicalChart","Hierarchical"),subMenu:[J("treemapChart","Treemap","treemap","pivotTreemap",!0),J("sunburstChart","Sunburst","sunburst","pivotSunburst",!0)]},{_key:"pivotFunnel",name:z("funnel","Funnel"),subMenu:[J("funnel","Funnel","funnel","pivotFunnel"),J("coneFunnel","Cone Funnel","coneFunnel","pivotConeFunnel"),J("pyramid","Pyramid","pyramid","pivotPyramid")]},{_key:"pivotCombinationChart",name:z("combinationChart","Combination"),subMenu:[J("columnLineCombo","Column & Line","columnLineCombo","pivotColumnLineCombo"),J("AreaColumnCombo","Area & Column","areaColumnCombo","pivotAreaColumnCombo")]}],icon:h("chart",this.beans,void 0)}}getConfigLookup(){return{columnGroup:{_key:"pivotColumnChart",column:"pivotGroupedColumn",stackedColumn:"pivotStackedColumn",normalizedColumn:"pivotNormalizedColumn"},barGroup:{_key:"pivotBarChart",bar:"pivotGroupedBar",stackedBar:"pivotStackedBar",normalizedBar:"pivotNormalizedBar"},pieGroup:{_key:"pivotPieChart",pie:"pivotPie",donut:"pivotDonut",doughnut:"pivotDonut"},lineGroup:{_key:"pivotLineChart",line:"pivotLineChart",stackedLine:"pivotStackedLine",normalizedLine:"pivotNormalizedLine"},areaGroup:{_key:"pivotAreaChart",area:"pivotArea",stackedArea:"pivotStackedArea",normalizedArea:"pivotNormalizedArea"},scatterGroup:{_key:"pivotXYChart",bubble:"pivotBubble",scatter:"pivotScatter"},combinationGroup:{_key:"pivotCombinationChart",columnLineCombo:"pivotColumnLineCombo",areaColumnCombo:"pivotAreaColumnCombo",customCombo:null},hierarchicalGroup:{_key:"pivotHierarchicalChart",treemap:"pivotTreemap",sunburst:"pivotSunburst"},statisticalGroup:{_key:"pivotStatisticalChart",histogram:"pivotHistogram",rangeBar:null,rangeArea:null,boxPlot:null},funnelGroup:{_key:"pivotFunnel",funnel:"pivotFunnel",coneFunnel:"pivotConeFunnel",pyramid:"pivotPyramid"},polarGroup:null,specializedGroup:null}}},Cj=class{constructor(z,J,Q){this.beans=z,this.chartSvc=J,this.getLocaleTextFunc=Q}getMenuItem(){let z=this.getLocaleTextFunc(),J=(Q,Z,$,X,Y=!1)=>{return{name:z(Q,Z),action:()=>this.chartSvc.createChartFromCurrentRange($),_key:X,_enterprise:Y}};return{name:z("chartRange","Chart Range"),_key:"chartRange",subMenu:[{name:z("columnChart","Column"),subMenu:[J("groupedColumn","Grouped","groupedColumn","rangeGroupedColumn"),J("stackedColumn","Stacked","stackedColumn","rangeStackedColumn"),J("normalizedColumn","100% Stacked","normalizedColumn","rangeNormalizedColumn")],_key:"rangeColumnChart"},{name:z("barChart","Bar"),subMenu:[J("groupedBar","Grouped","groupedBar","rangeGroupedBar"),J("stackedBar","Stacked","stackedBar","rangeStackedBar"),J("normalizedBar","100% Stacked","normalizedBar","rangeNormalizedBar")],_key:"rangeBarChart"},{name:z("pieChart","Pie"),subMenu:[J("pie","Pie","pie","rangePie"),J("donut","Donut","donut","rangeDonut")],_key:"rangePieChart"},{name:z("lineChart","Line"),subMenu:[J("lineChart","Line","line","rangeLineChart"),J("stackedLine","Stacked","stackedLine","rangeStackedLine"),J("normalizedLine","100% Stacked","normalizedLine","rangeNormalizedLine")],_key:"rangeLineChart"},{name:z("areaChart","Area"),subMenu:[J("areaChart","Area","area","rangeArea"),J("stackedArea","Stacked","stackedArea","rangeStackedArea"),J("normalizedArea","100% Stacked","normalizedArea","rangeNormalizedArea")],_key:"rangeAreaChart"},{name:z("xyChart","X Y (Scatter)"),subMenu:[J("scatter","Scatter","scatter","rangeScatter"),J("bubble","Bubble","bubble","rangeBubble")],_key:"rangeXYChart"},{name:z("polarChart","Polar"),subMenu:[J("radarLine","Radar Line","radarLine","rangeRadarLine"),J("radarArea","Radar Area","radarArea","rangeRadarArea"),J("nightingale","Nightingale","nightingale","rangeNightingale"),J("radialColumn","Radial Column","radialColumn","rangeRadialColumn"),J("radialBar","Radial Bar","radialBar","rangeRadialBar")],_key:"rangePolarChart",_enterprise:!0},{name:z("statisticalChart","Statistical"),subMenu:[J("boxPlot","Box Plot","boxPlot","rangeBoxPlot",!0),J("histogramChart","Histogram","histogram","rangeHistogram",!1),J("rangeBar","Range Bar","rangeBar","rangeRangeBar",!0),J("rangeArea","Range Area","rangeArea","rangeRangeArea",!0)],_key:"rangeStatisticalChart",_enterprise:!1},{name:z("hierarchicalChart","Hierarchical"),subMenu:[J("treemap","Treemap","treemap","rangeTreemap"),J("sunburst","Sunburst","sunburst","rangeSunburst")],_key:"rangeHierarchicalChart",_enterprise:!0},{name:z("specializedChart","Specialized"),subMenu:[J("heatmap","Heatmap","heatmap","rangeHeatmap"),J("waterfall","Waterfall","waterfall","rangeWaterfall")],_key:"rangeSpecializedChart",_enterprise:!0},{name:z("funnel","Funnel"),subMenu:[J("funnel","Funnel","funnel","rangeFunnel"),J("coneFunnel","Cone Funnel","coneFunnel","rangeConeFunnel"),J("pyramid","Pyramid","pyramid","rangePyramid")],_key:"rangeFunnel",_enterprise:!0},{name:z("combinationChart","Combination"),subMenu:[J("columnLineCombo","Column & Line","columnLineCombo","rangeColumnLineCombo"),J("AreaColumnCombo","Area & Column","areaColumnCombo","rangeAreaColumnCombo")],_key:"rangeCombinationChart"}],icon:h("chart",this.beans,void 0)}}getConfigLookup(){return{columnGroup:{_key:"rangeColumnChart",column:"rangeGroupedColumn",stackedColumn:"rangeStackedColumn",normalizedColumn:"rangeNormalizedColumn"},barGroup:{_key:"rangeBarChart",bar:"rangeGroupedBar",stackedBar:"rangeStackedBar",normalizedBar:"rangeNormalizedBar"},pieGroup:{_key:"rangePieChart",pie:"rangePie",donut:"rangeDonut",doughnut:"rangeDonut"},lineGroup:{_key:"rangeLineChart",line:"rangeLineChart",stackedLine:"rangeStackedLine",normalizedLine:"rangeNormalizedLine"},areaGroup:{_key:"rangeAreaChart",area:"rangeArea",stackedArea:"rangeStackedArea",normalizedArea:"rangeNormalizedArea"},scatterGroup:{_key:"rangeXYChart",bubble:"rangeBubble",scatter:"rangeScatter"},polarGroup:{_key:"rangePolarChart",radarLine:"rangeRadarLine",radarArea:"rangeRadarArea",nightingale:"rangeNightingale",radialColumn:"rangeRadialColumn",radialBar:"rangeRadialBar"},statisticalGroup:{_key:"rangeStatisticalChart",boxPlot:"rangeBoxPlot",histogram:"rangeHistogram",rangeBar:"rangeRangeBar",rangeArea:"rangeRangeArea"},hierarchicalGroup:{_key:"rangeHierarchicalChart",treemap:"rangeTreemap",sunburst:"rangeSunburst"},specializedGroup:{_key:"rangeSpecializedChart",heatmap:"rangeHeatmap",waterfall:"rangeWaterfall"},funnelGroup:{_key:"rangeFunnel",funnel:"rangeFunnel",coneFunnel:"rangeConeFunnel",pyramid:"rangePyramid"},combinationGroup:{_key:"rangeCombinationChart",columnLineCombo:"rangeColumnLineCombo",areaColumnCombo:"rangeAreaColumnCombo",customCombo:null}}}},yj=class extends S{constructor(){super(...arguments);this.beanName="colChooserFactory"}createColumnSelectPanel(z,J,Q,Z){let $=z.createManagedBean(new Sq),X=Z??J?.getColDef().columnChooserParams??{},{contractColumnSelection:Y,suppressColumnExpandAll:q,suppressColumnFilter:G,suppressColumnSelectAll:U,suppressSyncLayoutWithGrid:_,columnLayout:H}=X;if($.init(!!Q,C(this.gos,{suppressColumnMove:!1,suppressValues:!1,suppressPivots:!1,suppressRowGroups:!1,suppressPivotMode:!1,contractColumnSelection:!!Y,suppressColumnExpandAll:!!q,suppressColumnFilter:!!G,suppressColumnSelectAll:!!U,suppressSyncLayoutWithGrid:!!H||!!_,onStateUpdated:()=>{}}),"columnMenu"),H)$.setColumnLayout(H);return $}showColumnChooser({column:z,chooserParams:J,eventSource:Q,headerPosition:Z}){this.hideActiveColumnChooser();let $=this.createColumnSelectPanel(this,z,!0,J),X=this.getLocaleTextFunc(),Y=this.beans,{visibleCols:q,focusSvc:G,menuUtils:U}=Y,_=q.allCols.indexOf(z),H=z?G.focusedHeader??Z??null:null;this.activeColumnChooserDialog=this.createBean(new zA({title:X("chooseColumns","Choose Columns"),component:$,width:300,height:300,resizable:!0,movable:!0,centered:!0,closable:!0,afterGuiAttached:()=>{O0(Y,$.getGui())?.focus({preventScroll:!0}),this.dispatchVisibleChangedEvent(!0,z)},closedCallback:(W)=>{let B=this.activeColumnChooser.getGui();if(this.destroyBean(this.activeColumnChooser),this.activeColumnChooser=void 0,this.activeColumnChooserDialog=void 0,this.dispatchVisibleChangedEvent(!1,z),z)U.restoreFocusOnClose({column:z,headerPosition:H,columnIndex:_,eventSource:Q},B,W,!0)},postProcessPopupParams:{type:"columnChooser",column:z,eventSource:Q}})),this.activeColumnChooser=$}hideActiveColumnChooser(){this.destroyBean(this.activeColumnChooserDialog)}dispatchVisibleChangedEvent(z,J){this.eventSvc.dispatchEvent({type:"columnMenuVisibleChanged",visible:z,switchingTab:!1,key:"columnChooser",column:J??null})}},bj={pinSubMenu:"PinnedColumn",pinLeft:"PinnedColumn",pinRight:"PinnedColumn",clearPinned:"PinnedColumn",pinRowSubMenu:"PinnedRow",pinBottom:"PinnedRow",pinTop:"PinnedRow",unpinRow:"PinnedRow",valueAggSubMenu:"SharedAggregation",autoSizeThis:"ColumnAutoSize",autoSizeAll:"ColumnAutoSize",rowGroup:"SharedRowGrouping",rowUnGroup:"SharedRowGrouping",resetColumns:"CommunityCore",expandAll:["ClientSideRowModelHierarchy","ServerSideRowModel"],contractAll:["ClientSideRowModelHierarchy","ServerSideRowModel"],copy:"Clipboard",copyWithHeaders:"Clipboard",copyWithGroupHeaders:"Clipboard",cut:"Clipboard",paste:"Clipboard",export:["CsvExport","ExcelExport"],csvExport:"CsvExport",excelExport:"ExcelExport",separator:"CommunityCore",pivotChart:"IntegratedCharts",chartRange:"IntegratedCharts",columnFilter:"ColumnFilter",columnChooser:"ColumnMenu",sortAscending:"Sort",sortDescending:"Sort",sortAbsoluteAscending:"Sort",sortAbsoluteDescending:"Sort",sortUnSort:"Sort"};function xj(z,J){let Q=bj[J];if(Q)z.assertModuleRegistered(Q,`menu item '${J}'`)}var U1="separator";function Aq(z,J){if(!z)return;for(let Q=z.length-2;Q>=0;Q--){let Z=z[Q]===J,$=z[Q+1]===J;if(Z&&$)z.splice(Q+1,1)}}var wj={sortAscending:{fallback:"Sort Ascending",getSortDef:()=>({type:"default",direction:"asc"})},sortDescending:{fallback:"Sort Descending",getSortDef:()=>({type:"default",direction:"desc"})},sortAbsoluteAscending:{fallback:"Sort Absolute Ascending",getSortDef:()=>({type:"absolute",direction:"asc"})},sortAbsoluteDescending:{fallback:"Sort Absolute Descending",getSortDef:()=>({type:"absolute",direction:"desc"})},sortUnSort:{fallback:"Clear Sort",getSortDef:(z)=>({type:A4(z.getSortDef()?.type),direction:null})}},Nj=class extends S{constructor(){super(...arguments);this.beanName="menuItemMapper"}mapWithStockItems(z,J,Q,Z,$){if(!z)return[];let X=[],Y=this.getLocaleTextFunc(),{beans:q,gos:G}=this,{pinnedCols:U,colAutosize:_,aggFuncSvc:H,rowGroupColsSvc:W,colNames:B,colModel:E,clipboardSvc:K,expansionSvc:F,focusSvc:L,csvCreator:D,excelCreator:M,menuSvc:f,colChooserFactory:A,sortSvc:R,chartMenuItemMapper:O,valueColsSvc:v,pinnedRowModel:I}=q,b=(m,g,e,t)=>{switch(xj(G,m),m){case"pinSubMenu":return U&&g?{name:Y("pinColumn","Pin Column"),icon:h("menuPin",q,null),subMenu:["clearPinned","pinLeft","pinRight"]}:null;case"pinLeft":return U&&g?{name:Y("pinLeft","Pin Left"),action:()=>U.setColsPinned([g],"left",t),checked:!!g&&g.isPinnedLeft()}:null;case"pinRight":return U&&g?{name:Y("pinRight","Pin Right"),action:()=>U.setColsPinned([g],"right",t),checked:!!g&&g.isPinnedRight()}:null;case"clearPinned":return U&&g?{name:Y("noPin","No Pin"),action:()=>U.setColsPinned([g],null,t),checked:!!g&&!g.isPinned()}:null;case"pinRowSubMenu":{let u=G.get("enableRowPinning"),Q0=[],s=Q?.rowPinned??Q?.pinnedSibling?.rowPinned;if(s)Q0.push("unpinRow");if(u&&u!=="bottom"&&s!="top")Q0.push("pinTop");if(u&&u!=="top"&&s!="bottom")Q0.push("pinBottom");return I?.isManual()?{name:Y("pinRow","Pin Row"),icon:h("rowPin",q,g),subMenu:Q0}:null}case"pinTop":return I?.isManual()?{name:Y("pinTop","Pin to Top"),icon:h("rowPinTop",q,g),action:({node:u,column:Q0})=>u&&I.pinRow(u,"top",Q0)}:null;case"pinBottom":return I?.isManual()?{name:Y("pinBottom","Pin to Bottom"),icon:h("rowPinBottom",q,g),action:({node:u,column:Q0})=>u&&I.pinRow(u,"bottom",Q0)}:null;case"unpinRow":return I?.isManual()?{name:Y("unpinRow","Unpin Row"),icon:h("rowUnpin",q,g),action:({node:u,column:Q0})=>u&&I.pinRow(u,null,Q0)}:null;case"valueAggSubMenu":if(H&&v&&(g?.isPrimary()||g?.getColDef().pivotValueColumn))return{name:Y("valueAggregation","Value Aggregation"),icon:h("menuValue",q,null),subMenu:gj(g,H,v,Y),disabled:G.get("functionsReadOnly")};else return null;case"autoSizeThis":return _?{name:Y("autosizeThisColumn","Autosize This Column"),action:()=>g&&_.autoSizeColumn(g,t,G.get("skipHeaderOnAutoSize"))}:null;case"autoSizeAll":return _?{name:Y("autosizeAllColumns","Autosize All Columns"),action:()=>_.autoSizeAllColumns({source:t,skipHeader:G.get("skipHeaderOnAutoSize")})}:null;case"rowGroup":return W?{name:z6(Y,"groupBy",B.getDisplayNameForColumn(g,"header")),disabled:G.get("functionsReadOnly")||g?.isRowGroupActive()||!g?.getColDef().enableRowGroup,action:()=>W.addColumns([g],t),icon:h("menuAddRowGroup",q,null)}:null;case"rowUnGroup":if(W&&G.isModuleRegistered("SharedRowGrouping")){let u=g?.getColDef().showRowGroup,Q0=G.get("groupLockGroupColumns"),s,P0,T0;if(u===!0)s=Y("ungroupAll","Un-Group All"),P0=G.get("functionsReadOnly")||Q0===-1||Q0>=(W.columns.length??0),T0=()=>W.setColumns(W.columns.slice(0,Q0),t);else if(typeof u==="string"){let V0=E.getColDefCol(u),uz=V0!=null?B.getDisplayNameForColumn(V0,"header"):u;s=z6(Y,"ungroupBy",uz),P0=G.get("functionsReadOnly")||Q6(V0,q),T0=()=>{W.removeColumns([u],t)}}else s=z6(Y,"ungroupBy",B.getDisplayNameForColumn(g,"header")),P0=G.get("functionsReadOnly")||!g?.isRowGroupActive()||!g?.getColDef().enableRowGroup||Q6(g,q),T0=()=>W.removeColumns([g],t);return{name:s,disabled:P0,action:T0,icon:h("menuRemoveRowGroup",q,null)}}else return null;case"resetColumns":return{name:Y("resetColumns","Reset Columns"),action:()=>C$(q,t)};case"expandAll":return F?{name:Y("expandAll","Expand All Row Groups"),action:()=>F.expandAll(!0)}:null;case"contractAll":return F?{name:Y("collapseAll","Collapse All Row Groups"),action:()=>F.expandAll(!1)}:null;case"copy":return K?{name:Y("copy","Copy"),shortcut:Y("ctrlC","Ctrl+C"),icon:h("clipboardCopy",q,null),action:()=>K.copyToClipboard()}:null;case"copyWithHeaders":return K?{name:Y("copyWithHeaders","Copy with Headers"),icon:h("clipboardCopy",q,null),action:()=>K.copyToClipboard({includeHeaders:!0})}:null;case"copyWithGroupHeaders":return K?{name:Y("copyWithGroupHeaders","Copy with Group Headers"),icon:h("clipboardCopy",q,null),action:()=>K.copyToClipboard({includeHeaders:!0,includeGroupHeaders:!0})}:null;case"cut":if(K){let u=L.getFocusedCell(),Q0=u?S0(q,u):null,s=Q0?u?.column.isCellEditable(Q0):!1;return{name:Y("cut","Cut"),shortcut:Y("ctrlX","Ctrl+X"),icon:h("clipboardCut",q,null),disabled:!s||G.get("suppressCutToClipboard"),action:()=>K.cutToClipboard(void 0,"contextMenu")}}else return null;case"paste":if(K){let u=G.get("suppressClipboardApi")||G.get("suppressClipboardPaste")||!g||!Q||!g.isCellEditable(Q)||g.isSuppressPaste(Q);return{name:Y("paste","Paste"),shortcut:Y("ctrlV","Ctrl+V"),icon:h("clipboardPaste",q,null),disabled:u,action:()=>K.pasteFromClipboard()}}else return null;case"export":{let u=[];if(!G.get("suppressCsvExport")&&D)u.push("csvExport");if(!G.get("suppressExcelExport")&&M)u.push("excelExport");return u.length?{name:Y("export","Export"),subMenu:u,icon:h("save",q,null)}:null}case"csvExport":return D?{name:Y("csvExport","CSV Export"),icon:h("csvExport",q,null),action:()=>D.exportDataAsCsv()}:null;case"excelExport":return M?{name:Y("excelExport","Excel Export"),icon:h("excelExport",q,null),action:()=>M.exportDataAsExcel()}:null;case"separator":return m;case"pivotChart":case"chartRange":return O.getChartItems(m);case"columnFilter":return f&&g?{name:Y("columnFilter","Column Filter"),icon:h("filter",q,null),action:()=>f.showFilterMenu({column:g,buttonElement:e(),containerType:"columnFilter",positionBy:"button"})}:null;case"columnChooser":{let u=L.focusedHeader;return A?{name:Y("columnChooser","Choose Columns"),icon:h("columns",q,null),action:()=>A.showColumnChooser({column:g,eventSource:e(),headerPosition:u})}:null}case"sortUnSort":case"sortAscending":case"sortDescending":case"sortAbsoluteAscending":case"sortAbsoluteDescending":{if(!R||!g)return null;let{fallback:u,getSortDef:Q0}=wj[m];return{name:Y(m,u),icon:h(m,q,null),action:()=>R.setSortForColumn(g,Q0(g),!1,t)}}default:return V(176,{key:m}),null}};for(let m of z){let g;if(typeof m==="string")g=b(m,J,Z,$);else g={...m};if(!g)continue;let e=g,{subMenu:t}=e;if(t&&t instanceof Array)e.subMenu=this.mapWithStockItems(t,J,Q,Z,$);if(g!=null)X.push(g)}return Aq(X,U1),X}};function gj(z,J,Q,Z){let $;if(z.isPrimary())$=z;else{let Y=z.getColDef().pivotValueColumn;$=P(Y)?Y:void 0}let X=[];if($){let Y=$.isValueActive(),q=J.getFuncNames($);X.push({name:Z("noAggregation","None"),action:()=>{Q.removeColumns([$],"contextMenu"),Q.setColumnAggFunc($,void 0,"contextMenu")},checked:!Y});for(let G of q)X.push({name:Z(G,J.getDefaultFuncLabel(G)),action:()=>{Q.setColumnAggFunc($,G,"contextMenu"),Q.addColumns([$],"contextMenu")},checked:Y&&$.getAggFunc()===G})}return X}var hj=class extends S{constructor(){super(...arguments);this.beanName="colMenuFactory"}createMenu(z,J,Q,Z){let $=z.createManagedBean(new Mq(0,{column:Q??null,node:null,value:null})),X=this.beans.menuItemMapper.mapWithStockItems(J,Q??null,null,Z,"columnMenu");return $.addMenuItems(X),$}getMenuItems(z=null,J=null){let Q=this.getDefaultMenuOptions(z),Z,$=(z?.getColDef()??J?.getColGroupDef())?.mainMenuItems;if(Array.isArray($))Z=$;else if(typeof $==="function")Z=$(C(this.gos,{column:z,columnGroup:J,defaultItems:Q}));else{let X=this.gos.getCallback("getMainMenuItems");if(X)Z=X({column:z,columnGroup:J,defaultItems:Q});else Z=Q}return Aq(Z,U1),Z}getDefaultMenuOptions(z){let J=[],{beans:Q,gos:Z}=this,{colChooserFactory:$,rowGroupColsSvc:X,colModel:Y,expansionSvc:q,sortSvc:G,menuSvc:U,pinnedCols:_,aggFuncSvc:H,colAutosize:W}=Q,B=F0(Z),E=()=>{if(!B&&$)J.push("columnChooser");J.push("resetColumns")};if(!z)return E(),J;let{colDef:K}=z,F=_&&!K.lockPinned,L=X?.columns.length??0,D=L>0,M=c4(Z),f=Z.get("treeData"),A=z.isPrimary(),R=!A||H&&z.isAllowValue()&&(D||M||f);if(G&&!B&&z.isSortable()){let{isDefaultSortAllowed:O,isAbsoluteSortAllowed:v,isAbsoluteSort:I,isDefaultSort:b,isAscending:m,isDescending:g,direction:e}=PZ(z,Q);if(O&&!(m&&b))J.push("sortAscending");if(O&&!(g&&b))J.push("sortDescending");if(v&&!(m&&I))J.push("sortAbsoluteAscending");if(v&&!(g&&I))J.push("sortAbsoluteDescending");if(e)J.push("sortUnSort");J.push(U1)}if(U?.isFilterMenuItemEnabled(z))J.push("columnFilter"),J.push(U1);if(F)J.push("pinSubMenu");if(R)J.push("valueAggSubMenu");if(F||R)J.push(U1);if(W){if(!K.suppressAutoSize)J.push("autoSizeThis");J.push("autoSizeAll"),J.push(U1)}if(X&&Z.isModuleRegistered("SharedRowGrouping")){let O=J.length;if(K.showRowGroup)J.push("rowUnGroup");else if(z.isAllowRowGroup()&&A)if(z.isRowGroupActive()){if(!Q6(z,Q))J.push("rowUnGroup")}else J.push("rowGroup");if(J.length>O)J.push(U1)}if(E(),q&&(o(Z)||Z.get("ssrmExpandAllAffectsAllRows"))&&(f||L>(Y.isPivotMode()?1:0)))J.push("expandAll"),J.push("contractAll");return J}},jY="ag-context-menu-open",uj=class extends S{constructor(){super(...arguments);this.beanName="contextMenuSvc",this.focusedCell=null}postConstruct(){this.menu=this.createManagedBean(new iR({menuItemCallbacks:U7,getMenuItems:this.getMenuItems.bind(this),mapMenuItems:this.mapWithStockItems.bind(this),beforeMenuOpen:this.beforeMenuOpen.bind(this),onMenuOpen:this.onMenuOpen.bind(this),onMenuClose:this.onMenuClose.bind(this),afterMenuDestroyed:this.afterMenuDestroyed.bind(this),onVisibleChanged:this.dispatchVisibleChangedEvent.bind(this),shouldBlockMenuOpen:()=>!!this.beans.overlays?.exclusive}))}hideActiveMenu(){this.menu.hideActiveMenu()}getMenuItems(z,J){let{column:Q,node:Z,value:$}=z,X=[],{clipboardSvc:Y,chartSvc:q,csvCreator:G,excelCreator:U,colModel:_,rangeSvc:H,gos:W}=this.beans;if(P(Z)&&Y){if(Q){if(!W.get("suppressCutToClipboard"))X.push("cut");X.push("copy","copyWithHeaders","copyWithGroupHeaders","paste","separator")}}if(W.get("enableCharts")&&q){if(_.isPivotMode())X.push("pivotChart");if(H&&!H.isEmpty())X.push("chartRange")}if(P(Z)){let F=W.get("enableRowPinning"),L=W.get("isRowPinnable");if(F){let R=Z.level>-1&&Z.footer,O=Z.level===-1&&Z.footer,v=c4(W);if(O&&!(v==="pinnedBottom"||v==="pinnedTop")||!O&&!R){if(L?.(Z)??!0)X.push("pinRowSubMenu")}}let D=W.get("suppressExcelExport")||!U,M=W.get("suppressCsvExport")||!G;if(!a4()&&(!D||!M))X.push("export")}let B=X.length?X:void 0,E=Q?.getColDef().contextMenuItems;if(Array.isArray(E))return E;if(typeof E==="function")return E(C(W,{column:Q,node:Z,value:$,defaultItems:B,event:J}));return W.getCallback("getContextMenuItems")?.({column:Q,node:Z,value:$,defaultItems:B,event:J})??X}getContextMenuPosition(z,J){let Q=this.getRowCtrl(z),Z=this.getCellGui(Q,J);if(!Z)return{x:0,y:Q?.getRowYPosition()??0};let $=Z.getBoundingClientRect();return{x:$.x+$.width/2,y:$.y+$.height/2}}showContextMenu(z){let J=z.rowNode??null,Q=z.column??null,{anchorToElement:Z,value:$,source:X}=z;if(J&&Q&&$==null)$=this.beans.valueSvc.getValueForDisplay({column:Q,node:J,from:"edit"}).value;if(Z==null)Z=this.getContextMenuAnchorElement(J,Q);this.beans.menuUtils.onContextMenu({mouseEvent:z.mouseEvent??null,touchEvent:z.touchEvent??null,showMenuCallback:(Y)=>this.menu.showMenu({node:J,column:Q,value:$},Y,Z),source:X})}handleContextMenuMouseEvent(z,J,Q,Z){let $=Z?.rowNode??Q?.rowNode??null,X=Z?.column??Q?.findFullWidthInfoForEvent(z||J)?.column??null,{valueSvc:Y,ctrlsSvc:q}=this.beans,G=X?Y.getValue(X,$,"edit"):null,U=q.getGridBodyCtrl(),_=Z?Z.eGui:U.eGridBody;this.showContextMenu({mouseEvent:z,touchEvent:J,rowNode:$,column:X,value:G,anchorToElement:_,source:"ui"})}beforeMenuOpen(z){if(!z.column)this.beans.focusSvc.clearFocusedCell()}onMenuOpen(){let{ctrlsSvc:z,focusSvc:J}=this.beans;z.getGridBodyCtrl().eGridBody.classList.add(jY),this.focusedCell=J.getFocusedCell()}onMenuClose(){this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody.classList.remove(jY)}afterMenuDestroyed(){let{beans:z,focusedCell:J}=this;iZ(z,J)}dispatchVisibleChangedEvent(z,J){this.eventSvc.dispatchEvent({type:"contextMenuVisibleChanged",visible:z,source:J})}getRowCtrl(z){let{rowIndex:J,rowPinned:Q}=z||{};if(J==null)return;return this.beans.rowRenderer.getRowByPosition({rowIndex:J,rowPinned:Q})||void 0}getCellGui(z,J){if(!z||!J)return;return z.getCellCtrl(J)?.eGui||void 0}getContextMenuAnchorElement(z,J){let Q=this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody,Z=this.getRowCtrl(z);if(!Z)return Q;let $=this.getCellGui(Z,J);if($)return $;if(Z.isFullWidth())return Z.getFullWidthElement();return Q}mapWithStockItems(z,J,Q){let{column:Z,node:$}=J;return this.beans.menuItemMapper.mapWithStockItems(z,Z,$,Q,"contextMenu")}},xz="filterMenuTab",wz="generalMenuTab",_1="columnsMenuTab",xJ=[wz,xz,_1],mj=class extends S{constructor(){super(...arguments);this.beanName="enterpriseMenuFactory"}hideActiveMenu(){this.destroyBean(this.activeMenu)}showMenuAfterMouseEvent(z,J,Q,Z,$){let{column:X,columnGroup:Y}=this.splitColumnOrGroup(z),q=$?"filterMenuTab":void 0;this.showMenu(X,Y,(G)=>{let U=G.getGui();if(this.beans.popupSvc.positionPopupUnderMouseEvent({type:Q,additionalParams:{column:X},mouseEvent:J,ePopup:U}),q)G.showTab?.(q);this.dispatchVisibleChangedEvent(!0,!1,X,Y,q)},Q,q,void 0,J.target,Z)}splitColumnOrGroup(z){let J=z&&G4(z);return{column:J?z:void 0,columnGroup:J?void 0:z}}showMenuAfterButtonClick(z,J,Q,Z,$){let X=-1,Y="left";if(this.gos.get("enableRtl"))X=1,Y="right";let q=$?"filterMenuTab":void 0,G=q?[q]:void 0,U=F0(this.gos),_=(U?9:4)*X,H=U?-23:4,{column:W,columnGroup:B}=this.splitColumnOrGroup(z);this.showMenu(W,B,(E)=>{let K=E.getGui();if(this.beans.popupSvc.positionPopupByComponent({type:Q,additionalParams:{column:W},eventSource:J,ePopup:K,alignSide:Y,nudgeX:_,nudgeY:H,position:"under",keepWithinBounds:!0}),q)E.showTab?.(q);this.dispatchVisibleChangedEvent(!0,!1,W,B,q)},Q,q,G,J,Z)}showMenu(z,J,Q,Z,$,X,Y,q){let G=this.getMenuParams(z,J,X,Y);if(!G)return;let{menu:U,eMenuGui:_,anchorToElement:H,restoreFocusParams:W}=G,B=[],{menuUtils:E,popupSvc:K}=this.beans;B.push((L)=>{let D=U.getGui();if(this.destroyBean(U),z)O2(z,!1,"contextMenu"),E.restoreFocusOnClose(W,D,L);q?.()});let F=this.getLocaleTextFunc();if(K.addPopup({modal:!0,eChild:_,closeOnEsc:!0,closedCallback:(L)=>{for(let D of B)D(L);this.dispatchVisibleChangedEvent(!1,!1,z,J,$)},afterGuiAttached:(L)=>U.afterGuiAttached(Object.assign({},{container:Z},L)),positionCallback:$?()=>Q(U):void 0,ariaLabel:F("ariaLabelColumnMenu","Column Menu")}),!$)U.showTabBasedOnPreviousSelection?.(),Q(U);if(AZ(this.gos)){let L=K.setPopupPositionRelatedToElement(_,H);if(L&&z)this.addStopAnchoring(L,z,B)}if(U.addEventListener("tabSelected",(L)=>{this.dispatchVisibleChangedEvent(!1,!0,z),this.lastSelectedTab=L.key,this.dispatchVisibleChangedEvent(!0,!0,z)}),z)O2(z,!0,"contextMenu");this.activeMenu=U,U.addEventListener("destroyed",()=>{if(this.activeMenu===U)this.activeMenu=null})}addStopAnchoring(z,J,Q){z.then((Z)=>{J.__addEventListener("leftChanged",Z),J.__addEventListener("visibleChanged",Z),Q.push(()=>{J.__removeEventListener("leftChanged",Z),J.__removeEventListener("visibleChanged",Z)})})}getMenuParams(z,J,Q,Z){let{focusSvc:$,visibleCols:X,ctrlsSvc:Y}=this.beans,q={column:z,headerPosition:$.focusedHeader,columnIndex:X.allCols.indexOf(z),eventSource:Z},G=this.createMenu(z,J,q,Q,Z);return G?{menu:G,eMenuGui:G.getGui(),anchorToElement:Z||Y.getGridBodyCtrl().eGridBody,restoreFocusParams:q}:void 0}createMenu(z,J,Q,Z,$){if(F0(this.gos))return this.createBean(new cj(z,Q,this.lastSelectedTab,Z,$));else{let X=this.beans.colMenuFactory.getMenuItems(z,J);return X.length?this.createBean(new ij(X,z,Q,$)):void 0}}dispatchVisibleChangedEvent(z,J,Q,Z,$){this.eventSvc.dispatchEvent({type:"columnMenuVisibleChanged",visible:z,switchingTab:J,key:this.lastSelectedTab??$??(F0(this.gos)?wz:"columnMenu"),column:Q??null,columnGroup:Z??null})}isMenuEnabled(z){if(!F0(this.gos))return!0;let J=!this.beans.filterManager?.isFilterAllowed(z),Q=z.getColDef().menuTabs??xJ;return(J&&Q.includes(xz)?Q.length-1:Q.length)>0}showMenuAfterContextMenuEvent(z,J,Q){this.beans.menuUtils.onContextMenu({mouseEvent:J,touchEvent:Q,source:"ui",showMenuCallback:(Z)=>{return this.showMenuAfterMouseEvent(z,Z,"columnMenu"),!0}})}},cj=class extends S{constructor(z,J,Q,Z,$){super();this.column=z,this.restoreFocusParams=J,this.initialSelection=Q,this.restrictTo=Z,this.sourceElement=$,this.tabFactories={},this.includeChecks={};let{tabFactories:X,includeChecks:Y}=this;X[wz]=this.createMainPanel.bind(this),X[xz]=this.createFilterPanel.bind(this),X[_1]=this.createColumnsPanel.bind(this),Y[wz]=()=>!0,Y[xz]=()=>z?!!this.beans.filterManager?.isFilterAllowed(z):!1,Y[_1]=()=>!0}postConstruct(){let z=this.getTabsToCreate().map((Q)=>this.createTab(Q)),J=new rR({items:z,cssClass:"ag-menu",onActiveItemClicked:this.onHidePopup.bind(this),onItemClicked:this.onTabItemClicked.bind(this)});this.tabbedLayout=this.createBean(J),this.mainMenuList?.setParentComponent(J),this.addDestroyFunc(()=>this.destroyBean(J))}getTabsToCreate(){if(this.restrictTo)return this.restrictTo;return(this.column?.getColDef().menuTabs??xJ).filter((z)=>this.isValidMenuTabItem(z)&&this.isNotSuppressed(z))}isValidMenuTabItem(z){let J=!0,Q=xJ;if(this.restrictTo!=null)J=this.restrictTo.indexOf(z)>-1,Q=this.restrictTo;if(J=J&&xJ.indexOf(z)>-1,!J)V(175,{menuTabName:z,itemsToConsider:Q});return J}isNotSuppressed(z){return this.includeChecks[z]()}createTab(z){return this.tabFactories[z]()}showTabBasedOnPreviousSelection(){this.showTab(this.initialSelection)}showTab(z){let{tabItemColumns:J,tabbedLayout:Q,tabItemFilter:Z,tabItemGeneral:$}=this;if(J&&z===_1)Q.showItem(J);else if(Z&&z===xz)Q.showItem(Z);else if($&&z===wz)Q.showItem($);else Q.showFirstItem()}onTabItemClicked(z){let J=null;switch(z.item){case this.tabItemColumns:J=_1;break;case this.tabItemFilter:J=xz;break;case this.tabItemGeneral:J=wz;break}if(J)this.activateTab(J)}activateTab(z){let J={type:"tabSelected",key:z};this.dispatchLocalEvent(J)}createMainPanel(){let{beans:z,column:J}=this,Q=z.colMenuFactory,Z=Q.createMenu(this,Q.getMenuItems(J),this.column,()=>this.sourceElement??this.getGui());this.mainMenuList=Z,Z.addEventListener("closeMenu",this.onHidePopup.bind(this));let $={title:h("legacyMenu",z,J),titleLabel:wz.replace("MenuTab",""),bodyPromise:N.resolve(Z.getGui()),name:wz};return this.tabItemGeneral=$,$}onHidePopup(z){this.beans.menuUtils.closePopupAndRestoreFocusOnSelect(this.hidePopupFunc,this.restoreFocusParams,z)}createFilterPanel(){let z=this.column?this.createBean(new f5(this.column,"COLUMN_MENU")):null;if(this.filterComp=z,!z?.hasFilter())r(119);let J=(Z)=>z?.afterGuiAttached(Z),Q=()=>z?.afterGuiDetached();return this.tabItemFilter={title:h("filterTab",this.beans,this.column),titleLabel:xz.replace("MenuTab",""),bodyPromise:N.resolve(z?.getGui()),afterAttachedCallback:J,afterDetachedCallback:Q,name:xz},this.tabItemFilter}createColumnsPanel(){let z=z0({tag:"div",cls:"ag-menu-column-select-wrapper"}),{beans:J,column:Q}=this,$=J.colChooserFactory.createColumnSelectPanel(this,Q).getGui();$.classList.add("ag-menu-column-select"),z.appendChild($);let X={title:h("columns",J,Q),titleLabel:_1.replace("MenuTab",""),bodyPromise:N.resolve(z),name:_1};return this.tabItemColumns=X,X}afterGuiAttached(z){let{container:J,hidePopup:Q}=z;if(this.tabbedLayout.setAfterAttachedParams({container:J,hidePopup:Q}),Q)this.hidePopupFunc=Q,this.addDestroyFunc(Q)}getGui(){return this.tabbedLayout.getGui()}destroy(){super.destroy(),this.destroyBean(this.filterComp)}},ij=class extends x{constructor(z,J,Q,Z){super({tag:"div",ref:"eColumnMenu",cls:"ag-menu ag-column-menu",role:"presentation"});this.menuItems=z,this.column=J,this.restoreFocusParams=Q,this.sourceElement=Z,this.eColumnMenu=j}postConstruct(){let z=this.beans.colMenuFactory.createMenu(this,this.menuItems,this.column,()=>this.sourceElement??this.getGui());this.mainMenuList=z,z.addEventListener("closeMenu",this.onHidePopup.bind(this)),this.eColumnMenu.appendChild(z.getGui())}onHidePopup(z){this.beans.menuUtils.closePopupAndRestoreFocusOnSelect(this.hidePopupFunc,this.restoreFocusParams,z)}afterGuiAttached({hidePopup:z}){if(z)this.hidePopupFunc=z,this.addDestroyFunc(z);E0(this.mainMenuList.getGui())}};function pj(z,J){let{contextMenuSvc:Q}=z;if(!Q)return;let{rowNode:Z,column:$,value:X,x:Y,y:q}=J||{},{x:G,y:U}=Q.getContextMenuPosition(Z,$);if(Y!=null)G=Y;if(q!=null)U=q;Q.showContextMenu({mouseEvent:new MouseEvent("mousedown",{clientX:G,clientY:U}),rowNode:Z,column:$,value:X,source:"api"})}function nj(z,J){z.colChooserFactory?.showColumnChooser({chooserParams:J})}function dj(z){z.colChooserFactory?.hideActiveColumnChooser()}var rj=class extends S{constructor(){super(...arguments);this.beanName="menuUtils"}restoreFocusOnClose(z,J,Q,Z){let{eventSource:$}=z,X=Q instanceof KeyboardEvent;if(!Z&&!X||!$)return;let Y=n(this.beans);if(!J.contains(Y)&&!Vz(this.beans))return;this.focusHeaderCell(z)}closePopupAndRestoreFocusOnSelect(z,J,Q){let Z;if(Q?.keyboardEvent)Z=Q.keyboardEvent;z(Z&&{keyboardEvent:Z});let $=this.beans,X=$.focusSvc,Y=X.getFocusedCell();if(Vz($))if(Y){let{rowIndex:q,rowPinned:G,column:U}=Y;X.setFocusedCell({rowIndex:q,column:U,rowPinned:G,forceBrowserFocus:!0,preventScrollOnBrowserFocus:!0})}else this.focusHeaderCell(J)}onContextMenu(z){let{mouseEvent:J,touchEvent:Q,showMenuCallback:Z,source:$}=z;if(!this.gos.get("allowContextMenuWithControlKey")){if(J&&(J.ctrlKey||J.metaKey))return}if(J)this.blockMiddleClickScrollsIfNeeded(J);if($==="ui"&&this.gos.get("suppressContextMenu"))return;let X=J??Q.touches[0];if(Z(X)){let Y=J??Q;if(Y?.cancelable)Y.preventDefault()}}async focusHeaderCell(z){let{column:J,columnIndex:Q,headerPosition:Z,eventSource:$}=z,{visibleCols:X,headerNavigation:Y,focusSvc:q}=this.beans,G=await X.allCols.some((U)=>U===J);if(!this.isAlive())return;if(J?.isAlive()&&G&&$&&B0($)){let U=_J($);if(U)Y?.scrollToColumn(J),U.focus()}else if(Z&&Q!==-1){let U=X.allCols,_=U[Q]||y(U);if(_)q.focusHeaderPosition({headerPosition:{headerRowIndex:Z.headerRowIndex,column:_}})}}blockMiddleClickScrollsIfNeeded(z){if(this.gos.get("suppressMiddleClickScrolls")&&z.which===2)z.preventDefault()}},jq={moduleName:"MenuCore",version:$0,beans:[Nj,vj,rj],icons:{chart:"chart",columns:"columns",loadingMenuItems:"loading",menuPin:"pin",menuValue:"aggregation",menuAddRowGroup:"group",menuRemoveRowGroup:"group",clipboardCopy:"copy",clipboardCut:"cut",clipboardPaste:"paste",save:"save",csvExport:"csv",excelExport:"excel",sortAscending:"asc",sortDescending:"desc",sortAbsoluteAscending:"aasc",sortAbsoluteDescending:"adesc",sortUnSort:"none"},dependsOn:[C0,q1,K5,G7]},Oq={moduleName:"ColumnMenu",version:$0,beans:[mj,hj,yj],icons:{ensureColumnVisible:"column-arrow",legacyMenu:"menu",filterTab:"filter",columnSelectClosed:"tree-closed",columnSelectOpen:"tree-open",columnSelectIndeterminate:"tree-indeterminate"},apiFunctions:{showColumnChooser:nj,hideColumnChooser:dj},dependsOn:[jq,p2,n2]},Pq={moduleName:"ContextMenu",version:$0,beans:[uj],apiFunctions:{showContextMenu:pj},dependsOn:[jq]};var W1="__AG_SELECT_ALL__",B1="__AG_ADD_SELECTION_TO_FILTER__",tj=class{constructor(z,J,Q,Z){this.valueSvc=z,this.getValueFormatter=J,this.formatter=Q,this.column=Z,this.displayedKeys=[]}updateDisplayedValuesToAllAvailable(z,J,Q){this.displayedKeys=Array.from(Q)}updateDisplayedValuesToMatchMiniFilter(z,J,Q,Z,$){this.displayedKeys=[];let X=this.getValueFormatter();for(let Y of Q)if(Y==null){if($)this.displayedKeys.push(Y)}else{let q=z(Y),G=this.valueSvc.formatValue(this.column,null,q,X,!1),U=this.formatter(G);if(Z(U))this.displayedKeys.push(Y)}}getDisplayedValueCount(){return this.displayedKeys.length}getDisplayedItem(z){return this.displayedKeys[z]}getSelectAllItem(){return W1}getAddSelectionToFilterItem(){return B1}getDisplayedKeys(){return this.displayedKeys}forEachDisplayedKey(z){this.displayedKeys.forEach(z)}someDisplayedKey(z){return this.displayedKeys.some(z)}hasGroups(){return!1}refresh(){}},sj={tag:"div",cls:"ag-set-filter-item",attrs:{"aria-hidden":"true"},children:[{tag:"span",cls:"ag-set-filter-group-icons",children:[{tag:"span",ref:"eGroupClosedIcon",cls:"ag-set-filter-group-closed-icon"},{tag:"span",ref:"eGroupOpenedIcon",cls:"ag-set-filter-group-opened-icon"},{tag:"span",ref:"eGroupIndeterminateIcon",cls:"ag-set-filter-group-indeterminate-icon"}]},{tag:"ag-checkbox",ref:"eCheckbox",cls:"ag-set-filter-item-checkbox"}]},lj={tag:"div",cls:"ag-set-filter-item",children:[{tag:"ag-checkbox",ref:"eCheckbox",cls:"ag-set-filter-item-checkbox"}]},aj=class extends x{constructor(z){super(z.isGroup?sj:lj,[K4]);this.eCheckbox=j,this.eGroupOpenedIcon=j,this.eGroupClosedIcon=j,this.eGroupIndeterminateIcon=j,this.formattedValue=null,this.focusWrapper=z.focusWrapper,this.value=z.value,this.params=z.params,this.translate=z.translate,this.valueFormatter=z.valueFormatter,this.item=z.item,this.isSelected=z.isSelected,this.isTree=z.isTree,this.depth=z.depth??0,this.isGroup=z.isGroup,this.groupsExist=z.groupsExist,this.isExpanded=z.isExpanded,this.hasIndeterminateExpandState=z.hasIndeterminateExpandState}postConstruct(){if(this.tooltipFeature=this.createOptionalManagedBean(this.beans.registry.createDynamicBean("tooltipFeature",!1,{getGui:()=>this.focusWrapper,getLocation:()=>"setFilterValue",shouldDisplayTooltip:()=>this.shouldDisplayTooltip?.()??!0,getAdditionalParams:()=>{let{colDef:z,column:J}=this.params,Q={colDef:z,column:J,valueFormatted:this.formattedValue??void 0};if(this.isTree)Q.level=this.depth;return Q}})),this.addDestroyFunc(()=>this.destroyCellRendererComponent?.()),this.render(),this.eCheckbox.setLabelEllipsis(!0).setValue(this.isSelected,!0).setDisabled(!!this.params.readOnly).getInputElement().setAttribute("tabindex","-1"),this.refreshVariableAriaLabels(),this.isTree){if(this.depth>0)this.addCss("ag-set-filter-indent-"+this.depth),this.getGui().style.setProperty("--ag-indentation-level",String(this.depth));if(this.isGroup)this.setupExpansion();else if(this.groupsExist)this.addCss("ag-set-filter-add-group-indent");l6(this.getAriaElement(),this.depth+1)}if(this.refreshAriaChecked(),this.params.readOnly)return;this.eCheckbox.onValueChange((z)=>this.onCheckboxChanged(!!z))}getFocusableElement(){return this.focusWrapper}setupExpansion(){let{eGroupClosedIcon:z,eGroupOpenedIcon:J,eGroupIndeterminateIcon:Q,hasIndeterminateExpandState:Z,beans:$}=this;z.appendChild(vz("setFilterGroupClosed",$,null)),J.appendChild(vz("setFilterGroupOpen",$,null));let X=this.onExpandOrContractClicked.bind(this);if(this.addManagedElementListeners(z,{click:X}),this.addManagedElementListeners(J,{click:X}),Z)Q.appendChild(vz("setFilterGroupIndeterminate",$,null)),this.addManagedElementListeners(Q,{click:X});this.setExpandedIcons(),this.refreshAriaExpanded()}onExpandOrContractClicked(){this.setExpanded(!this.isExpanded)}setExpanded(z,J){if(this.isGroup&&z!==this.isExpanded){this.isExpanded=z;let Q={type:"expandedChanged",isExpanded:!!z,item:this.item};if(!J)this.dispatchLocalEvent(Q);this.setExpandedIcons(),this.refreshAriaExpanded()}}setExpandedIcons(){let{isExpanded:z,hasIndeterminateExpandState:J,eGroupClosedIcon:Q,eGroupOpenedIcon:Z,eGroupIndeterminateIcon:$}=this;if(w(Q,J?z===!1:!z),w(Z,z===!0),J)w($,z===void 0)}onCheckboxChanged(z){this.isSelected=z;let J={type:"selectionChanged",isSelected:z,item:this.item};this.dispatchLocalEvent(J),this.refreshVariableAriaLabels(),this.refreshAriaChecked()}toggleSelected(){if(this.params.readOnly)return;this.setSelected(!this.isSelected)}setSelected(z,J){this.isSelected=z,this.eCheckbox.setValue(z,J),this.refreshAriaChecked()}refreshVariableAriaLabels(){if(!this.isTree)return;let z=this.getLocaleTextFunc(),J=this.eCheckbox.getValue(),Q=J===void 0?z("ariaIndeterminate","indeterminate"):J?z("ariaVisible","visible"):z("ariaHidden","hidden"),Z=z("ariaToggleVisibility","Press SPACE to toggle visibility");sz(this.eCheckbox.getInputElement(),void 0),this.eCheckbox.setInputAriaLabel(`${Z} (${Q})`)}setupFixedAriaLabels(z){if(!this.isTree)return;let Q=this.getLocaleTextFunc()("ariaFilterValue","Filter Value"),Z=this.getAriaElement();_0(Z,`${z} ${Q}`),c1(Z,this.eCheckbox.getInputElement().id)}refreshAriaChecked(){let z=this.getAriaElement();e6(z,this.eCheckbox.getValue())}refreshAriaExpanded(){j0(this.getAriaElement(),!!this.isExpanded)}refresh(z,J,Q){if(this.item=z,J!==this.isSelected)this.setSelected(J,!0);this.setExpanded(Q,!0);let{cellRendererComponent:Z,cellRendererParams:$,beans:X,params:Y}=this;if(this.valueFunction){let q=this.valueFunction();if(this.setTooltipAndCellRendererParams(q,q),!Z)this.renderCellWithoutCellRenderer()}if(Z){let q=kz(X.userCompFactory,Y,$);if(!Z.refresh?.(q?.params??$)){let U=Z;this.renderCell(),this.destroyBean(U)}}}render(){let{params:{column:z}}=this,{value:J}=this,Q=null;if(typeof J==="function")this.valueFunction=J,Q=this.valueFunction(),J=Q;else if(this.isTree)Q=p0(J);else Q=this.getFormattedValue(z,J);this.formattedValue=Q,this.setTooltipAndCellRendererParams(J,Q),this.renderCell()}setTooltipAndCellRendererParams(z,J){let Q=this.gos;if(this.params.showTooltips&&(!h1(Q)||!this.params.cellRenderer)){let Z=J!=null?J:p0(z);this.shouldDisplayTooltip=t1(Q,()=>this.eCheckbox.getGui().querySelector(".ag-label")),this.tooltipFeature?.setTooltipAndRefresh(Z)}this.cellRendererParams=C(Q,{value:z,valueFormatted:J,colDef:this.params.colDef,column:this.params.column,setTooltip:(Z,$)=>{Q.assertModuleRegistered("Tooltip",3),this.shouldDisplayTooltip=$,this.tooltipFeature?.setTooltipAndRefresh(Z)}})}getFormattedValue(z,J){return this.beans.valueSvc.formatValue(z,null,J,this.valueFormatter,!1)}renderCell(){let J=kz(this.beans.userCompFactory,this.params,this.cellRendererParams)?.newAgStackInstance();if(J==null){this.renderCellWithoutCellRenderer();return}J.then((Q)=>{if(Q)this.cellRendererComponent=Q,this.eCheckbox.setLabel(Q.getGui()),this.destroyCellRendererComponent=()=>this.destroyBean(Q)})}renderCellWithoutCellRenderer(){let{valueFormatted:z,value:J}=this.cellRendererParams,Q=(z==null?J:z)??this.translate("blanks");if(typeof Q!=="string")V(208),Q="";this.eCheckbox.setLabel(Q),this.setupFixedAriaLabels(Q)}getComponentHolder(){return this.params.column.getColDef()}},oj={loadingOoo:"Loading...",blanks:"(Blanks)",searchOoo:"Search...",selectAll:"(Select All)",selectAllSearchResults:"(Select All Search Results)",addCurrentSelectionToFilter:"Add current selection to filter",noMatches:"No matches.",ariaSearchFilterValues:"Search filter values",ariaFilterList:"Filter List",filterSummaryListInactive:"is (All)",filterSummaryListSeparator:", ",filterSummaryListShort:(z)=>`is (${z[0]})`,filterSummaryListLong:(z)=>`is (${z[0]}) and ${z[1]} more`};function J7(z,J,Q){let Z=z;if(!Z)return null;if(Z=Z.map(($)=>p0(q0($))),!J&&Q&&Z.some(($)=>$==null)){if(y(Z)==null)return null;return Z.filter(($)=>$!=null)}return Z}function s0(z,J,Q){return DZ(z,oj,J,Q)}function ej(z){if(z.excelMode==="windows"){if(!z.buttons)z.buttons=["apply","cancel"];if(z.closeOnApply==null)z.closeOnApply=!0}else if(z.excelMode==="mac"){if(!z.buttons)z.buttons=["reset"];if(z.applyMiniFilterWhileTyping==null)z.applyMiniFilterWhileTyping=!0;if(z.debounceMs==null)z.debounceMs=500}if(z.excelMode&&z.defaultToNothingSelected)z.defaultToNothingSelected=!1,V(207)}function zO(){return([z,J],[Q,Z])=>{if(J==null)return Z==null?0:-1;else if(Z==null)return 1;for(let $=0;$=Z.length)return 1;let X=m1(J[$],Z[$]);if(X!==0)return X}return 0}}var OY=class{constructor(z,J,Q,Z){this.formatter=z,this.treeListPathGetter=J,this.treeListFormatter=Q,this.treeDataOrGrouping=Z,this.allDisplayedItemsTree=new Map,this.activeDisplayedItemsFlat=[],this.selectAllItem={depth:0,filterPasses:!0,available:!0,treeKey:W1,children:this.allDisplayedItemsTree,expanded:!0,key:W1,parentTreeKeys:[]},this.addSelectionToFilterItem={depth:0,filterPasses:!0,available:!0,treeKey:B1,expanded:!0,key:B1,parentTreeKeys:[]}}updateParams(z,J){this.treeListPathGetter=z,this.treeListFormatter=J}updateDisplayedValuesToAllAvailable(z,J,Q,Z){if(Z==="reload")this.generateItemTree(z,J,Q);else if(Z==="otherFilter")this.updateAvailable(Q),this.updateExpandAll();else if(Z==="miniFilter")this.resetFilter(),this.updateExpandAll();this.flattenItems()}updateDisplayedValuesToMatchMiniFilter(z,J,Q,Z,$,X){if(X==="reload")this.generateItemTree(z,J,Q);else if(X==="otherFilter")this.updateAvailable(Q);this.updateFilter(Z,$),this.updateExpandAll(),this.flattenItems()}generateItemTree(z,J,Q){let Z=new Map;this.allDisplayedItemsTree=Z;let $=!1,X=this.getTreeListPathGetter(z,Q);for(let Y of J){let q=z(Y),G=X(q)??[null],U=G.length;if(U>1)$=!0;let _=Q.has(Y),H=Z,W,B=[];for(let E=0;EZ;let Q=!1;for(let Z of J){let $=z(Z);if($ instanceof Date){Q=!0;break}else if($!=null)break}if(Q)return(Z)=>Ez(Z,!1);return V(211),(Z)=>[String(Z)]}flattenItems(){this.activeDisplayedItemsFlat=[];let z=(J)=>{for(let Q of J.values()){if(!Q.filterPasses||!Q.available)continue;if(this.activeDisplayedItemsFlat.push(Q),Q.children&&Q.expanded)z(Q.children)}};z(this.allDisplayedItemsTree)}resetFilter(){let z=(J)=>{let Q=J.children;if(Q)for(let Z of Q.values())z(Z);J.filterPasses=!0};for(let J of this.allDisplayedItemsTree.values())z(J)}updateFilter(z,J){let Q=(Z)=>{if(!Z.available)return!1;if(Z.treeKey==null)return J;return z(this.formatter(this.treeListFormatter?this.treeListFormatter(Z.treeKey,Z.depth,Z.parentTreeKeys):Z.treeKey))};for(let Z of this.allDisplayedItemsTree.values())this.recursiveItemCheck(Z,!1,Q,"filterPasses")}getDisplayedValueCount(){return this.activeDisplayedItemsFlat.length}getDisplayedItem(z){return this.activeDisplayedItemsFlat[z]}getSelectAllItem(){return this.selectAllItem}getAddSelectionToFilterItem(){return this.addSelectionToFilterItem}getDisplayedKeys(){let z=[];return this.forEachDisplayedKey((J)=>z.push(J)),z}forEachDisplayedKey(z){let J=(Q,Z)=>{let $=Q.children;if($){if(!Q.expanded||!Z){for(let X of $.values())if(X.filterPasses)J(X,!1)}}else z(Q.key)};for(let Q of this.activeDisplayedItemsFlat)J(Q,!0)}someDisplayedKey(z){let J=(Q,Z)=>{let $=Q.children;if($){if(!Q.expanded||!Z){for(let X of $.values())if(X.filterPasses&&J(X,!1))return!0;return!1}}else return z(Q.key);return!1};return this.activeDisplayedItemsFlat.some((Q)=>J(Q,!0))}hasGroups(){return this.groupsExist}refresh(){this.updateExpandAll(),this.flattenItems()}updateExpandAll(){let z=(Q,Z,$)=>{for(let X of Q.values()){if(!X.filterPasses||!X.available||!X.children)continue;if(Z=Z||!!X.expanded,$=$||!X.expanded,Z&&$)return;let Y=z(X.children,Z,$);if(Y===void 0)return;else if(Y)Z=!0;else $=!0}return Z&&$?void 0:Z},J=this.getSelectAllItem();J.expanded=z(J.children,!1,!1)}recursiveItemCheck(z,J,Q,Z){let $=!1,X=z.children;if(X)for(let q of X.values()){let G=this.recursiveItemCheck(q,J||Q(z),Q,Z);$=$||G}let Y=J||$||Q(z);return z[Z]=Y,Y}updateAvailable(z){let J=(Q)=>z.has(Q.key);for(let Q of this.allDisplayedItemsTree.values())this.recursiveItemCheck(Q,!1,J,"available")}},Tq=class extends $1{constructor(){super("setFilter","set-filter");this.filterType="set",this.eMiniFilter=j,this.eFilterLoading=j,this.eFilterLoadingIcon=j,this.eSetFilterList=j,this.eFilterNoMatches=j,this.hardRefreshVirtualList=!1,this.miniFilterText=null,this.addCurrentSelectionToFilter=!1,this.selectedKeys=new Set}setParams(z){super.setParams(z);let J=this.updateHandler(z.getHandler()),{column:Q,textFormatter:Z,treeList:$,treeListPathGetter:X,treeListFormatter:Y}=z;if(this.formatter=Z??((q)=>q??null),this.displayValueModel=$?new OY(this.formatter,X,Y,J.isTreeDataOrGrouping()):new tj(this.beans.valueSvc,()=>this.handler.valueFormatter,this.formatter,Q),J.valueModel.allKeys.then((q)=>{if(!this.isAlive())return;this.updateDisplayedValues("reload",q??[]),this.resetSelectionState(q??[])}),J.valueModel.isLoading())this.setIsLoading(!0);this.initialiseFilterBodyUi()}refresh(z){if(this.params.treeList!==z.treeList)return!1;return this.updateHandler(z.getHandler()),super.refresh(z)}updateParams(z,J){if(super.updateParams(z,J),this.updateMiniFilter(),z.suppressSelectAll!==J.suppressSelectAll)this.createVirtualListModel(z);let{textFormatter:Q,treeListPathGetter:Z,treeListFormatter:$}=z;if(this.formatter=Q??((X)=>X??null),this.displayValueModel instanceof OY)this.displayValueModel.updateParams(Z,$);this.handler.refreshFilterValues(!0)}updateHandler(z){if(this.handler!==z){for(let Q of this.handlerDestroyFuncs??[])Q();this.handlerDestroyFuncs=[...this.addManagedListeners(z,{anyFilterChanged:(Q)=>{z.valueModel.allKeys.then((Z)=>{if(this.isAlive()){if(this.updateDisplayedValues("otherFilter",Z??[]),Q.updated)this.checkAndRefreshVirtualList(),this.showOrHideResults()}})},dataChanged:({hardRefresh:Q})=>{z.valueModel.allKeys.then((Z)=>{if(this.isAlive()){if(this.updateDisplayedValues("reload",Z??[]),this.setSelectedModel(this.state.model?.values??null),Q)this.hardRefreshVirtualList=!0;this.checkAndRefreshVirtualList()}})}}),...this.addManagedListeners(z.valueModel,{loadingStart:()=>this.setIsLoading(!0),loadingEnd:()=>this.setIsLoading(!1)})],this.handler=z}return z}updateUiVisibility(){}createBodyTemplate(){return{tag:"div",cls:"ag-set-filter",children:[{tag:"div",ref:"eFilterLoading",cls:"ag-filter-loading ag-loading ag-hidden",children:[{tag:"span",ref:"eFilterLoadingIcon",cls:"ag-loading-icon"},{tag:"span",cls:"ag-loading-text",children:s0(this,"loadingOoo")}]},{tag:"ag-input-text-field",ref:"eMiniFilter",cls:"ag-mini-filter"},{tag:"div",ref:"eFilterNoMatches",cls:"ag-filter-no-matches ag-hidden",children:s0(this,"noMatches")},{tag:"div",ref:"eSetFilterList",cls:"ag-set-filter-list",role:"presentation"}]}}getAgComponents(){return[Zz]}handleKeyDown(z){if(super.handleKeyDown(z),z.defaultPrevented)return;let J=()=>{if(!this.eSetFilterList.contains(n(this.beans)))return;let Q=this.virtualList.getLastFocusedRow();if(Q==null)return;let Z=this.virtualList.getComponentAt(Q);if(Z==null)return;z.preventDefault();let{readOnly:$}=this.params;if($)return;return Z};switch(z.key){case k.SPACE:J()?.toggleSelected();break;case k.ENTER:this.handleKeyEnter(z);break;case k.LEFT:J()?.setExpanded(!1);break;case k.RIGHT:J()?.setExpanded(!0);break}}handleKeyEnter(z){z.preventDefault();let{excelMode:J,readOnly:Q}=this.params;if(!J||!!Q)return;if(this.params.onAction("apply",void 0,z),this.params.excelMode==="mac")this.eMiniFilter.getInputElement().select()}setModelAndRefresh(z){return this.setSelectedModel(z).then(()=>{if(this.isAlive())this.checkAndRefreshVirtualList()})}setModelIntoUi(z){this.setMiniFilter(this.params.state.state?.miniFilterValue??null,!0);let J=z==null?null:z.values;return this.setModelAndRefresh(J)}getModelFromUi(){let z=this.getSelectedModel();if(!z)return null;return{values:z,filterType:this.filterType}}areNonNullModelsEqual(z,J){return Z0(z.values,J.values)}setIsLoading(z){if(w(this.eFilterLoading,z),!z)this.hardRefreshVirtualList=!0}initialiseFilterBodyUi(){this.initVirtualList(),this.initMiniFilter(),this.initLoading()}initLoading(){let z=h("setFilterLoading",this.beans,this.params.column);if(z)this.eFilterLoadingIcon.appendChild(z)}initVirtualList(){let z=s0(this,"ariaFilterList"),J=!!this.params.treeList,Q=this.virtualList=this.createBean(new Y7({cssIdentifier:"filter",ariaRole:J?"tree":"listbox",listName:z})),Z=this.eSetFilterList;if(J)Z.classList.add("ag-set-filter-tree-list");Z.appendChild(Q.getGui());let{cellHeight:$}=this.params;if($!=null)Q.setRowHeight($);let X=(q,G)=>this.createSetListItem(q,J,G);Q.setComponentCreator(X);let Y=(q,G)=>this.updateSetListItem(q,G);Q.setComponentUpdater(Y),this.createVirtualListModel(this.params)}createVirtualListModel(z){let J;if(z.suppressSelectAll)J=new JO(this.displayValueModel);else J=new QO(this.displayValueModel,this.showAddCurrentSelectionToFilter.bind(this));if(z.treeList)J=new ZO(J);this.virtualList.setModel(J)}getSelectAllLabel(){let z=this.miniFilterText==null||!this.params.excelMode?"selectAll":"selectAllSearchResults";return s0(this,z)}getAddSelectionToFilterLabel(){return s0(this,"addCurrentSelectionToFilter")}createSetListItem(z,J,Q){let Z=this.displayValueModel.hasGroups(),{isSelected:$,isExpanded:X}=this.isSelectedExpanded(z),{value:Y,depth:q,isGroup:G,hasIndeterminateExpandState:U,selectedListener:_,expandedListener:H}=this.newSetListItemAttributes(z),W={focusWrapper:Q,value:Y,params:this.params,translate:(E)=>s0(this,E),valueFormatter:this.handler.valueFormatter,item:z,isSelected:$,isTree:J,depth:q,groupsExist:Z,isGroup:G,isExpanded:X,hasIndeterminateExpandState:U},B=this.createBean(new aj(W));if(B.addEventListener("selectionChanged",_),H)B.addEventListener("expandedChanged",H);return B}newSetTreeItemAttributes(z){let J=this.displayValueModel.hasGroups();if(z.key===W1)return{value:()=>this.getSelectAllLabel(),isGroup:J,depth:z.depth,hasIndeterminateExpandState:!0,selectedListener:(Q)=>this.onSelectAll(Q.isSelected),expandedListener:(Q)=>this.onExpandAll(Q.item,Q.isExpanded)};if(z.key===B1)return{value:()=>this.getAddSelectionToFilterLabel(),depth:z.depth,isGroup:!1,hasIndeterminateExpandState:!1,selectedListener:(Q)=>{this.addCurrentSelectionToFilter=Q.isSelected,this.refreshAfterSelection()}};if(z.children)return{value:this.params.treeListFormatter?.(z.treeKey,z.depth,z.parentTreeKeys)??z.treeKey,depth:z.depth,isGroup:!0,selectedListener:(Q)=>this.onGroupItemSelected(Q.item,Q.isSelected),expandedListener:(Q)=>this.onExpandedChanged(Q.item,Q.isExpanded)};return{value:this.params.treeListFormatter?.(z.treeKey,z.depth,z.parentTreeKeys)??z.treeKey,depth:z.depth,selectedListener:(Q)=>this.onItemSelected(Q.item.key,Q.isSelected)}}newSetListItemAttributes(z){if(this.isSetFilterModelTreeItem(z))return this.newSetTreeItemAttributes(z);if(z===W1)return{value:()=>this.getSelectAllLabel(),selectedListener:(J)=>this.onSelectAll(J.isSelected)};if(z===B1)return{value:()=>this.getAddSelectionToFilterLabel(),selectedListener:(J)=>{this.addCurrentSelectionToFilter=J.isSelected,this.refreshAfterSelection()}};return{value:this.handler.valueModel.allValues.get(z)??null,selectedListener:(J)=>this.onItemSelected(J.item,J.isSelected)}}updateSetListItem(z,J){let{isSelected:Q,isExpanded:Z}=this.isSelectedExpanded(z);J.refresh(z,Q,Z)}isSelectedExpanded(z){let J,Q;if(this.isSetFilterModelTreeItem(z))if(Q=z.expanded,z.key===W1)J=this.isSelectAllSelected();else if(z.key===B1)J=this.isAddCurrentSelectionToFilterChecked();else if(z.children)J=this.areAllChildrenSelected(z);else J=this.selectedKeys.has(z.key);else if(z===W1)J=this.isSelectAllSelected();else if(z===B1)J=this.isAddCurrentSelectionToFilterChecked();else J=this.selectedKeys.has(z);return{isSelected:J,isExpanded:Q}}isSetFilterModelTreeItem(z){return z?.treeKey!==void 0}initMiniFilter(){let{eMiniFilter:z}=this;this.updateMiniFilter(),z.onValueChange(()=>this.onMiniFilterInput()),z.setInputAriaLabel(s0(this,"ariaSearchFilterValues")),this.addManagedElementListeners(z.getInputElement(),{keydown:(J)=>this.onMiniFilterKeyDown(J)})}updateMiniFilter(){let{eMiniFilter:z,miniFilterText:J,params:Q}=this;z.setDisplayed(!Q.suppressMiniFilter),z.setValue(J)}afterGuiAttached(z){super.afterGuiAttached(z),this.resetExpansion(),this.refreshVirtualList();let{eMiniFilter:J}=this;if(J.setInputPlaceholder(s0(this,"searchOoo")),!z?.suppressFocus)if(J.isDisplayed())J.getFocusableElement().focus();else this.virtualList.awaitStable(()=>this.virtualList.focusRow(0))}afterGuiDetached(){super.afterGuiDetached();let{column:z,excelMode:J,model:Q,onStateChange:Z}=this.params;if(this.beans.colFilter?.shouldKeepStateOnDetach(z))return;if(J)this.resetMiniFilter();if(J||Q!==this.state.model)Z({model:Q,state:this.getState()}),this.showOrHideResults()}canApply(z){return this.params.excelMode?z==null||z.values.length>0:!0}onNewRowsLoaded(){}setFilterValues(z){V(283),this.handler.setFilterValues(z)}resetFilterValues(){V(283),this.handler.resetFilterValues()}refreshFilterValues(){V(283),this.doRefreshFilterValues()}doRefreshFilterValues(){this.handler.refreshFilterValues()}onAnyFilterChanged(){}onMiniFilterInput(z){if(!this.doSetMiniFilter(this.eMiniFilter.getValue()))return;if(z){this.showOrHideResults();return}let{applyMiniFilterWhileTyping:J,readOnly:Q,excelMode:Z}=this.params,$=!Q&&(J||!!Z),X=J&&!Q?"debounce":void 0;this.updateUiAfterMiniFilterChange($,X)}updateUiAfterMiniFilterChange(z,J){if(z){let{excelMode:Q,readOnly:Z,model:$}=this.params;if(Q&&!Z&&this.miniFilterText==null)this.setModelAndRefresh($?.values??null);else this.selectAllMatchingMiniFilter(!0)}this.checkAndRefreshVirtualList(),this.onUiChanged(z?J:"prevent"),this.showOrHideResults()}showOrHideResults(){let z=this.miniFilterText!=null&&this.displayValueModel.getDisplayedValueCount()<1;w(this.eFilterNoMatches,z),w(this.eSetFilterList,!z)}resetMiniFilter(){this.eMiniFilter.setValue(null,!0),this.doSetMiniFilter(null)}onMiniFilterKeyDown(z){let{excelMode:J,readOnly:Q}=this.params;if(z.key===k.ENTER&&!J&&!Q)this.updateUiAfterMiniFilterChange(!0,"immediately")}focusRowIfAlive(z){if(z==null)return Promise.resolve();return new Promise((J)=>{window.setTimeout(()=>{if(this.isAlive())this.virtualList.focusRow(z);J()},0)})}onSelectAll(z){if(z)this.selectAllMatchingMiniFilter();else this.deselectAllMatchingMiniFilter();this.refreshAfterSelection()}onGroupItemSelected(z,J){let Q=(Z)=>{if(!Z.filterPasses)return;let $=Z.children;if($)for(let X of $.values())Q(X);else this.setKeySelected(Z.key,J)};Q(z),this.refreshAfterSelection()}onItemSelected(z,J){this.setKeySelected(z,J),this.refreshAfterSelection()}onExpandAll(z,J){let Q=(Z)=>{if(Z.filterPasses&&Z.available&&Z.children){for(let $ of Z.children.values())Q($);Z.expanded=J}};Q(z),this.refreshAfterExpansion()}onExpandedChanged(z,J){z.expanded=J,this.refreshAfterExpansion()}refreshAfterExpansion(){let z=this.virtualList.getLastFocusedRow();this.updateDisplayedValues("expansion"),this.checkAndRefreshVirtualList(),this.focusRowIfAlive(z)}refreshAfterSelection(){let z=this.virtualList.getLastFocusedRow();this.checkAndRefreshVirtualList(),this.onUiChanged(),this.focusRowIfAlive(z)}setMiniFilter(z,J){this.eMiniFilter.setValue(z,J),this.onMiniFilterInput(J)}doSetMiniFilter(z){if(z=q0(z),this.miniFilterText===z)return!1;if(z===null)this.addCurrentSelectionToFilter=!1;return this.miniFilterText=z,this.updateDisplayedValues("miniFilter"),!0}getMiniFilter(){return this.miniFilterText}getUiChangeEventParams(){return{miniFilterValue:this.miniFilterText}}getState(){let z=this.miniFilterText;return z?{miniFilterValue:z}:void 0}checkAndRefreshVirtualList(){if(this.virtualList.refresh(!this.hardRefreshVirtualList),this.hardRefreshVirtualList)this.hardRefreshVirtualList=!1}getFilterKeys(){return V(283),this.handler.getFilterKeys()}getFilterValues(){return V(283),this.handler.getFilterValues()}refreshVirtualList(){if(this.params.refreshValuesOnOpen)this.doRefreshFilterValues();else this.checkAndRefreshVirtualList()}isSelectAllSelected(){if(!this.params.defaultToNothingSelected){if(this.hasSelections()&&this.isNothingVisibleSelected())return!1;if(this.isEverythingVisibleSelected())return!0}else{if(this.hasSelections()&&this.isEverythingVisibleSelected())return!0;if(this.isNothingVisibleSelected())return!1}return}areAllChildrenSelected(z){let J=(Q)=>{if(Q.children){let Z=!1,$=!1;for(let X of Q.children.values()){if(!X.filterPasses||!X.available)continue;let Y=J(X);if(Y===void 0)return;if(Y)Z=!0;else $=!0;if(Z&&$)return}return Z}else return this.selectedKeys.has(Q.key)};if(!this.params.defaultToNothingSelected)return J(z);else return this.hasSelections()&&J(z)}resetExpansion(){if(!this.params.treeList)return;let z=this.displayValueModel.getSelectAllItem();if(this.isSetFilterModelTreeItem(z)){let J=(Q)=>{let Z=Q.children;if(Z){for(let $ of Z.values())J($);Q.expanded=!1}};J(z),this.updateDisplayedValues("expansion")}}getModelAsString(z){return this.handler.getModelAsString(z)}getPositionableElement(){return this.eSetFilterList}updateDisplayedValues(z,J){if(z==="expansion"){this.displayValueModel.refresh();return}let Q=this.handler,Z=Q.valueModel;if(this.miniFilterText==null){this.displayValueModel.updateDisplayedValuesToAllAvailable((q)=>Z.allValues.get(q)??null,J,Z.availableKeys,z);return}let $=Q.caseFormat(this.formatter(this.miniFilterText)||""),X=(q)=>q!=null&&Q.caseFormat(q).includes($),Y=!!this.params.excelMode&&X(s0(this,"blanks"));this.displayValueModel.updateDisplayedValuesToMatchMiniFilter((q)=>Z.allValues.get(q)??null,J,Z.availableKeys,X,Y,z)}hasSelections(){return this.params.defaultToNothingSelected?this.selectedKeys.size>0:this.handler.valueModel.allValues.size!==this.selectedKeys.size}isInWindowsExcelMode(){return this.params.excelMode==="windows"}isAddCurrentSelectionToFilterChecked(){return this.isInWindowsExcelMode()&&this.addCurrentSelectionToFilter}showAddCurrentSelectionToFilter(){return this.isInWindowsExcelMode()&&P(this.miniFilterText)&&this.miniFilterText.length>0}selectAllMatchingMiniFilter(z=!1){if(this.miniFilterText==null)this.selectedKeys=new Set(this.handler.valueModel.allValues.keys());else{if(z)this.selectedKeys.clear();this.displayValueModel.forEachDisplayedKey((J)=>this.selectedKeys.add(J))}}deselectAllMatchingMiniFilter(){if(this.miniFilterText==null)this.selectedKeys.clear();else this.displayValueModel.forEachDisplayedKey((z)=>this.selectedKeys.delete(z))}setKeySelected(z,J){if(J)this.selectedKeys.add(z);else{if(this.params.excelMode&&this.isEverythingVisibleSelected())this.resetSelectionState(this.displayValueModel.getDisplayedKeys());this.selectedKeys.delete(z)}}isEverythingVisibleSelected(){return!this.displayValueModel.someDisplayedKey((z)=>!this.selectedKeys.has(z))}isNothingVisibleSelected(){return!this.displayValueModel.someDisplayedKey((z)=>this.selectedKeys.has(z))}getSelectedModel(){if(!this.hasSelections())return null;let z=this.isAddCurrentSelectionToFilterChecked()?this.params.model?.values:void 0;if(z?.length){if(this.selectedKeys){let J=new Set([...z,...this.selectedKeys]);return Array.from(J)}return Array.from(z)}return Array.from(this.selectedKeys)}setSelectedModel(z){let J=this.handler,Q=J.valueModel;return Q.allKeys.then((Z)=>{if(z==null)this.resetSelectionState(Z??[]);else{this.selectedKeys.clear();let $=new Map;Q.allValues.forEach((X,Y)=>{$.set(J.caseFormat(Y),Y)}),z.forEach((X)=>{let Y=J.caseFormat(q0(X)),q=$.get(Y);if(q!==void 0)this.selectedKeys.add(q)})}})}resetSelectionState(z){if(this.params.defaultToNothingSelected)this.selectedKeys.clear();else this.selectedKeys=new Set(z)}getFilterHandler(){return this.handler}destroy(){this.virtualList=this.destroyBean(this.virtualList);for(let z of this.handlerDestroyFuncs??[])z();this.handler=void 0,this.displayValueModel=void 0,this.selectedKeys.clear(),super.destroy()}},JO=class{constructor(z){this.model=z}getRowCount(){return this.model.getDisplayedValueCount()}getRow(z){return this.model.getDisplayedItem(z)}areRowsEqual(z,J){return z===J}},QO=class{constructor(z,J){this.model=z,this.showAddCurrentSelectionToFilter=J}getRowCount(){let J=this.showAddCurrentSelectionToFilter()?2:1;return this.model.getDisplayedValueCount()+J}getRow(z){if(z===0)return this.model.getSelectAllItem();let J=this.showAddCurrentSelectionToFilter(),Q=J?2:1;if(z===1&&J)return this.model.getAddSelectionToFilterItem();return this.model.getDisplayedItem(z-Q)}areRowsEqual(z,J){return z===J}},ZO=class{constructor(z){this.model=z}getRowCount(){return this.model.getRowCount()}getRow(z){return this.model.getRow(z)}areRowsEqual(z,J){if(z==null&&J==null)return!0;return z!=null&&J!=null&&z.treeKey===J.treeKey&&z.depth===J.depth}},$O=class extends S{constructor(z,J,Q,Z,$){super();this.createKey=z,this.caseFormat=J,this.getValue=Q,this.isTreeDataOrGrouping=Z,this.isTreeData=$}extractUniqueValuesAsync(z,J){return new N((Q)=>{if(this.beans.rowModel.rowCountReady)Q(this.extractUniqueValues(z,J));else{let[Z]=this.addManagedEventListeners({rowCountReady:()=>{Z?.(),Q(this.extractUniqueValues(z,J))}})}})}extractUniqueValues(z,J){let Q=new Map,Z=this.extractExistingFormattedKeys(J),$=new Set,X=this.isTreeData(),Y=this.isTreeDataOrGrouping(),q=this.beans.rowGroupColsSvc?.columns,G=this.gos.get("groupAllowUnbalanced"),U=(_,H)=>{let W=this.caseFormat(_);if(!$.has(W)){$.add(W);let B=_,E=q0(H),K=Z?.get(W);if(K!=null)B=K,E=J.get(K);Q.set(B,E)}};return this.beans.rowModel.forEachLeafNode((_)=>{if(!_.data||!z(_))return;if(Y){this.addValueForTreeDataOrGrouping(_,X,q,U,G);return}let H=this.getValue(_);if(H!=null&&Array.isArray(H)){for(let W of H)U(this.createKey(W,_),W);if(H.length===0)U(null,null)}else U(this.createKey(H,_),H)}),Q}addValueForTreeDataOrGrouping(z,J,Q=[],Z,$){let X;if(J){if(z.childrenAfterGroup?.length)return;X=z.getRoute()??[z.key??z.id]}else X=Q.map((q)=>this.beans.valueSvc.getKeyForNode(q,z)),X.push(this.getValue(z));let Y=J7(X,J,$);Z(this.createKey(Y),Y)}extractExistingFormattedKeys(z){if(!z)return null;let J=new Map;return z.forEach((Q,Z)=>{J.set(this.caseFormat(Z),Z)}),J}},XO=class{constructor(z){this.caseFormat=z,this.keys=null}isNull(){return this.keys==null}isEmpty(){return!this.keys?.size}update(z){let J=new Set;this.keys=J;let Q=z?.values;if(Q){let Z=this.caseFormat;for(let $=0,X=Q.length;${return z[z.PROVIDED_LIST=0]="PROVIDED_LIST",z[z.PROVIDED_CALLBACK=1]="PROVIDED_CALLBACK",z[z.TAKEN_FROM_GRID_VALUES=2]="TAKEN_FROM_GRID_VALUES",z})(vq||{}),r5=vq,YO=class extends S{constructor(z,J,Q,Z,$){super();this.clientSideValuesExtractor=z,this.caseFormat=J,this.createKey=Q,this.isTreeDataOrGrouping=Z,this.params=$,this.allValues=new Map,this.availableKeys=new Set,this.providedValues=null,this.initialised=!1}postConstruct(){let z=this.params,J=z.handlerParams.filterParams.values;if(this.updateParams(z),J==null)this.valuesType=2;else this.valuesType=Array.isArray(J)?0:1,this.providedValues=J;this.updateAllValues()}refresh(z){let J=z.handlerParams;if(J.source!=="colDef")return;let{values:Q,suppressSorting:Z}=J.filterParams,$=this.providedValues,X=this.params.handlerParams.filterParams.suppressSorting;if(this.params=z,this.updateParams(z),this.providedValues=Q??null,this.providedValues!==$||Z!==X){if(!Q||Q.length===0)this.valuesType=2,this.providedValues=null;else this.valuesType=Array.isArray(Q)?0:1;this.updateAllValues()}}updateParams(z){let{handlerParams:{colDef:J,filterParams:{comparator:Q,treeList:Z,treeListPathGetter:$}},usingComplexObjects:X}=z,Y=Q??J.comparator,q=this.isTreeDataOrGrouping(),G;if(q&&!Y)G=zO();else if(Z&&!$&&!Y)G=([U,_],[H,W])=>m1(_,W);else G=([U,_],[H,W])=>Y(_,W);this.entryComparator=G,this.keyComparator=Y??m1,this.compareByValue=!!(X&&Y||q||Z&&!$)}updateAllValues(){return this.allKeys=new N((z)=>{switch(this.valuesType){case 2:this.getValuesFromRowsAsync().then((J)=>z(this.processAllValues(J)));break;case 0:{z(this.processAllValues(this.uniqueValues(this.validateProvidedValues(this.providedValues))));break}case 1:{this.dispatchLocalEvent({type:"loadingStart"});let J=this.providedValues,{column:Q,colDef:Z}=this.params.handlerParams,$=C(this.gos,{success:(X)=>{this.dispatchLocalEvent({type:"loadingEnd"}),z(this.processAllValues(this.uniqueValues(this.validateProvidedValues(X))))},colDef:Z,column:Q});window.setTimeout(()=>J($),0);break}}}),this.allKeys.then((z)=>{this.updateAvailableKeys(z??[]),this.initialised=!0}),this.allKeys}getAvailableValues(z){return this.sortKeys(this.getValuesFromRows(z))}overrideValues(z){return this.allKeys.then(()=>{this.valuesType=0,this.providedValues=z})}refreshAvailable(){return new N((z)=>{if(this.showAvailableOnly()){this.allKeys.then((J)=>{let Q=J??[];this.updateAvailableKeys(Q),z(!0)});return}z(!1)})}refreshAll(){return new N((z)=>{this.allKeys.then(()=>{this.updateAllValues().then(()=>{z()})})})}isLoading(){return!this.initialised&&this.valuesType===1}isInitialised(){return this.initialised}getValueForFormatter(z){return this.initialised?this.allValues.get(z):z}getAvailableKeys(z){return this.initialised?z.filter((J)=>this.availableKeys.has(J)):z}getParamsForValuesFromRows(z){if(!this.clientSideValuesExtractor){r(113);return}return z&&!this.params.handlerParams.filterParams.caseSensitive?this.allValues:void 0}getValuesFromRows(z){let J=this.getParamsForValuesFromRows(!0);return this.clientSideValuesExtractor?.extractUniqueValues(z,J)??null}getValuesFromRowsAsync(){let z=this.getParamsForValuesFromRows(!1);return this.clientSideValuesExtractor?.extractUniqueValuesAsync(()=>!0,z)??N.resolve(null)}processAllValues(z){let J=this.sortKeys(z);return this.allValues=z??new Map,J}uniqueValues(z){let J=new Map,Q=new Set,{caseFormat:Z,createKey:$}=this;for(let X of z??[]){let Y=q0(X),q=$(Y),G=Z(q);if(!Q.has(G))Q.add(G),J.set(q,Y)}return J}validateProvidedValues(z){if(this.params.usingComplexObjects&&z?.length){let J=z[0];if(J&&typeof J!=="object"&&typeof J!=="function")if(this.createKey(J)==null)V(209);else V(210)}return z}sortKeys(z){let J=z??new Map,Q=this.params.handlerParams.filterParams;if(Q.suppressSorting)return Array.from(J.keys());let Z;if(this.compareByValue)Z=Array.from(J.entries()).sort(this.entryComparator).map(([$])=>$);else Z=Array.from(J.keys()).sort(this.keyComparator);if(Q.excelMode&&J.has(null))Z=Z.filter(($)=>$!=null),Z.push(null);return Z}showAvailableOnly(){return this.valuesType===2}updateAvailableKeys(z){let J=this.showAvailableOnly()?this.getAvailableValues((Q)=>this.params.handlerParams.doesRowPassOtherFilter(Q)):z;this.availableKeys=new Set(J),window.setTimeout(()=>{if(this.isAlive())this.dispatchLocalEvent({type:"availableValuesChanged"})})}},qO=class extends S{constructor(){super(...arguments);this.filterType="set",this.treeDataTreeList=!1,this.groupingTreeList=!1,this.caseSensitive=!1,this.noValueFormatterSupplied=!1}init(z){this.updateParams(z);let J=this.isTreeDataOrGrouping.bind(this),Q=()=>this.treeDataTreeList,Z=this.createKey,$=this.caseFormat.bind(this),{gos:X,beans:Y}=this,q=o(X,Y.rowModel)?this.createManagedBean(new $O(Z,$,z.getValue,J,Q)):void 0,G=this.createManagedBean(new YO(q,$,Z,J,{handlerParams:z,usingComplexObjects:!!(z.filterParams.keyCreator??z.colDef.keyCreator)}));this.addManagedListeners(G,{availableValuesChanged:z.onModelAsStringChange}),this.valueModel=G,this.appliedModel=new XO(this.caseFormat.bind(this)),this.appliedModel.update(z.model),this.validateModel(z),this.addEventListenersForDataChanges()}refresh(z){this.updateParams(z),this.valueModel.refresh({handlerParams:z,usingComplexObjects:!!(z.filterParams.keyCreator??z.colDef.keyCreator)}),this.appliedModel.update(z.model),this.validateModel(z)}updateParams(z){this.params=z;let{colDef:J,filterParams:{caseSensitive:Q,treeList:Z,keyCreator:$,valueFormatter:X}}=z;this.caseSensitive=!!Q;let Y=!!J.showRowGroup;this.treeDataTreeList=this.gos.get("treeData")&&!!Z&&Y,this.groupingTreeList=!!this.beans.rowGroupColsSvc?.columns.length&&!!Z&&Y;let q=$??J.keyCreator;this.createKey=this.generateCreateKey(q,this.isTreeDataOrGrouping()),this.setValueFormatter(X,q,!!Z,!!J.refData)}doesFilterPass(z){let{appliedModel:J,treeDataTreeList:Q,groupingTreeList:Z}=this;if(J.isNull())return!0;if(J.isEmpty())return!1;let{node:$}=z;if(Q)return this.doesFilterPassForTreeData($);if(Z)return this.doesFilterPassForGrouping($);let X=this.params.getValue($);if(X!=null&&Array.isArray(X)){if(X.length===0)return J.has(null);return X.some((Y)=>J.has(this.createKey(Y,$)))}return J.has(this.createKey(X,$))}getFormattedValue(z){let J=this.valueModel.getValueForFormatter(z);if(this.noValueFormatterSupplied&&this.isTreeDataOrGrouping()&&Array.isArray(J))J=y(J);let Q=this.beans.valueSvc.formatValue(this.params.column,null,J,this.valueFormatter,!1);return(Q==null?p0(J):Q)??s0(this,"blanks")}getModelAsString(z,J){let{values:Q}=z??{},Z=J==="filterToolPanel";if(Q==null)return Z?s0(this,"filterSummaryListInactive"):"";let $=this.valueModel.getAvailableKeys(Q),X=$.length,Y=Z?3:10,q=$.slice(0,Y).map((G)=>this.getFormattedValue(G));if(Z){let G=q.join(s0(this,"filterSummaryListSeparator"));if(X>3)return s0(this,"filterSummaryListLong",[G,String(X-3)]);else return s0(this,"filterSummaryListShort",[G])}return`(${X}) ${q.join(",")}${X>10?",...":""}`}onAnyFilterChanged(){window.setTimeout(()=>{if(!this.isAlive())return;this.valueModel.refreshAvailable().then((z)=>{this.dispatchLocalEvent({type:"anyFilterChanged",updated:!!z})})})}onNewRowsLoaded(){this.syncAfterDataChange()}setFilterValues(z){this.valueModel.overrideValues(z).then(()=>{this.refreshFilterValues()})}resetFilterValues(){this.valueModel.valuesType=r5.TAKEN_FROM_GRID_VALUES,this.syncAfterDataChange()}refreshFilterValues(z){if(!this.valueModel.isInitialised())return;this.valueModel.refreshAll().then(()=>{this.dispatchLocalEvent({type:"dataChanged",hardRefresh:!0}),this.validateModel(this.params,void 0,!z)})}getFilterKeys(){return Array.from(this.valueModel.allValues.keys())}getFilterValues(){return Array.from(this.valueModel.allValues.values())}isTreeDataOrGrouping(){return this.treeDataTreeList||this.groupingTreeList}caseFormat(z){if(z==null||typeof z!=="string")return z;return this.caseSensitive?z:z.toUpperCase()}addEventListenersForDataChanges(){this.addManagedPropertyListeners(["groupAllowUnbalanced"],()=>this.syncAfterDataChange());let z=i0(this,this.syncAfterDataChange.bind(this),0);this.addManagedEventListeners({cellValueChanged:(J)=>{if(J.column===this.params.column)z()}})}syncAfterDataChange(){if(!this.isValuesTakenFromGrid())return;this.valueModel.refreshAll().then(()=>{this.dispatchLocalEvent({type:"dataChanged"}),this.validateModel(this.params,{afterDataChange:!0})})}validateModel(z,J,Q){let Z=this.valueModel;Z.allKeys.then(()=>{let $=z.model;if($==null)return;let X=new Map,Y=(B)=>X.set(this.caseFormat(B),B);if(Q)for(let B of Z.availableKeys)Y(B);else Z.allValues.forEach((B,E)=>Y(E));let q=[],G=!1;for(let B of $.values){let E=this.caseFormat(q0(B)),K=X.get(E);if(K!==void 0){if(q.push(K),K!==B)G=!0}else G=!0}let U=q.length,_=z.filterParams;if(U===0&&_.excelMode){z.onModelChange(null,J);return}let W=!_.defaultToNothingSelected&&(this.valueModel.valuesType===r5.TAKEN_FROM_GRID_VALUES||!_.suppressClearModelOnRefreshValues)&&U===X.size;if(G||!$.filterType||W){let B=W?null:{filterType:this.filterType,values:q};z.onModelChange(B,J)}})}isValuesTakenFromGrid(){return this.valueModel.valuesType===r5.TAKEN_FROM_GRID_VALUES}doesFilterPassForTreeData(z){if(z.childrenAfterGroup?.length)return!1;let{gos:J,appliedModel:Q}=this;return Q.has(this.createKey(J7(z.getRoute()??[z.key??z.id],!0,J.get("groupAllowUnbalanced"))))}doesFilterPassForGrouping(z){let{appliedModel:J,params:Q,gos:Z,beans:{rowGroupColsSvc:$,valueSvc:X}}=this,Y=($?.columns??[]).map((q)=>X.getKeyForNode(q,z));return Y.push(Q.getValue(z)),J.has(this.createKey(J7(Y,!1,Z.get("groupAllowUnbalanced"))))}generateCreateKey(z,J){if(J&&!z)return r(250),()=>null;if(z)return(Q,Z=null)=>{let $=this.getKeyCreatorParams(Q,Z);return q0(z($))};return(Q)=>q0(p0(Q))}getKeyCreatorParams(z,J=null){let{colDef:Q,column:Z}=this.params;return C(this.gos,{value:z,colDef:Q,column:Z,node:J,data:J?.data})}setValueFormatter(z,J,Q,Z){let $=z;if(!$){if(J&&!Q){r(249);return}if(this.noValueFormatterSupplied=!0,!Z)$=(X)=>p0(X.value)}this.valueFormatter=$}getCrossFilterModel(z){let{createKey:J,valueModel:Q,params:Z}=this;return z(J,Q.availableKeys,Z.model?.values)}destroy(){this.appliedModel.destroy(),super.destroy(),this.valueModel=void 0}},GO={tag:"div",cls:"ag-floating-filter-input ag-set-floating-filter-input",role:"presentation",children:[{tag:"ag-input-text-field",ref:"eFloatingFilterText"}]},UO=class extends x{constructor(){super(GO,[Zz]);this.eFloatingFilterText=j}init(z){this.params=z,this.eFloatingFilterText.setDisabled(!0).addGuiEventListener("click",()=>this.params.showParentFilter()),this.setParams(z)}setParams(z){let J=this.beans.colNames.getDisplayNameForColumn(z.column,"header",!0),Q=this.getLocaleTextFunc();if(this.eFloatingFilterText.setInputAriaLabel(`${J} ${Q("ariaFilterInput","Filter Input")}`),this.gos.get("enableFilterHandlers")){let Z=z;this.updateFloatingFilterText(Z.model)}}refresh(z){this.params=z,this.setParams(z)}onParentModelChanged(z){this.updateFloatingFilterText(z)}parentSetFilterInstance(z){this.params.parentFilterInstance((J)=>{if(!(J instanceof Tq)){r(248);return}z(J)})}updateFloatingFilterText(z){if(z==null)this.eFloatingFilterText.setValue("");else if(this.gos.get("enableFilterHandlers"))this.eFloatingFilterText.setValue(this.params.getHandler().getModelAsString?.(z)??"");else this.parentSetFilterInstance((J)=>{this.eFloatingFilterText.setValue(J.getModelAsString(z))})}},Iq={moduleName:"SetFilter",version:$0,userComponents:{agSetColumnFilter:{classImp:Tq,params:{useForm:!0},processParams:(z)=>{return ej(z),z}},agSetColumnFloatingFilter:UO},dynamicBeans:{agSetColumnFilterHandler:qO},icons:{setFilterGroupClosed:"tree-closed",setFilterGroupOpen:"tree-open",setFilterGroupIndeterminate:"tree-indeterminate",setFilterLoading:"loading"},dependsOn:[C0,G1]},_O=".ag-status-bar{border-top:var(--ag-footer-row-border);display:flex;justify-content:space-between;line-height:1.5;overflow:hidden;padding-left:calc(var(--ag-spacing)*4);padding-right:calc(var(--ag-spacing)*4)}.ag-status-panel,:where(.ag-status-panel.ag-status-panel-aggregations .ag-status-name-value){display:inline-flex}.ag-status-name-value{color:var(--ag-status-bar-label-color);font-weight:var(--ag-status-bar-label-font-weight);margin-left:var(--ag-spacing);margin-right:var(--ag-spacing);padding-bottom:var(--ag-widget-container-vertical-padding);padding-top:var(--ag-widget-container-vertical-padding);white-space:nowrap}.ag-status-name-value-value{color:var(--ag-status-bar-value-color);font-weight:var(--ag-status-bar-value-font-weight)}.ag-status-bar-left{display:inline-flex}.ag-status-bar-center{display:inline-flex;text-align:center}.ag-status-bar-right{display:inline-flex}";function HO(z,J,Q){return z.getCompDetails(J,WO,void 0,Q,!0)}var WO={name:"statusPanel",optionalMethods:["refresh"]},BO={agAggregationComponent:{rowModels:["clientSide","serverSide"],warnArgs:[221]},agFilteredRowCountComponent:{rowModels:["clientSide"],warnArgs:[222]},agSelectedRowCountComponent:{rowModels:["clientSide","serverSide"],warnArgs:[223]},agTotalAndFilteredRowCountComponent:{rowModels:["clientSide"],warnArgs:[224]},agTotalRowCountComponent:{rowModels:["clientSide"],warnArgs:[225]}},EO={tag:"div",cls:"ag-status-bar",children:[{tag:"div",ref:"eStatusBarLeft",cls:"ag-status-bar-left",role:"status"},{tag:"div",ref:"eStatusBarCenter",cls:"ag-status-bar-center",role:"status"},{tag:"div",ref:"eStatusBarRight",cls:"ag-status-bar-right",role:"status"}]},KO=class extends x{constructor(){super(EO);this.updateQueued=!1,this.panelsPromise=N.resolve(),this.eStatusBarLeft=j,this.eStatusBarCenter=j,this.eStatusBarRight=j,this.compDestroyFunctions={},this.registerCSS(_O)}wireBeans(z){this.userCompFactory=z.userCompFactory,this.statusBarSvc=z.statusBarSvc}postConstruct(){this.processStatusPanels(new Map),this.addManagedPropertyListeners(["statusBar"],this.handleStatusBarChanged.bind(this)),Tz(this.beans,this,this.getGui())}getFocusableContainerName(){return"statusBar"}getValidPanels(){let z=this.gos,J=z.get("statusBar")?.statusPanels;if(!J)return J;return J.filter((Q)=>{let{rowModels:Z,warnArgs:$}=BO[Q.statusPanel]??{};if(!Z)return!0;if(Z.includes(z.get("rowModelType")))return!0;return V(...$),!1})}processStatusPanels(z){let J=this.getValidPanels();if(J){let Q=J.filter((X)=>X.align==="left"),Z=J.filter((X)=>X.align==="center"),$=J.filter((X)=>!X.align||X.align==="right");this.panelsPromise=N.all([this.createAndRenderComponents(Q,this.eStatusBarLeft,z),this.createAndRenderComponents(Z,this.eStatusBarCenter,z),this.createAndRenderComponents($,this.eStatusBarRight,z)])}else this.setDisplayed(!1)}handleStatusBarChanged(){if(this.updateQueued)return;this.updateQueued=!0,this.panelsPromise.then(()=>{this.updateStatusBar(),this.updateQueued=!1})}updateStatusBar(){let z=this.getValidPanels(),J=Array.isArray(z)&&z.length>0;this.setDisplayed(J);let Q=new Map;if(J)for(let Z of z){let $=Z.key??Z.statusPanel,X=this.statusBarSvc.getStatusPanel($);if(X?.refresh){let Y=C(this.gos,{...Z.statusPanelParams??{},key:$});if(X.refresh(Y))Q.set($,X),delete this.compDestroyFunctions[$],R0(X.getGui())}}if(this.resetStatusBar(),J)this.processStatusPanels(Q)}resetStatusBar(){J0(this.eStatusBarLeft),J0(this.eStatusBarCenter),J0(this.eStatusBarRight),this.destroyComponents(),this.statusBarSvc.unregisterAllComponents()}destroy(){this.destroyComponents(),super.destroy()}destroyComponents(){for(let z of Object.values(this.compDestroyFunctions))z();this.compDestroyFunctions={}}createAndRenderComponents(z,J,Q){let Z=[];for(let $ of z){let X=$.key||$.statusPanel,Y=Q.get(X),q;if(Y)q=N.resolve(Y);else{let G=HO(this.userCompFactory,$,C(this.gos,{key:X}));if(G==null)continue;q=G.newAgStackInstance()}Z.push({key:X,promise:q})}return N.all(Z.map(($)=>$.promise)).then(()=>{for(let $ of Z)$.promise.then((X)=>{let Y=()=>{this.destroyBean(X)};if(this.isAlive())this.statusBarSvc.registerStatusPanel($.key,X),J.appendChild(X.getGui()),this.compDestroyFunctions[$.key]=Y;else Y()})})}},FO={selector:"AG-STATUS-BAR",component:KO},LO={tag:"div",cls:"ag-status-name-value",children:[{tag:"span",ref:"eLabel"},": ",{tag:"span",ref:"eValue",cls:"ag-status-name-value-value"}]},DO=BigInt(Number.MIN_SAFE_INTEGER),MO=BigInt(Number.MAX_SAFE_INTEGER),X6=class extends x{constructor(){super(LO);this.eLabel=j,this.eValue=j}setLabel(z,J){this.setDisplayed(!1),this.eLabel.textContent=this.getLocaleTextFunc()(z,J)}setValue(z,J){let Q=null,Z;if(typeof z==="bigint"){if(Z=z,z>=DO&&z<=MO)Q=Number(z)}else Q=z;this.eValue.textContent=this.valueFormatter(C(this.gos,{value:Q,bigintValue:Z,totalRows:J,key:this.key}))}},kO={selector:"AG-NAME-VALUE",component:X6},Cq=(z)=>{let J=0;return z.forEachNodeAfterFilter((Q)=>{if(Q.data)J++}),J},Y6=(z)=>{let J=0;return z.forEachNode((Q)=>{if(Q.data)J++}),J};function fO(z,J){if(typeof z!=="number")return"";return P4(Math.round(z*100)/100,J)}var SO={tag:"div",cls:"ag-status-panel ag-status-panel-aggregations",children:[{tag:"ag-name-value",ref:"avgAggregationComp"},{tag:"ag-name-value",ref:"countAggregationComp"},{tag:"ag-name-value",ref:"minAggregationComp"},{tag:"ag-name-value",ref:"maxAggregationComp"},{tag:"ag-name-value",ref:"sumAggregationComp"}]},VO=class extends x{constructor(){super(SO,[kO]);this.sumAggregationComp=j,this.countAggregationComp=j,this.minAggregationComp=j,this.maxAggregationComp=j,this.avgAggregationComp=j}postConstruct(){this.avgAggregationComp.setLabel("avg","Average"),this.countAggregationComp.setLabel("count","Count"),this.minAggregationComp.setLabel("min","Min"),this.maxAggregationComp.setLabel("max","Max"),this.sumAggregationComp.setLabel("sum","Sum"),this.addManagedEventListeners({cellSelectionChanged:this.onCellSelectionChanged.bind(this),modelUpdated:this.onCellSelectionChanged.bind(this)})}init(z){this.refresh(z)}refresh(z){this.params=z;let J=z.valueFormatter??((Z)=>{let{value:$,bigintValue:X}=Z;if(X!=null)return X.toString();return fO($,this.getLocaleTextFunc.bind(this))}),Q=["avg","count","min","max","sum"];for(let Z of Q){let $=this.getAllowedAggregationValueComponent(Z);if($)$.key=Z,$.valueFormatter=J.bind(this)}return this.onCellSelectionChanged(),!0}setAggregationComponentValue(z,J,Q){let Z=this.getAllowedAggregationValueComponent(z),$=Y6(this.beans.rowModel);if(P(Z)&&Z)Z.setValue(J,$),Z.setDisplayed(Q);else this.getAggregationValueComponent(z)?.setDisplayed(!1)}getAllowedAggregationValueComponent(z){let{aggFuncs:J}=this.params;if(!J||J.includes(z))return this.getAggregationValueComponent(z);return null}getAggregationValueComponent(z){let J=`${z}AggregationComp`;return this[J]}onCellSelectionChanged(){let z=this.beans,{rangeSvc:J,valueSvc:Q}=z,Z=J?.getCellRanges(),$=0,X=0n,Y=!1,q=!1,G=0,U=0,_=null,H=null,W=null,B=null,E=(I)=>{if(typeof I==="number"){if($+=I,_===null||I<_)_=I;if(H===null||I>H)H=I;if(!Number.isInteger(I)||!Number.isSafeInteger(I))q=!0;else{let b=BigInt(I);if(X+=b,W===null||bB)B=b}}else{if(Y=!0,X+=I,W===null||IB)B=I;let b=Number(I);if($+=b,_===null||b<_)_=b;if(H===null||b>H)H=b}U++},K={};if(Z?.length&&J)for(let I=0;I{if(m===null)return;let u=n4({rowPinned:m.rowPinned,column:t,rowIndex:m.rowIndex});if(K[u])return;K[u]=!0;let Q0=S0(z,m);if(d(Q0))return;let s=Q.getValue(t,Q0,"data");if(d(s)||s==="")return;if(G++,typeof s==="object"&&"value"in s){if(s=s.value,s==="")return}if(typeof s==="string"){let P0=s.trim();if(P0==="")return;let T0=Number(P0);if(!Number.isFinite(T0))return;if($+T0>=Number.MAX_SAFE_INTEGER||$+T0<=Number.MIN_SAFE_INTEGER||T0>=Number.MAX_SAFE_INTEGER||T0<=Number.MIN_SAFE_INTEGER){if(s=Sz(P0),s===null)s=T0}else s=T0}if(typeof s==="number"&&!isNaN(s)||typeof s==="bigint")E(s)}),m=M0(z,m)}}let F=G>1,L=U>1,D=Y&&!q,M;if(D)M=X/BigInt(U);else M=$/U;let f=L?D?X:$:null,A=L?D?W:_:null,R=L?D?B:H:null,O=L?M:null,v=L;this.setAggregationComponentValue("count",G,F),this.setAggregationComponentValue("sum",f,L),this.setAggregationComponentValue("min",A,L),this.setAggregationComponentValue("max",R,L),this.setAggregationComponentValue("avg",O,v)}},RO=class extends X6{postConstruct(){this.setLabel("filteredRows","Filtered"),this.addCss("ag-status-panel"),this.addCss("ag-status-panel-filtered-row-count"),this.setDisplayed(!0);let z=this.onDataChanged.bind(this);this.addManagedEventListeners({modelUpdated:z})}onDataChanged(){let{rowModel:z}=this.beans,J=Y6(z),Q=Cq(z);this.setValue(Q,J),this.setDisplayed(J!==Q)}init(z){this.refresh(z),this.onDataChanged()}updateValueFormatter(z){this.valueFormatter=z??(({value:J})=>P4(J,this.getLocaleTextFunc.bind(this)))}refresh(z){let{key:J,valueFormatter:Q}=z;return this.key=J,this.updateValueFormatter(Q),!0}},AO=class extends X6{postConstruct(){this.setLabel("selectedRows","Selected"),this.addCss("ag-status-panel"),this.addCss("ag-status-panel-selected-row-count");let z=this.onRowSelectionChanged.bind(this);this.addManagedEventListeners({modelUpdated:z,selectionChanged:z})}onRowSelectionChanged(){let{selectionSvc:z,rowModel:J}=this.beans,Q=z?.getSelectionCount()??0,Z=Y6(J);if(this.setValue(Q,Z),Q<0){this.setDisplayed(!0);return}this.setDisplayed(Q>0)}init(z){this.refresh(z),this.onRowSelectionChanged()}updateValueFormatter(z){this.valueFormatter=z??(({value:J})=>{if(J==null||J>=0)return P4(J,this.getLocaleTextFunc.bind(this));return this.getLocaleTextFunc()("statusBarLastRowUnknown","?")})}refresh(z){let{key:J,valueFormatter:Q}=z;return this.key=J,this.updateValueFormatter(Q),!0}},jO=class extends X6{postConstruct(){this.setLabel("totalAndFilteredRows","Rows"),this.addCss("ag-status-panel"),this.addCss("ag-status-panel-total-and-filtered-row-count"),this.setDisplayed(!0),this.addManagedEventListeners({modelUpdated:this.onDataChanged.bind(this)})}onDataChanged(){let{rowModel:z}=this.beans,J=Cq(z),Q=Y6(z);this.setValue(J,Q)}init(z){this.refresh(z),this.onDataChanged()}updateValueFormatter(z){this.valueFormatter=z??(({value:J,totalRows:Q})=>{let Z=this.getLocaleTextFunc.bind(this),$=P4(J,Z),X=P4(Q??J,Z);if(J===Q)return $;let Y=Z();return`${$} ${Y("of","of")} ${X}`})}refresh(z){let{key:J,valueFormatter:Q}=z;return this.key=J,this.updateValueFormatter(Q),!0}},OO=class extends X6{postConstruct(){this.setLabel("totalRows","Total Rows"),this.addCss("ag-status-panel"),this.addCss("ag-status-panel-total-row-count"),this.setDisplayed(!0),this.addManagedEventListeners({modelUpdated:this.onDataChanged.bind(this)})}onDataChanged(){let z=Y6(this.beans.rowModel);this.setValue(z,z)}init(z){this.refresh(z),this.onDataChanged()}updateValueFormatter(z){this.valueFormatter=z??(({value:J})=>P4(J,this.getLocaleTextFunc.bind(this)))}refresh(z){let{key:J,valueFormatter:Q}=z;return this.key=J,this.updateValueFormatter(Q),!0}};function PO(z,J){let Q=z.statusBarSvc?.getStatusPanel(J);return zz(Q)}var TO=class extends S{constructor(){super();this.beanName="statusBarSvc",this.comps=new Map}registerStatusPanel(z,J){this.comps.set(z,J)}unregisterStatusPanel(z){this.comps.delete(z)}unregisterAllComponents(){this.comps.clear()}getStatusPanel(z){return this.comps.get(z)}destroy(){this.unregisterAllComponents(),super.destroy()}},yq={moduleName:"StatusBar",version:$0,beans:[TO],userComponents:{agAggregationComponent:VO,agTotalRowCountComponent:OO,agFilteredRowCountComponent:RO,agTotalAndFilteredRowCountComponent:jO,agSelectedRowCountComponent:AO},selectors:[FO],apiFunctions:{getStatusPanel:PO},dependsOn:[C0,Y1]};function bq(z){if(z.excelCreator?.getFactoryMode()==="MULTI_SHEET")return V(161),!1;return!0}function vO(z,J){if(bq(z))return z.excelCreator?.getDataAsExcel(J);return}function IO(z,J){if(bq(z))z.excelCreator?.exportDataAsExcel(J)}function CO(z,J){return z.excelCreator?.setFactoryMode("MULTI_SHEET"),z.excelCreator?.getSheetDataForExcel(J)}function yO(z,J){return z.excelCreator?.getMultipleSheetsAsExcel(J)}function bO(z,J){z.excelCreator?.exportMultipleSheetsAsExcel(J)}var xq={moduleName:"ExcelExport",version:$0,beans:[vR],apiFunctions:{getDataAsExcel:vO,exportDataAsExcel:IO,getSheetDataForExcel:CO,getMultipleSheetsAsExcel:yO,exportMultipleSheetsAsExcel:bO},dependsOn:[W5,C0]};function rJ(z){let{filters:J}=z;return J&&J.length>0?J:[{filter:"agTextColumnFilter"},{filter:"agSetColumnFilter"}]}function cJ(z,J){if(z==null)return;for(let Q=z.length-1;Q>=0;Q--)J(z[Q],Q)}function xO(z,J){if(J.title!=null)return J.title;return z instanceof $1?z.getFilterTitle():"Filter"}function iJ(z,J,Q,Z){let $=[],X=z?.filterModels;for(let Y=0;YY==null)?null:{filterType:"multi",filterModels:$}}function Xz(z,J){return z?.filterModels?.[J]??null}function pJ(z,J,Q,Z){let $=Q.filterValueGetter;return $?z.colFilter.createGetValue(J,$):Z}var wq=class extends eZ{constructor(){super({tag:"div",cls:"ag-multi-filter ag-menu-list-compact"});this.filterDefs=[],this.guiDestroyFuncs=[],this.filterGuis=[],this.lastActivatedMenuItem=null}postConstruct(){this.initialiseTabGuard({onFocusIn:(z)=>this.onFocusIn(z)})}refreshGui(z){if(z===this.lastOpenedInContainer)return N.resolve();return this.tabGuardFeature.removeAllChildrenExceptTabGuards(),this.destroyChildren(),N.all(this.getFilterWrappers().map((J,Q)=>{if(!J)return N.resolve(null);let Z=this.getFilterFromWrapper(J),$=this.getCompFromWrapper(J),X=this.filterDefs[Q],Y=xO(Z,X),q;if(X.display==="subMenu"&&z!=="toolPanel")q=this.insertFilterMenu($,Z,Y).then((G)=>G.getGui());else if(X.display==="subMenu"||X.display==="accordion"){let G=this.insertFilterGroup(Z,$,Y);q=N.resolve(G.getGui())}else q=N.resolve($.getGui());return q})).then((J)=>{J.forEach((Q,Z)=>{if(!Q)return;if(Z>0)this.appendChild(z0({tag:"div",cls:"ag-filter-separator"}));this.appendChild(Q)}),this.filterGuis=J,this.lastOpenedInContainer=z})}destroyChildren(){for(let z of this.guiDestroyFuncs)z();this.guiDestroyFuncs.length=0,this.filterGuis.length=0}insertFilterMenu(z,J,Q){let Z=z.getGui();U0(Z,"dialog");let $=this.createBean(new sA),X={getGui:()=>z.getGui(),afterGuiAttached:(Y)=>{if(z.afterGuiAttached?.(Y),z!==J)J.afterGuiAttached?.(Y)}};return $.init({menuItemDef:{name:Q,subMenu:[],subMenuRole:"dialog",cssClasses:["ag-multi-filter-menu-item"],menuItem:Uq,menuItemParams:{cssClassPrefix:"ag-compact-menu-option",isCompact:!0}},level:0,isAnotherSubMenuOpen:()=>!1,childComponent:X,contextParams:{column:null,node:null,value:null}}).then(()=>{$.setParentComponent(this),this.guiDestroyFuncs.push(()=>this.destroyBean($)),this.addManagedListeners($,{menuItemActivated:(q)=>{if(this.lastActivatedMenuItem&&this.lastActivatedMenuItem!==q.menuItem)this.lastActivatedMenuItem.deactivate();this.lastActivatedMenuItem=q.menuItem}});let Y=$.getGui();return $.addManagedElementListeners(Y,{keydown:(q)=>{let{key:G}=q;switch(G){case k.UP:case k.RIGHT:case k.DOWN:case k.LEFT:if(q.preventDefault(),G===k.RIGHT)$.openSubMenu(!0);break}},focusin:()=>$.activate(),focusout:()=>{if(!$.isSubMenuOpen()&&!$.isSubMenuOpening())$.deactivate()}}),$})}insertFilterGroup(z,J,Q){let Z=this.createBean(new lR({title:Q,cssIdentifier:"multi-filter"}));if(this.guiDestroyFuncs.push(()=>this.destroyBean(Z)),Z.addItem(J.getGui()),Z.toggleGroupExpand(!1),z.afterGuiAttached)Z.addManagedListeners(Z,{expanded:()=>z.afterGuiAttached({container:this.lastOpenedInContainer,suppressFocus:!0,hidePopup:this.hidePopup})});return Z}afterGuiAttached(z){let J;if(z)this.hidePopup=z.hidePopup,J=this.refreshGui(z.container);else this.hidePopup=void 0,J=N.resolve();let Q=z?.suppressFocus;J.then(()=>{let{filterDefs:Z,filterGuis:$,beans:X}=this,Y=this.getFilterWrappers(),q=!!Q;if(Z)cJ(Z,(U,_)=>{let H=_===0,W=U.display&&U.display!=="inline",B=Q||!H||W,E={...z??{},suppressFocus:B},K=Y[_],F=K?this.getFilterFromWrapper(K):void 0;if(K){let L=this.getCompFromWrapper(K);if(L!==F)L.afterGuiAttached(E)}if(F){if(this.executeFunctionIfExistsOnFilter(F,"afterGuiAttached",E),H&&!B)q=!0}if(!Q&&H&&W){let L=$[_];if(L){if(!E0(L))L.focus({preventScroll:!0});q=!0}}});let G=n(X);if(!q&&(Vz(X)||this.getGui().contains(G)))this.forceFocusOutOfContainer(!0)})}afterGuiDetached(){this.executeFunctionIfExists("afterGuiDetached")}onAnyFilterChanged(){this.executeFunctionIfExists("onAnyFilterChanged",(z)=>this.executeOnWrapper(z,"onAnyFilterChanged"))}onNewRowsLoaded(){this.executeFunctionIfExists("onNewRowsLoaded",(z)=>this.executeOnWrapper(z,"onNewRowsLoaded"))}destroy(){this.destroyChildren(),this.hidePopup=void 0,super.destroy()}executeOnWrapper(z,J){}executeFunctionIfExists(z,J){cJ(this.getFilterWrappers(),(Q)=>{if(Q)J?.(Q),this.executeFunctionIfExistsOnFilter(this.getFilterFromWrapper(Q),z)})}executeFunctionIfExistsOnFilter(z,J,...Q){let Z=z[J];if(typeof Z==="function")Z.apply(z,Q)}onFocusIn(z){let J=this.lastActivatedMenuItem;if(J!=null&&!J.getGui().contains(z.target))J.deactivate(),this.lastActivatedMenuItem=null}},Nq=class extends wq{constructor(){super(...arguments);this.filterType="multi",this.wrappers=[],this.activeFilterIndices=[],this.afterFiltersReadyFuncs=[]}init(z){this.params=z,this.filterDefs=rJ(z);let J=f0(this.beans.colFilter.model,z.column.getColId()),{filterChangedCallback:Q}=z;this.filterChangedCallback=Q;let Z=this.filterDefs.map(($,X)=>this.createFilter($,X,J));return new N(($)=>{N.all(Z).then((X)=>{this.wrappers=X,this.refreshGui("columnMenu").then(()=>{$()})})}).then(()=>{for(let $ of this.afterFiltersReadyFuncs)$();this.afterFiltersReadyFuncs.length=0})}refresh(z){return this.params=z,!0}isFilterActive(){return this.wrappers.some((z)=>{if(!z)return!1;let{filter:J,handler:Q,model:Z}=z;if(Q)return Z!=null;return J.isFilterActive()})}getLastActiveFilterIndex(){let z=this.activeFilterIndices;return z.length>0?z[z.length-1]:null}doesFilterPass(z,J){return this.wrappers.every((Q,Z)=>{if(!Q||J!=null&&Z===J)return!0;let{handler:$,filter:X,model:Y}=Q;if($)return Y==null||$.doesFilterPass({...z,model:Y,handlerParams:Q.handlerParams});return!X.isFilterActive()||X.doesFilterPass(z)})}getModelFromUi(){return{filterType:this.filterType,filterModels:this.wrappers.map((J)=>{if(!J)return null;let Q=J.filter;if(typeof Q.getModelFromUi==="function")return Q.getModelFromUi();return null})}}getModel(){if(!this.isFilterActive())return null;return{filterType:this.filterType,filterModels:this.wrappers.map((J)=>{if(!J)return null;let{filter:Q,handler:Z,model:$}=J;if(Z)return $;return Q.isFilterActive()?Q.getModel():null})}}setModel(z){let J=(Z,$)=>{return new N((X)=>{let Y=Z.setModel($);if(Y)Y.then(X);else X()})},Q=[];return this.wrappers.forEach((Z,$)=>{if(!Z)return;let X=Xz(z,$),{filter:Y,filterParams:q,handler:G,handlerParams:U,state:_}=Z;if(G){let H={model:X,state:_?.state};Z.state=H,Z.model=X,Q.push(VJ(()=>N.resolve({filter:Y,filterParams:q}),G,U,X,H,"api").then(()=>{this.updateActiveListForHandler($,Z.model)}))}else Q.push(J(Y,X).then(()=>{this.updateActiveListForFilter($,Y)}))}),N.all(Q).then(()=>{})}applyModel(z="api"){let J=!1;for(let Q of this.wrappers)if(Q){let Z=Q.filter;if(Z instanceof $1)J=Z.applyModel(z)||J}return J}getChildFilterInstance(z){return this.wrappers[z]?.filter}getNumChildFilters(){return this.wrappers.length}destroy(){for(let z of this.wrappers)this.destroyBean(z?.filter),this.destroyBean(z?.handler);this.wrappers.length=0,super.destroy()}getFilterWrappers(){return this.wrappers}getFilterFromWrapper(z){return z.filter}getCompFromWrapper(z){return z.comp}executeOnWrapper(z,J){z.handler?.[J]?.()}createFilter(z,J,Q){let Z=this.params.column,$=null,X,Y=this.beans,q=(B,E)=>{let K=this.wrappers[J];if(!K)return;let F={model:B,state:K.state?.state};K.state=F,K.model=B,VJ(()=>N.resolve({filter:K.filter,filterParams:K.filterParams}),K.handler,K.handlerParams,B,F,"ui").then(()=>{this.onHandlerModelChanged(J,K.model,E)})},{compDetails:G,handler:U,handlerParams:_,createFilterUi:H}=Y.colFilter.createFilterInstance(Z,z,"agTextColumnFilter",(B,E)=>{let K={...B,filterChangedCallback:E?()=>{}:(F)=>{this.executeWhenAllFiltersReady(()=>this.onFilterModelChanged(J,F))},doesRowPassOtherFilter:(F)=>B.doesRowPassOtherFilter(F)&&this.doesFilterPass({node:F,data:F.data},J),getValue:pJ(Y,Z,z,B.getValue)};if(E)$=Xz(Q,J),X=this.updateDisplayParams(K,J,$,()=>G,()=>U,q);return K});if(!H)return N.resolve(null);let W;if(U){let{doesRowPassOtherFilter:B,getValue:E}=_;W={..._,onModelChange:q,doesRowPassOtherFilter:(K)=>B(K)&&this.doesFilterPass({node:K,data:K.data},J),getValue:pJ(Y,Z,z,E)},U.init?.({...W,model:$,source:"init"})}return H().then((B)=>{if(!U)return{filter:B,comp:B};let E=G?.params,K=X(B);return{filter:B,comp:K,filterParams:E,handler:U,handlerParams:W,model:$}})}updateDisplayParams(z,J,Q,Z,$,X){let Y=this.params.column,q=new R4;z.model=Q,z.state={model:Q},z.onModelChange=X,z.getHandler=$;let G=(_,H)=>{_.state=H,q.dispatchEvent({type:"filterStateChanged",column:Y,state:H})};z.onStateChange=(_)=>{let H=this.wrappers[J];if(!H)return;G(H,_),l1(H.filter,H.filterParams,H.model??null,_,"ui")};let U=(_,H,W)=>{let B=this.wrappers[J];if(!B)return;let E=()=>B?.model??null;d6({action:H,filterParams:B.filterParams,getFilterUi:()=>{let K=N.resolve(B.filter);return{created:!0,filterParams:B.filterParams,compDetails:Z(),create:()=>K,promise:K}},getModel:E,getState:()=>B?.state??{model:E()},updateState:(K)=>G(B,K),updateModel:(K)=>B.filterParams?.onModelChange(K,W),processModelToApply:B.handler?.processModelToApply?.bind(B.handler)})};return z.onAction=(_,H,W)=>{U(Y,_,H),q.dispatchEvent({type:"filterAction",column:Y,action:_,event:W})},(_)=>{let H=Z()?.params;return this.createManagedBean(new k5(Y,{comp:_,params:H,isHandler:!0},q,U,!1))}}executeWhenAllFiltersReady(z){if((this.wrappers?.length??0)>0)z();else this.afterFiltersReadyFuncs.push(z)}updateActiveListForFilter(z,J){this.updateActiveList(z,()=>J?.isFilterActive())}updateActiveListForHandler(z,J){this.updateActiveList(z,()=>J!=null)}updateActiveList(z,J){let Q=this.activeFilterIndices;if(X0(this.activeFilterIndices,z),J())Q.push(z)}onFilterModelChanged(z,J){this.updateActiveListForFilter(z,this.wrappers[z]?.filter),this.filterChanged(z,J)}onHandlerModelChanged(z,J,Q){this.updateActiveListForHandler(z,J),this.filterChanged(z,Q)}filterChanged(z,J){this.filterChangedCallback(J),this.wrappers.forEach((Q,Z)=>{if(z===Z||!Q)return;let{filter:$,handler:X}=Q;if(X?.onAnyFilterChanged?.(),typeof $.onAnyFilterChanged==="function")$.onAnyFilterChanged()})}getModelAsString(z){if(!z?.filterModels?.length)return"";let J=this.getLastActiveFilterIndex()??0;return this.wrappers[J]?.filter?.getModelAsString?.(z.filterModels[J])??""}},wO=class extends S{constructor(){super(...arguments);this.filterType="multi",this.handlerWrappers=[],this.activeFilterIndices=[],this.filterDefs=[]}init(z){this.params=z;let J=rJ(z.filterParams);this.filterDefs=J,J.forEach((Q,Z)=>{let $=this.beans.colFilter.createHandler(z.column,Q,"agTextColumnFilter");if(this.handlerWrappers.push($),!$){V(278,{colId:z.column.getColId()});return}let{handler:X,handlerParams:Y}=$;X.init?.({...this.updateHandlerParams(Y,Z,!0),model:Xz(z.model,Z),source:"init"})}),this.resetActiveList(z.model)}refresh(z){this.params=z;let{model:J,source:Q,filterParams:Z}=z,$=Z?.filters;if(this.handlerWrappers.forEach((X,Y)=>{if(X){let q=this.updateHandlerParams(z,Y,!1,$?.[Y].filterParams);X.handlerParams=q,X.handler.refresh?.({...q,model:Xz(J,Y),source:Q})}}),z.source!=="floating"&&z.source!=="ui")this.resetActiveList(z.model);if(z.additionalEventAttributes?.fromButtons)this.onAnyFilterChanged()}updateHandlerParams(z,J,Q,Z){let{onModelChange:$,doesRowPassOtherFilter:X,getValue:Y}=z,q={...z,onModelChange:(G,U)=>$(iJ(this.params.model,this.handlerWrappers.length,G,J),U),doesRowPassOtherFilter:(G)=>X(G)&&this.doesFilterPass({node:G,data:G.data,model:this.params.model,handlerParams:q},J),getValue:pJ(this.beans,z.column,this.filterDefs[J],Y),filterParams:this.updateFilterParams(z,Q,Z)};return q}updateFilterParams(z,J,Q){let Z=z.filterParams;if(Q?.buttons&&J)V(292,{colId:z.column.getColId()});let $=Q?{...Z,...Q}:Z;if(!$.buttons)return $;if(Q)return delete $.buttons,$;let{buttons:X,...Y}=$;return Y}doesFilterPass(z,J){let Q=z.model?.filterModels;if(Q==null)return!0;return this.handlerWrappers.every((Z,$)=>{let X=Q[$];if(X==null||J!=null&&$===J)return!0;let Y=Z?.handler;return!Y||Y.doesFilterPass({...z,model:X,handlerParams:Z.handlerParams})})}resetActiveList(z){this.activeFilterIndices=[];let J=z?.filterModels;if(J==null)return;for(let Q=0;Q0?z[z.length-1]:null}getModelAsString(z,J){let Q=J==="filterToolPanel",Z=()=>Q?this.getLocaleTextFunc()("filterSummaryInactive","is (All)"):"";if(!z?.filterModels?.length)return Z();let $=this.getLastActiveFilterIndex()??0;return this.handlerWrappers[$]?.handler.getModelAsString?.(z.filterModels[$],J)??Z()}getHandler(z){return this.handlerWrappers[z]?.handler}onAnyFilterChanged(){cJ(this.handlerWrappers,(z)=>z?.handler?.onAnyFilterChanged?.())}onNewRowsLoaded(){cJ(this.handlerWrappers,(z)=>z?.handler?.onNewRowsLoaded?.())}destroy(){for(let z of this.handlerWrappers)this.destroyBean(z?.handler);this.handlerWrappers.length=0,super.destroy()}},NO=class extends S{constructor(){super(...arguments);this.beanName="multiFilter"}getParamsForDataType(z,J,Q,Z){let $=z?.filters,X=this.beans;if(!$)$=[{filter:L5(Q.baseDataType)},{filter:"agSetColumnFilter"}];let Y=this.getLocaleTextFunc();return $=$.map((q)=>{let{filter:G,filterParams:U,filterValueGetter:_}=q;if(typeof G!=="string")return q;let{filterParams:H,filterValueGetter:W}=F5(G,U,_??J,Q,Z,X,Y);return{...q,filterParams:H,filterValueGetter:W}}),{filterParams:{...z,filters:$}}}},gq=class extends wq{constructor(){super(...arguments);this.filterType="multi",this.filters=[],this.filterParams=[],this.validity=[]}init(z){this.params=z;let J=rJ(z).map((Z)=>{if(Z.filterParams?.buttons){V(292,{colId:z.column.getColId()});let $={...Z.filterParams};return delete $.buttons,{...Z,filterParams:$}}return Z});this.filterDefs=J,this.allState=z.state;let Q=this.filterDefs.map((Z,$)=>this.createFilter(Z,$));return new N((Z)=>{N.all(Q).then(($)=>{this.filters=$,this.refreshGui("columnMenu").then(()=>{Z()})})})}refresh(z){let{model:J,state:Q,source:Z}=z;if(Z==="colDef")return!1;this.params=z;let $=this.filterParams;if(Q===this.allState)return!0;this.allState=Q;let X=Q.state;return this.filters.forEach((Y,q)=>{let G=Xz(J,q),U={state:X?.[q],model:Xz(Q.model,q)};l1(Y,$[q],G,U,Z)}),!0}getLastActiveFilterIndex(){return this.getHandler().getLastActiveFilterIndex?.()??null}getChildFilterInstance(z){return this.filters[z]??void 0}getNumChildFilters(){return this.filters.length}destroy(){for(let z of this.filters)this.destroyBean(z);this.filters.length=0,super.destroy()}getFilterWrappers(){return this.filters}getFilterFromWrapper(z){return z}getCompFromWrapper(z){return z}createFilter(z,J){let Q=this.beans.userCompFactory,Z=this.updateParams(z,this.params,J),$=yZ(Q,z,Z,"agTextColumnFilter");if(!$)return N.resolve(null);return this.filterParams[J]=$.params,$.newAgStackInstance()}updateParams(z,J,Q){let{doesRowPassOtherFilter:Z,model:$,onModelChange:X,state:Y,onStateChange:q,column:G,source:U,onAction:_,onUiChange:H,getValue:W}=J,B=Xz($,Q),E=Y?{model:Xz(Y.model,Q),state:Y.state?.[Q]}:{model:B},K=()=>{let L=this.getHandler();this.filters.forEach((D,M)=>{if(Q!==M)L.getHandler(M)?.onAnyFilterChanged?.(),D?.onAnyFilterChanged?.()})},F=this.beans.colFilter;return{...F.createBaseFilterParams(G),...z,doesRowPassOtherFilter:(L)=>Z(L)&&this.getHandler().doesFilterPass({node:L,data:L.data,model:this.params.model,handlerParams:F.getHandlerParams(G)},Q),model:B,state:E,onModelChange:(L,D)=>{let{filters:M,params:f}=this,A=iJ(f.model,M.length,L,Q);this.updateActiveList(Q,L),X(A,D),K()},onStateChange:(L)=>this.onStateChange(q,Q,L),getHandler:()=>this.getHandler().getHandler(Q),onAction:(L,D,M)=>{if(d1(J))return;let f=L==="apply"||L==="reset";if(f)this.updateActiveList(Q,Xz(this.params.state.model,Q));if(_(L,D,M),f)K()},onUiChange:H,source:U,getValue:pJ(this.beans,G,z,W)}}updateActiveList(z,J){this.getHandler().updateActiveList?.(z,J)}getHandler(){return this.params.getHandler()}onStateChange(z,J,Q){let{model:Z,state:$,valid:X}=Q,Y=this.validity;Y[J]=X;let q=this.allState,G=iJ(q.model,this.filters.length,Z,J),U=Y.every((W)=>W!==!1),_=[...q.state??[]];_[J]=$;let H={state:_,model:G,valid:U};this.allState=H,z(H)}getModelAsString(z){return this.getHandler().getModelAsString?.(z)??""}},gO={tag:"div",cls:"ag-multi-floating-filter ag-floating-filter-input"},hO=class extends x{constructor(){super(gO);this.floatingFilters=[],this.compDetailsList=[]}init(z){this.params=z;let{compDetailsList:J}=this.getCompDetailsList(z);return this.setParams(J)}setParams(z){let J=[];return z.forEach((Q)=>{let Z=Q?.newAgStackInstance();if(Z!=null)this.compDetailsList.push(Q),J.push(Z)}),N.all(J).then((Q)=>{Q.forEach((Z,$)=>{this.floatingFilters.push(Z);let X=Z.getGui();if(this.appendChild(X),$>0)w(X,!1)})})}refresh(z){this.params=z;let{compDetailsList:J,floatingFilterParamsList:Q}=this.getCompDetailsList(z);if(J.length===this.compDetailsList.length&&J.every(($,X)=>!this.beans.colFilter?.areFilterCompsDifferent(this.compDetailsList[X],$))){if(Q.forEach(($,X)=>{this.floatingFilters[X].refresh?.($)}),this.gos.get("enableFilterHandlers")){let $=z;if($.model==null)this.floatingFilters.forEach((X,Y)=>{w(X.getGui(),Y===0)});else{let X=$.getHandler()?.getLastActiveFilterIndex?.();this.floatingFilters.forEach((Y,q)=>{let G=X==null?q===0:q===X;w(Y.getGui(),G)})}}}else J0(this.getGui()),this.destroyBeans(this.floatingFilters),this.floatingFilters=[],this.compDetailsList=[],this.setParams(J)}getCompDetailsList(z){let J=[],Q=[],Z=z.filterParams,$=z.currentParentModel,X=rJ(Z);return X.forEach((Y,q)=>{let G={...z,parentFilterInstance:(_)=>{this.parentMultiFilterInstance((H)=>{let W=H.getChildFilterInstance(q);if(W==null)return;_(W)})},currentParentModel:()=>$()?.filterModels?.[q]??null};if(this.gos.get("enableFilterHandlers")){let _=G;_.model=_.model?.filterModels?.[q]??null;let{onModelChange:H,getHandler:W}=_;_.onModelChange=(B,E)=>H(iJ(this.params.model,X.length,B,q),E),_.getHandler=()=>{return W().getHandler(q)}}D0(G.filterParams,Y.filterParams);let U=this.getCompDetails(Y,G);if(U)J.push(U),Q.push(G)}),{compDetailsList:J,floatingFilterParamsList:Q}}onParentModelChanged(z,J){if(J?.afterFloatingFilter)return;this.parentMultiFilterInstance((Q)=>{if(z==null)this.floatingFilters.forEach((Z,$)=>{Z.onParentModelChanged(null,J),w(Z.getGui(),$===0)});else{let Z=Q.getLastActiveFilterIndex();this.floatingFilters.forEach(($,X)=>{let Y=z.filterModels.length>X?z.filterModels[X]:null;$.onParentModelChanged(Y,J);let q=Z==null?X===0:X===Z;w($.getGui(),q)})}})}destroy(){this.destroyBeans(this.floatingFilters),this.floatingFilters.length=0,super.destroy()}getCompDetails(z,J){let{colFilter:Q,frameworkOverrides:Z,userCompFactory:$}=this.beans,X=D5(Z,z,()=>Q.getDefaultFloatingFilter(this.params.column))??"agReadOnlyFloatingFilter";return bZ($,z,J,X)}parentMultiFilterInstance(z){this.params.parentFilterInstance((J)=>{if(!(J instanceof Nq||J instanceof gq))r(120);z(J)})}},hq={moduleName:"MultiFilter",version:$0,userComponents:{agMultiColumnFilter:{getComp:(z)=>z.gos.get("enableFilterHandlers")?{classImp:gq,params:{useForm:!0}}:Nq},agMultiColumnFloatingFilter:hO},beans:[NO],dynamicBeans:{agMultiColumnFilterHandler:wO},dependsOn:[C0,G1,G7]},uO=class extends S{constructor(){super(...arguments);this.beanName="aggColNameSvc"}getHeaderName(z,J){if(this.gos.get("suppressAggFuncInHeader"))return J;let{valueColsSvc:Q,colModel:Z,rowGroupColsSvc:$}=this.beans,X=z.getColDef().pivotValueColumn,Y=P(X),q=null,G;if(Y){let U=Q?.columns??[],_=this.gos.get("removePivotHeaderRowWhenSingleValueColumn")&&U.length===1,H=z.getColDef().pivotTotalColumnIds!==void 0;if(_&&!H)return J;q=X?X.getAggFunc():null,G=!0}else{let U=z.isValueActive(),_=$?.columns.length!==0,H=Z.isPivotMode()||_||this.gos.get("treeData");if(U&&H)q=z.getAggFunc(),G=!0;else G=!1}if(G){let U=typeof q==="string"?q:"func";return`${this.getLocaleTextFunc()(U,U)}(${J})`}return J}},mO={sum:"Sum",first:"First",last:"Last",min:"Min",max:"Max",count:"Count",avg:"Average"},cO=class extends S{constructor(){super(...arguments);this.beanName="aggFuncSvc",this.aggFuncsMap={},this.initialised=!1}postConstruct(){this.init()}init(){if(this.initialised)return;this.initialiseWithDefaultAggregations(),this.addAggFuncs(this.gos.get("aggFuncs"))}initialiseWithDefaultAggregations(){let z=this.aggFuncsMap;z.sum=iO,z.first=pO,z.last=nO,z.min=dO,z.max=rO,z.count=sO,z.avg=aO,this.initialised=!0}isAggFuncPossible(z,J){let Z=this.getFuncNames(z).includes(J),$=P(this.aggFuncsMap[J]);return Z&&$}getDefaultFuncLabel(z){return mO[z]??z}getDefaultAggFunc(z){let J=z.getColDef().defaultAggFunc;if(P(J)&&this.isAggFuncPossible(z,J))return J;if(this.isAggFuncPossible(z,"sum"))return"sum";let Q=this.getFuncNames(z);return Q?.length?Q[0]:null}addAggFuncs(z){if(this.init(),!z)return;for(let J of Object.keys(z))if(z[J])this.aggFuncsMap[J]=z[J]}getAggFunc(z){return this.init(),this.aggFuncsMap[z]}getFuncNames(z){let J=z.getColDef().allowedAggFuncs;return J==null?Object.keys(this.aggFuncsMap).sort():J}clear(){this.aggFuncsMap={}}};function iO(z){let{values:J}=z,Q=null;for(let Z=0;Z0?z.values[0]:null}function nO(z){return z.values.length>0?y(z.values):null}function dO(z){let{values:J}=z,Q=null;for(let Z=0;Z$))Q=$}return Q}function rO(z){let{values:J}=z,Q=null;for(let Z=0;Z0)$=Q/(typeof Q==="number"?Z:BigInt(Z));let X=z.rowNode?.aggData?.[z.column?.getColId()];if(X&&X.count===Z&&X.value===$)return X;let Y=Object.create(lO);return Y.count=Z,Y.value=$,Y}var oO=class extends S{constructor(){super(...arguments);this.beanName="aggChildrenSvc"}getAggregatedChildren(z,J,Q){if(!z?.group)return[];if(z.rowPinned){if(z=z.pinnedSibling,!z)return[]}let Z=this.gos,$=uq(z,J,Z);if(!Q)return $;let X=[];return mq($,J,Z,X),X}},uq=(z,J,Q)=>{let Z=J?.colDef,$=Z?.pivotKeys;if($){if(z.leafGroup&&$.length&&!Z.pivotTotalColumnIds)return Lq(z.childrenMapped,$);return z.childrenAfterFilter??z.childrenAfterGroup??[]}if(u4(Q)||Q.get("suppressAggFilteredOnly"))return z.childrenAfterGroup??[];return z.childrenAfterFilter??z.childrenAfterGroup??[]},mq=(z,J,Q,Z)=>{for(let $=0,X=z.length;${MY(R,null,f)})}return}this.hadAgg=!0;let{colModel:X,aggFuncSvc:Y}=Q,q=J.get("alwaysAggregateAtRootLevel")||!!c4(J)||X.isPivotMode(),G=!u4(J)&&!J.get("suppressAggFilteredOnly"),U=Q.valueSvc,_=Q.gridApi,H=Q.gridOptions.context,W=$??[],B=W.length,E=z?.kind==="cells"?z:void 0,K,F=Array(B);for(let f=0;f=0)K=E;F[f]={column:A,colId:A.colId,colDef:A.colDef,aggFunc:cq(A.getAggFunc(),Y,A),colSlot:R}}let L=XP(X,Q.pivotResultCols,Y),D=B>0?Array(B):null,M=Q.rowModel;r0(M.rootNode,M.hierarchical,z,(f)=>{if(f.level===-1&&!q){z2(f,null,X);return}let A;if(Z)A=Z({nodes:f.childrenAfterFilter});else if(!D)A=null;else if(L)A=$P(f,L,U,_,H);else A=ZP(f,F,B,D,K,G,U,_,H);MY(f,A,X)})}},ZP=(z,J,Q,Z,$,X,Y,q,G)=>{let U=(X?z.childrenAfterFilter:z.childrenAfterGroup)??[],_=U.length,H=z.data,W=Object.create(null),B=$?$.getSlot(z):-1,E=B>=0?z.aggData:void 0,K=0;for(let F=0;F=0&&!$.hasCellBySlot(B,L.colSlot)){if(Z[F]=null,E)W[L.colId]=E[L.colId]}else Z[F]=Array(_),++K}if(K===0)return W;for(let F=0;F<_;++F){let L=U[F],D=L.aggData;if(D)for(let M=0;M{let X=J.length,Y=z.leafGroup,q=z.data,G=z.childrenMapped,U=z.childrenAfterFilter??[],_=Object.create(null),H,W;for(let B=0;B{if(typeof z==="function")return z;if(z==null)return null;let Z=J.getAggFunc(z);if(typeof Z!=="function")return V(109,{inputValue:z.toString(),allSuggestions:J.getFuncNames(Q)}),null;return Z},XP=(z,J,Q)=>{if(!z.isPivotActive())return null;let Z=J?.getAggregationOrderedList();if(!Z||Z.length===0)return null;let $=Z.length,X=Array($),Y=0;for(let q=0;q<$;++q){let G=Z[q],U=G.colDef,_=U.pivotValueColumn;if(!_)continue;X[Y++]={column:_,colId:U.colId,aggFunc:cq(_.getAggFunc(),Q,_),pivotResultCol:G,pivotKeys:U.pivotKeys,totalColIds:U.pivotTotalColumnIds}}if(Y===0)return null;return X.length=Y,X},YP=class extends S{constructor(){super(...arguments);this.beanName="filterAggStage",this.step="filter_aggregates",this.refreshProps=[],this.setAllChildrenCountTreeData=(z)=>{let J=z.childrenAfterAggFilter,Q=0;if(J){let $=J.length;Q=$;for(let X=0;X<$;++X)Q+=J[X].allChildrenCount??0}let Z=Q===0&&z.level>=0?null:Q;z.setAllChildrenCount(Z),z.pinnedSibling?.setAllChildrenCount(Z)},this.setAllChildrenCountGridGrouping=(z)=>{let J=z.childrenAfterAggFilter,Q=0;for(let Z=0,$=J.length;Z<$;++Z){let X=J[Z];if(X.group)Q+=X.allChildrenCount;else Q++}z.setAllChildrenCount(Q),z.pinnedSibling?.setAllChildrenCount(Q)}}wireBeans(z){this.filterManager=z.filterManager}execute(z){let{rowModel:J,colModel:Q,groupStage:Z}=this.beans,{filterManager:$}=this,X=Q.isPivotMode(),Y=$?.isAggregateFilterPresent()||$?.isAggregateQuickFilterPresent(),q=!!Z?.treeData,G=(E)=>!E.node.group,U=(E)=>E.node.leafGroup,_=u4(this.gos)||(X?U:G),H=q?this.setAllChildrenCountTreeData:this.setAllChildrenCountGridGrouping,W=(E,K=!1)=>{if(E.childrenAfterFilter){if(E.childrenAfterAggFilter=E.childrenAfterFilter,K){let F=E.childrenAfterAggFilter;for(let L=0,D=F.length;L{if(E.childrenAfterAggFilter=E.childrenAfterFilter?.filter((K)=>{if(_({node:K})){if($.doesRowPassAggregateFilters({rowNode:K}))return W(K,!0),!0}return K.childrenAfterAggFilter?.length})||null,E.hasChildren())H(E);else E.setAllChildrenCount(null),E.pinnedSibling?.setAllChildrenCount(null);if(E.sibling)E.sibling.childrenAfterAggFilter=E.childrenAfterAggFilter};r0(J.rootNode,J.hierarchical,z,Y?B:W)}};function J6(z,J){if(z.sibling)return;let Q=s9(z,J);Q.footer=!0,Q.setRowTop(null),Q.setRowIndex(null),Q.oldRowTop=null,Q.id="rowGroupFooter_"+z.id,Q.sibling=z,z.sibling=Q}function qP(z){let J=z.sibling;if(!J)return;J._destroy(!1),z.sibling=void 0,J.sibling=void 0}var GP=class extends S{constructor(){super(...arguments);this.beanName="footerSvc"}addTotalRows(z,J,Q,Z,$,X){let Y=z;if($){let U=Z&&c4(this.gos);if(UP(X,U))J6(J,this.beans),Q(J.sibling,Y++);return Y}let q=$J(this.gos);if((Z&&q({node:J}))===X)J6(J,this.beans),Q(J.sibling,Y++);return Y}getTopDisplayIndex(z,J,Q,Z){let $=J;if(z[0].footer){if(J===0)return 0;$-=1}let X=z[z.length-1],Y=$>=Q.length;if(X.footer&&Y)return X.rowIndex;return Z($)}doesCellShowTotalPrefix(z,J){if(!z.footer||!J?.getColDef().showRowGroup)return!1;if(this.gos.get("treeData"))return!0;if(z.level===-1)return this.beans.showRowGroupCols?.columns[0]===J;return!!z.rowGroupColumn&&J?.isRowGroupDisplayed(z.rowGroupColumn.getId())}applyTotalPrefix(z,J,Q,Z){let $=Z.getColDef().cellRendererParams?.totalValueGetter;if($){let X=C(this.gos,{column:Z,node:Q,value:z,formattedValue:J});if(typeof $==="function")return $(X);if(typeof $==="string")return this.beans.expressionSvc?.evaluate($,X);V(179)}if(Q.level===-1)return this.getLocaleTextFunc()("footerTotal","Total")+" ";return this.getTotalValue(J??z)??""}getTotalValue(z){return this.getLocaleTextFunc()("footerTotal","Total")+" "+(z??"")}};function UP(z,J){switch(J){case"top":case"pinnedTop":return z==="top";case"bottom":case"pinnedBottom":return z==="bottom";default:return!1}}var iq=class extends a1{constructor(){super(...arguments);this.beanName="valueColsSvc",this.eventName="columnValueChanged",this.columnProcessors={set:(z,J,Q)=>this.setValueActive(J,z,Q),add:(z,J,Q)=>this.setValueActive(!0,z,Q),remove:(z,J,Q)=>this.setValueActive(!1,z,Q)},this.columnExtractors={setFlagFunc:(z,J,Q)=>this.setColValueActive(z,J,Q),getIndexFunc:()=>{return},getInitialIndexFunc:()=>{return},getValueFunc:(z)=>{let J=z.aggFunc;if(J===null||J==="")return null;if(J===void 0)return;return!!J},getInitialValueFunc:(z)=>{return z.initialAggFunc!=null&&z.initialAggFunc!=""}},this.modifyColumnsNoEventsCallbacks={addCol:(z)=>this.columns.push(z),removeCol:(z)=>X0(this.columns,z)}}extractCols(z,J){this.columns=super.extractCols(z,J);for(let Q of this.columns){let Z=Q.getColDef();if(Z.aggFunc!=null&&Z.aggFunc!="")this.setColAggFunc(Q,Z.aggFunc);else if(!Q.getAggFunc())this.setColAggFunc(Q,Z.initialAggFunc)}return this.columns}setColumnAggFunc(z,J,Q){if(!z)return;let Z=this.colModel.getColDefCol(z);if(!Z)return;this.setColAggFunc(Z,J),this.dispatchColumnChangedEvent(this.eventSvc,this.eventName,[Z],Q)}syncColumnWithState(z,J,Q){let Z=Q("aggFunc").value1;if(Z!==void 0)if(typeof Z==="string"){if(this.setColAggFunc(z,Z),!z.isValueActive())this.setColValueActive(z,!0,J),this.modifyColumnsNoEventsCallbacks.addCol(z)}else{if(P(Z))V(33);if(z.isValueActive())this.setColValueActive(z,!1,J),this.modifyColumnsNoEventsCallbacks.removeCol(z)}}setValueActive(z,J,Q){if(z===J.isValueActive())return;if(this.setColValueActive(J,z,Q),z&&!J.getAggFunc()&&this.aggFuncSvc){let Z=this.aggFuncSvc.getDefaultAggFunc(J);this.setColAggFunc(J,Z)}}setColAggFunc(z,J){z.aggFunc=J,z.dispatchStateUpdatedEvent("aggFunc")}setColValueActive(z,J,Q){if(z.aggregationActive!==J)z.aggregationActive=J,z.dispatchColEvent("columnValueChanged",Q)}},pq={moduleName:"SharedAggregation",version:$0,beans:[cO,uO,GP,iq],apiFunctions:{addAggFuncs:eO,clearAggFuncs:zP,setColumnAggFunc:JP},dependsOn:[C0]},_P={moduleName:"Aggregation",version:$0,beans:[QP,YP,oO],rowModels:["clientSide"],dependsOn:[pq]},nq=class extends a1{constructor(){super(...arguments);this.beanName="pivotColsSvc",this.eventName="columnPivotChanged",this.columnProcessors={set:(z,J,Q)=>this.setColPivotActive(z,J,Q),add:(z,J,Q)=>this.setColPivotActive(z,!0,Q),remove:(z,J,Q)=>this.setColPivotActive(z,!1,Q)},this.columnOrdering={enableProp:"pivot",initialEnableProp:"initialPivot",indexProp:"pivotIndex",initialIndexProp:"initialPivotIndex"},this.columnExtractors={setFlagFunc:(z,J,Q)=>this.setColPivotActive(z,J,Q),getIndexFunc:(z)=>z.pivotIndex,getInitialIndexFunc:(z)=>z.initialPivotIndex,getValueFunc:(z)=>z.pivot,getInitialValueFunc:(z)=>z.initialPivot},this.modifyColumnsNoEventsCallbacks={addCol:(z)=>{if(!this.columns.includes(z))this.columns.push(z)},removeCol:(z)=>X0(this.columns,z)}}syncColumnWithState(z,J,Q,Z){let{value1:$,value2:X}=Q("pivot","pivotIndex");if($!==void 0||X!==void 0){if(typeof X==="number"||$){if(!z.isPivotActive())this.setColPivotActive(z,!0,J),this.modifyColumnsNoEventsCallbacks.addCol(z);if(Z&&typeof X==="number")Z[z.getId()]=X}else if(z.isPivotActive())this.setColPivotActive(z,!1,J),this.modifyColumnsNoEventsCallbacks.removeCol(z)}}setColPivotActive(z,J,Q){if(z.pivotActive!==J){if(z.pivotActive=J,J)this.beans.groupHierarchyColSvc?.insertVirtualColumnsForCol(this.columns,z)?.forEach(($)=>this.setColPivotActive($,J,Q));z.dispatchColEvent("columnPivotChanged",Q)}z.dispatchStateUpdatedEvent("pivot")}},HP=class extends a1{constructor(){super(...arguments);this.beanName="rowGroupColsSvc",this.eventName="columnRowGroupChanged",this.columnProcessors={set:(z,J,Q)=>this.setActive(J,z,Q),add:(z,J,Q)=>this.setActive(!0,z,Q),remove:(z,J,Q)=>this.setActive(!1,z,Q)},this.columnOrdering={enableProp:"rowGroup",initialEnableProp:"initialRowGroup",indexProp:"rowGroupIndex",initialIndexProp:"initialRowGroupIndex"},this.columnExtractors={setFlagFunc:(z,J,Q)=>this.setColRowGroupActive(z,J,Q),getIndexFunc:(z)=>z.rowGroupIndex,getInitialIndexFunc:(z)=>z.initialRowGroupIndex,getValueFunc:(z)=>z.rowGroup,getInitialValueFunc:(z)=>z.initialRowGroup},this.modifyColumnsNoEventsCallbacks={addCol:(z)=>{if(!this.columns.includes(z))this.columns.push(z)},removeCol:(z)=>X0(this.columns,z)}}moveColumn(z,J,Q){if(this.columns.length===0)return;let Z=this.columns[z],$=this.columns.slice(z,J);this.columns.splice(z,1),this.columns.splice(J,0,Z),this.updateIndexMap(),this.eventSvc.dispatchEvent({type:this.eventName,columns:$,column:$.length===1?$[0]:null,source:Q})}syncColumnWithState(z,J,Q,Z){let{value1:$,value2:X}=Q("rowGroup","rowGroupIndex");if($!==void 0||X!==void 0){if(typeof X==="number"||$){if(!z.isRowGroupActive())this.setColRowGroupActive(z,!0,J),this.modifyColumnsNoEventsCallbacks.addCol(z);if(Z&&typeof X==="number")Z[z.getId()]=X}else if(z.isRowGroupActive())this.setColRowGroupActive(z,!1,J),this.modifyColumnsNoEventsCallbacks.removeCol(z)}}setActive(z,J,Q){if(z===J.isRowGroupActive())return;this.setColRowGroupActive(J,z,Q);let Z=this.beans.groupHierarchyColSvc?.getColumn(J);if(YJ(this.gos,z)&&!Z)this.colModel.setColsVisible([J],!z,Q)}setColRowGroupActive(z,J,Q){if(z.rowGroupActive!==J){if(z.rowGroupActive=J,J)this.beans.groupHierarchyColSvc?.insertVirtualColumnsForCol(this.columns,z)?.forEach(($)=>this.setColRowGroupActive($,J,Q));z.dispatchColEvent("columnRowGroupChanged",Q)}z.dispatchStateUpdatedEvent("rowGroup")}},WP=class extends S{constructor(){super(...arguments);this.beanName="autoColSvc"}postConstruct(){this.addManagedPropertyListener("autoGroupColumnDef",this.updateColumns.bind(this)),this.setupGroupHideColumnsUntilExpanded()}setupGroupHideColumnsUntilExpanded(){let z=()=>this.updateGroupColumnVisibility();this.addManagedEventListeners({modelUpdated:z}),this.addManagedPropertyListeners(["groupHideColumnsUntilExpanded","groupDisplayType","groupHideOpenParents"],z)}addColumns(z){let{columns:J}=this;if(J==null)return;z.list=J.list.concat(z.list),z.tree=J.tree.concat(z.tree),g2(z)}createColumns(z,J,Q){let Z=this.beans,{colModel:$,gos:X,rowGroupColsSvc:Y,colGroupSvc:q}=Z,G=$.isPivotMode(),U=XJ(X,G),_=G?X.get("pivotSuppressAutoColumn"):this.isSuppressAutoCol(),H=Y?.columns,B=!(H&&H.length>0||X.get("treeData"))||_||U,E=()=>{if(this.columns)U4(Z,this.columns.tree),this.columns=null};if(B){E();return}let K=this.generateAutoCols(H),F=N2(K,this.columns?.list||null),L=z.treeDepth,M=(this.columns?this.columns.treeDepth:-1)==L;if(F&&M){let O=new Map(K.map((v)=>[v.getId(),v]));for(let v of this.columns?.list??[]){let I=O.get(v.getId());if(I)v.setColDef(I.getColDef(),null,Q)}return}E();let f=q?.findDepth(z.tree)??0,A=q?.balanceTreeForAutoCols(K,f)??[];this.columns={list:K,tree:A,treeDepth:f,map:{}},J((O)=>{if(!O)return null;let v=O.filter((I)=>!Z1(I));return[...K,...v]})}updateColumns(z){let J=Dz(z.source);this.columns?.list.forEach((Q,Z)=>this.updateOneAutoCol(Q,Z,J))}getColumn(z){return this.columns?.list.find((J)=>h4(J,z))??null}getColumns(){return this.columns?.list??null}generateAutoCols(z=[]){let J=[],{gos:Q}=this,Z=Q.get("treeData"),$=x2(Q);if(Z&&$)V(182),$=!1;if($)z.forEach((X,Y)=>{J.push(this.createOneAutoCol(X,Y))});else J.push(this.createOneAutoCol());return J}isSuppressAutoCol(){let z=this.gos;if(z.get("groupDisplayType")==="custom")return!0;return z.get("treeDataDisplayType")==="custom"}createOneAutoCol(z,J){let Q;if(z)Q=`${Q1}-${z.getId()}`;else Q=Q1;let Z=this.createAutoColDef(Q,z,J);Z.colId=Q;let $=new B4(Z,null,Q,!0);return this.createBean($),$}updateOneAutoCol(z,J,Q){let Z=z.getColDef(),$=typeof Z.showRowGroup=="string"?Z.showRowGroup:void 0,X=this.beans,Y=$!=null?X.colModel.getColDefCol($):void 0,q=z.getId(),G=this.createAutoColDef(q,Y??void 0,J);z.setColDef(G,null,Q),a0(X,{state:[vZ(G,q)]},Q)}createAutoColDef(z,J,Q){let Z=this.createBaseColDef(J),$=this.gos.get("autoGroupColumnDef");if(D0(Z,$),Z=e4(this.beans,Z,z,!0),$?.groupRowEditable==null)Z.groupRowEditable=void 0;if($?.groupRowValueSetter==null)Z.groupRowValueSetter=void 0;if(!this.gos.get("treeData")){if(d(Z.field)&&d(Z.valueGetter)&&d(Z.filterValueGetter)&&Z.filter!=="agGroupColumnFilter")Z.filter=!1}if(Q&&Q>0)Z.headerCheckboxSelection=!1;let X=b4(this.gos),Y=Z.valueGetter||Z.field!=null;if(X&&!Y)Z.sortIndex=void 0,Z.initialSort=void 0;return Z}createBaseColDef(z){let J=this.gos.get("autoGroupColumnDef"),Z={headerName:this.getLocaleTextFunc()("group","Group"),showRowGroup:z?.getColId()??!0};if(!(J&&(J.cellRenderer||J.cellRendererSelector)))Z.cellRenderer="agGroupCellRenderer";if(z)Z.headerName=this.beans.colNames.getDisplayNameForColumn(z,"header")??void 0,Z.headerValueGetter=z.colDef.headerValueGetter;return Z}getDeepestExpandedLevel(z,J){let Q=-1;if(!z)return Q;for(let Z of z){if(!Z.group||!Z.expanded)continue;if(Z.level>Q)Q=Z.level;if(Q>=J)return Q;let $=this.getDeepestExpandedLevel(Z.childrenAfterGroup,J);if($>Q)Q=$;if(Q>=J)return Q}return Q}updateGroupColumnVisibility(){let z=this.columns?.list;if(!z||z.length===0)return;let{gos:J,visibleCols:Q,rowModel:Z}=this.beans,$=RZ(J),X=!1,Y=(G,U)=>{if(U!==G.isVisible())G.setVisible(U,"api"),X=!0},q=()=>{for(let G of z)Y(G,!0)};if(!$)q();else if(z.length>1){let G=z.length-2,U=Z?.rootNode?.childrenAfterGroup,_=this.getDeepestExpandedLevel(U,G);if(_>=G)q();else for(let H=0;H=H)}if(X)Q.refresh("api")}destroy(){U4(this.beans,this.columns?.tree),super.destroy()}},Q7=null,PY=(z)=>{let J=Q7,Q=new Uint32Array(1<<32-Math.clz32(z|63));if(J)Q.set(J);return Q7=Q,Q},BP=(z,J,Q,Z)=>{let $=J-Z,X=Q-1;if($===1){let U=0;while(z[U].level===X)++U;if(U0){let _=z[U];z.copyWithin(1,0,U),z[0]=_}return z}let Y=Array($),q=0,G=0;for(let U=0;U{let Q=z[0].level+1,Z=Q,$=0,X=Q,Y=Q7;if(!Y||Q>=Y.length)Y=PY(Q);++Y[Q];for(let H=1;HQ){if(Q=W,Q>=Y.length)Y=PY(Q)}else if(W=0)return Y.fill(0,Z,Q+1),z;let q=Y[Z],G=Y[Q];if(q+G===J)return Y[Z]=0,Y[Q]=0,BP(z,J,Q,G);let U=0;for(let H=Q;H>=Z;--H){let W=Y[H];Y[H]=U,U+=W}let _=Array(J);for(let H=0;H{if(J===2){if(z[0].level16)return EP(z,J);for(let Q=1;Q=0&&z[X].level<$);z[Y]=Z}}return z},KP=class{constructor(){this.kind="cells",this.rows=[],this.unsorted=!1,this.slots=new Map,this.bits=[],this.extraBits=null,this.colCount=0}addRow(z){let J=z;if(J==null)return;let Q=this.slots;if(Q.get(J)!==void 0){while(J!=null&&Q.get(J)>=0)Q.set(J,-1),J=J.parent;return}let Z=this.rows;do Q.set(J,-1),Z.push(J),J=J.parent;while(J!=null&&!Q.has(J));this.unsorted=!0}addCell(z,J){if(J==null){this.addRow(z);return}if(z==null)return;let Q=this.slots,Z=this.bits,$=Q.get(J)??this.ensureCol(J),X=Q.get(z);if(X===void 0)X=this.ensureRow(z);else if(X<0)return;let Y=$<32?Z:this.extraBits[($>>>5)-1],q=1<<($&31),G=Y[X];if((G&q)!==0)return;Y[X]=G|q;let U=z.parent;while(U!=null){let _=Q.get(U);if(_<0)break;let H=Y[_];if((H&q)!==0)break;Y[_]=H|q,U=U.parent}}hasRow(z){return this.slots.has(z)}getSortedRows(){if(!this.unsorted)return this.rows;this.unsorted=!1;let z=dq(this.rows);return this.rows=z,z}getSlot(z){return this.slots.get(z)??-1}hasCellBySlot(z,J){if(z<0)return!0;if(J<32)return J>=0&&(this.bits[z]&1<>>5)-1][z]&1<<(J&31))!==0}ensureRow(z){let J=this.slots,Q=this.rows,Z=this.bits,$=this.extraBits,X=Z.push(0),Y=X-1;if($!==null)for(let G=0,U=$.length;G=32){let Q=(J>>>5)-1,Z=this.extraBits;if(Z===null)Z=[],this.extraBits=Z;if(Q>=Z.length)Z.push(Array(this.bits.length).fill(0))}return J}},TY=class{constructor(){this.kind="rows",this.rows=[],this.unsorted=!1,this.rowSet=new Set}addRow(z){let J=z;if(J==null)return;let Q=this.rowSet;if(Q.has(J))return;let Z=this.rows;do Q.add(J),Z.push(J),J=J.parent;while(J!=null&&!Q.has(J));this.unsorted=!0}addCell(z,J){this.addRow(z)}hasRow(z){return this.rowSet.has(z)}getSortedRows(){if(!this.unsorted)return this.rows;this.unsorted=!1;let z=dq(this.rows);return this.rows=z,z}},FP=class extends S{constructor(){super(...arguments);this.beanName="changedPathFactory"}newPath(z){return z?new KP:new TY}ensureRowsPath(z){let J=z.changedPath;if(!J&&z.changedRowNodes&&!z.newData){let Q=this.beans.rowModel;if(Q.hierarchical)J=new TY,z.changedPath=J,J.addRow(Q.rootNode)}return J}},LP=class extends S{addExpandedCss(z,J){if(J.isExpandable())z.push("ag-row-group"),z.push(J.expanded?"ag-row-group-expanded":"ag-row-group-contracted")}getRowExpandedListeners(z){let{rowNode:J}=z,Q=this.updateExpandedCss.bind(this,z,J);return{expandedChanged:Q,hasChildrenChanged:Q}}setExpanded(z,J,Q,Z){if(z.expanded===J)return;z._expanded=J,z.dispatchRowEvent("expandedChanged");let $={...mZ(z,this.gos,"rowGroupOpened"),expanded:J,event:Q||null};this.dispatchExpandedEvent($,Z)}defaultExpanded(z){let Q=this.beans.gos,Z=z.level??0,$=z.group&&Q.get("isGroupOpenByDefault");if(!$){let Y=Q.get("groupDefaultExpanded");return Y===-1||Z{let X=$.rowComp;X.toggleCss("ag-row-group",Q),X.toggleCss("ag-row-group-expanded",Q&&Z),X.toggleCss("ag-row-group-contracted",Q&&!Z),j0($.element,Q&&Z)})}dispatchStateUpdatedEvent(){this.eventSvc.dispatchEvent({type:"rowExpansionStateChanged"})}},DP=class extends LP{constructor(){super(...arguments);this.beanName="expansionSvc",this.events=null,this.dispatchExpandedDebounced=null}destroy(){super.destroy(),this.events=null,this.dispatchExpandedDebounced=null}setExpansionState(z){let J=new Set(z.expandedRowGroupIds);this.beans.rowModel.forEachNode((Q)=>{let Z=Q.id;if(!Z)return;Q._expanded=J.has(Z)}),this.onGroupExpandedOrCollapsed()}getInternalExpansionState(z=!1){let J=[],Q=[];return this.beans.rowModel.forEachNode((Z)=>{let $=Z.id;if(!$)return;if(Z.expanded)J.push($);else if(z&&Z.isExpandable())Q.push($)}),{expandedRowGroupIds:J,collapsedRowGroupIds:Q}}getExpansionState(){return this.getInternalExpansionState()}isExpanded(z){if(z.footer)return!!z._expanded;if(!(z.group||z.master)||z.leafGroup&&this.beans.colModel.isPivotMode())return!1;let J=z._expanded;if(J===null)J=this.defaultExpanded(z)??!1,z._expanded=J;return!!J}resetExpansion(){let{rowModel:z}=this.beans;z.forEachNode((J)=>{if(!J.group&&!J.master)return;J._expanded=null}),this.onGroupExpandedOrCollapsed()}expandAll(z){let{gos:J,rowModel:Q,colModel:Z,eventSvc:$}=this.beans,X=J.get("treeData"),Y=Z.isPivotActive(),q=(U)=>{if(!U)return;for(let _ of U){let H=()=>{_._expanded=z,q(_.childrenAfterGroup)};if(_.master){H();continue}if(X){if(P(_.childrenAfterGroup))H();continue}if(Y){if(!_.leafGroup)H();continue}if(_.group)H()}},G=Q.rootNode;if(G)q(G.childrenAfterGroup);this.onGroupExpandedOrCollapsed(),$.dispatchEvent({type:"expandOrCollapseAll",source:z?"expandAll":"collapseAll"})}onGroupExpandedOrCollapsed(){this.dispatchStateUpdatedEvent(),this.beans.rowModel.reMapRows()}setDetailsExpansionState(z){let J=this.getInternalExpansionState(!0),Q=J.collapsedRowGroupIds.length===0;if(J.expandedRowGroupIds.length===0===Q)return;return Q?z.expandAll():z.collapseAll()}dispatchExpandedEvent(z,J){if((this.events??(this.events=[])).push(z),J){this.dispatchExpandedEvents();return}let Q=this.dispatchExpandedDebounced;if(!Q){if(!this.isAlive())return;Q=this.debounce(()=>this.dispatchExpandedEvents()),this.dispatchExpandedDebounced=Q}Q()}dispatchExpandedEvents(){let{eventSvc:z,rowRenderer:J}=this.beans,Q=this.events,Z=Q?.length;if(!Z)return;this.events=null;let $=Array(Z);for(let X=0;Xwindow.setTimeout(z,0);let Q=!1;return()=>{if(!J.active){window.setTimeout(z,0);return}if(Q)return;Q=!0,J.addDestroyTask(()=>{Q=!1,z()})}}};function MP(z){let J=z.get("groupHideParentOfSingleChild");if(!J){if(J=z.get("groupRemoveSingleChildren"),!J&&z.get("groupRemoveLowestSingleChildren"))J="leafGroupsOnly"}return{groupHideParentOfSingleChild:J,isGroupMultiAutoColumn:x2(z),hideOpenParents:z.get("groupHideOpenParents"),grandTotalRow:c4(z),groupTotalRow:$J(z)}}function kP(z,J,Q){return z.groupHideParentOfSingleChild===!0&&Q&&J.childrenAfterGroup.length===1}function fP(z,J,Q){return z.groupHideParentOfSingleChild==="leafGroupsOnly"&&Q&&J.leafGroup&&J.childrenAfterGroup.length===1}function SP(z,J,Q,Z,$,X){if(Z&&!Q)return!1;if($||X)return!1;if(!z.hideOpenParents)return!0;if(J.master||J.level===-1)return!0;if(!(Z&&J.leafGroup)&&J.expanded)return!1;return!0}var VP=class extends S{constructor(){super(...arguments);this.beanName="flattenStage",this.step="map",this.refreshProps=["groupHideParentOfSingleChild","groupRemoveSingleChildren","groupRemoveLowestSingleChildren","groupTotalRow","masterDetail"]}execute(){let{beans:z,gos:J}=this,Q=[],Z=z.rowModel.rootNode;if(!Z)return Q;let $=z.colModel.isPivotMode(),X=$&&Z.leafGroup&&Z.aggData,Y=X?[Z]:Z.childrenAfterSort,q=MP(J);this.recursivelyAddToRowsToDisplay(q,Y,Q,$,0);let G=Q.length>0,U=q.grandTotalRow;if(!X&&G&&U)if(J6(Z,z),U==="pinnedBottom"||U==="pinnedTop")this.beans.pinnedRowModel?.setGrandTotalPinned(U==="pinnedBottom"?"bottom":"top");else{let H=U==="top";this.addRowNodeToRowsToDisplay(q,Z.sibling,Q,0,H)}return Q}recursivelyAddToRowsToDisplay(z,J,Q,Z,$){if(!J?.length)return;let X=this.beans.masterDetailSvc;for(let Y=0;Ythis.onCsrmCellChange(z),batchEditingStopped:()=>this.flushGroupEdits()})}destroy(){this.stopDragging(!0),super.destroy()}isGroupingDrop(z){if(!z.rowDragManaged||!z.sameGrid)return!1;if(!this.gos.get("refreshAfterGroupEdit"))return!1;return!!this.beans.rowGroupColsSvc?.columns?.length&&!this.beans.colModel.isPivotMode()}initDraggingGroups(z){let J=new Map,Q=(Z)=>{let $=Z.childrenAfterGroup;if($){if(J.has(Z))return;let X=$.slice();J.set(Z,X);for(let Y of X)Q(Y)}};for(let Z of z.rows)if(Z.group)Q(Z);this.draggingGroups=J}canSetParent(z){if(!z.sameGrid)return!1;if(this.beans.groupStage?.treeData)return!0;if(z.rowDragManaged&&!this.gos.get("refreshAfterGroupEdit"))return!1;return!!this.beans.rowGroupColsSvc?.columns?.length}canDropRow(z,J){if(this.beans.groupStage?.treeData)return!AP(z,J.newParent);let{position:Q,target:Z,newParent:$,rootNode:X}=J,Y=z.parent;if(z.group&&(IY(z,Z)||IY(z,$)))return!1;if(Q==="inside")return!0;if($&&$!==Y)return $!==X||Y===X;let q=$??Z?.parent??X;if(q!==Y)return!1;let G=z.group?z.level:Y.level??-1,U=-1;if(Z)U=Z.group?Z.level:Z.parent?.level??-1;else if(q)U=q.level;if(G>=0&&U>=0&&U!==G)return!1;return!0}fixRowsDrop(z,J,Q,Z){let $=!!this.beans.groupStage?.treeData;if(z.treeData=$,!(!!this.beans.rowGroupColsSvc?.columns?.length||this.gos.get("pivotMode"))&&!$)return;if(!this.draggingGroups&&this.isGroupingDrop(z)&&!z.suppressMoveWhenRowDragging)this.initDraggingGroups(z);let Y=z.target,q=null,G=!1,U=z.rootNode,_=this.beans.rowModel,H=this.canStartGroup(Y,$);this.updateDropTarget(z,Q,H);let W=this.beans.pageBounds?.getLastRow?.()??_.getRowCount()-1;if(J){if(!Y||Z>=0.5&&Y.rowIndex===W)q=U;else if(z.moved&&Y&&this.dropGroupThrottled&&this.shouldDropTargetBeParent(z))q=Y;if(!q)q=Y?.parent??U}if(!Q&&Y&&H&&!(Y.group&&Y.expanded))this.startDropGroupDelay(Y);if(q){if(Y&&q===Y&&q!==U){let B=q.expanded?l9(_,1,Y):null;if(B?.parent===q)Y=B,Z=-0.5;else G=!0}if(Y&&!G){let B=Y;while(B&&B!==U&&B!==q)Y=B,B=B.parent}}z.target=Y,z.newParent=q,z.yDelta=Z,z.inside=G}clearNewSameParent(z,J){let Q=z.newParent;if(Q&&(!J||jP(z.rows,Q)))z.newParent=null}updateDropTarget(z,J,Q){let Z=Q?z.target:null;if(this.dropGroupTarget&&this.dropGroupTarget!==Z)this.resetDragGroup();if(!Z?.childrenAfterSort?.length)return;if(J&&this.dropGroupThrottled&&!Z.expanded&&Z.isExpandable?.())Z.setExpanded(!0,void 0,!0);if(this.canDropInTarget(Z,z))this.dropGroupThrottled=!0,this.dropGroupTarget=Z}canDropInTarget(z,J){if(z.expanded)return!0;if(!z.group)return!1;if(J.pointerPos==="inside")return!0;if(J.treeData)return!1;let Q=J.rows,Z=z.level;for(let $=0,X=Q.length;${this.dropGroupTimer=null,this.dropGroupThrottled=!0,this.beans.dragAndDrop?.nudge()},J)}resetDragGroup(){if(this.dropGroupTimer!==null)window.clearTimeout(this.dropGroupTimer),this.dropGroupTimer=null;this.dropGroupTarget=null,this.dropGroupThrottled=!1}stopDragging(z){if(z)this.draggingGroups=null;this.resetDragGroup()}shouldDropTargetBeParent({target:z,rows:J,pointerPos:Q,treeData:Z}){if(!z||Q==="none")return!1;if(Q==="inside")return!0;if(!Z&&z.group&&!z.expanded)return!0;if(Q==="above")return!1;let $=this.beans.rowModel,Y=z.rowIndex+1,q;do q=$.getRow(Y++);while(q?.footer);let G=this.draggingGroups?.get(z)??z.childrenAfterGroup;if(q&&q.parent===z&&G?.length){let U=new Set(J);for(let _=0,H=G.length;_{if(U.has(D))return;if(U.add(D),W??(W=this.newGroupValues(X)),this.setRowGroup(D,W))H.add(D)},E=(D)=>{let M=this.draggingGroups?.get(D)??D.childrenAfterGroup,f=M?.length;if(f)for(let A=0;A=0)B(R);else E(R)}};for(let D of z.rows)if(D.group)E(D);else{let M=D.sourceRowIndex>=0&&!D.destroyed?D:this.csrmFirstLeaf(D);if(M)B(M)}let K=Q==="inside"?"above":Q,F=Q==="inside"?this.findFirstLeafForParent(X,U)??Z:Z,L=!1;if(U.size&&K!=="none")L=S$($._leafs,U,F,K==="above");if(!H.size&&!L)return!1;_.reordered=L;for(let D of U)_.updates.add(D);if(this.csrmRefresh(_),G)G.focusCell();else Y.clearFocusedCell();return!0}canStartGroup(z,J){if(!z||z.level<0||z.footer||z.detail)return!1;if(z.group)return!0;return J}flushGroupEdits(){let z=this.pendingEditRefresh;if(z)this.pendingEditRefresh=null,this.csrmRefresh(z)}csrmRefresh(z){let J=this.beans.rowModel;if(!J.rootNode)return;J.refreshModel({step:"group",keepRenderedRows:!0,animate:!this.gos.get("suppressAnimationFrame"),changedRowNodes:z})}newGroupValues(z){let J=this.beans.rowGroupColsSvc?.columns??[],Q=Array(J.length),Z=-1,$=z;while($&&$.level>=0){let X=J[$.level];if(X){let Y=X.getColId(),q=$.level;if(Q[q]=$.groupData?.[Y]??$.key??void 0,q>Z)Z=q}$=$.parent}return{values:Q,columns:J,maxLevel:Z}}setRowGroup(z,{values:J,columns:Q,maxLevel:Z}){if(Z<0)return!1;let{valueSvc:$,changeDetectionSvc:X}=this.beans,Y=!1;X?.beginDeferred();try{for(let q=0;qZ)continue;let U=J[q],_=$.getValue(G,z,"data");if(_===U||_==null&&U==null)continue;let H=U,W=$.parseValue(G,z,U,_);if(W!==void 0)H=W;if(z.setDataValue(G,H,"rowDrag"))Y=!0}}finally{X?.endDeferred()}return Y}onCsrmCellChange(z){let{column:J,node:Q,source:Z}=z;if(!this.gos.get("refreshAfterGroupEdit"))return;if(Z==="rowDrag")return;if(!J?.isRowGroupActive())return;if(Q.group||!Q.data)return;if(this.beans.editSvc?.isBatchEditing()){let X=this.pendingEditRefresh;if(!X)X=vY(),this.pendingEditRefresh=X;X.updates.add(Q)}else{let X=vY();X.updates.add(Q),this.csrmRefresh(X)}}csrmFirstLeaf(z){if(!z)return null;let J=this.draggingGroups,Q=J?.get(z)??z.childrenAfterGroup;while(Q?.length){let Z=Q[0];if(Z.sourceRowIndex>=0){if(!Z.destroyed)return Z;return this.firstAliveChildLeaf(Z)}Q=J?.get(Z)??Z.childrenAfterGroup}return X1(z)}firstAliveChildLeaf(z){let J=this.draggingGroups?.get(z)??z.childrenAfterGroup;if(J){for(let Q of J)if(Q.sourceRowIndex>=0&&!Q.destroyed)return Q}return null}findFirstLeafForParent(z,J){if(!z)return null;let Q=this.draggingGroups?.get(z)??z?.childrenAfterGroup;if(!Q)return null;for(let Z=0,$=Q.length;Z<$;++Z){let X=Q[Z];if(X.sourceRowIndex>=0&&!J.has(X))return X;let Y=this.findFirstLeafForParent(X,J);if(Y!==null)return Y}return null}},vY=()=>{let z=new I1;return z.reordered=!0,z},IY=(z,J)=>{if(!z||!J)return!1;let Q=J;while(Q){if(Q===z)return!0;Q=Q.parent}return!1},AP=(z,J)=>{if(!J||z.parent===J)return!1;let Q=J,Z=z.id;while(Q){if(Q===z)return!0;if(Z!=null&&Q.id===Z)return!0;Q=Q.parent}return!1},jP=(z,J)=>{for(let Q=0,Z=z.length;Qthis.strategy?.onShowRowGroupColsSetChanged()})}invalidateGroupCols(){this.columnsInvalidated=!0,this.strategy?.invalidateGroupCols?.()}destroy(){this.strategy=this.destroyBean(this.strategy),super.destroy()}getNonLeaf(z){return this.strategy?.nonLeafsById?.get(z)}getNestedDataGetter(){return this.getStrategy()?.nestedDataGetter}onPropChange(z){let J=this.gos,Q=this.strategy?.nestedDataGetter;if(z.has("treeData"))this.gosTreeData=J.get("treeData")&&this.hasTreeData,this.columnsInvalidated=!0;return this.strategy?.onPropChange?.(z),this.getNestedDataGetter()!==Q}extractData(){let z=this.beans.rowModel.rootNode,J=this.nested?z?.childrenAfterGroup:z?._leafs;if(!J)return this.gos.get("rowData")??[];let Q=J.length,Z=Array(Q),$=0;for(let X=0;X{let J=z.sibling;if(!J)return null;let Q=J._leafs;if(Q!==void 0)return Q;return nJ(J)},nJ=(z)=>{let J=z.childrenAfterGroup,Q=J?.length;if(z._leafs=null,!Q)return null;let Z,$=Q===1?J[0]:null;if($?.group&&$.sourceRowIndex<0){if(Z=$._leafs,Z===void 0)Z=nJ($)}else if(z.leafGroup)Z=J;else{Z=[];for(let X=0;X=0)Z.push(Y);if(!Y.group)continue;let q=Y._leafs;if(q===void 0)q=nJ(Y);if(q)for(let G=0,U=q.length;G{let{_leafs:Z,sibling:$}=z;if(z.treeNodeFlags=0,z.childrenAfterGroup=Z,z.childrenMapped=null,z._groupData=void 0,z.aggData=null,$)$.childrenAfterGroup=z.childrenAfterGroup,$.childrenAfterAggFilter=z.childrenAfterAggFilter,$.childrenAfterFilter=z.childrenAfterFilter,$.childrenAfterSort=z.childrenAfterSort,$.childrenMapped=null,$._groupData=void 0,$.aggData=null;for(let X=0,Y=Z.length??0;X{z.key=null,z.treeNodeFlags=0,z.allChildrenCount=null,z.childrenAfterGroup=null,z.childrenAfterAggFilter=null,z.childrenAfterFilter=null,z.childrenAfterSort=null,z.childrenMapped=null,z.level=0,z._groupData=void 0};function yY(z,J,Q){let Z=z,$=Z.level-J.level;if($<=0)return!1;if(!Q.get("groupHideOpenParents"))return!1;for(let Y=0;Y<$;Y++){if(Z.parent?.getFirstChild()!==Z)return!1;Z=Z.parent}return Z===J}var rq=class extends S{constructor(){super(...arguments);this.indentClass=null}init(z,J,Q,Z,$,X,Y){this.params=Y,this.eGui=J,this.eCheckbox=Q,this.eExpanded=Z,this.eContracted=$,this.comp=z,this.compClass=X;let{node:q,column:G}=Y;if(this.node=q,this.displayedNode=q,this.isEmbeddedRowMismatch())return;if(q.footer){this.initFooterCell();return}if(!G){this.initFullWidthCell();return}this.displayedNode=this.beans.showRowGroupColValueSvc?.getDisplayedNode(q,G)??this.node,this.setupExpand(),this.setupCheckbox(),this.addGroupValue(),this.setupIndent()}initFooterCell(){let{node:z}=this.params;if(this.addGroupValue(),this.setupIndent(),z.level!==-1)this.comp.toggleCss("ag-row-group-leaf-indent",!0)}initFullWidthCell(){let z=()=>{let{rowDragSvc:J}=this.beans;if(!this.params.rowDrag||!J)return;let Q=J.createRowDragComp(()=>this.params.value,this.params.node);this.createManagedBean(Q),this.eGui.insertAdjacentElement("afterbegin",Q.getGui())};this.setupExpand(),z(),this.setupCheckbox(),this.addGroupValue(),this.setupIndent()}getCellAriaRole(){let z=this.params.colDef?.cellAriaRole,J=this.params.column?.getColDef().cellAriaRole;return z||J||"gridcell"}isEmbeddedRowMismatch(){if(!this.params.fullWidth||!this.gos.get("embedFullWidthRows"))return!1;let{visibleCols:z}=this.beans,J=this.params.pinned==="left",Q=this.params.pinned==="right",Z=!J&&!Q;if(this.gos.get("enableRtl")){if(z.isPinningLeft())return!Q;return!Z}if(z.isPinningLeft())return!J;return!Z}addGroupValue(){let{params:{value:z,valueFormatted:J}}=this,Q=this.getInnerCompDetails();this.comp.setInnerRenderer(Q,J??z??null)}setupExpand(){let{colModel:z}=this.beans,{eGridCell:J,suppressDoubleClickExpand:Q}=this.params,Z=(G,U)=>{let _=h(G,this.beans,null);if(_)U.appendChild(_),this.addDestroyFunc(()=>_.remove())};Z("groupExpanded",this.eExpanded),Z("groupContracted",this.eContracted);let $=this.comp,X=()=>{if(!this.isExpandable())return;let U=!!this.displayedNode.expanded;$.setExpandedDisplayed(U),$.setContractedDisplayed(!U),j0(J,U)},Y=()=>{let G=this.isExpandable();$.toggleCss("ag-cell-expandable",G),$.toggleCss("ag-row-group",G);let U=!G&&z.isPivotMode();$.toggleCss("ag-pivot-leaf-group",U);let _=!z.isPivotMode()&&(!this.displayedNode.footer||this.displayedNode.level!==-1);$.toggleCss("ag-row-group-leaf-indent",!G&&_);let H=this.getChildCount(),W=H>0?`(${H})`:"";if($.setChildCount(W),!G)$.setExpandedDisplayed(!1),$.setContractedDisplayed(!1),m8(J);else X()};(()=>{if(!Q&&!this.isGroupCellEditable(this.displayedNode))this.addManagedListeners(J,{dblclick:this.onCellDblClicked.bind(this)});this.addManagedListeners(this.eExpanded,{click:this.onExpandClicked.bind(this)}),this.addManagedListeners(this.eContracted,{click:this.onExpandClicked.bind(this)}),this.addManagedListeners(J,{keydown:this.onKeyDown.bind(this)}),this.addManagedListeners(this.displayedNode,{allChildrenCountChanged:Y,masterChanged:Y,groupChanged:Y,hasChildrenChanged:Y,expandedChanged:X})})(),Y()}getInnerCompDetails(){let{userCompFactory:z,findSvc:J}=this.beans,Q=this.params;if(Q.fullWidth){let G=this.gos.get("groupRowRendererParams"),U=h2(z,G,Q);if(U)return U;if(J?.isMatch(Q.node,null))return h2(z,{...G,innerRenderer:"agFindCellRenderer"},Q);return}let Z=(G)=>G&&G.componentClass==this.compClass,$=h2(z,Q,Q);if($&&!Z($))return $;let{displayedNode:{rowGroupColumn:X}}=this,Y=X?.colDef,q=X&&Q.column?.isRowGroupDisplayed(X.getId());if(Y&&q){let G=kz(z,Y,Q);if(G)if(Z(G)){if(Y?.cellRendererParams?.innerRenderer)return h2(z,Y.cellRendererParams,Q)}else return G}if(J?.isMatch(Q.node,Q.column))return kz(z,{...Y??Q.colDef,cellRenderer:"agFindCellRenderer"},Q)}getChildCount(){let{column:z,suppressCount:J}=this.params;if(J)return 0;let{allChildrenCount:Q,rowGroupColumn:Z}=this.displayedNode;if(!((Q??0)>0&&(!Z||!z||z?.isRowGroupDisplayed(Z.getId()))))return 0;if(this.gos.get("showOpenedGroup")&&this.displayedNode!==this.node&&!yY(this.node,this.displayedNode,this.gos))return 0;return Q??0}isExpandable(){let{node:z,column:J,colDef:Q}=this.params;if(!this.displayedNode.isExpandable())return!1;if(z.rowPinned)return!1;if(!J)return!0;if(z.hasChildren()&&Q){let{showRowGroup:X}=Q;if(!X)return!1;if(X===!0)return!0}if(z===this.displayedNode){if(z.rowGroupColumn){if(J?.isRowGroupDisplayed(z.rowGroupColumn.getId()))return!0}if(z.master)return Q?.showRowGroup===!0||Q?.showRowGroup==null;return!1}return yY(this.node,this.displayedNode,this.gos)}setupIndent(){let{suppressPadding:z,node:J,colDef:Q}=this.params;if(z)return;let Z=()=>{let $=J.uiLevel;if(Q&&Q.showRowGroup!==!0)$=0;let X="ag-row-group-indent-"+$;if(X===this.indentClass)return;if(this.indentClass)this.comp.toggleCss(this.indentClass,!1);this.indentClass=X,this.comp.toggleCss(X,!0),this.eGui.style.setProperty("--ag-indentation-level",String($))};this.addManagedListeners(J,{uiLevelChanged:Z.bind(this)}),Z()}setupCheckbox(){let{node:z}=this.params;if(!(!z.footer&&!z.rowPinned&&!z.detail))return;this.addManagedPropertyListener("rowSelection",({currentValue:Q,previousValue:Z})=>{let $=typeof Q==="object"?Q:void 0,X=typeof Z==="object"?Z:void 0;if($?.checkboxLocation!==X?.checkboxLocation)this.destroyCheckbox(),this.addCheckbox()}),this.addCheckbox()}addCheckbox(){let{selectionSvc:z}=this.beans;if(!z||!s4(this.gos))return;let{node:J,column:Q}=this.params,Z=this.gos.get("rowSelection"),$=b1(Z);if($==="selectionColumn")return;if($==="autoGroupColumn"){let U=Q?.getColDef().showRowGroup!=null,_=!Q&&J.group;if(!(U||_))return}let X=typeof Z==="object"?Fz(Z):this.params.checkbox;if(!(typeof X==="function"||X===!0))return;if(typeof Q?.getColDef().showRowGroup==="string"&&!this.isExpandable()){this.comp.setCheckboxSpacing(!0);return}let G=z.createCheckboxSelectionComponent();this.cbComp=G,this.createBean(G),G.init({rowNode:J,column:Q,overrides:{isVisible:X,callbackParams:this.params,removeHidden:!0}}),this.eCheckbox.appendChild(G.getGui()),this.comp.setCheckboxVisible(!0)}destroyCheckbox(){this.comp.setCheckboxSpacing(!1),this.comp.setCheckboxVisible(!1),this.cbComp?.getGui().remove(),this.cbComp=this.destroyBean(this.cbComp)}isGroupCellEditable(z){let J=this.params.column;return!!J&&(!!J.getColDef().groupRowEditable||this.gos.get("enableGroupEdit"))&&J.isCellEditable(z)}onExpandClicked(z){if(q4(z))return;l0(z),this.onExpandOrContract(z)}onKeyDown(z){if(z.key!==k.ENTER||this.params.suppressEnterExpand)return;if(this.isGroupCellEditable(this.params.node))return;this.onExpandOrContract(z)}onCellDblClicked(z){if(q4(z))return;if(!(zJ(this.eExpanded,z)||zJ(this.eContracted,z)))this.onExpandOrContract(z)}onExpandOrContract(z){if(!this.isExpandable())return;let J=this.displayedNode,Q=!J.expanded;if(!Q&&J.sticky)this.beans.ctrlsSvc.getScrollFeature().setVerticalScrollPosition(J.rowTop-J.stickyRowTop);J.setExpanded(Q,z)}destroy(){super.destroy(),this.destroyCheckbox()}},vP={tag:"span",cls:"ag-cell-wrapper",children:[{tag:"span",ref:"eExpanded",cls:"ag-group-expanded ag-hidden"},{tag:"span",ref:"eContracted",cls:"ag-group-contracted ag-hidden"},{tag:"span",ref:"eCheckbox",cls:"ag-group-checkbox ag-invisible"},{tag:"span",ref:"eValue",cls:"ag-group-value"},{tag:"span",ref:"eChildCount",cls:"ag-group-child-count"}]},bY=class extends x{constructor(){super(vP);this.eExpanded=j,this.eContracted=j,this.eCheckbox=j,this.eValue=j,this.eChildCount=j}init(z){let J={setInnerRenderer:(X,Y)=>this.setRenderDetails(X,Y),setChildCount:(X)=>this.eChildCount.textContent=X,toggleCss:(X,Y)=>this.toggleCss(X,Y),setContractedDisplayed:(X)=>w(this.eContracted,X),setExpandedDisplayed:(X)=>w(this.eExpanded,X),setCheckboxVisible:(X)=>this.eCheckbox.classList.toggle("ag-invisible",!X),setCheckboxSpacing:(X)=>this.eCheckbox.classList.toggle("ag-group-checkbox-spacing",X)},Q=this.createManagedBean(new rq),Z=!z.colDef,$=this.getGui();if(Q.init(J,$,this.eCheckbox,this.eExpanded,this.eContracted,this.constructor,z),Z)U0($,Q.getCellAriaRole())}setRenderDetails(z,J){if(z)z.newAgStackInstance().then((Q)=>{if(!Q)return;let Z=()=>this.destroyBean(Q);if(this.isAlive())this.eValue.appendChild(Q.getGui()),this.addDestroyFunc(Z);else Z()});else this.eValue.innerText=J}destroy(){this.destroyBean(this.innerCellRenderer),super.destroy()}refresh(){return!1}},IP=".ag-group-checkbox-spacing{width:var(--ag-icon-size)}:where(.ag-ltr) .ag-group-checkbox-spacing{margin-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-group-checkbox-spacing{margin-left:var(--ag-cell-widget-spacing)}",CP=class extends S{constructor(){super(...arguments);this.beanName="showRowGroupColValueSvc"}getGroupValue(z,J,Q){if(!J){if(!z.group)return null;return{displayedNode:z,value:z.groupValue}}let Z=this.beans.valueSvc,$=J.colDef.showRowGroup;if(!$)return null;if(z.level===-1&&z.footer)return{displayedNode:z,value:null};if(typeof $==="string"){if((this.beans.rowGroupColsSvc?.getColumnIndex($)??-1)>z.level)return null;let q=this.getDisplayedNode(z,J,!0);if(q)return{displayedNode:q,value:Z.getValue(J,q,"data",Q)}}let X=Z.getValue(J,z,"data",Q);if(X==null){let Y=this.getDisplayedNode(z,J);if(Y)return{displayedNode:Y,value:Z.getValue(J,Y,"data",Q)}}return{displayedNode:z,value:X}}formatAndPrefixGroupColValue(z,J,Q=!1){let Z=this.formatGroupColValue(z,J,Q),{value:$,displayedNode:X}=z,Y=this.beans.footerSvc;if(Y?.doesCellShowTotalPrefix(X,J))return Y.applyTotalPrefix($,Z,X,J);if(X.footer&&X.level===-1)return null;return Z}formatGroupColValue(z,J,Q=!1){let Z=this.beans.valueSvc,{displayedNode:$,value:X}=z,Y=$.rowGroupColumn,q=$.group&&!J;if(Y&&(q||J?.isRowGroupDisplayed(Y.colId))){if(Q&&Y.colDef.useValueFormatterForExport===!1)return null;let U=Z.formatValue(Y,$,X);if(U==null&&$.key==="")return this.getLocaleTextFunc()("blanks","(Blanks)");return U}if(!J||$.group)return null;if(Q&&J.colDef.useValueFormatterForExport===!1)return null;return Z.formatValue(J,$,X)}getDisplayedNode(z,J,Q=!1){let Z=this.gos,$=Z.get("groupHideOpenParents"),X=Z.get("showOpenedGroup")&&!Q;if(!$&&!X)return;let Y=J.colDef.showRowGroup;if(Y===!0){if(z.group)return;return z.parent??void 0}let q=z;while(q&&q.rowGroupColumn?.getId()!=Y){let G=q===q.parent?.getFirstChild();if(!X&&!G)return;q=q.parent}if(q===z)return;return q??void 0}},yP=class extends S{constructor(){super(...arguments);this.beanName="showRowGroupCols",this.columns=[],this.colsSet=new Set,this.colsMap=new Map}destroy(){super.destroy(),this.columns.length=0,this.colsSet.clear(),this.colsMap.clear()}refresh(){let{colModel:z,rowGroupColsSvc:J}=this.beans,Q=this.columns,Z=this.colsSet,$=this.colsMap;$.clear();let X=Q.length,Y=0,q=!1,G=z.getCols();for(let U=0,_=G.length;U<_;++U){let H=G[U],B=H.getColDef().showRowGroup;if(typeof B==="string")$.set(B,H);else if(B===!0){let E=J?.columns;if(E)for(let K=0,F=E.length;K=X||!Z.has(H)),Q[Y++]=H}if(q||(q=Y!==X),q){Q.length=Y,Z.clear();for(let U=0;U{this.gridBodyCtrl=z.gridBodyCtrl}),this.resetStickyContainers()}setOffsetTop(z){if(this.extraTopHeight===z)return;this.extraTopHeight=z,this.eventSvc.dispatchEvent({type:"stickyTopOffsetChanged",offset:z})}setOffsetBottom(z){if(this.extraBottomHeight===z)return;this.extraBottomHeight=z}resetOffsets(){this.setOffsetBottom(0),this.setOffsetTop(0)}getLastPixelOfGroup(z){return this.isClientSide?wP(z):xP(z)}getFirstPixelOfGroup(z){if(z.footer)return z.sibling.rowTop+z.sibling.rowHeight-1;if(z.hasChildren())return z.rowTop-1;return 0}updateStickyRows(z){let J=z==="top",Q=0;if(!this.canRowsBeSticky())return this.refreshNodesAndContainerHeight(z,new Set,Q);let Z=new Set,{rowModel:$,rowRenderer:X,pinnedRowModel:Y,pageBounds:q,rowContainerHeight:G}=this.beans,{pageFirstPixel:U,pageLastPixel:_}=q.getCurrentPagePixelRange(),H=J?X.firstVisibleVPixel-this.extraTopHeight:X.lastVisibleVPixel-this.extraTopHeight,W=G.divStretchOffset??0,B=U+W,E=_+W,K=(M)=>{if(Z.add(M),J){let f=this.getLastPixelOfGroup(M),A=H+Q+M.rowHeight;if(fA)M.stickyRowTop=Q-(f-A);else M.stickyRowTop=Q}Q=0,Z.forEach((f)=>{let A=f.stickyRowTop+f.rowHeight;if(Q{if(!M.displayed)return!1;if(M.footer){if(F===!0)return!1;if(F==="grand"&&M.level===-1)return!1;if(F==="group"&&M.level>-1)return!1;let f=M.sibling.rowIndex?M.sibling.rowIndex+1===M.rowIndex:!1;if(z==="bottom"&&f)return!1;if(M.level===-1&&Y?.getGrandTotalPinned())return!1;return!Z.has(M)}if(M.isExpandable()){if(L===!0)return!1;if(z==="bottom")return!1;return!Z.has(M)&&!!M.expanded}return!1};for(let M=0;M<100;M++){let f=H+Q;if(!J)f=H-Q;if(J&&fE)f=E;let A=$.getRowIndexAtPixel(f),R=$.getRow(A);if(R==null)break;let v=this.getStickyAncestors(R).find((b)=>(J?b.rowIndexA)&&D(b));if(v){K(v);continue}if((J?R.rowTopf)&&D(R)){K(R);continue}break}if(!J)Z.forEach((M)=>{M.stickyRowTop=Q-(M.stickyRowTop+M.rowHeight)});return this.refreshNodesAndContainerHeight(z,Z,Q)}areFooterRowsStickySuppressed(){let z=this.gos.get("suppressStickyTotalRow");if(z===!0)return!0;let J=z==="group",Q=z==="grand";if(J&&Q)return!0;if(Q)return"grand";if(J)return"group";return!1}canRowsBeSticky(){let z=p1(this.gos),J=this.areFooterRowsStickySuppressed(),Q=this.gos.get("suppressGroupRowsSticky");return z&&(!J||!Q)}getStickyAncestors(z){let J=[],Q=z.footer?z.sibling:z.parent;while(Q){if(Q.sibling)J.push(Q.sibling);J.push(Q),Q=Q.parent}return J.reverse()}checkStickyRows(){let z=this.updateStickyRows("top"),J=this.updateStickyRows("bottom");return z||J}destroyStickyCtrls(){this.resetStickyContainers()}resetStickyContainers(){this.refreshNodesAndContainerHeight("top",new Set,0),this.refreshNodesAndContainerHeight("bottom",new Set,0)}refreshStickyNode(z){let J=new Set;if(this.stickyTopRowCtrls.some((Q)=>Q.rowNode===z)){for(let Q=0;Q{if(q.has(B))return;B.sticky=!0,G.push(this.createRowCon(B,!1,!1))});let U=!!G.length||Y.length!==$.length;if(Z){if(this.topContainerHeight!==Q)this.topContainerHeight=Q,this.gridBodyCtrl.setStickyTopHeight(Q),U=!0}else if(this.bottomContainerHeight!==Q)this.bottomContainerHeight=Q,this.gridBodyCtrl.setStickyBottomHeight(Q),U=!0;this.destroyRowCtrls(X,!1);let _=[...Y,...G];if(_.sort((B,E)=>E.rowNode.rowIndex-B.rowNode.rowIndex),!Z)_.reverse();for(let B of _)B.setRowTop(B.rowNode.stickyRowTop);let H=this.beans.pageBounds,W=0;if(Z){for(let B of J)if(B.rowIndexthis.topContainerHeight)W=this.topContainerHeight;this.setOffsetTop(W)}else{for(let B of J)if(B.rowIndex>H.getLastRow())W+=B.rowHeight;if(W>this.bottomContainerHeight)W=this.bottomContainerHeight;this.setOffsetBottom(W)}if(!U)return!1;if(Z)this.stickyTopRowCtrls=_;else this.stickyBottomRowCtrls=_;return!0}ensureRowHeightsValid(){let z=!1,J=(Q)=>{let Z=Q.rowNode;if(Z.rowHeightEstimated){let $=f2(this.beans,Z);Z.setRowHeight($.height),z=!0}};return this.stickyTopRowCtrls.forEach(J),this.stickyBottomRowCtrls.forEach(J),z}};function xP(z){if(z.isExpandable()||z.footer){if(z.master&&z.detailNode)return z.detailNode.rowTop+z.detailNode.rowHeight;if(!z.sibling||Math.abs(z.sibling.rowIndex-z.rowIndex)===1){let Q=z.childStore?.getStoreBounds();if(z.footer)Q=z.sibling.childStore?.getStoreBounds();return(Q?.heightPx??0)+(Q?.topPx??0)}if(z.footer)return z.rowTop+z.rowHeight;return z.sibling.rowTop+z.sibling.rowHeight}return Number.MAX_SAFE_INTEGER}function wP(z){if(z.isExpandable()||z.footer){if(z.footer&&z.rowIndex===0)return Number.MAX_SAFE_INTEGER;if(!z.sibling||Math.abs(z.sibling.rowIndex-z.rowIndex)===1){let Z=z.footer?z.sibling:z;while(Z.isExpandable()&&Z.expanded)if(Z.master&&Z.detailNode)Z=Z.detailNode;else if(Z.childrenAfterSort){if(Z.childrenAfterSort.length===0)break;Z=y(Z.childrenAfterSort)}return Z.rowTop+Z.rowHeight}if(z.footer)return z.rowTop+z.rowHeight;return z.sibling.rowTop+z.sibling.rowHeight}return Number.MAX_SAFE_INTEGER}var NP=class extends S{constructor(){super(...arguments);this.beanName="stickyRowSvc"}createStickyRowFeature(z,J,Q){let Z=this.gos;if(p1(Z)&&o(Z)||Az(Z))return z.createManagedBean(new bP(J,Q));return}},tq={moduleName:"GroupCellRenderer",version:$0,userComponents:{agGroupRowRenderer:bY,agGroupCellRenderer:bY},dynamicBeans:{groupCellRendererCtrl:rq},icons:{groupContracted:"tree-closed",groupExpanded:"tree-open"},css:[IP],dependsOn:[C0]},gP={moduleName:"GroupColumn",version:$0,beans:[WP,yP,CP,HP,nq,iq],dependsOn:[C0,tq]},sq={moduleName:"ChangedPath",version:$0,beans:[FP],dependsOn:[C0]},tJ={moduleName:"ClientSideRowModelHierarchy",version:$0,rowModels:["clientSide"],beans:[OP,VP,DP],dependsOn:[C0,sq]},lq={moduleName:"StickyRow",version:$0,beans:[NP]},hP={moduleName:"GroupEdit",version:$0,beans:[RP],dependsOn:[C0,tJ]},uP=({valueSvc:z,dataTypeSvc:J},Q,Z)=>{let $=z.getValue(Q,Z,"data"),X=null;if($ instanceof Date)X=$;else if(typeof $==="string")X=(J?.getDateParserFunction(Q)??g0)($)??null;return X},Cz=(z,J,Q,Z)=>($)=>{let X=uP(z,J,$.node),Y=Ez(X);if(!Y)return null;return Z?.(Y[Q])??Y[Q]},yz=({colNames:z},J,Q)=>(Z)=>{let $=z.getDisplayNameForColumn(J,Z.location);if($)return`${$} (${Q})`;return""},mP=Object.fromEntries(A2.map((z)=>[z,z.toLowerCase()])),cP=(z)=>{let J=A2[Number.parseInt(z,10)-1]??z,Q=mP[J]??z;return{month:J,localeKey:Q}};function xY(z){return z.groupHierarchy??z.rowGroupingHierarchy}var iP=class extends S{constructor(){super(...arguments);this.beanName="groupHierarchyColSvc",this.columns=null,this.sourceColumnMap=new WeakMap,this.inverseColumnMap=new WeakMap}addColumns(z){let J=this.columns;if(J==null)return;z.list=J.list.filter((Q)=>!z.list.some((Z)=>Z.getColId()===Q.getColId())).concat(z.list),z.tree=J.tree.filter((Q)=>!z.tree.some((Z)=>Z.getId()===Q.getId())).concat(z.tree),g2(z)}createColumns(z){let J=new WeakMap,Q=new WeakMap,Z=this.createGroupHierarchyColumns(z,J,Q);if(N2(Z,this.columns?.list??[]))return;U4(this.beans,this.columns?.tree),this.columns=null;let{colGroupSvc:X}=this.beans,Y=X?.findDepth(z.tree)??0,q=X?.balanceTreeForAutoCols(Z,Y)??[];this.columns={list:Z,tree:q,treeDepth:Y,map:{}},this.sourceColumnMap=J,this.inverseColumnMap=Q}updateColumns(z){}getColumn(z){return this.columns?.list.find((J)=>h4(J,z))??null}getColumns(){return this.columns?.list??null}expandColumnInto(z,J){let Q=this.getVirtualColumnsForColumn(J).concat(J);for(let Z of Q)if(!z.some(($)=>h4($,Z)||$.getColId()===Z.getColId()))z.push(Z)}compareVirtualColumns(z,J){let Q=this.inverseColumnMap.get(z),Z=this.inverseColumnMap.get(J);if(Q&&Q===Z){let $=this.sourceColumnMap.get(Q)??[];return $?.indexOf(z)-$?.indexOf(J)}if(this.sourceColumnMap.get(z)?.includes(J))return 1;if(this.sourceColumnMap.get(J)?.includes(z))return-1;return null}insertVirtualColumnsForCol(z,J){let Q=this.getVirtualColumnsForColumn(J);if(!Q)return[];let Z=z.indexOf(J);if(Z<0)Z=z.length-1;return P2(z,Q),z.splice(Z,0,...Q),Q}getVirtualColumnsForColumn(z){if(this.isGroupHierarchyColsEnabledForCol(z))return this.sourceColumnMap.get(z)??[];return[]}isGroupHierarchyColsEnabled(z){return z.list.some((J)=>this.isGroupHierarchyColsEnabledForCol(J))}isGroupHierarchyColsEnabledForCol(z){let J=z.getColDef();return!!(xY(J)&&(J.rowGroup||J.enableRowGroup||J.rowGroupIndex!=null||J.pivot||J.enablePivot||J.pivotIndex!=null))}createGroupHierarchyColDefs(z){let J=[],Q=z.getColDef(),Z=xY(Q);if(!Z)return J;if(!this.isGroupHierarchyColsEnabledForCol(z))return J;for(let $ of Z){let X=null;if(typeof $==="string")X=this.createColDefForPart($,z,Q);else X=$;if(X)J.push(X)}return J}createGroupHierarchyColumns(z,J,Q){if(!this.isGroupHierarchyColsEnabled(z))return[];let Z=[];for(let $ of z.list)for(let X of this.createGroupHierarchyColDefs($)){let Y=X.colId;this.gos.validateColDef(X,Y,!0);let q=new B4(X,null,Y,!0);this.createBean(q),Z.push(q),pP(J,$,q),Q.set(q,$)}return Z}createColDefForPart(z,J,Q){let{beans:Z,gos:$}=this,X=`${I9}-${J.getColId()}-${z}`,Y={enableRowGroup:Q.enableRowGroup,rowGroup:Q.rowGroup,enablePivot:Q.enablePivot,hide:!0,editable:!1},q=$.get("groupHierarchyConfig")??{};if(z in q){let H={...Y,...q[z]};return H.colId??(H.colId=X),e4(Z,H,H.colId,!0)}let G=e4(Z,{colId:X,...Y},X,!0),U=this.getLocaleTextFunc(),_=(H,W)=>U?.(H,W)??W;switch(z){case"year":return{...G,headerValueGetter:yz(Z,J,_(z,"Year")),valueGetter:Cz(Z,J,0)};case"quarter":return{...G,headerValueGetter:yz(Z,J,_(z,"Quarter")),valueGetter:Cz(Z,J,1,(H)=>(Math.floor(Number(H)/4)+1).toString())};case"month":return{...G,headerValueGetter:yz(Z,J,_(z,"Month")),valueGetter:Cz(Z,J,1)};case"formattedMonth":return{...G,headerValueGetter:yz(Z,J,_("month","Month")),valueGetter:Cz(Z,J,1,(H)=>{let W=cP(H);return _(W.localeKey,W.month)})};case"day":return{...G,headerValueGetter:yz(Z,J,_(z,"Day")),valueGetter:Cz(Z,J,2)};case"hour":return{...G,headerValueGetter:yz(Z,J,_(z,"Hour")),valueGetter:Cz(Z,J,3)};case"minute":return{...G,headerValueGetter:yz(Z,J,_(z,"Minute")),valueGetter:Cz(Z,J,4)};case"second":return{...G,headerValueGetter:yz(Z,J,_(z,"Second")),valueGetter:Cz(Z,J,5)};default:return null}}};function pP(z,J,Q){let Z=z.get(J);z.set(J,(Z??[]).concat(Q))}var nP={moduleName:"GroupHierarchy",version:$0,beans:[iP],dependsOn:[sq]};var dP=(z,J)=>{if(!z){J.length=0;return}let Q=z.length;J.length=Q;for(let Z=0;Z{let Q=z.length;if(Q!==J?.length)return!0;for(let Z=0;Z0){Q=!0;break}if(!Q)return!1;return z.sort(wY),!0}function wY(z,J){let Q=z.sourceRowIndex,Z=J.sourceRowIndex,$=Q>=0,X=Z>=0,Y=$&&X,q=!$&&!X;if(Y)return Q-Z;if(q)return z.__objectId-J.__objectId;if($)return 1;return-1}var sP=class extends S{constructor(){super(...arguments);this.groupCols=[],this.nonLeafsById=new Map,this.checkGroupCols=!0,this.pivotMode=!1,this.groupEmpty=!1}invalidateGroupCols(){this.checkGroupCols=!0}destroy(){super.destroy(),this.groupCols.length=0,this.nonLeafsById.clear()}clearNonLeafs(){let z=this.nonLeafsById;for(let J of z.values())J._destroy(!1);z.clear()}loadGroupData(z){if(!z.group)return z._groupData=null,null;let J=z.rowGroupColumn,{valueSvc:Q,showRowGroupCols:Z}=this.beans,$={};if(z._groupData=$,!J)return $;let X=X1(z),Y=J.getId();if(!Z)return $;let q=Z.columns;for(let G=0,U=q.length;G{let Z=Q.childrenAfterGroup,$=Z?.length;if(!$)return;let X=Array($),Y=0,q=!1,G;for(let U=0;U<$;++U){let _=Z[U];if(!_.childrenAfterGroup?.length)q||(q=Y!==U),X[Y++]=_;else if(!G&&_.key===""){G=_;let H=$-1;q||(q=U!==H),X[H]=_}}if(q){for(let _=0;_<$;++_){let H=Z[_];if(H.childrenAfterGroup?.length&&H!==G)X[Y++]=H}Q.childrenAfterGroup=X;let U=Q.sibling;if(U)U.childrenAfterGroup=X}})}initRefresh(z){let{rowGroupColsSvc:J,colModel:Q,gos:Z}=this.beans;this.pivotMode=Q.isPivotMode(),this.groupEmpty=this.pivotMode||!Z.get("groupAllowUnbalanced");let $=J?.columns,X=this.groupCols,Y=z.afterColumnsChanged;if(Y||!X||this.checkGroupCols)if(this.checkGroupCols=!1,X&&!rP(X,$)){if(Y)return"skip"}else{z.animate=!1;let q=X[0]?.col.getId()!==$?.[0]?.getId();return dP($,X),q?"refresh":"groupColsChanged"}return"refresh"}handleDeltaUpdate(z,J,{removals:Q,updates:Z,adds:$,reordered:X},Y){let q=new Set;for(let G=0,U=Q.length;G1)}}if($.size)for(let G of $){this.insertOneNode(z,G);let U=G.parent;J?.addRow(U),X||(X=(U?.childrenAfterGroup?.length??0)>1)}if(q.size)NY(q),this.removeEmptyGroups(q,Y);if(X)this.sortChildren(z,J)}sortChildren(z,J){r0(z,!0,void 0,(Q)=>{if(tP(Q.childrenAfterGroup))J?.addRow(Q)})}orderGroups(z){let J=this.gos.getCallback("initialGroupOrderComparator");if(!J)return;let Q=this.beans,Z=Q.gridApi,$=Q.gridOptions.context,X=(q,G)=>J({api:Z,context:$,nodeA:q,nodeB:G}),Y=(q)=>{let G=q.childrenAfterGroup,U=G?.length;if(!U||q.leafGroup)return;if(U>1)G.sort(X);for(let _=0,H=U;_=0;--q){let{col:G}=Y[q],U=Q.getKeyForNode(G,J);if(U==null||U===""){if(!Z)continue;U=""}if(!$?.parent||$.key!==U){X=!0;break}$=$.parent}if(X||(X=!!$?.parent),!X)return!1;return this.removeFromParent(J),this.insertOneNode(z,J),J.setData(J.data),!0}groupShouldBeRemoved(z){let J=this.getChildrenMappedKey(z.key,z.rowGroupColumn),Q=z.parent?.childrenMapped;if(Q?!Q[J]:!0)return!1;return!!z.group&&(z.childrenAfterGroup?.length??0)===0}removeEmptyGroups(z,J){let Q=this.beans.selectionSvc,Z,$=Array.from(z),X=this.nonLeafsById;do{z.clear();for(let Y=0;Y<$.length;++Y){let q=$[Y];while(q){let G=q.parent;if(q.destroyed){$[Y]=G,q=G;continue}if(!G)break;if(!this.groupShouldBeRemoved(q)){q=G;continue}if(z.add(G),this.removeFromParent(q),Q&&q.isSelected())Z??(Z=[]),Z.push(q);$[Y]=G,X.delete(q.id),q._destroy(J),q=G}}NY(z)}while(z.size);if(Z)Q.setNodesSelected({nodes:Z,newValue:!1,source:"rowGroupChanged"})}removeFromParent(z){let J=z.parent;if(J){let Q=this.getChildrenMappedKey(z.key,z.rowGroupColumn),Z=J.childrenMapped;if(Z)delete Z[Q]}return z.setRowTop(null),z.setRowIndex(null),J}addToParent(z,J){let Q=J.childrenMapped??(J.childrenMapped={}),Z=this.getChildrenMappedKey(z.key,z.rowGroupColumn);if(Q[Z]!==z){Q[Z]=z;let $=J.childrenAfterGroup;if(!$){J.childrenAfterGroup=$=[];let X=J.sibling;if(X)X.childrenAfterGroup=J.childrenAfterGroup}$.push(z),Dq(J,this.beans,!0),wJ(J)}}shotgunResetEverything(z){let J=this.nonLeafsById;for(let $ of J.values())$.childrenAfterGroup=null,$.childrenMapped=null;z.leafGroup=!this.groupCols?.length,z.childrenAfterGroup=[],z.childrenMapped={},z.updateHasChildren();let Q=z.sibling;if(Q)Q.childrenAfterGroup=z.childrenAfterGroup,Q.childrenMapped=z.childrenMapped;let Z=z._leafs;for(let $=0,X=Z.length;$=q-1,K=this.createGroup(Q,U,H,B,E,J);this.addToParent(K,Q),Q=K}if(!Q.group)V(184,{parentGroupData:Q.data,childNodeData:J.data});J.parent=Q,J.level=Q.level+1,Q.childrenAfterGroup.push(J),Q.updateHasChildren(),wJ(Q)}createGroup(z,J,Q,Z,$,X){let Y=J.col,q=(z.level>=0?z.id+"-":"row-group-")+(Y.getColId()+"-"+Q),G=this.nonLeafsById,U=G.get(q),_=!0;if(U){if(U.childrenAfterGroup!==null)return U._expanded??(U._expanded=null),U;_=!1,wJ(U)}else U=new Pz(this.beans),U.group=!0,U.key=Q,U.id=q,U.aggData=null,G.set(q,U);let H=(K)=>{K.childrenAfterGroup=W,K.childrenMapped=B,K.parent=z,K.level=Z,K.rowGroupIndex=Z,K.leafGroup=$},W=[],B={};if(H(U),U.field=J.field??null,U.rowGroupColumn=Y,U.groupValue=this.beans.valueSvc.getValue(Y,X,"data"),U._expanded??(U._expanded=null),_)return U.setAllChildrenCount(0),U.updateHasChildren(),U;let E=U.sibling;if(E)H(E);return U.dispatchRowEvent("hasChildrenChanged"),U}getChildrenMappedKey(z,J){return J?J.getId()+"-"+z:z}onShowRowGroupColsSetChanged(){let{rowModel:z,valueSvc:J}=this.beans;for(let Z of this.nonLeafsById.values()){Z._groupData=void 0;let $=Z.rowGroupColumn,X=$&&X1(Z);Z.groupValue=X&&J.getValue($,X,"data")}let Q=z.rootNode?._leafs;if(Q)for(let Z=0,$=Q.length;Z<$;++Z){let X=Q[Z];X.parent._groupData=void 0}}},NY=(z)=>{for(let J of z){let Q=J?.childrenAfterGroup;if(!Q)continue;let Z=Q.length,$=0;for(let X=0;X{while(z._leafs!==void 0){let J=z.parent;if(!J)break;z._leafs=void 0,z=J}};function lP(z,J){z.rowGroupColsSvc?.setColumns(J,"api")}function aP(z,J){z.rowGroupColsSvc?.removeColumns(J,"api")}function oP(z,J){z.rowGroupColsSvc?.addColumns(J,"api")}function eP(z,J,Q){z.rowGroupColsSvc?.moveColumn?.(J,Q,"api")}function zT(z){return z.rowGroupColsSvc?.columns??[]}var aq={moduleName:"SharedRowGrouping",version:$0,apiFunctions:{setRowGroupColumns:lP,removeRowGroupColumns:aP,addRowGroupColumns:oP,getRowGroupColumns:zT,moveRowGroupColumn:eP},dependsOn:[C0,pq,gP,lq,nP]},JT={moduleName:"RowGrouping",version:$0,dynamicBeans:{groupStrategy:sP},rowModels:["clientSide"],dependsOn:[aq,_P,tJ,hP]};function QT(z,J){z.clipboardSvc?.copyToClipboard(J)}function ZT(z,J){z.clipboardSvc?.cutToClipboard(J)}function $T(z,J){z.clipboardSvc?.copySelectedRowsToClipboard(J)}function XT(z,J){z.clipboardSvc?.copySelectedRangeToClipboard(J)}function YT(z){z.clipboardSvc?.copyRangeDown()}function qT(z){z.clipboardSvc?.pasteFromClipboard()}var IJ="paste",t5="dragCopy",s5="clipboard";function GT(z,J=","){let Q=[],Z=(X)=>X==="\r"||X===` +`,$=!1;if(z==="")return[[""]];for(let X=0,Y=0,q=0;q{if(!Q[X])Q[X]=[];if(!Q[X][Y])Q[X][Y]=""};if(H(),U==='"'){if($)if(_==='"')Q[X][Y]+='"',q++;else $=!1;else if(G===void 0||G===J||Z(G))$=!0}if(!$&&U!=='"'){if(U===J){Y++,H();continue}else if(Z(U)){if(Y=0,X++,H(),U==="\r"&&_===` +`)q++;continue}}Q[X][Y]+=U}return Q}var UT=class extends S{constructor(){super(...arguments);this.beanName="clipboardSvc",this.clientSideRowModel=null,this.gridCtrl=null,this.lastPasteOperationTime=0,this.navigatorApiFailed=!1}postConstruct(){let{gos:z,rowModel:J,ctrlsSvc:Q}=this.beans;if(o(z,J))this.clientSideRowModel=J;Q.whenReady(this,(Z)=>{this.gridCtrl=Z.gridCtrl})}destroy(){super.destroy(),this.clientSideRowModel=null,this.gridCtrl=null}pasteFromClipboard(){if(!this.gos.get("suppressClipboardApi")&&!this.navigatorApiFailed&&navigator.clipboard?.readText)navigator.clipboard.readText().then(this.processClipboardData.bind(this)).catch((J)=>{V(40,{e:J,method:"readText"}),this.navigatorApiFailed=!0,this.pasteFromClipboardLegacy()});else this.pasteFromClipboardLegacy()}pasteFromClipboardLegacy(){let z=!1,J=(Q)=>{let Z=Date.now();if(Z-this.lastPasteOperationTime<50)z=!0,Q.preventDefault();this.lastPasteOperationTime=Z};this.executeOnTempElement((Q)=>{Q.addEventListener("paste",J),Q.focus({preventScroll:!0})},(Q)=>{let Z=Q.value;if(!z)this.processClipboardData(Z);else this.refocusLastFocusedCell();Q.removeEventListener("paste",J)})}refocusLastFocusedCell(){let{focusSvc:z}=this.beans,J=z.getFocusedCell();if(J)z.setFocusedCell({rowIndex:J.rowIndex,column:J.column,rowPinned:J.rowPinned,forceBrowserFocus:!0})}getClipboardDelimiter(){let z=this.gos.get("clipboardDelimiter");return P(z)?z:"\t"}processClipboardData(z){if(z==null)return;let J=GT(z,this.getClipboardDelimiter()),Q=this.gos.getCallback("processDataFromClipboard");if(Q)J=Q({data:J});if(J==null)return;if(this.gos.get("suppressLastEmptyLineOnPaste"))this.removeLastLineIfBlank(J);let{rangeSvc:Z,editSvc:$}=this.beans,X=(Y,q,G,U)=>{if(Z?.isMoreThanOneCell()&&!this.hasOnlyOneValueToPaste(J))this.pasteIntoActiveRange(J,Y,q,U);else this.pasteStartingFromFocusedCell(J,Y,q,G,U);$?.stopEditing(void 0,{source:IJ})};this.doPasteOperation(X)}doPasteOperation(z){let{eventSvc:Q,focusSvc:Z,rowRenderer:$,gos:X}=this.beans;Q.dispatchEvent({type:"pasteStart",source:"clipboard"});let{clientSideRowModel:Y}=this,q=Y?.rootNode,G=q&&this.beans.changedPathFactory?.newPath(X.get("aggregateOnlyChangedColumns")),U={},_=[],H=Z.getFocusedCell();z(U,_,H,G);let W=_.slice();if(G)Y.doAggregate(G),r0(q,Y.hierarchical,G,(B)=>{W.push(B)});$.refreshCells({rowNodes:W}),this.dispatchFlashCells(U),this.fireRowChanged(_),this.refocusLastFocusedCell(),Q.dispatchEvent({type:"pasteEnd",source:"clipboard"})}getPreProcessRangeCallback(z){return(J)=>{let{rangeSvc:Q}=this.beans;if(!Q)return;let{rowDiff:Z,colDiff:$}=this.getAdjustedRangeDimensionForPaste(J,z);if(Z!==0)Q.extendRangeRowCountBy(J,Z);if($!==0)Q.extendRangeColumnCountBy(J,$)}}getAdjustedRangeDimensionForPaste(z,J){let Q=this.beans.rangeSvc,Z=J.length,$=Q.getRangeRowCount(z),X=$>=Z&&$%Z===0,Y=J[0].length,q=z.columns.length,G=q>=Y&&q%Y===0;return{rowDiff:X?0:Z-$,colDiff:G?0:Y-q}}pasteIntoActiveRange(z,J,Q,Z){let $=0,X=0,Y=(q,G,U,_)=>{if(_-$>=z.length){if(_%z.length!==0)return;$+=X,X=0}let W=z[_-$];Q.push(G);let B=this.gos.getCallback("processCellFromClipboard"),E=U.columns,K=E.findIndex(i4);if(K!==-1)E.splice(K,1);for(let F=0;F=W.length)D=F%W.length;let M=this.processCell(G,L,W[D],t5,B,!0);G.setDataValue(L,M,IJ),Z?.addCell(G.parent,L.getId());let{rowIndex:f,rowPinned:A}=q,R=n4({rowIndex:f,column:L,rowPinned:A});J[R]=!0}X++};this.iterateActiveRanges(Y,!1,this.getPreProcessRangeCallback(z))}getDisplayedColumnsStartingAt(z){let J=z,Q=[],{visibleCols:Z}=this.beans;while(J&&w2(J))J=Z.getColAfter(J);while(J!=null)Q.push(J),J=Z.getColAfter(J);return Q}pasteStartingFromFocusedCell(z,J,Q,Z,$){if(!Z)return;let X={rowIndex:Z.rowIndex,rowPinned:Z.rowPinned},Y=this.getDisplayedColumnsStartingAt(Z.column);if(this.isPasteSingleValueIntoRange(z))this.pasteSingleValueIntoRange(z,Q,J,$);else this.pasteMultipleValues(z,X,Q,Y,J,s5,$)}isPasteSingleValueIntoRange(z){let J=this.beans.rangeSvc;return this.hasOnlyOneValueToPaste(z)&&!!J&&!J.isEmpty()}pasteSingleValueIntoRange(z,J,Q,Z){let $=z[0][0],X=(Y,q,G)=>{J.push(q),G.columns.forEach((U)=>this.updateCellValue(q,U,$,Q,s5,Z))};this.iterateActiveRanges(X)}hasOnlyOneValueToPaste(z){return z.length===1&&z[0].length===1}copyRangeDown(){let{rangeSvc:z,gos:J,formula:Q,valueSvc:Z}=this.beans;if(!z||z.isEmpty())return;let $=[],X=(Y,q,G,U)=>{let _=J.getCallback("processCellForClipboard"),H=J.getCallback("processCellFromClipboard"),W=(B,E,K)=>{let{columns:F}=K;if(!$.length)F.forEach((L)=>{let D=this.processCell(E,L,Z.getValue(L,E,"batch"),t5,_,!1,!0);$.push(D)});else q.push(E),F.forEach((L,D)=>{if(!L.isCellEditable(E)||L.isSuppressPaste(E))return;if(L.isAllowFormula()&&Q?.isFormula($[D]))$[D]=Q?.updateFormulaByOffset({value:$[D],rowDelta:1});let f=this.processCell(E,L,$[D],t5,H,!0);E.setDataValue(L,f,IJ),U?.addCell(E.parent,L.getId());let{rowIndex:A,rowPinned:R}=B,O=n4({rowIndex:A,column:L,rowPinned:R});Y[O]=!0})};this.iterateActiveRanges(W,!0)};this.doPasteOperation(X)}removeLastLineIfBlank(z){let J=y(z);if(J&&J.length===1&&J[0]===""){if(z.length===1)return;X0(z,J)}}fireRowChanged(z){if(this.gos.get("editType")!=="fullRow")return;for(let J of z)this.eventSvc.dispatchEvent({type:"rowValueChanged",node:J,data:J.data,rowIndex:J.rowIndex,rowPinned:J.rowPinned})}shouldSkipPasteRow(z,J,Q){if(z.detail||z.footer)return!0;if(Q&&z.group){for(let Z of J)if(Z.isCellEditable(z))return!1;return!0}return!1}pasteMultipleValues(z,J,Q,Z,$,X,Y){let q=J,G=this.beans,{gos:U}=G,_=this.clientSideRowModel!=null&&!U.get("enableGroupEdit")&&!U.get("treeData"),H=()=>{while(q){let W=S0(G,q);if(q=M0(G,{rowPinned:q.rowPinned,rowIndex:q.rowIndex}),W!=null&&!this.shouldSkipPasteRow(W,Z,_))return W}return null};for(let W of z){let B=H();if(!B)continue;W.forEach((E,K)=>this.updateCellValue(B,Z[K],E,$,X,Y)),Q.push(B)}}updateCellValue(z,J,Q,Z,$,X){if(!z||!J?.isCellEditable(z)||J?.isSuppressPaste(z))return;let Y=this.processCell(z,J,Q,$,this.gos.getCallback("processCellFromClipboard"),!0);z.setDataValue(J,Y,IJ);let{rowIndex:q,rowPinned:G}=z,U=n4({rowIndex:q,column:J,rowPinned:G});Z[U]=!0,X?.addCell(z.parent,J.getId())}copyToClipboard(z={}){this.copyOrCutToClipboard(z)}cutToClipboard(z={},J="api"){if(this.gos.get("suppressCutToClipboard"))return;this.eventSvc.dispatchEvent({type:"cutStart",source:J}),this.copyOrCutToClipboard(z,!0),this.eventSvc.dispatchEvent({type:"cutEnd",source:J})}copyOrCutToClipboard(z,J){let{includeHeaders:Q,includeGroupHeaders:Z}=z,{gos:$,focusSvc:X}=this.beans;if(Q==null)Q=$.get("copyHeadersToClipboard");if(Z==null)Z=$.get("copyGroupHeadersToClipboard");let Y={includeHeaders:Q,includeGroupHeaders:Z},q=$.get("rowSelection"),G=$.get("cellSelection"),U=null;if(this.shouldCopyCells(G,q))this.copySelectedRangeToClipboard(Y),U=0;else if(this.shouldCopyRows(q))this.copySelectedRowsToClipboard(Y),U=1;else if(X.isAnyCellFocused())this.copyFocusedCellToClipboard(Y),U=2;if(J&&U!==null)this.clearCellsAfterCopy(U)}shouldCopyCells(z,J){let{rangeSvc:Q,selectionSvc:Z,gos:$}=this.beans;if(!Q||Q.isEmpty())return!1;if(z)return!(typeof J==="object"&&J.copySelectedRows&&!Z?.isEmpty());else{let X=$.get("suppressCopySingleCellRanges");return!(!Q.isMoreThanOneCell()&&X)}}shouldCopyRows(z){let{selectionSvc:J,gos:Q}=this.beans;if(J?.isEmpty()??!0)return!1;if(z&&typeof z!=="string")return z.copySelectedRows??!1;else return!Q.get("suppressCopyRowsToClipboard")}clearCellsAfterCopy(z){let J=this.beans,{rangeSvc:Q,focusSvc:Z,eventSvc:$}=J;if($.dispatchEvent({type:"keyShortcutChangedCellStart"}),z===0)Q.clearCellRangeCellValues({cellEventSource:"clipboardSvc"});else if(z===1)this.clearSelectedRows();else{let X=Z.getFocusedCell();if(X==null)return;let Y=S0(J,X);if(Y)this.clearCellValue(Y,X.column)}$.dispatchEvent({type:"keyShortcutChangedCellEnd"})}clearSelectedRows(){let{selectionSvc:z,visibleCols:J}=this.beans,Q=z?.getSelectedNodes()??[],Z=J.allCols;for(let $ of Q)for(let X of Z)this.clearCellValue($,X)}clearCellValue(z,J){if(!J.isCellEditable(z))return;let Q=this.beans.valueSvc.getDeleteValue(J,z);z.setDataValue(J,Q,"clipboardSvc")}iterateActiveRanges(z,J,Q){let Z=this.beans.rangeSvc;if(!Z||Z.isEmpty())return;let $=Z.getCellRanges(),X=J?[$[0]]:$;for(let Y of X)this.iterateActiveRange({cellRange:Y,rowCallback:z,preProcessRange:Q})}iterateActiveRange(z){let{cellRange:J,preProcessRange:Q,rowCallback:Z}=z,{beans:$}=this,{rangeSvc:X}=$;if(!X)return;if(Q)Q(J);let Y=X.getRangeStartRow(J),q=X.getRangeEndRow(J),G=0,U=!1;while(!U&&Y!=null){let _=S0($,Y);U=a(Y,q),Z(Y,_,J,G++),Y=M0($,Y)}}copySelectedRangeToClipboard(z={}){let J=this.beans.rangeSvc;if(!J||J.isEmpty())return;let Q=J.areAllRangesAbleToMerge(),{data:Z,cellsToFlash:$}=Q?this.buildDataFromMergedRanges(J,z):this.buildDataFromRanges(J,z);this.copyDataToClipboard(Z),this.dispatchFlashCells($)}buildDataFromMergedRanges(z,J){let Q=new Set,Z=z.getCellRanges(),$=new Map,X=[],Y={},q=o(this.gos,this.beans.rowModel),G=new Set;if(!q)this.beans.rowModel.forEachNode((W)=>{G.add(W.rowIndex)});for(let W of Z){W.columns.forEach((K)=>Q.add(K));let{rowPositions:B,cellsToFlash:E}=this.getRangeRowPositionsAndCellsToFlash(z,W);for(let K of B){let F=G.has(K.rowIndex);if(!q&&!F)continue;let L=`${K.rowIndex}-${K.rowPinned||"null"}`;if(!$.get(L))$.set(L,!0),X.push(K)}Object.assign(Y,E)}let U=this.beans.visibleCols.allCols,_=Array.from(Q);return _.sort((W,B)=>{let E=U.indexOf(W),K=U.indexOf(B);return E-K}),{data:this.buildExportParams({columns:_,rowPositions:X,includeHeaders:J.includeHeaders,includeGroupHeaders:J.includeGroupHeaders}),cellsToFlash:Y}}buildDataFromRanges(z,J){let Q=z.getCellRanges(),Z=[],$={};for(let X of Q){let{rowPositions:Y,cellsToFlash:q}=this.getRangeRowPositionsAndCellsToFlash(z,X);Object.assign($,q),Z.push(this.buildExportParams({columns:X.columns,rowPositions:Y,includeHeaders:J.includeHeaders,includeGroupHeaders:J.includeGroupHeaders}))}return{data:Z.join(` +`),cellsToFlash:$}}getRangeRowPositionsAndCellsToFlash(z,J){let Q=[],Z={},$=z.getRangeStartRow(J),X=z.getRangeEndRow(J),Y=$;while(Y){Q.push(Y);for(let q of J.columns){let{rowIndex:G,rowPinned:U}=Y,_=n4({rowIndex:G,column:q,rowPinned:U});Z[_]=!0}if(a(Y,X))break;Y=M0(this.beans,Y)}return{rowPositions:Q,cellsToFlash:Z}}getCellsToFlashFromRowNodes(z){let J=this.beans.visibleCols.allCols,Q={};for(let Z=0;Z{let{value:H,valueFormatted:W}=this.beans.valueSvc.getValueForDisplay({column:_,node:U,includeValueFormatted:!0,from:"batch"}),B=W??H??"",E=X.getCallback("processCellForClipboard");if(!E)return B;return E({column:_,node:U,value:B,type:s5,formatValue:(K)=>this.beans.valueSvc.formatValue(_,U,K)??K,parseValue:(K)=>this.beans.valueSvc.parseValue(_,U,K,H)??K})},G={columnKeys:J,rowPositions:Q,skipColumnHeaders:!Z,skipColumnGroupHeaders:!$,suppressQuotes:!0,columnSeparator:this.getClipboardDelimiter(),onlySelected:!Q,valueFrom:"batch",processCellCallback:X.getCallback("processCellForClipboard"),processRowGroupCallback:q,processHeaderCallback:X.getCallback("processHeaderForClipboard"),processGroupHeaderCallback:X.getCallback("processGroupHeaderForClipboard")};return Y.getDataAsCsv(G,!0)}dispatchFlashCells(z){window.setTimeout(()=>{this.eventSvc.dispatchEvent({type:"flashCells",cells:z})},0)}processCell(z,J,Q,Z,$,X,Y){let{valueSvc:q,formula:G}=this.beans;if($)return $({column:J,node:z,value:Q,type:Z,formatValue:(_)=>q.formatValue(J,z??null,_)??_,parseValue:(_)=>q.parseValue(J,z??null,_,q.getValue(J,z,"edit"))});if(X&&J.getColDef().useValueParserForImport!==!1)return q.parseValue(J,z??null,Q,q.getValue(J,z,"edit"));if(Y&&J.getColDef().useValueFormatterForExport!==!1){if(G?.isFormula(Q))return Q;return q.formatValue(J,z??null,Q)??Q}return Q}copyDataToClipboard(z){let J=this.gos.getCallback("sendToClipboard");if(J){J({data:z});return}if(!this.gos.get("suppressClipboardApi")&&navigator.clipboard){navigator.clipboard.writeText(z).catch((Z)=>{V(40,{e:Z,method:"writeText"}),this.copyDataToClipboardLegacy(z)});return}this.copyDataToClipboardLegacy(z)}copyDataToClipboardLegacy(z){this.executeOnTempElement((J)=>{let Q=Y0(this.beans),Z=n(this.beans);if(J.value=z||" ",J.select(),J.focus({preventScroll:!0}),!Q.execCommand("copy"))V(41);if(Z?.focus!=null)Z.focus({preventScroll:!0})})}executeOnTempElement(z,J){if(!this.gridCtrl)return;let Q=Y0(this.beans),Z=Q.createElement("textarea"),$=Z.style;$.width="1px",$.height="1px";let X=Q.documentElement;$.top=X.scrollTop+"px",$.left=X.scrollLeft+"px",$.position="absolute",$.opacity="0",this.gridCtrl.getGui().appendChild(Z);try{z(Z)}catch(q){V(42)}if(J)window.setTimeout(()=>{J(Z),Z.remove()},100);else Z.remove()}},oq={moduleName:"Clipboard",version:$0,beans:[UT],apiFunctions:{copyToClipboard:QT,cutToClipboard:ZT,copySelectedRowsToClipboard:$T,copySelectedRangeToClipboard:XT,copySelectedRangeDown:YT,pasteFromClipboard:qT},dependsOn:[C0,EX,Y1,aX]};var eq=class extends S{constructor(){super(...arguments);this.loadRowDataVersion=0}wireBeans(z){this.environment=z.environment}init(z,J){if(this.params=J,this.comp=z,J.pinned!=null)return;this.setAutoHeightClasses(),this.setupRefreshStrategy(),this.createDetailGrid(),this.loadRowData(),this.addManagedEventListeners({fullWidthRowFocused:this.onFullWidthRowFocused.bind(this)})}onFullWidthRowFocused(z){let J=this.params,Q={rowIndex:J.node.rowIndex,rowPinned:J.node.rowPinned},Z={rowIndex:z.rowIndex,rowPinned:z.rowPinned};if(!a(Q,Z))return;E0(this.comp.getGui(),z.fromBelow)}setAutoHeightClasses(){let z=this.gos.get("detailRowAutoHeight"),J=z?"ag-details-row-auto-height":"ag-details-row-fixed-height",Q=z?"ag-details-grid-auto-height":"ag-details-grid-fixed-height",Z=this.comp;Z.toggleCss(J,!0),Z.toggleDetailGridCss(Q,!0)}setupRefreshStrategy(){let z=this.params.refreshStrategy;if(z=="everything"||z=="nothing"||z=="rows"){this.refreshStrategy=z;return}if(z!=null)V(170,{providedStrategy:z});this.refreshStrategy="rows"}createDetailGrid(){let{params:z,gos:J}=this;if(d(z.detailGridOptions)){V(171);return}let Q=J.get("theme"),Z=z.detailGridOptions.theme;if(Z&&Z!==Q)V(267);let $={themeStyleContainer:this.environment.eStyleContainer,...z.detailGridOptions,theme:Q};if(J.get("detailRowAutoHeight"))$.domLayout="autoHeight";this.comp.setDetailGrid($)}registerDetailWithMaster(z){let{params:J,beans:{selectionSvc:Q,findSvc:Z,expansionSvc:$}}=this,X=J.node.id,Y=J.api,q={id:X,api:z},G=J.node;if(Y.isDestroyed())return;Y.addDetailGridInfo(X,q),G.detailGridInfo=q;let U=G.parent;Z?.registerDetailGrid(G,z);function _(){if(U)Q?.refreshMasterNodeState(U)}function H({source:B}){if(B==="expandAll")return z.expandAll();if(B==="collapseAll")return z.collapseAll()}function W({node:B,source:E}){if(B!==U||E==="masterDetail"||z.isDestroyed())return;Q?.setDetailSelectionState(U,J.detailGridOptions,z)}z.addEventListener("firstDataRendered",()=>{if(z.isDestroyed()||Y.isDestroyed())return;Q?.setDetailSelectionState(U,J.detailGridOptions,z),z.addEventListener("selectionChanged",_),Y.addEventListener("rowSelected",W);let E=`${"CsrmSsrmSharedApi"}Module`;if(z.isModuleRegistered(E))Y.addEventListener("expandOrCollapseAll",H),$?.setDetailsExpansionState(z)}),this.addManagedListeners(U,{masterChanged:(B)=>{if(!B.node.master)this.onDestroy(q)}}),this.addDestroyFunc(()=>this.onDestroy(q))}onDestroy(z){let{params:J}=this,Q=J.node,Z=J.api;if(Q.detailGridInfo!==z)return;if(!Z.isDestroyed())Z.removeDetailGridInfo(Q.id);Q.detailGridInfo=null}loadRowData(){this.loadRowDataVersion++;let z=this.loadRowDataVersion,J=this.params;if(J.detailGridOptions?.rowModelType==="serverSide"){J.node.detailGridInfo?.api?.refreshServerSide({purge:!0});return}let Q=J.getDetailRowData;if(!Q){V(172);return}let Z=(X)=>{if(this.loadRowDataVersion===z)this.comp.setRowData(X)},$={node:J.node,data:J.node.data,successCallback:Z,context:C(this.gos,{}).context};Q($)}refresh(){switch(this.refreshStrategy){case"nothing":return!0;case"everything":return!1}return this.loadRowData(),!0}},_T=class{constructor(z){this.parentWrapper=z}wrap(z,J,Q,Z){return this.parentWrapper.wrap(z,J,Q,Z)}},HT={tag:"div",cls:"ag-details-row"},WT={tag:"div",cls:"ag-details-row",role:"gridcell",children:[{tag:"div",ref:"eDetailGrid",cls:"ag-details-grid",role:"presentation"}]},BT=class extends x{constructor(){super(...arguments);this.eDetailGrid=j}wireBeans(z){this.context=z.context}init(z){this.params=z,this.selectAndSetTemplate();let J={toggleCss:(Q,Z)=>this.toggleCss(Q,Z),toggleDetailGridCss:(Q,Z)=>this.eDetailGrid.classList.toggle(Q,Z),setDetailGrid:(Q)=>this.setDetailGrid(Q),setRowData:(Q)=>this.setRowData(Q),getGui:()=>this.eDetailGrid};this.ctrl=this.createManagedBean(new eq),this.ctrl.init(J,z)}refresh(){return this.ctrl?.refresh()??!1}selectAndSetTemplate(){let z=this.params;if(z.pinned){this.setTemplate(HT);return}let J=()=>{this.setTemplate(WT)};if(d(z.template))J();else if(typeof z.template==="string")this.setTemplate(z.template,[]);else if(typeof z.template==="function"){let Q=z.template,Z=Q(z);this.setTemplate(Z,[])}else V(168),J();if(this.eDetailGrid==null)V(169)}setDetailGrid(z){if(!this.eDetailGrid)return;let J=this.context.getBean("frameworkCompWrapper"),Q=new _T(J),{frameworkOverrides:Z}=this.beans,$=fJ(this.eDetailGrid,z,{frameworkOverrides:Z,providedBeanInstances:{frameworkCompWrapper:Q},modules:X9(this.params.api.getGridId(),z.rowModelType??"clientSide")});this.detailApi=$,this.ctrl?.registerDetailWithMaster($),this.addDestroyFunc(()=>{$.destroy()})}setRowData(z){this.detailApi?.setGridOption("rowData",z)}};function sJ(z,J){let Q=z.masterDetailSvc?.store;return Q?J(Q):void 0}function ET(z,J,Q){sJ(z,(Z)=>{Z[J]=Q})}function KT(z,J){sJ(z,(Q)=>{delete Q[J]})}function FT(z,J){return sJ(z,(Q)=>Q[J])}function LT(z,J){sJ(z,(Q)=>{let Z=0;Object.values(Q).forEach(($)=>{if($)J($,Z++)})})}var DT=".ag-details-row{width:100%}.ag-details-row-fixed-height{height:100%}.ag-details-grid{width:100%}.ag-details-grid-fixed-height{height:100%}",MT=class extends S{constructor(){super(...arguments);this.beanName="masterDetailSvc",this.store={}}isEnabled(){return this.gos.get("masterDetail")}postConstruct(){let z=this.gos;if(o(z))this.enabled=this.isEnabled();if(Az(z))this.addEventListeners()}addEventListeners(){let z=(Z)=>{this.setMaster(Z.node,!1,!0)},J,Q=()=>{if(J){for(let Z of J)Z();J=void 0}if(this.isEnabled())J=this.addManagedListeners(this.beans.eventSvc,{rowNodeDataChanged:z})};Q(),this.gos.addPropertyEventListener("masterDetail",Q)}refreshModel(z){if(z.changedProps){let J=this.isEnabled();if(this.enabled!==J){this.setMasters(null);return}}if(z.rowDataUpdated)this.setMasters(z.changedRowNodes)}setMaster(z,J,Q){let Z=z.master,$=this.isEnabled(),X=$,Y=this.gos,q=Y.get("isRowMaster"),G=Y.get("treeData");if($)if(J||Q){if(q){let U=z.data;X=!!U&&!!q(U)}}else X=Z;if(!G){if(X&&J||!X&&Z)z._expanded??(z._expanded=null)}if(X!==Z)z.master=X,z.dispatchRowEvent("masterChanged")}setMasters(z){if(this.enabled=this.isEnabled(),z){for(let J of z.updates)this.setMaster(J,!1,!0);for(let J of z.adds)this.setMaster(J,!0,!1)}else{let J=uZ(this.beans)?.rootNode?._leafs;if(J)for(let Q=0,Z=J.length;Q{let Y=J.clientHeight;if(Y!=null&&Y>0){let q=()=>{let{rowModel:G}=this.beans,{rowNode:U}=z;if(U.setRowHeight(Y),o(Q,G)||Az(Q,G))G.onRowHeightChanged()};window.setTimeout(q,0)}},X=j4(Z,J,$);z.addDestroyFunc(X),$()}destroy(){this.store={},super.destroy()}},kT={moduleName:"SharedMasterDetail",version:$0,beans:[MT],userComponents:{agDetailCellRenderer:BT},dynamicBeans:{detailCellRendererCtrl:eq},apiFunctions:{addDetailGridInfo:ET,removeDetailGridInfo:KT,getDetailGridInfo:FT,forEachDetailGridInfo:LT},dependsOn:[C0,tq,lq],css:[DT]},zG={moduleName:"MasterDetail",version:$0,dependsOn:[kT,tJ,lX]},JG=class extends x{constructor(){super(...arguments);this.changedCalculatedValues=!1,this.dragging=!1,this.shouldDestroyOnEndDragging=!1}postConstruct(){this.beans.dragSvc.addDragSource({dragStartPixels:0,eElement:this.getGui(),onDragging:(z)=>{let J=!1;if(!this.dragging)J=!0,this.dragging=!0,Rz(this.beans).classList?.add(this.getDraggingCssClass());if(this.updateValuesOnMove(z),J){this.changedCalculatedValues=!1;return}if(this.beans.rangeSvc.autoScrollService.check(z),this.changedCalculatedValues)this.onDrag(z),this.changedCalculatedValues=!1},onDragStop:(z)=>{this.dragging=!1,this.onDragEnd(z),this.clearDragProperties()},onDragCancel:()=>{this.dragging=!1,this.onDragCancel(),this.clearDragProperties()}}),this.addManagedEventListeners({cellSelectionChanged:this.updateLocalRangeIfNeeded.bind(this)}),this.addManagedElementListeners(this.getGui(),{pointerdown:gY,mousedown:gY})}getLastCellHovered(){return this.lastCellHovered}getDraggingCssClass(){return`ag-dragging-${this.type===0?"fill":"range"}-handle`}updateValuesOnMove(z){let J=z5(this.gos,z);if(!J||this.shouldSkipCell(J)||this.lastCellHovered&&r1(J,this.lastCellHovered))return;this.lastCellHovered=J,this.changedCalculatedValues=!0}clearDragProperties(){if(this.clearValues(),this.beans.rangeSvc.autoScrollService.ensureCleared(),Rz(this.beans).classList?.remove(this.getDraggingCssClass()),this.shouldDestroyOnEndDragging)this.destroy()}getType(){return this.type}refresh(z,J){let Q=this.cellCtrl,Z=this.getGui(),$=J??y(this.beans.rangeSvc.getCellRanges()),X=$.startRow,Y=$.endRow;if(X&&Y)if(W0(Y,X))this.rangeStartRow=Y,this.rangeEndRow=X;else this.rangeStartRow=X,this.rangeEndRow=Y;if(Q!==z||!B0(Z)){this.cellCtrl=z;let q=z.comp.getParentOfValue();if(q)q.appendChild(Z)}this.cellRange=$}clearValues(){this.lastCellHovered=void 0}destroy(){if(!this.shouldDestroyOnEndDragging&&this.dragging){w(this.getGui(),!1),this.shouldDestroyOnEndDragging=!0;return}this.shouldDestroyOnEndDragging=!1,super.destroy(),this.getGui()?.remove()}updateLocalRangeIfNeeded(z){if(!this.cellRange)return;let{id:J,type:Q}=this.cellRange;if(!J||J!==z.id)return;let Z=this.beans.rangeSvc?.getCellRanges().find(($)=>$.id===J&&$.type===Q);if(Z&&Z!==this.cellRange)this.cellRange=Z}},gY=(z)=>{z.stopPropagation()};function fT(z){let J=z.length,Q=0;if(J<=1)return z;for(let H=0;H1){Q=Math.max(Q,parseInt(B[1],10));continue}if(Math.floor(W)===W)continue;Q=Math.max(Q,W.toString().split(".")[1].length)}let Z=0,$=0,X=0,Y=0,q=0;for(let H=0;HY?"x":"y";else G=q;if(G!==this.dragAxis)this.dragAxis=G,this.changedCalculatedValues=!0}shouldSkipCell(z){return y0(z.column)}onDrag(z){if(!this.initialPosition){let Q=this.cellCtrl;if(!Q)return;this.initialPosition=Q.cellPosition}let J=this.getLastCellHovered();if(J)this.markPathFrom(this.initialPosition,J)}onDragEnd(z){if(this.initialXY=null,!this.markedCells.length)return;let J=this.dragAxis==="x",{cellRange:Q,rangeStartRow:Z,rangeEndRow:$,beans:{rangeSvc:X}}=this,Y=Q.columns.length,q;if(!this.isUp&&!this.isLeft)q=X.createCellRangeFromCellRangeParams({rowStartIndex:Z.rowIndex,rowStartPinned:Z.rowPinned,columnStart:Q.columns[0],rowEndIndex:J?$.rowIndex:this.lastCellMarked.rowIndex,rowEndPinned:J?$.rowPinned:this.lastCellMarked.rowPinned,columnEnd:J?this.lastCellMarked.column:Q.columns[Y-1]});else{let G=J?Z:this.lastCellMarked;q=X.createCellRangeFromCellRangeParams({rowStartIndex:G.rowIndex,rowStartPinned:G.rowPinned,columnStart:J?this.lastCellMarked.column:Q.columns[0],rowEndIndex:$.rowIndex,rowEndPinned:$.rowPinned,columnEnd:Q.columns[Y-1]})}if(q)this.performFill({event:z,initialRange:Q,finalRange:q,shouldUpdateRange:!0})}onDragCancel(){if(this.initialXY=null,!this.markedCells.length)return;this.clearMarkedPath()}performFill({event:z,initialRange:J,finalRange:Q,shouldUpdateRange:Z}){let{eventSvc:$,rangeSvc:X}=this.beans;if($.dispatchEvent({type:"fillStart"}),this.handleValueChanged(J,Q,z),Z)X.setCellRanges([Q]);$.dispatchEvent({type:"fillEnd",initialRange:J,finalRange:Q})}getFillHandleDirection(){let z=qJ(this.gos)?.direction;if(!z)return"xy";if(z!=="x"&&z!=="y"&&z!=="xy")return V(177),"xy";return z}handleValueChanged(z,J,Q){let{beans:Z}=this,{rangeSvc:$,gos:X,valueSvc:Y}=Z,q=$.getRangeEndRow(z),G=$.getRangeStartRow(z),U=$.getRangeEndRow(J),_=$.getRangeStartRow(J),H=this.dragAxis==="y";if(this.isReduce&&!qJ(X)?.suppressClearOnFillReduction){let R=H?z.columns:z.columns.filter((v)=>J.columns.indexOf(v)<0),O=H?M0(Z,U):_;if(O)this.clearCellsInRange(O,q,R);return}let W=[],B=[],E=[],K=[],F=!0,L=0,D=()=>{W.length=0,B.length=0,E.length=0,K.length=0,L=0},M=(R,O)=>{let v=this.isUp?q:G,I=!1;if(H)F=!0,D();while(!I&&v){let b=S0(Z,v);if(!b)break;if(H&&R)f(W,R,b,()=>!a(v,this.isUp?G:q));else if(O){F=!0,D();for(let m of O)f(W,m,b,()=>m!==(this.isLeft?z.columns[0]:y(z.columns)))}I=a(v,this.isUp?_:U),v=this.isUp?d0(this.beans,v):M0(Z,v)}},f=(R,O,v,I)=>{let b,m=!1;if(F)b=Y.getValue(O,v,"edit"),B.push(b),E.push(Y.getValue(O,v,"edit",!0)),K.push(Y.getValueForDisplay({column:O,node:v,from:"edit"}).valueFormatted),F=I();else{let{value:g,fromUserFunction:e,sourceCol:t,sourceRowNode:u}=this.processValues({event:Q,values:R,initialValues:B,initialNonAggregatedValues:E,initialFormattedValues:K,col:O,rowNode:v,idx:L++});if(b=g,O.isCellEditable(v)){let Q0=Y.getValue(O,v,"edit");if(!e){if(t){let s=t.getColDef();if(s.useValueFormatterForExport!==!1&&s.valueFormatter){let P0=Y.getValueForDisplay({column:t,node:u,includeValueFormatted:!0,from:"edit"}).valueFormatted;if(P0!=null)b=P0}}if(O.getColDef().useValueParserForImport!==!1)b=Y.parseValue(O,v,t?b:p0(b),Q0)}if(!e||Q0!==b)v.setDataValue(O,b,"rangeSvc");else m=!0}}if(!m)R.push({value:b,column:O,rowNode:v})},{changeDetectionSvc:A}=this.beans;A?.beginDeferred();try{if(H)z.columns.forEach((R)=>{M(R)});else{let R=this.isLeft?[...J.columns].reverse():J.columns;M(void 0,R)}this.beans.editSvc?.stopEditing(void 0,{source:"fillHandle"})}finally{A?.endDeferred()}}clearCellsInRange(z,J,Q){let Z={startRow:z,endRow:J,columns:Q,startColumn:Q[0]};this.beans.rangeSvc.clearCellRangeCellValues({cellRanges:[Z],restoreSourceInBatch:!0})}processValues(z){let{formula:J,valueSvc:Q}=this.beans,{event:Z,values:$,initialValues:X,initialNonAggregatedValues:Y,initialFormattedValues:q,col:G,rowNode:U,idx:_}=z,H=qJ(this.gos)?.setFillValue,W=this.dragAxis==="y",B;if(W)B=this.isUp?"up":"down";else B=this.isLeft?"left":"right";if(H){let F=C(this.gos,{event:Z,values:$.map(({value:D})=>D),initialValues:X,initialNonAggregatedValues:Y,initialFormattedValues:q,currentIndex:_,currentCellValue:Q.getValue(G,U,"edit"),direction:B,column:G,rowNode:U}),L=H(F);if(L!==!1)return{value:L,fromUserFunction:!0}}let E=(F)=>typeof F==="number"&&Number.isFinite(F)||typeof F==="string"&&/^[+-]?\d+(?:\.\d+)?$/.test(F.trim()),K=$.every(({value:F})=>E(F));if(Z.altKey||!K){let F=String(y($)?.value??"");if(K&&X.length===1){let R=this.isUp||this.isLeft?-1:1;return{value:parseFloat(F)+1*R,fromUserFunction:!1}}let{value:L,column:D,rowNode:M}=$[_%$.length],f,A=D.isAllowFormula()&&J?.isFormula(F);if(A){let R=B==="up"?-1:B==="down"?1:0,O=B==="left"?-1:B==="right"?1:0;f=J.updateFormulaByOffset({value:F,rowDelta:R,columnDelta:O})}else f=L;return{value:f,fromUserFunction:!1,sourceCol:A?void 0:D,sourceRowNode:M}}return{value:y(fT($.map(({value:F})=>Number(F)))),fromUserFunction:!1}}clearValues(){this.clearMarkedPath(),this.clearCellValues(),this.lastCellMarked=void 0,super.clearValues()}clearMarkedPath(){for(let z of this.markedCells){if(!z.isAlive())continue;let{comp:J}=z;J.toggleCss("ag-selection-fill-top",!1),J.toggleCss("ag-selection-fill-right",!1),J.toggleCss("ag-selection-fill-bottom",!1),J.toggleCss("ag-selection-fill-left",!1)}this.markedCells.length=0,this.isUp=!1,this.isLeft=!1,this.isReduce=!1}clearCellValues(){this.cellValues.length=0}markPathFrom(z,J){if(this.clearMarkedPath(),this.clearCellValues(),this.dragAxis==="y"){if(a(J,z))return;let Q=W0(J,z),{rangeStartRow:Z,rangeEndRow:$}=this;if(Q&&(J.rowPinned==Z.rowPinned&&J.rowIndex>=Z.rowIndex||Z.rowPinned!=$.rowPinned&&J.rowPinned==$.rowPinned&&J.rowIndex<=$.rowIndex))this.reduceVertical(z,J),this.isReduce=!0;else this.extendVertical(z,J,Q),this.isReduce=!1}else{let Q=z.column,Z=J.column;if(Q===Z)return;let $=this.beans.visibleCols.allCols,X=$.indexOf(Q),Y=$.indexOf(Z);if(Y<=X&&Y>=$.indexOf(this.cellRange.columns[0]))this.reduceHorizontal(z,J),this.isReduce=!0;else this.extendHorizontal(z,J,Y=4),z.toggleCss(PT,X),o6(Z,$>0?!0:void 0),z.toggleCss(TT,this.isSingleCell()),this.updateRangeBorders(),this.refreshRangeStyleAndHandle()}updateRangeBorders(){let z=this.getRangeBorders(),J=this.isSingleCell(),Q=!J&&z.top,Z=!J&&z.right,$=!J&&z.bottom,X=!J&&z.left,Y=this.cellComp;Y.toggleCss(IT,Q),Y.toggleCss(CT,Z),Y.toggleCss(yT,$),Y.toggleCss(bT,X)}isSingleCell(){let{rangeSvc:z}=this;return this.rangeCount===1&&!!z&&!z.isMoreThanOneCell()}getHasChartRange(){let{rangeSvc:z}=this;if(!this.rangeCount||!z)return!1;let J=z.getCellRanges();return J.length>0&&J.every((Q)=>[p4.DIMENSION,p4.VALUE].includes(Q.type))}updateRangeBordersIfRangeCount(){if(this.rangeCount>0)this.updateRangeBorders(),this.refreshRangeStyleAndHandle()}getRangeBorders(){let z=this.beans.gos.get("enableRtl"),J=!1,Q=!1,Z=!1,$=!1,{rangeSvc:X,beans:{visibleCols:Y},cellCtrl:{cellPosition:q}}=this,G=q.column,U=X.getCellRanges().filter((W)=>X.isCellInSpecificRange(q,W));if(!U.length)return{top:J,right:Q,bottom:Z,left:$};let _,H;if(z)_=Y.getColAfter(G),H=Y.getColBefore(G);else _=Y.getColBefore(G),H=Y.getColAfter(G);if(!_)$=!0;if(!H)Q=!0;for(let W=0;W=0;Z--){let $=Q[Z],X=$.colorClass;if(!X)continue;if(z.isCellInSpecificRange(this.cellCtrl.cellPosition,$))return X}return null}refreshHandleColor(z){let J=this.selectionHandle?.getGui?.(),Q=z?.colorClass??null;if(!J){this.handleColorClass=null;return}if(this.handleColorClass&&this.handleColorClass!==Q)J.classList.remove(this.handleColorClass);if(Q)J.classList.add(Q);else if(this.handleColorClass)J.classList.remove(this.handleColorClass);this.handleColorClass=Q??null}getRangeForHandle(){let{gos:z,editSvc:J}=this.beans,Q=this.rangeSvc,Z=Q.getCellRanges(),$=Z.length;if(this.rangeCount<1||$<1)return null;let X=J?.isRangeSelectionEnabledWhileEditing(),Y=X?Z:[y(Z)];for(let q of Y){let{cellPosition:G,column:U}=this.cellCtrl,_=mY(z)&&!U.isSuppressFillHandle(),H=xT(z),B=!J?.isEditing(this.cellCtrl,{withOpenEditor:!0})&&(X||$===1&&(_||H));if(this.hasChartRange)B=q.type===p4.VALUE;if(B&&q.endRow!=null&&Q.isContiguousRange(q)&&Q.isBottomRightCell(q,G))return q}return null}addSelectionHandle(z){let{beans:J}=this,Q=J.editSvc?.isRangeSelectionEnabledWhileEditing(),Z=z.type,X=!Q&&mY(J.gos)&&d(Z)?0:1;if(this.selectionHandle&&this.selectionHandle.getType()!==X)this.selectionHandle=J.context.destroyBean(this.selectionHandle);if(!this.selectionHandle){let Y=J.registry.createDynamicBean(X===0?"fillHandle":"rangeHandle",!1);if(Y)this.selectionHandle=J.context.createBean(Y)}this.selectionHandle?.refresh(this.cellCtrl,z)}destroy(){this.unsetComp()}},NT=class extends S{constructor(z){super();this.eContainer=z}postConstruct(){let{beans:z,gos:J,eContainer:Q}=this,Z=z.rangeSvc,$={eElement:Q,onDragStart:Z.onDragStart.bind(Z),onDragStop:Z.onDragStop.bind(Z),onDragging:Z.onDragging.bind(Z)},X=z.dragSvc,Y=X.addDragSource.bind(X,$),q=X.removeDragSource.bind(X,$);if(this.addManagedPropertyListeners(["enableRangeSelection","cellSelection"],()=>{if(n0(J))Y();else q()}),this.addDestroyFunc(q),n0(J))Y()}},gT=class extends S{constructor(z,J){super();this.column=z,this.eGui=J}postConstruct(){this.addManagedElementListeners(this.eGui,{click:(z)=>z&&this.onClick(z)})}onClick(z){this.beans.rangeSvc?.handleColumnSelection(this.column,z)}},hT=class extends S{constructor(z,J){super();this.column=z,this.comp=J,this.columnMap=new Map,this.isActive=!1,this.resetColumnMap()}postConstruct(){this.addManagedPropertyListener("cellSelection",()=>{this.refreshActive()}),this.refreshActive(),this.setupRangeHeaderHighlight()}resetColumnMap(){this.columnMap.clear();let z;if(this.column.isColumn)z=[this.column];else z=this.column.getDisplayedLeafColumns();for(let J of z)this.columnMap.set(J,!1)}refreshActive(){let{gos:z,rangeSvc:J}=this.beans,Q=z.get("cellSelection");this.isActive=!!(Q&&J&&typeof Q==="object"&&Q.enableHeaderHighlight)}setupRangeHeaderHighlight(){let z=this.onRangeSelectionChanged.bind(this);this.addManagedEventListeners({rangeSelectionChanged:z,columnPinned:z,columnMoved:z,columnGroupOpened:z}),z()}onRangeSelectionChanged(){if(!this.isActive)return;this.resetColumnMap();let z=this.beans.rangeSvc.getCellRanges(),J=!1,Q=!0;for(let Z of z){if(J)break;for(let $ of Z.columns)if(this.columnMap.has($))this.columnMap.set($,!0),J||(J=!0)}for(let Z of Array.from(this.columnMap.values()))if(Z===!1){Q=!1;break}this.comp.toggleCss("ag-header-range-highlight",J&&Q)}destroy(){super.destroy(),this.comp=null,this.column=null}},uT=class extends S{constructor(){super(...arguments);this.beanName="rangeSvc",this.rangeSelectionExtensions=[],this.cellRanges=[],this.bodyScrollListener=this.onBodyScroll.bind(this),this.dragging=!1,this.intersectionRange=!1,this.columnRangeSelectionCtx={}}wireBeans(z){this.rowModel=z.rowModel,this.dragSvc=z.dragSvc,this.colModel=z.colModel,this.visibleCols=z.visibleCols,this.cellNavigation=z.cellNavigation,this.ctrlsSvc=z.ctrlsSvc}postConstruct(){let z=this.onColumnsChanged.bind(this),J=()=>this.removeAllCellRanges(),Q=this.refreshLastRangeStart.bind(this);this.addManagedEventListeners({newColumnsLoaded:z,columnVisible:z,columnValueChanged:z,columnPivotModeChanged:J,columnRowGroupChanged:J,columnPivotChanged:J,columnGroupOpened:Q,columnMoved:Q,columnPinned:Q}),this.ctrlsSvc.whenReady(this,(Z)=>{let $=Z.gridBodyCtrl;this.autoScrollService=new EJ({scrollContainer:$.eBodyViewport,scrollAxis:"xy",getVerticalPosition:()=>$.scrollFeature.getVScrollPosition().top,setVerticalPosition:(X)=>$.scrollFeature.setVerticalScrollPosition(X),getHorizontalPosition:()=>$.scrollFeature.getHScrollPosition().left,setHorizontalPosition:(X)=>$.scrollFeature.setHorizontalScrollPosition(X),shouldSkipVerticalScroll:()=>!A0(this.gos,"normal"),shouldSkipHorizontalScroll:()=>!$.scrollFeature.isHorizontalScrollShowing()})})}registerRangeSelectionExtension(z){if(this.rangeSelectionExtensions.includes(z))return;this.rangeSelectionExtensions.push(z)}unregisterRangeSelectionExtension(z){X0(this.rangeSelectionExtensions,z)}shouldSuppressRangeSelection(z){return this.rangeSelectionExtensions.some((J)=>J.shouldSuppressRangeSelection?.(z))}shouldSkipColumn(z){return this.rangeSelectionExtensions.some((J)=>J.shouldSkipColumn?.(z))}isAllColumnsSelectionCell(z){return this.rangeSelectionExtensions.some((J)=>J.isAllColumnsSelectionCell?.(z))}isAllColumnsRange(z,J){return this.rangeSelectionExtensions.some((Q)=>Q.isAllColumnsRange?.(z,J))}updateSelectionModeForCell(z){this.setSelectionMode(this.isAllColumnsSelectionCell(z))}onDragStart(z){let J=this.gos,Q=z.target;if(!n0(J)||aZ(J,Q)?.isSuppressMouseEvent(z))return;if(this.shouldSuppressRangeSelection(Q))return;let{shiftKey:Z}=z,$=this.isMultiRange(z),X=Z&&!!this.cellRanges?.length;if(!$&&(!X||P(y(this.cellRanges).type)))this.removeAllCellRanges(!0);let Y=this.dragSvc.startTarget;if(Y)this.updateValuesOnMove(Y);if(!this.lastCellHovered)return;if(this.dragging=!0,this.lastMouseEvent=z,this.intersectionRange=$&&this.getCellRangeCount(this.lastCellHovered)>1,!X)this.setNewestRangeStartCell(this.lastCellHovered);if(this.cellRanges.length>0)this.draggingRange=y(this.cellRanges);else{let q={rowIndex:this.lastCellHovered.rowIndex,rowPinned:this.lastCellHovered.rowPinned},G=this.getColumnsFromModel([this.lastCellHovered.column]);if(!G?.length)return;this.draggingRange={startRow:q,endRow:q,columns:G,startColumn:this.newestRangeStartCell.column},this.cellRanges.push(this.draggingRange)}this.ctrlsSvc.getGridBodyCtrl().eBodyViewport.addEventListener("scroll",this.bodyScrollListener,{passive:!0}),this.dispatchChangedEvent(!0,!1,this.draggingRange.id)}onDragging(z){let{dragging:J,lastCellHovered:Q,newestRangeStartCell:Z,autoScrollService:$,cellHasChanged:X}=this;if(!J||!z)return;this.updateValuesOnMove(z.target),this.lastMouseEvent=z;let Y=(B)=>Q&&Q.rowPinned===B&&Z.rowPinned===B,q=Y("top")||Y("bottom");if($.check(z,q),!X||!Q)return;let G=Z?.column,U=Q?.column,_=this.calculateColumnsBetween(G,U);if(!_)return;let{rowIndex:H,rowPinned:W}=Q;this.draggingRange.endRow={rowIndex:H,rowPinned:W},this.draggingRange.columns=_,this.dispatchChangedEvent(!1,!1,this.draggingRange.id)}onDragStop(){if(!this.dragging)return;let{id:z}=this.draggingRange;if(this.autoScrollService.ensureCleared(),this.ctrlsSvc.getGridBodyCtrl().eBodyViewport.removeEventListener("scroll",this.bodyScrollListener),this.lastMouseEvent=null,this.dragging=!1,this.draggingRange=void 0,this.lastCellHovered=void 0,this.intersectionRange)this.intersectionRange=!1,this.intersectLastRange();this.dispatchChangedEvent(!1,!0,z)}onColumnsChanged(){this.refreshLastRangeStart();let z=this.visibleCols.allCols;for(let Q of this.cellRanges){let Z=Q.columns;if(Q.columns=Q.columns.filter((X)=>X.isVisible()&&z.indexOf(X)!==-1),!Z0(Z,Q.columns))this.dispatchChangedEvent(!1,!0,Q.id)}let J=this.cellRanges.length;if(this.cellRanges=this.cellRanges.filter((Q)=>Q.columns.length>0),J>this.cellRanges.length)this.dispatchChangedEvent(!1,!0)}refreshLastRangeStart(){let z=y(this.cellRanges);if(!z)return;this.refreshRangeStart(z)}isContiguousRange(z){let J=z.columns;if(!J.length)return!1;let Q=this.visibleCols.allCols,Z=J.map(($)=>Q.indexOf($)).sort(($,X)=>$-X);return y(Z)-Z[0]+1===J.length}getRangeStartRow(z){if(z.startRow&&z.endRow)return W0(z.startRow,z.endRow)?z.startRow:z.endRow;return{rowIndex:0,rowPinned:(this.beans.pinnedRowModel?.getPinnedTopRowCount()??0)>0?"top":null}}getRangeEndRow(z){if(z.startRow&&z.endRow)return W0(z.startRow,z.endRow)?z.endRow:z.startRow;let J=this.beans.pinnedRowModel?.getPinnedBottomRowCount()??0;if(J>0)return{rowIndex:J-1,rowPinned:"bottom"};return{rowIndex:this.rowModel.getRowCount()-1,rowPinned:null}}getRangeRowCount(z){let J=this.beans,Q=this.getRangeStartRow(z),Z=this.getRangeEndRow(z),$=cZ(J,Q);return cZ(J,Z)-$+1}handleCellMouseDown(z,J){let Q=z.ctrlKey||z.metaKey;this.handleCellSelectionInput(J,{target:z.target,shiftKey:z.shiftKey,isRightClick:jZ(this.beans,z),isMultiRange:this.isMultiRange(z),isMultiKey:Q,preventDefault:()=>z.preventDefault()})}handleCellKeyboardSelect(z,J){let Q=z.ctrlKey||z.metaKey;this.handleCellSelectionInput(J,{target:z.target,shiftKey:z.shiftKey,isRightClick:!1,isMultiRange:this.isMultiRangeForKeyState(Q),isMultiKey:Q,preventDefault:()=>z.preventDefault()})}handleCellSelectionInput(z,J){let{target:Q,shiftKey:Z,isRightClick:$,isMultiRange:X,isMultiKey:Y,preventDefault:q}=J;if(this.shouldSuppressRangeSelection(Q))return;let G=this.isAllColumnsSelectionCell(z);if(G)q();if(Z)return this.extendLatestRangeToCell(z);if(G&&$)return;this.updateSelectionModeForCell(z);let U=this.calculateColumnsBetween(z.column,z.column);if(!U)return;let _=G?this.findContainingRange({columns:U,startRow:z,endRow:z}):void 0;if(G&&!!_&&X&&Y&&_)this.removeRowFromAllColumnsRange(z,_);else this.setRangeToCell(z,X)}isMultiRange(z){return this.isMultiRangeForKeyState(z.ctrlKey||z.metaKey)}isMultiRangeForKeyState(z){let{editingWithRanges:J,allowMulti:Q}=this.getMultiRangeContext();return J||(Q?z:!1)}getMultiRangeContext(){let{gos:z,editSvc:J}=this.beans,Q=!!J?.isEditing()&&!!J?.isRangeSelectionEnabledWhileEditing(),Z=D9(z)&&!Q;return{editingWithRanges:Q,suppressMultiRanges:Z,allowMulti:!Z}}removeRowFromAllColumnsRange(z,J){let{beans:Q,cellRanges:Z}=this,$=w1(Q),X=fz(Q),Y=this.getRangeStartRow(J),q=this.getRangeEndRow(J);if(!Y&&a($,z))CJ(J,M0(Q,$),"top");else if(!q&&a(X,z))CJ(J,d0(Q,X),"bottom");else if(a(Y,q))X0(Z,J);else if(a(Y,z))CJ(J,M0(Q,z),"top");else if(a(q,z))CJ(J,d0(Q,z),"bottom");else{let G=d0(Q,z),U=M0(Q,z);J.startRow=Y,J.endRow=G??void 0,Z.push({...J,startRow:U??void 0,endRow:q})}this.dispatchChangedEvent(!0,!0)}setRangeToCell(z,J=!1){let{gos:Q}=this;if(!n0(Q))return;this.updateSelectionModeForCell(z);let Z=this.calculateColumnsBetween(z.column,z.column);if(!Z)return;let{suppressMultiRanges:$}=this.getMultiRangeContext();if($||!J||d(this.cellRanges))this.removeAllCellRanges(!0);let X={rowIndex:z.rowIndex,rowPinned:z.rowPinned},Y={startRow:X,endRow:X,columns:Z,startColumn:z.column},q=this.ensureRangeStartColumn(Y);if(!q)return;this.cellRanges.push(Y),this.setNewestRangeStartCell({...z,column:q}),this.onDragStop(),this.dispatchChangedEvent(!0,!0)}getRangeLastColumn(z){let J=z.columns[0],Q=y(z.columns);return this.newestRangeStartCell?.column===J?Q:J}extendRangeRowCountBy(z,J){let{beans:Q}=this,{startRow:Z,endRow:$}=z;if(!Z||!$)return;let X=0,Y,q=W0($,Z);if(q)Y=Z;else Y=$;let G=J>0?M0:d0,U=Math.abs(J);while(XJ.indexOf(Z)).filter((Z)=>Z>-1).sort((Z,$)=>Z-$);return{left:J[Q[0]],right:J[y(Q)]}}extendLatestRangeInDirection(z){if(this.isEmpty()||!this.newestRangeStartCell)return;let J=z.key,Q=z.ctrlKey||z.metaKey,Z=y(this.cellRanges),$=this.newestRangeStartCell,X=Z.endRow.rowIndex,Y=Z.endRow.rowPinned,G={column:this.getRangeLastColumn(Z),rowIndex:X,rowPinned:Y},U=this.cellNavigation.getNextCellToFocus(J,G,Q);if(!U)return;if(this.shouldSkipColumn(U.column))return;return this.setCellRange({rowStartIndex:$.rowIndex,rowStartPinned:$.rowPinned,rowEndIndex:U.rowIndex,rowEndPinned:U.rowPinned,columnStart:$.column,columnEnd:U.column}),U}setCellRange(z){if(!n0(this.gos))return;this.removeAllCellRanges(!0),this.addCellRange(z)}setCellRanges(z){if(Z0(this.cellRanges,z))return;if(!this.verifyCellRanges(this.gos))return;this.setSelectionMode(!1),this.removeAllCellRanges(!0);let J=this.getColumnsFromModel(this.visibleCols.allCols)??[],Q=!1;for(let Z of z){if(Z.columns&&Z.startRow){let $=this.getColumnsFromModel(Z.columns);if(!$||$.length===0)continue;Z.columns=$;let{startRow:X}=Z;this.setNewestRangeStartCell({rowIndex:X.rowIndex,rowPinned:X.rowPinned,column:Z.columns[0]})}if(!Q&&J.length>0&&this.isAllColumnsRange(Z,J))Q=!0;this.cellRanges.push(Z)}this.setSelectionMode(Q),this.dispatchChangedEvent(!1,!0)}clearCellRangeCellValues(z){let{beans:J,eventSvc:Q}=this,{cellEventSource:Z="rangeSvc",dispatchWrapperEvents:$,wrapperEventSource:X="deleteKey",restoreSourceInBatch:Y}=z,{cellRanges:q}=z;if($)Q.dispatchEvent({type:"cellSelectionDeleteStart",source:X}),Q.dispatchEvent({type:"rangeDeleteStart",source:X});if(!q)q=this.cellRanges;let{valueSvc:G,editSvc:U}=J,_=!!U?.isBatchEditing(),{changeDetectionSvc:H}=J;H?.beginDeferred();try{this.forEachEditableCellInRanges(q,(W,B)=>{if(Y&&_){U?.batchResetToSourceValue({rowNode:W,column:B});return}let E=G.getDeleteValue(B,W);W.setDataValue(B,E,Z)})}finally{H?.endDeferred()}if($)Q.dispatchEvent({type:"cellSelectionDeleteEnd",source:X}),Q.dispatchEvent({type:"rangeDeleteEnd",source:X})}createCellRangeFromCellRangeParams(z){return this.createPartialCellRangeFromRangeParams(z,!1)}createPartialCellRangeFromRangeParams(z,J){let{columns:Q,columnStart:Z,columnEnd:$,rowStartIndex:X,rowStartPinned:Y,rowEndIndex:q,rowEndPinned:G}=z,U=this.getColumnsFromParams(Q,Z,$);if(!U||!J&&U.columns.length===0)return;let{columns:_,startsOnTheRight:H}=U,W=cY(X,Y),B=cY(q,G);return{startRow:W,endRow:B,columns:_,startColumn:this.getColumnFromModel(Z)??(H?y(_):_[0])}}addCellRange(z){let J=this.gos;if(!n0(J)||!this.verifyCellRanges(J))return;this.setSelectionMode(!1);let Q=this.createCellRangeFromCellRangeParams(z);if(Q){if(Q.startRow)this.setNewestRangeStartCell({rowIndex:Q.startRow.rowIndex,rowPinned:Q.startRow.rowPinned,column:Q.startColumn});return this.cellRanges.push(Q),this.dispatchChangedEvent(!1,!0,Q.id),Q}}getCellRanges(){return this.cellRanges}isEmpty(){return this.cellRanges.length===0}isMoreThanOneCell(){let z=this.cellRanges.length;if(z===0)return!1;if(z>1)return!0;let J=this.cellRanges[0],Q=this.getRangeStartRow(J),Z=this.getRangeEndRow(J);return Q.rowPinned!==Z.rowPinned||Q.rowIndex!==Z.rowIndex||J.columns.length!==1}areAllRangesAbleToMerge(){let z=new Map;if(this.cellRanges.length<=1)return!0;for(let Z of this.cellRanges)this.forEachRowInRange(Z,($)=>{let X=`${$.rowPinned||"normal"}_${$.rowIndex}`,Y=z.get(X),q=Z.columns.map((G)=>G.getId());if(Y){let G=q.filter((U)=>Y.indexOf(U)===-1);Y.push(...G)}else z.set(X,q)});let Q;for(let Z of z.values()){let $=Z.sort().join();if(Q===void 0){Q=$;continue}if(Q!==$)return!1}return!0}removeAllCellRanges(z){if(this.isEmpty())return;if(this.onDragStop(),this.cellRanges.length=0,!z)this.dispatchChangedEvent(!1,!0)}isCellInAnyRange(z){return this.getCellRangeCount(z)>0}isCellInSpecificRange(z,J){let Q=J.columns?.includes(z.column),Z=this.isRowInRange(z,J);return Q&&Z}isColumnInAnyRange(z){let{beans:J}=this,Q=w1(J),Z=fz(J);if(!Q||!Z)return!1;let $=z.isColumn?[z]:z.getDisplayedLeafColumns();return this.findContainingRange({columns:$,startRow:Q,endRow:Z},!0)!=null}findContainingRange({columns:z,startRow:J,endRow:Q},Z=!1){let $=this.cellRanges;for(let X=$.length-1;X>=0;X--){let Y=$[X],q=z.every((U)=>Y.columns.includes(U)),G=!1;if(Z)G=a(Y.startRow,J)&&a(Y.endRow,Q);else{let U=J&&this.isRowInRange(J,Y),_=Q&&this.isRowInRange(Q,Y);G=!!U&&!!_}if(q&&G)return Y}}isBottomRightCell(z,J){let Q=this.visibleCols.allCols,Z=z.columns.map((U)=>Q.indexOf(U)).sort((U,_)=>U-_),{startRow:$,endRow:X}=z,Y=W0($,X)?X:$,q=Q.indexOf(J.column)===y(Z),G=J.rowIndex===Y.rowIndex&&q0(J.rowPinned)===q0(Y.rowPinned);return q&&G}getCellRangeCount(z){return this.cellRanges.filter((J)=>this.isCellInSpecificRange(z,J)).length}isRowInRange(z,J){let Q=this.getRangeStartRow(J),Z=this.getRangeEndRow(J),$=a(z,Q),X=a(z,Z);if($||X)return!0;let Y=!W0(z,Q),q=W0(z,Z);return Y&&q}intersectLastRange(z){let{editingWithRanges:J,suppressMultiRanges:Q}=this.getMultiRangeContext();if(J||Q||z&&this.dragging||this.isEmpty())return;let Z=y(this.cellRanges),$=this.getRangeStartRow(Z),X=this.getRangeEndRow(Z),Y=[];for(let q of this.cellRanges.slice(0,-1)){let G=this.getRangeStartRow(q),U=this.getRangeEndRow(q),_=q.columns,H=_.filter((B)=>Z.columns.indexOf(B)===-1);if(H.length===_.length){Y.push(q);continue}if(W0(X,G)||W0(U,$)){Y.push(q);continue}let W=Y.length;if(W0(G,$)){let B={columns:[..._],startColumn:Z.startColumn,startRow:{...G},endRow:d0(this.beans,$)};Y.push(B)}if(H.length>0){let B={columns:H,startColumn:H.includes(Z.startColumn)?Z.startColumn:H[0],startRow:mT([{...$},{...G}]),endRow:cT([{...X},{...U}])};Y.push(B)}if(W0(X,U))Y.push({columns:[..._],startColumn:Z.startColumn,startRow:M0(this.beans,X),endRow:{...U}});if(Y.length-W===1)Y[Y.length-1].id=q.id}if(this.cellRanges=Y,z)this.dispatchChangedEvent(!1,!0)}createRangeHighlightFeature(z,J,Q){z.createManagedBean(new hT(J,Q))}setSelectionMode(z){this.selectionMode=z?1:0}refreshRangeStart(z){let{columns:J}=z,Q=this.ensureRangeStartColumn(z);if(!Q)return;let Z=(G,U)=>{let _=z.columns.filter((H)=>H!==G);if(G)z.startColumn=G,z.columns=U?[G,..._]:[..._,G];else z.columns=_},{left:$,right:X}=this.getRangeEdgeColumns(z);if(Q===J[0]&&Q!==$){Z($,!0);return}if(Q===y(J)&&Q===X)Z(X,!1)}setNewestRangeStartCell(z){this.newestRangeStartCell=z}getColumnsFromParams(z,J,Q){let Z=!z&&!J&&!Q,$,X=!1;if(Z||z)$=this.getColumnsFromModel(Z?void 0:z);else if(J&&Q){if($=this.calculateColumnsBetween(J,Q),$?.length)X=$[0]!==this.getColumnFromModel(J)}return $?{columns:$,startsOnTheRight:X}:void 0}verifyCellRanges(z){let{suppressMultiRanges:J}=this.getMultiRangeContext(),Q=L9(z)&&J&&this.cellRanges.length>1;if(Q)V(93);return!Q}forEachRowInRange(z,J){let Q=this.getRangeStartRow(z),Z=this.getRangeEndRow(z),$=Q;while($){if(J($),a($,Z))break;$=M0(this.beans,$)}}forEachEditableCellInRanges(z,J){let{beans:Q}=this;for(let Z of z)this.forEachRowInRange(Z,($)=>{let X=S0(Q,$);if(!X)return;for(let Y=0;Y0,U=J.ctrlKey||J.metaKey,_=!q||U,H=w1(Z),W=fz(Z);if(!H||!W)return;if(J.key===k.ENTER)J.preventDefault();if(J.shiftKey){let E=$.root;if(!E)return;let K=z.isColumn?z:y(z.getLeafColumns()),F=this.findContainingRange({columns:[E],startRow:H,endRow:W},!0);if(!F){X0(X,$.lastCellRange),this.selectColumns(this.calculateColumnsBetween(E,K),H,W);return}this.updateRangeRowBoundary({cellRange:F,boundary:"end",cellPosition:{column:K,...W}});return}if(G&&(Y||!U&&!q))this.removeAllCellRanges(!0);let B=(E,K)=>{let F=this.findContainingRange({columns:E,startRow:H,endRow:W},!0);if(F&&_)this.deselectColumnsFromRange(F,E);else{let L=this.selectColumns(E,H,W);if(L)$.lastCellRange=L}$.root=K};if(z.isColumn)B([z],z);else{let E=z.getDisplayedLeafColumns();B(E,E[0])}}deselectColumnsFromRange(z,J){if(P2(z.columns,J),J.includes(z.startColumn))z.startColumn=z.columns[0];if(z.columns.length===0)X0(this.cellRanges,z);this.dispatchChangedEvent(!0,!0)}selectColumns(z,J,Q){return this.addCellRange({columns:z,columnStart:z[0],columnEnd:y(z),rowStartIndex:J.rowIndex,rowStartPinned:J.rowPinned,rowEndIndex:Q.rowIndex,rowEndPinned:Q.rowPinned})}};function cY(z,J){return z!=null?{rowIndex:z,rowPinned:J}:void 0}function mT(z){let J;for(let Q of z)if(J===void 0||W0(J,Q))J=Q;return J}function cT(z){let J;for(let Q of z)if(J===void 0||W0(Q,J))J=Q;return J}function iT(z,J){let{startRow:Q,endRow:Z}=z,$=W0(Q,Z)?Z:Q,X=J.rowIndex===$.rowIndex&&J.rowPinned===$.rowPinned,Y=z.columns[0],q=y(z.columns),G=z.startColumn===Y?q:Y;return J.column===G&&X}function CJ(z,J,Q){let Z;if(Q==="top")Z=!z.startRow||!z.endRow||W0(z.startRow,z.endRow)?"startRow":"endRow";else Z=!z.startRow||!z.endRow||W0(z.startRow,z.endRow)?"endRow":"startRow";z[Z]=J??void 0}var QG={moduleName:"CellSelection",version:$0,beans:[uT],dynamicBeans:{fillHandle:VT,rangeHandle:RT},apiFunctions:{getCellRanges:jT,addCellRange:OT,clearRangeSelection:hY,clearCellSelection:hY},dependsOn:[C0,Y1,KJ],css:[AT]};function pT(z){return z.colModel.isPivotMode()}function nT(z,J,Q){return z.pivotResultCols?.lookupPivotResultCol(J,Q)??null}function dT(z,J){z.valueColsSvc?.setColumns(J,"api")}function rT(z){return z.valueColsSvc?.columns??[]}function tT(z,J){z.valueColsSvc?.removeColumns(J,"api")}function sT(z,J){z.valueColsSvc?.addColumns(J,"api")}function lT(z,J){z.pivotColsSvc?.setColumns(J,"api")}function aT(z,J){z.pivotColsSvc?.removeColumns(J,"api")}function oT(z,J){z.pivotColsSvc?.addColumns(J,"api")}function eT(z){return z.pivotColsSvc?.columns??[]}function zv(z,J){z.pivotResultCols?.setPivotResultCols(J,"api")}function Jv(z){let J=z.pivotResultCols?.getPivotResultCols();return J?J.list:null}var iY="PivotRowTotal_",Qv=({headerName:z},{headerName:J})=>{if(z&&!J)return 1;else if(!z&&J)return-1;else if(!z&&!J)return 0;if(zJ)return 1;else return 0},Zv=(z)=>(J,Q)=>z(J.headerName,Q.headerName),$v=class extends S{constructor(){super(...arguments);this.beanName="pivotColDefSvc"}wireBeans(z){this.colModel=z.colModel,this.pivotColsSvc=z.pivotColsSvc,this.valueColsSvc=z.valueColsSvc,this.colNames=z.colNames}postConstruct(){let z=()=>this.gos.get("serverSidePivotResultFieldSeparator")??"_";this.fieldSeparator=z(),this.addManagedPropertyListener("serverSidePivotResultFieldSeparator",()=>{this.fieldSeparator=z()});let J=()=>this.gos.get("pivotDefaultExpanded");this.pivotDefaultExpanded=J(),this.addManagedPropertyListener("pivotDefaultExpanded",()=>{this.pivotDefaultExpanded=J()})}createPivotColumnDefs(z){let J=this.createPivotColumnsFromUniqueValues(z);function Q($,X=[]){return $.forEach((Y)=>{if(Y.children!==void 0)Q(Y.children,X);else X.push(Y)}),X}let Z=Q(J);return this.addRowGroupTotals(J,Z),this.addExpandablePivotGroups(J,Z),this.addPivotTotalsToGroups(J,Z),J}createPivotColumnsFromUniqueValues(z){let J=this.pivotColsSvc?.columns??[],Q=J.length;return this.recursivelyBuildGroup(0,z,[],Q,J)}recursivelyBuildGroup(z,J,Q,Z,$){if(z>=Z)return this.buildMeasureCols(Q);let{pivotComparator:X}=$[z].getColDef(),Y=X?Zv(X):Qv,q=this.valueColsSvc?.columns;if(q?.length===1&&this.gos.get("removePivotHeaderRowWhenSingleValueColumn")&&z===Z-1){let U=[];for(let _ of J.keys()){let H=[...Q,_],W=this.createColDef(q[0],_,H);W.columnGroupShow="open",U.push(W)}return U.sort(Y),U}let G=[];for(let U of J.keys()){let _=this.pivotDefaultExpanded===-1||z{let Z=this.colNames.getDisplayNameForColumn(Q,"header"),$=this.createColDef(Q,Z,z);return $.columnGroupShow="open",$})}addExpandablePivotGroups(z,J){let Q=this.gos.get("suppressExpandablePivotGroups");if(Q||this.gos.get("pivotColumnGroupTotals"))return;let Z=($,X,Y)=>{if("children"in $){let{valueColsSvc:U}=this,{columns:_=[]}=U??{},H=new Map;$.children.forEach((E)=>{Z(E,X,H)});let W=!$.children.some((E)=>E.children),B=W&&_.length===1&&this.gos.get("removePivotHeaderRowWhenSingleValueColumn");for(let E of _){let K=this.colNames.getDisplayNameForColumn(E,"header"),F=this.createColDef(E,K,$.pivotKeys);if(F.pivotTotalColumnIds=H.get(E.getColId()),F.columnGroupShow=!Q?"closed":"open",F.aggFunc=E.getAggFunc(),!W||B)$.children.push(F),X.push(F)}this.merge(Y,H);return}if(!$.pivotValueColumn)return;let q=$.pivotValueColumn.getColId();if(Y.has(q))Y.get(q).push($.colId);else Y.set(q,[$.colId])};z.forEach(($)=>{Z($,J,new Map)})}addPivotTotalsToGroups(z,J){if(!this.gos.get("pivotColumnGroupTotals"))return;let Q=this.gos.get("pivotColumnGroupTotals")==="after",Z=this.valueColsSvc?.columns,$=Z?.map((X)=>X.getAggFunc());if(!$||$.length<1||!this.sameAggFuncs($))return;if(Z){let X=Z[0];z.forEach((Y)=>{this.recursivelyAddPivotTotal(Y,J,X,Q)})}}recursivelyAddPivotTotal(z,J,Q,Z){let $=z;if(!$.children){let Y=z;return Y.colId?[Y.colId]:null}let X=[];if($.children.forEach((Y)=>{let q=this.recursivelyAddPivotTotal(Y,J,Q,Z);if(q)X=X.concat(q)}),$.children.length>1){let q=this.getLocaleTextFunc()("pivotColumnGroupTotals","Total"),G=this.createColDef(Q,q,z.pivotKeys,!0);G.pivotTotalColumnIds=X,G.aggFunc=Q.getAggFunc(),G.columnGroupShow=this.gos.get("suppressExpandablePivotGroups")?"open":void 0;let U=z.children;if(Z)U.push(G);else U.unshift(G);J.push(G)}return X}addRowGroupTotals(z,J){if(!this.gos.get("pivotRowTotals"))return;let Q=this.gos.get("pivotRowTotals")==="after",$=(this.valueColsSvc?.columns??[]).slice();if(!Q)$.reverse();let X=$.length>1||!this.gos.get("removePivotHeaderRowWhenSingleValueColumn");for(let Y=0;Y<$.length;Y++){let q=$[Y],G=this.colNames.getDisplayNameForColumn(q,"header"),U=this.createColDef(q,G,[]),_=[];for(let W=0;WX.data?.[X.colDef.field],$.pivotKeys=Q,$.pivotValueColumn=z,$.filter===!0)$.filter="agNumberColumnFilter";return $}sameAggFuncs(z){if(z.length==1)return!0;for(let J=1;J{let X=[...z.has(Z)?z.get(Z):[],...Q];z.set(Z,X)})}generateColumnGroupId(z){return`pivotGroup_${(this.pivotColsSvc?.columns??[]).map((Q)=>Q.getColId()).join("-")}_${z.join("-")}`}generateColumnId(z,J){return`pivot_${(this.pivotColsSvc?.columns??[]).map((Z)=>Z.getColId()).join("-")}_${z.join("-")}_${J}`}createColDefsFromFields(z){let J=new Map;for(let $=0;${let G=[];for(let[H,W]of Y){let B=Q(`${$}${this.fieldSeparator}${H}`,H,W,q+1);G.push(B)}if(G.length===0){let H=this.colModel.getColDefCol(X);if(H){let B=this.colNames.getDisplayNameForColumn(H,"header")??X,E=this.createColDef(H,B,void 0,!1);return E.colId=$,E.aggFunc=H.getAggFunc(),E.valueGetter=(K)=>K.data?.[$],E}return{colId:$,headerName:X,valueGetter:(B)=>B.data?.[$]}}if(this.gos.get("removePivotHeaderRowWhenSingleValueColumn")&&G.length===1&&"colId"in G[0])return G[0].headerName=X,G[0];return{openByDefault:this.pivotDefaultExpanded===-1||q{$.forEach((X)=>{if(P(X.children)){let q=X;if(Q)Q(q);Z(q.children)}else{let q=X;if(J)J(q)}})};if(z)Z(z)}},pY="Exceeded maximum allowed pivot column count.",NJ=(z)=>{let J={};return z.forEach((Q,Z)=>J[Z]=Q instanceof Map?NJ(Q):Q),J},Yv=class extends S{constructor(){super(...arguments);this.beanName="pivotStage",this.step="pivot",this.refreshProps=["removePivotHeaderRowWhenSingleValueColumn","pivotRowTotals","pivotColumnGroupTotals","suppressExpandablePivotGroups"],this.uniqueValues=new Map,this.lastTimeFailed=!1,this.maxUniqueValues=-1,this.currentUniqueCount=0}wireBeans(z){this.valueSvc=z.valueSvc,this.colModel=z.colModel,this.pivotResultCols=z.pivotResultCols,this.rowGroupColsSvc=z.rowGroupColsSvc,this.valueColsSvc=z.valueColsSvc,this.pivotColsSvc=z.pivotColsSvc,this.pivotColDefSvc=z.pivotColDefSvc}execute(z){if(this.colModel.isPivotActive())return this.executePivotOn(z);else return this.executePivotOff()}executePivotOff(){if(this.aggregationColumnsHashLastTime=null,this.uniqueValues=new Map,this.pivotResultCols.isPivotResultColsPresent())return this.pivotResultCols.setPivotResultCols(null,"rowModelUpdated"),!0;return!1}executePivotOn(z){let J=this.valueColsSvc?.columns.length??1,Q=this.gos.get("pivotMaxGeneratedColumns");this.maxUniqueValues=Q===-1?-1:Q/J;let Z;try{Z=this.bucketUpRowNodes(z)}catch(L){if(L.message===pY)return this.pivotResultCols.setPivotResultCols([],"rowModelUpdated"),this.eventSvc.dispatchEvent({type:"pivotMaxColumnsExceeded",message:L.message}),this.lastTimeFailed=!0,!1;throw L}let $=this.setUniqueValues(Z),X=this.valueColsSvc?.columns??[],Y=X.map((L)=>`${L.getId()}-${L.getColDef().headerName}`).join("#"),q=X.map((L)=>L.getAggFunc().toString()).join("#"),G=this.aggregationColumnsHashLastTime!==Y,U=this.aggregationFuncsHashLastTime!==q;this.aggregationColumnsHashLastTime=Y,this.aggregationFuncsHashLastTime=q;let _=(this.rowGroupColsSvc?.columns??[]).map((L)=>L.getId()).join("#"),H=_!==this.groupColumnsHashLastTime;this.groupColumnsHashLastTime=_;let W=this.gos.get("pivotRowTotals"),B=this.gos.get("pivotColumnGroupTotals"),E=this.gos.get("suppressExpandablePivotGroups"),K=this.gos.get("removePivotHeaderRowWhenSingleValueColumn"),F=W!==this.pivotRowTotalsLastTime||B!==this.pivotColumnGroupTotalsLastTime||E!==this.suppressExpandablePivotGroupsLastTime||K!==this.removePivotHeaderRowWhenSingleValueColumnLastTime;if(this.pivotRowTotalsLastTime=W,this.pivotColumnGroupTotalsLastTime=B,this.suppressExpandablePivotGroupsLastTime=E,this.removePivotHeaderRowWhenSingleValueColumnLastTime=K,this.lastTimeFailed||$||G||H||U||F){let L=this.pivotColDefSvc.createPivotColumnDefs(this.uniqueValues);return this.pivotResultCols.setPivotResultCols(L,"rowModelUpdated"),this.lastTimeFailed=!1,!0}return this.lastTimeFailed=!1,!1}setUniqueValues(z){if(!s6(NJ(this.uniqueValues),NJ(z)))return this.uniqueValues=z,!0;return!1}bucketUpRowNodes(z){this.currentUniqueCount=0;let J=new Map;r0(this.beans.rowModel.rootNode,this.beans.rowModel.hierarchical,z,(Z)=>{if(Z.leafGroup)Z.childrenMapped=null});let Q=(Z)=>{if(Z.leafGroup)this.bucketRowNode(Z,J);else{let $=Z.childrenAfterFilter;if($)for(let X=0,Y=$.length;Xthis.maxUniqueValues;if(Y&&W)throw Error(pY)}if(!$.has(H))$.set(H,[]);$.get(H).push(_)}if(Q===J.length-1)return $;let q=new Map;for(let G of $.keys())q.set(G,this.bucketChildren($.get(G),J,Q+1,Z.get(G)));return q}},qv={moduleName:"SharedPivot",version:$0,beans:[Xv,$v,nq],apiFunctions:{isPivotMode:pT,getPivotResultColumn:nT,setValueColumns:dT,getValueColumns:rT,removeValueColumns:tT,addValueColumns:sT,setPivotColumns:lT,removePivotColumns:aT,addPivotColumns:oT,getPivotColumns:eT,setPivotResultColumns:zv,getPivotResultColumns:Jv},dependsOn:[aq,Z5]},ZG={moduleName:"Pivot",version:$0,rowModels:["clientSide"],beans:[Yv],dependsOn:[qv,JT,tJ]};var RN=String.fromCodePoint(31,41150,8291);var $G=[{symbol:"%",fixity:"postfix",precedence:100},{symbol:"-",fixity:"prefix",precedence:90},{symbol:"+",fixity:"prefix",precedence:90},{symbol:"^",fixity:"infix",precedence:80,associativity:"right"},{symbol:"*",fixity:"infix",precedence:70,associativity:"left",isAssociative:!0},{symbol:"/",fixity:"infix",precedence:70,associativity:"left"},{symbol:"+",fixity:"infix",precedence:60,associativity:"left",isAssociative:!0},{symbol:"-",fixity:"infix",precedence:60,associativity:"left"},{symbol:"&",fixity:"infix",precedence:55,associativity:"left",isAssociative:!0},{symbol:"=",fixity:"infix",precedence:50,associativity:"left"},{symbol:"<>",fixity:"infix",precedence:50,associativity:"left"},{symbol:">=",fixity:"infix",precedence:50,associativity:"left"},{symbol:"<=",fixity:"infix",precedence:50,associativity:"left"},{symbol:">",fixity:"infix",precedence:50,associativity:"left"},{symbol:"<",fixity:"infix",precedence:50,associativity:"left"}],nY=new Map;for(let z of $G){let J=nY.get(z.symbol)??[];J.push(z),nY.set(z.symbol,J)}var AN=[...new Set($G.map((z)=>z.symbol))].sort((z,J)=>J.length-z.length);var jN=Symbol("WrappedFunctionMarker");var Gv={column:"bar",groupedColumn:"bar",stackedColumn:"bar",normalizedColumn:"bar",bar:"bar",groupedBar:"bar",stackedBar:"bar",normalizedBar:"bar",line:"line",stackedLine:"line",normalizedLine:"line",scatter:"scatter",bubble:"bubble",pie:"pie",donut:"donut",doughnut:"donut",area:"area",stackedArea:"area",normalizedArea:"area",histogram:"histogram",radarLine:"radar-line",radarArea:"radar-area",nightingale:"nightingale",radialColumn:"radial-column",radialBar:"radial-bar",sunburst:"sunburst",rangeBar:"range-bar",rangeArea:"range-area",boxPlot:"box-plot",treemap:"treemap",heatmap:"heatmap",waterfall:"waterfall",funnel:"funnel",coneFunnel:"cone-funnel",pyramid:"pyramid"},Uv=new Set(["columnLineCombo","areaColumnCombo","customCombo"]);function _v(z){return Uv.has(z)}function Hv(z){return z==="doughnut"?"donut":z}function Wv(z){return Gv[z]}var Bv=["number","category","grouped-category","log","time"];var ON=Bv.reduce((z,J)=>({...z,[J]:{title:{_enabledFromTheme:!0}}}),{});var lJ=(z)=>{return(J)=>{if(J==null)return!0;return z(J)}};var Ev=["doughnut"];function Kv(z){return!!Wv(z)||_v(z)}function Fv(z){return Ev.includes(z)}var TN=lJ((z)=>{if(Kv(z))return!0;if(Fv(z)){let J=Hv(z);return y4(`The chart type '${z}' has been deprecated. Please use '${J}' instead.`),J}return!1}),vN=lJ((z)=>{return typeof z==="object"}),IN=lJ((z)=>{return typeof z==="object"}),CN=lJ((z)=>{return typeof z==="string"||typeof z==="function"});function XG(z){return z.map((J,Q,Z)=>J.map(($,X)=>Z.slice(0,Q+1).reduce((Y,q)=>Y+q[X],0)))}function YG(z){let J=z.map((Q,Z)=>z.reduce(($,X)=>Math.max($,X[Z]),0));return z.map((Q)=>Q.map((Z,$)=>Z/J[$]*19))}var qG=[[1,3,5],[2,6,4],[5,3,1]];var Lv=XG(qG);var yN=YG(Lv);var Dv=qG;var Mv=XG(Dv);var bN=YG(Mv);var kv=["number","category","time","grouped-category"],fv=["angle-category","angle-number","radius-category","radius-number"],xN=[...kv,...fv];var{h:Sv,watch:W7,onUnmount:Vv}=window.SigPro;Y9.registerModules([$Y,BX,ZY,sX,QY,RX,HX,hq,QG,ZG,zG,q7,Rq,Oq,yq,xq,oq,rX,dX,Iq,tX,Pq]);var Wu=(z)=>{let{data:J,options:Q,api:Z,on:$,class:X,style:Y="height: 100%; width: 100%",dark:q}=z,G=null,U=null,_=()=>q!==void 0?typeof q==="function"?q():q:document.documentElement.getAttribute("data-theme")==="dark"||window.matchMedia("(prefers-color-scheme: dark)").matches,H=()=>{if(_())return DJ.withParams({headerFontSize:14,headerVerticalPaddingScale:0.4,rowVerticalPaddingScale:0.4,backgroundColor:"#1d1d1d",foregroundColor:"#ffffff",headerBackgroundColor:"#2a2a2a",headerForegroundColor:"#ffffff",oddRowBackgroundColor:"#262626",borderColor:"#404040",browserColorScheme:"dark"});return DJ.withParams({browserColorScheme:"light",headerFontSize:14,headerVerticalPaddingScale:0.4,rowVerticalPaddingScale:0.4})};return Sv("div",{class:X,style:Y,ref:(B)=>{if(U)U(),U=null;if(G&&!G.isDestroyed()){if(G.destroy(),Z)Z.current=null;G=null}if(!B)return;let E=typeof J==="function"?J():J,K=typeof Q==="function"?Q():Q,F=["onFilterChanged","onModelUpdated","onGridSizeChanged","onFirstDataRendered","onRowValueChanged","onSelectionChanged","onCellClicked","onCellDoubleClicked","onCellValueChanged","onRowClicked","onSortChanged","onContextMenu","onColumnResized","onColumnMoved","onRowDataUpdated","onCellEditingStarted","onCellEditingStopped","onPaginationChanged","onBodyScroll"],L={};F.forEach((R)=>{if($?.[R])L[R]=(O)=>$[R](O)});let D={...K,theme:H(),rowData:E||[],onGridReady:(R)=>{if(G=R.api,Z)Z.current=G;if($?.onGridReady)$.onGridReady(R);if(K?.autoSizeColumns)R.api.autoSizeAllColumns()},...L};G=fJ(B,D);let M=W7(()=>{if(!G||G.isDestroyed())return;let R=typeof J==="function"?J():J;if(Array.isArray(R)){let O=G.getGridOption("rowData");if(R!==O)G.setGridOption("rowData",R)}}),f=W7(()=>{if(!G||G.isDestroyed())return;_();let R=H(),O=G.getGridOption("theme");if(JSON.stringify(R)!==JSON.stringify(O))G.setGridOption("theme",R)}),A=W7(()=>{if(!G||G.isDestroyed()||!Q)return;let R=typeof Q==="function"?Q():Q;if(R)Object.entries(R).forEach(([O,v])=>{try{G.setGridOption(O,v)}catch(I){}})});U=()=>{if(M(),f(),A(),G&&!G.isDestroyed()){if(G.destroy(),Z)Z.current=null;G=null}},Vv(()=>{if(U)U(),U=null})}})};export{Wu as Grid}; diff --git a/docs/sigpro.ui.css b/docs/sigpro.ui.css index 036531f..e8e0d00 100644 --- a/docs/sigpro.ui.css +++ b/docs/sigpro.ui.css @@ -1,2 +1,2 @@ /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-3xl:48rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-7xl:4.5rem;--text-7xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-3xl:1.5rem;--drop-shadow-2xl:0 25px 25px #00000026;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab, red, red)){:root{scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) #0000}}@property --radialprogress{syntax:"";inherits:true;initial-value:0%}:root:not(span){overflow:var(--page-overflow)}:root{background:var(--page-scroll-bg,var(--root-bg));--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) var(--root-bg,#0000)}@supports (color:color-mix(in lab, red, red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) color-mix(in srgb, var(--root-bg,#0000), oklch(0% 0 0) calc(var(--page-has-backdrop,0) * 40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset) ; else: unset)}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root,[data-theme]{background:var(--page-scroll-bg,var(--root-bg));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}:where(:root),:root:has(input.theme-controller[value=splight]:checked),[data-theme=splight]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(92% 0 0);--color-base-content:oklch(25% .006 285);--color-primary:oklch(25% .006 285);--color-primary-content:oklch(98% 0 0);--color-secondary:oklch(55% .046 257.417);--color-secondary-content:oklch(98% 0 0);--color-accent:oklch(96% 0 0);--color-accent-content:oklch(25% .006 285);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232);--color-success:oklch(62% .17 163);--color-warning:oklch(82% .18 84);--color-error:oklch(60% .25 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(15% .005 285.823);--color-base-200:oklch(20% .005 285.823);--color-base-300:oklch(30% .005 285.823);--color-base-content:oklch(92% .004 286.32);--color-primary:oklch(98% 0 0);--color-primary-content:oklch(15% 0 0);--color-secondary:oklch(65% .046 257.417);--color-secondary-content:oklch(15% .005 285.823);--color-accent:oklch(25% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(92% .004 286.32);--color-neutral-content:oklch(14% .005 285.823);--color-info:oklch(70% .1 230);--color-success:oklch(65% .15 160);--color-warning:oklch(85% .15 90);--color-error:oklch(55% .2 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=spdark]:checked),[data-theme=spdark]{color-scheme:dark;--color-base-100:oklch(15% .005 285.823);--color-base-200:oklch(20% .005 285.823);--color-base-300:oklch(30% .005 285.823);--color-base-content:oklch(92% .004 286.32);--color-primary:oklch(98% 0 0);--color-primary-content:oklch(15% 0 0);--color-secondary:oklch(65% .046 257.417);--color-secondary-content:oklch(15% .005 285.823);--color-accent:oklch(25% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(92% .004 286.32);--color-neutral-content:oklch(14% .005 285.823);--color-info:oklch(70% .1 230);--color-success:oklch(65% .15 160);--color-warning:oklch(85% .15 90);--color-error:oklch(55% .2 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}@layer components;@layer utilities{@layer daisyui.l1.l2.l3{.diff{webkit-user-select:none;-webkit-user-select:none;user-select:none;direction:ltr;grid-template-rows:1fr 1.8rem 1fr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus-visible),.diff:focus-visible{outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:95cqi;max-width:95cqi}.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-1:focus-visible) .diff-resizer{min-width:5cqi;max-width:5cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:5cqi;max-width:5cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:95cqi;max-width:95cqi}}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:visibility .3s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}:where(.drawer-side){overflow:hidden}.drawer-side{pointer-events:none;visibility:hidden;z-index:10;overscroll-behavior:contain;opacity:0;width:100%;transition:opacity .2s ease-out .1s allow-discrete, visibility .3s ease-out .1s allow-discrete;inset-inline-start:0;background-color:#0000;grid-template-rows:repeat(1,minmax(0,1fr));grid-template-columns:repeat(1,minmax(0,1fr));grid-row-start:1;grid-column-start:1;place-items:flex-start start;height:100dvh;display:grid;position:fixed;top:0}.drawer-side>.drawer-overlay{cursor:pointer;background-color:oklch(0% 0 0/.4);place-self:stretch stretch;position:sticky;top:0}.drawer-side>*{grid-row-start:1;grid-column-start:1}.drawer-side>:not(.drawer-overlay){will-change:transform;transition:translate .3s ease-out,width .2s ease-out;translate:-100%}[dir=rtl] :is(.drawer-side>:not(.drawer-overlay)){translate:100%}.fab{pointer-events:none;z-index:999;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;inset-inline-end:1rem;flex-direction:column-reverse;align-items:flex-end;gap:.5rem;display:flex;position:fixed;bottom:1rem}.fab>*{pointer-events:auto;align-items:center;gap:.5rem;display:flex}.fab>:hover,.fab>:has(:focus-visible){z-index:1}.fab>[tabindex]:first-child{transition-property:opacity,visibility,rotate;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:grid;position:relative}.fab .fab-close,.fab .fab-main-action{inset-inline-end:0;position:absolute;bottom:0}:is(.fab:focus-within:has(.fab-close),.fab:focus-within:has(.fab-main-action))>[tabindex]{opacity:0;rotate:90deg}.fab:focus-within>[tabindex]:first-child{pointer-events:none}.fab:focus-within>:nth-child(n+2){visibility:visible;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.fab>:nth-child(n+2){visibility:hidden;--tw-scale-x:80%;--tw-scale-y:80%;--tw-scale-z:80%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:0;transition-property:opacity,scale,visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.fab>:nth-child(n+2).fab-main-action,.fab>:nth-child(n+2).fab-close{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.fab>:nth-child(3){transition-delay:30ms}.fab>:nth-child(4){transition-delay:60ms}.fab>:nth-child(5){transition-delay:90ms}.fab>:nth-child(6){transition-delay:.12s}.drawer-toggle{appearance:none;opacity:0;width:0;height:0;position:fixed}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:currentColor oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4))}@supports (color:color-mix(in lab, red, red)){:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4))}}:where(:root:has(.drawer-toggle:checked)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}.tooltip{--tt-bg:var(--color-neutral);--tt-off:calc(100% + .5rem);--tt-tail:calc(100% + 1px + .25rem);display:inline-block;position:relative}.tooltip>.tooltip-content,.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:2;--tw-content:attr(data-tip);content:var(--tw-content);width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);display:block;position:absolute}@media (prefers-reduced-motion:no-preference){.tooltip>.tooltip-content,.tooltip[data-tip]:before,.tooltip:after{transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms}}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem}@media (prefers-reduced-motion:no-preference){:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media (hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:.75rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));--tab-radius-limit:min(var(--radius-field), var(--tab-radius-min));--tab-radius-grad:#0000 calc(69% - var(--border)), var(--tab-border-color) calc(69% - var(--border) + .25px), var(--tab-border-color) 69%, var(--tab-bg) calc(69% + .25px);order:var(--tab-order);height:var(--tab-height);padding-inline:var(--tab-p);border-color:#0000;font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content{display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0}@media (prefers-reduced-motion:no-preference){.menu details::details-content{transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li).menu-disabled{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.floating-label{display:block;position:relative}.floating-label input{display:block}.floating-label input::placeholder,.floating-label textarea::placeholder{transition:top .1s ease-out,translate .1s ease-out,scale .1s ease-out,opacity .1s ease-out}.floating-label>span{z-index:1;background-color:var(--color-base-100);opacity:0;inset-inline-start:.75rem;top:calc(var(--size-field,.25rem) * 10 / 2);pointer-events:none;border-radius:2px;padding-inline:.25rem;font-size:.875rem;line-height:1;transition:top .1s ease-out,translate .1s ease-out,scale .1s ease-out,opacity .1s ease-out;position:absolute;translate:0 -50%}:is(.floating-label:focus-within,.floating-label:not(:has(input:placeholder-shown,textarea:placeholder-shown))) ::placeholder{opacity:0;pointer-events:auto;top:0;translate:-12.5% calc(-50% - .125em);scale:.75}:is(.floating-label:focus-within,.floating-label:not(:has(input:placeholder-shown,textarea:placeholder-shown)))>span{opacity:1;pointer-events:auto;z-index:2;top:0;translate:-12.5% calc(-50% - .125em);scale:.75}.floating-label:has(:disabled,[disabled])>span{opacity:0}.floating-label:has(.input-xs,.select-xs,.textarea-xs) span{top:calc(var(--size-field,.25rem) * 6 / 2);font-size:.6875rem}.floating-label:has(.input-sm,.select-sm,.textarea-sm) span{top:calc(var(--size-field,.25rem) * 8 / 2);font-size:.75rem}.floating-label:has(.input-md,.select-md,.textarea-md) span{top:calc(var(--size-field,.25rem) * 10 / 2);font-size:.875rem}.floating-label:has(.input-lg,.select-lg,.textarea-lg) span{top:calc(var(--size-field,.25rem) * 12 / 2);font-size:1.125rem}.floating-label:has(.input-xl,.select-xl,.textarea-xl) span{top:calc(var(--size-field,.25rem) * 14 / 2);font-size:1.375rem}.dropdown{position-area:var(--anchor-v,bottom) var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(:has(~[class*=dropdown-content])):focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.dropdown>:not(:has(~[class*=dropdown-content])):focus{outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown.dropdown-close .dropdown-content,.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content,.dropdown.dropdown-hover:not(:hover) [tabindex]:first-child:focus:not(:focus-visible)~.dropdown-content{transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover],.dropdown .dropdown-content{z-index:999}@media (prefers-reduced-motion:no-preference){.dropdown[popover],.dropdown .dropdown-content{transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:.95}}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}.dropdown:is(details) summary::-webkit-details-marker{display:none}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed}@supports not (position-area:bottom){.dropdown[popover]{margin:auto}.dropdown[popover].dropdown-close{transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover].dropdown-open:not(:popover-open){transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover]::backdrop{background-color:oklab(0% none none/.3)}}:is(.dropdown[popover].dropdown-close,.dropdown[popover]:not(.dropdown-open,:popover-open)){transform-origin:top;opacity:0;display:none;scale:.95}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0 / calc(var(--depth) * .15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0 / calc(var(--depth) * 6%)) inset, var(--btn-shadow);--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab, red, red)){.btn{--btn-border:color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000)}}.btn{--btn-noise:var(--fx-noise)}@media (hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio])[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem) * 6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.collapse{border-radius:var(--radius-box,1rem);isolation:isolate;grid-template-rows:max-content 0fr;grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:hidden}@media (prefers-reduced-motion:no-preference){.collapse{transition:grid-template-rows .2s}}.collapse>input:is([type=checkbox],[type=radio]){appearance:none;opacity:0;z-index:1;grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close)),.collapse:not(.collapse-close):has(>input:is([type=checkbox],[type=radio]):checked){grid-template-rows:max-content 1fr}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){content-visibility:visible;min-height:fit-content}@supports not (content-visibility:visible){.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){visibility:visible}}.collapse:focus-visible,.collapse:has(>input:is([type=checkbox],[type=radio]):focus-visible),.collapse:has(summary:focus-visible){outline-color:var(--color-base-content);outline-offset:2px;outline-width:2px;outline-style:solid}.collapse:not(.collapse-close)>input[type=checkbox],.collapse:not(.collapse-close)>input[type=radio]:not(:checked),.collapse:not(.collapse-close)>.collapse-title{cursor:pointer}:is(.collapse[tabindex]:focus:not(.collapse-close,.collapse[open]),.collapse[tabindex]:focus-within:not(.collapse-close,.collapse[open]))>.collapse-title{cursor:unset}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>:where(.collapse-content),.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){padding-bottom:1rem}.collapse:is(details){width:100%}@media (prefers-reduced-motion:no-preference){.collapse:is(details)::details-content{transition:content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out, height .2s;interpolate-size:allow-keywords;height:0}.collapse:is(details):where([open])::details-content{height:auto}}.collapse:is(details) summary{display:block;position:relative}.collapse:is(details) summary::-webkit-details-marker{display:none}.collapse:is(details)>.collapse-content{content-visibility:visible}.collapse:is(details) summary{outline:none}.collapse-content{content-visibility:hidden;min-height:0;cursor:unset;grid-row-start:2;grid-column-start:1;padding-left:1rem;padding-right:1rem}@supports not (content-visibility:hidden){.collapse-content{visibility:hidden}}@media (prefers-reduced-motion:no-preference){.collapse-content{transition:content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out}}.validator-hint{visibility:hidden;margin-top:.5rem;font-size:.75rem}.validator:user-valid{--input-color:var(--color-success)}.validator:user-valid:focus{--input-color:var(--color-success)}.validator:user-valid:checked{--input-color:var(--color-success)}.validator:user-valid[aria-checked=true]{--input-color:var(--color-success)}.validator:user-valid:focus-within{--input-color:var(--color-success)}.validator:has(:user-valid){--input-color:var(--color-success)}.validator:has(:user-valid):focus{--input-color:var(--color-success)}.validator:has(:user-valid):checked{--input-color:var(--color-success)}.validator:has(:user-valid)[aria-checked=true]{--input-color:var(--color-success)}.validator:has(:user-valid):focus-within{--input-color:var(--color-success)}.validator:user-invalid{--input-color:var(--color-error)}.validator:user-invalid:focus{--input-color:var(--color-error)}.validator:user-invalid:checked{--input-color:var(--color-error)}.validator:user-invalid[aria-checked=true]{--input-color:var(--color-error)}.validator:user-invalid:focus-within{--input-color:var(--color-error)}.validator:user-invalid~.validator-hint{visibility:visible;color:var(--color-error)}.validator:has(:user-invalid){--input-color:var(--color-error)}.validator:has(:user-invalid):focus{--input-color:var(--color-error)}.validator:has(:user-invalid):checked{--input-color:var(--color-error)}.validator:has(:user-invalid)[aria-checked=true]{--input-color:var(--color-error)}.validator:has(:user-invalid):focus-within{--input-color:var(--color-error)}.validator:has(:user-invalid)~.validator-hint{visibility:visible;color:var(--color-error)}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))),:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus,:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):checked,:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))[aria-checked=true],:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus-within{--input-color:var(--color-error)}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))~.validator-hint{visibility:visible;color:var(--color-error)}.radial-progress{height:var(--size);width:var(--size);vertical-align:middle;box-sizing:content-box;--value:0;--size:5rem;--thickness:calc(var(--size) / 10);--radialprogress:calc(var(--value) * 1%);background-color:#0000;border-radius:3.40282e38px;place-content:center;transition:--radialprogress .3s linear;display:inline-grid;position:relative}.radial-progress:before{content:"";background:radial-gradient(farthest-side, currentColor 98%, #0000) top/var(--thickness) var(--thickness) no-repeat, conic-gradient(currentColor var(--radialprogress), #0000 0);webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));border-radius:3.40282e38px;position:absolute;inset:0}.radial-progress:after{content:"";inset:calc(50% - var(--thickness) / 2);transform:rotate(calc(var(--value) * 3.6deg - 90deg)) translate(calc(var(--size) / 2 - 50%));background-color:currentColor;border-radius:3.40282e38px;transition:transform .3s linear;position:absolute}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0, auto) 1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab, red, red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent)}}.toast{translate:var(--toast-x,0) var(--toast-y,0);inset-inline:auto 1rem;background-color:#0000;flex-direction:column;gap:.5rem;width:max-content;max-width:calc(100vw - 2rem);display:flex;position:fixed;top:auto;bottom:1rem}@media (prefers-reduced-motion:no-preference){.toast>*{animation:.25s ease-out toast}}.toggle{border:var(--border) solid currentColor;color:var(--input-color);cursor:pointer;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p), var(--radius-selector-max)) + min(var(--border), var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab, red, red)){.toggle{box-shadow:0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab, red, red)){.toggle{--input-color:color-mix(in oklab, var(--color-base-content) 50%, #0000)}}.toggle{--toggle-p:calc(var(--size) * .125);--size:calc(var(--size-selector,.25rem) * 6);width:calc((var(--size) * 2) - (var(--border) + var(--toggle-p)) * 2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:0deg}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:0deg}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);width:100%;height:100%;box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab, red, red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000)}}.toggle:before{background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}@media (forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border) solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab, red, red)){.input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.indicator{width:max-content;display:inline-flex;position:relative}.indicator :where(.indicator-item){z-index:1;white-space:nowrap;top:var(--indicator-t,0);bottom:var(--indicator-b,auto);left:var(--indicator-s,auto);right:var(--indicator-e,0);translate:var(--indicator-x,50%) var(--indicator-y,-50%);position:absolute}.table{border-collapse:separate;--tw-border-spacing-x:calc(.25rem * 0);--tw-border-spacing-y:calc(.25rem * 0);width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);border-radius:var(--radius-box);text-align:left;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead,tfoot){color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.table :where(thead,tfoot){font-size:.875rem;font-weight:600}.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.steps{counter-reset:step;grid-auto-columns:1fr;grid-auto-flow:column;display:inline-grid;overflow:auto hidden}.steps .step{text-align:center;--step-bg:var(--color-base-300);--step-fg:var(--color-base-content);grid-template-rows:40px 1fr;grid-template-columns:auto;place-items:center;min-width:4rem;display:grid}.steps .step:before{width:100%;height:.5rem;color:var(--step-bg);background-color:var(--step-bg);content:"";border:1px solid;grid-row-start:1;grid-column-start:1;margin-inline-start:-100%;top:0}.steps .step>.step-icon,.steps .step:not(:has(.step-icon)):after{--tw-content:counter(step);content:var(--tw-content);counter-increment:step;z-index:1;color:var(--step-fg);background-color:var(--step-bg);border:1px solid var(--step-bg);border-radius:3.40282e38px;grid-row-start:1;grid-column-start:1;place-self:center;place-items:center;width:2rem;height:2rem;display:grid;position:relative}.steps .step:first-child:before{--tw-content:none;content:var(--tw-content)}.steps .step[data-content]:after{--tw-content:attr(data-content);content:var(--tw-content)}.range{appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem) * 6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:currentColor}@supports (color:color-mix(in lab, red, red)){.range{--range-bg:color-mix(in oklab, currentColor 10%, #0000)}}.range{cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}@media (forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));background-color:var(--range-thumb);height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));position:relative;top:50%;transform:translateY(-50%)}@supports (color:color-mix(in lab, red, red)){.range::-webkit-slider-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));background-color:currentColor;position:relative;top:50%}@supports (color:color-mix(in lab, red, red)){.range::-moz-range-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range:disabled{cursor:not-allowed;opacity:.3}.chat-bubble{border-radius:var(--radius-field);background-color:var(--color-base-300);width:fit-content;color:var(--color-base-content);grid-row-end:3;min-width:2.5rem;max-width:90%;min-height:2rem;padding-block:.5rem;padding-inline:1rem;display:block;position:relative}.chat-bubble:before{background-color:inherit;content:"";width:.75rem;height:.75rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-chat);-webkit-mask-image:var(--mask-chat);mask-image:var(--mask-chat);position:absolute;bottom:0;-webkit-mask-position:0 -1px;mask-position:0 -1px;-webkit-mask-size:.8125rem;mask-size:.8125rem}.select{border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;white-space:nowrap;text-overflow:ellipsis;box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:.75rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.select{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.select{border-color:var(--input-color);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.select{--size:calc(var(--size-field,.25rem) * 10)}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}[dir=rtl] .select::picker(select){translate:.5rem}[dir=rtl] .select select::picker(select){translate:.5rem}.select[multiple]{background-image:none;height:auto;padding-block:.75rem;padding-inline-end:.75rem;overflow:auto}.select select{appearance:none;width:calc(100% + 2.75rem);height:calc(100% - calc(var(--border) * 2));background:inherit;border-radius:inherit;border-style:none;align-items:center;margin-inline:-.75rem -1.75rem;padding-inline:.75rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.select select:focus,.select select:focus-within{outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.select:focus,.select:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.select:focus,.select:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}@supports (appearance:base-select){.select,.select select{appearance:base-select}:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) optgroup{padding-top:.5em}:is(.select,.select select) optgroup option:first-child{margin-top:.5em}:is(.select,.select select) option{border-radius:var(--radius-field);white-space:normal;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{outline-offset:2px;outline:2px solid #0000}}:is(.select,.select select) option:not(:disabled):active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}.timeline{display:flex;position:relative}.timeline>li{grid-template-rows:var(--timeline-row-start,minmax(0, 1fr)) auto var(--timeline-row-end,minmax(0, 1fr));grid-template-columns:var(--timeline-col-start,minmax(0, 1fr)) auto var(--timeline-col-end,minmax(0, 1fr));flex-shrink:0;align-items:center;display:grid;position:relative}.timeline>li>hr{border:none;width:100%}.timeline>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline>li>hr:last-child{grid-area:2/3/auto/none}@media print{.timeline>li>hr{border:.1px solid var(--color-base-300)}}.timeline :where(hr){background-color:var(--color-base-300);height:.25rem}.timeline:has(.timeline-middle hr):first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline:has(.timeline-middle hr):last-child,.timeline:not(:has(.timeline-middle)) :first-child hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline:not(:has(.timeline-middle)) :last-child hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.swap{cursor:pointer;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;place-content:center;display:inline-grid;position:relative}.swap input{appearance:none;border:none}.swap>*{grid-row-start:1;grid-column-start:1}@media (prefers-reduced-motion:no-preference){.swap>*{transition-property:transform,rotate,opacity;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.swap .swap-on,.swap .swap-indeterminate,.swap input:indeterminate~.swap-on,.swap input:is(:checked,:indeterminate)~.swap-off{opacity:0}.swap input:checked~.swap-on,.swap input:indeterminate~.swap-indeterminate{opacity:1;backface-visibility:visible}.collapse-title{grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out;position:relative}.mockup-code{border-radius:var(--radius-box);background-color:var(--color-neutral);color:var(--color-neutral-content);direction:ltr;padding-block:1.25rem;font-size:.875rem;position:relative;overflow:auto hidden}.mockup-code:before{content:"";opacity:.3;border-radius:3.40282e38px;width:.75rem;height:.75rem;margin-bottom:1rem;display:block;box-shadow:1.4em 0,2.8em 0,4.2em 0}.mockup-code pre{padding-right:1.25rem}.mockup-code pre:before{content:"";margin-right:2ch}.mockup-code pre[data-prefix]:before{--tw-content:attr(data-prefix);content:var(--tw-content);text-align:right;opacity:.5;width:2rem;display:inline-block}.avatar{vertical-align:middle;display:inline-flex;position:relative}.avatar>div{aspect-ratio:1;display:block;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.checkbox{border:var(--border) solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox{border:var(--border) solid var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 0 #0000 inset, 0 0 #0000;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:0deg}.radio{cursor:pointer;appearance:none;vertical-align:middle;border:var(--border) solid var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;display:inline-block;position:relative}@supports (color:color-mix(in lab, red, red)){.radio{border:var(--border) solid var(--input-color,color-mix(in srgb, currentColor 20%, #0000))}}.radio{box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);color:var(--input-color,currentColor)}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor}@media (prefers-reduced-motion:no-preference){.radio:checked,.radio[aria-checked=true]{animation:.2s ease-out radio}}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1));background-color:currentColor}@media (forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.rating{vertical-align:middle;display:inline-flex;position:relative}.rating input{appearance:none;border:none}.rating :where(*){background-color:var(--color-base-content);opacity:.2;border-radius:0;width:1.5rem;height:1.5rem}@media (prefers-reduced-motion:no-preference){.rating :where(*){animation:.25s ease-out rating}}.rating :where(*):is(input){cursor:pointer}.rating .rating-hidden{background-color:#0000;width:.5rem}.rating input[type=radio]:checked{background-image:none}.rating :checked,.rating [aria-checked=true],.rating [aria-current=true],.rating :has(~:checked,~[aria-checked=true],~[aria-current=true]){opacity:1}.rating :focus-visible{scale:1.1}@media (prefers-reduced-motion:no-preference){.rating :focus-visible{transition:scale .2s ease-out}}.rating :active:focus{animation:none;scale:1.1}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.drawer{grid-auto-columns:max-content auto;width:100%;display:grid;position:relative}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.progress{appearance:none;border-radius:var(--radius-box);background-color:currentColor;width:100%;height:.5rem;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.progress{background-color:color-mix(in oklab, currentcolor 20%, transparent)}}.progress{color:var(--color-base-content)}.progress:indeterminate{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%}@media (prefers-reduced-motion:no-preference){.progress:indeterminate{animation:5s ease-in-out infinite progress}}@supports ((-moz-appearance:none)){.progress:indeterminate::-moz-progress-bar{background-color:#0000}@media (prefers-reduced-motion:no-preference){.progress:indeterminate::-moz-progress-bar{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%;animation:5s ease-in-out infinite progress}}.progress::-moz-progress-bar{border-radius:var(--radius-box);background-color:currentColor}}@supports ((-webkit-appearance:none)){.progress::-webkit-progress-bar{border-radius:var(--radius-box);background-color:#0000}.progress::-webkit-progress-value{border-radius:var(--radius-box);background-color:currentColor}}.file-input{cursor:pointer;cursor:pointer;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));align-items:center;padding-inline-end:.75rem;font-size:.875rem;line-height:2;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.file-input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.file-input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.file-input::file-selector-button{cursor:pointer;webkit-user-select:none;-webkit-user-select:none;user-select:none;height:calc(100% + var(--border) * 2);margin-inline-end:1rem;margin-block:calc(var(--border) * -1);color:var(--btn-fg);border-width:var(--border);border-style:solid;border-color:var(--btn-border);background-color:var(--btn-bg);background-size:calc(var(--noise) * 100%);background-image:var(--btn-noise);text-shadow:0 .5px oklch(1 0 0 / calc(var(--depth) * .15));box-shadow:0 .5px 0 .5px white inset, var(--btn-shadow);border-start-start-radius:calc(var(--join-ss,var(--radius-field) - var(--border)));border-end-start-radius:calc(var(--join-es,var(--radius-field) - var(--border)));margin-inline-start:calc(var(--border) * -1);padding-inline:1rem;font-size:.875rem;font-weight:600}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{box-shadow:0 .5px 0 .5px color-mix(in oklab, color-mix(in oklab, white 30%, var(--btn-bg)) calc(var(--depth) * 20%), #0000) inset, var(--btn-shadow)}}.file-input::file-selector-button{--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-border:var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-border:color-mix(in oklab, var(--btn-bg), #000 5%)}}.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000)}}.file-input::file-selector-button{--btn-noise:var(--fx-noise)}.file-input:focus{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.file-input:focus{box-shadow:0 1px color-mix(in oklab, var(--input-color) 10%, #0000)}}.file-input:focus{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200)}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){box-shadow:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){color:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.textarea{border:var(--border) solid #0000;appearance:none;border-radius:var(--radius-field);background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);min-height:5rem;font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;flex-shrink:1;padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab, red, red)){.textarea{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.textarea{--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.textarea textarea{appearance:none;background-color:#0000;border:none}.textarea textarea:focus,.textarea textarea:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.textarea textarea:focus,.textarea textarea:focus-within{outline-offset:2px;outline:2px solid #0000}}.textarea:focus,.textarea:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.textarea:focus,.textarea:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.textarea:focus,.textarea:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.textarea:focus,.textarea:focus-within{--font-size:1rem}}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){box-shadow:none}.textarea:has(>textarea[disabled])>textarea[disabled]{cursor:not-allowed}.stack{grid-template-rows:3px 4px 1fr 4px 3px;grid-template-columns:3px 4px 1fr 4px 3px;display:inline-grid}.stack>*{width:100%;height:100%}.stack>:nth-child(n+2){opacity:.7;width:100%}.stack>:nth-child(2){z-index:2;opacity:.9}.stack>:first-child{z-index:3;width:100%}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.tab-content{order:var(--tabcontent-order);--tabcontent-radius-ss:var(--radius-box);--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box);--tabcontent-order:1;width:100%;height:calc(100% - var(--tab-height) + var(--border));margin:var(--tabcontent-margin);border-color:#0000;border-width:var(--border);border-start-start-radius:var(--tabcontent-radius-ss);border-start-end-radius:var(--tabcontent-radius-se);border-end-end-radius:var(--tabcontent-radius-ee);border-end-start-radius:var(--tabcontent-radius-es);display:none}.timeline-end{grid-area:3/1/4/4;place-self:flex-start center;margin:.25rem}.timeline-start{grid-area:1/1/2/4;place-self:flex-end center;margin:.25rem}.stat-figure{grid-row:1/span 3;grid-column-start:2;place-self:center flex-end}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:.95;box-shadow:0 25px 50px -12px oklch(0% 0 0/.25)}.drawer-content{grid-row-start:1;grid-column-start:2;min-width:0}.timeline-middle{grid-row-start:2;grid-column-start:2}.stat-value{white-space:nowrap;grid-column-start:1;font-size:2rem;font-weight:800}.stat-desc{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-desc{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-desc{font-size:.75rem}.stat-title{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-title{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-title{font-size:.75rem}.chat-image{grid-row:span 2/span 2;align-self:flex-end}.chat-footer{grid-row-start:3;gap:.25rem;font-size:.6875rem;display:flex}.chat-header{grid-row-start:1;gap:.25rem;font-size:.6875rem;display:flex}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.divider{--divider-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{--tw-content:"×";content:var(--tw-content)}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.breadcrumbs{max-width:100%;padding-block:.5rem;overflow-x:auto}.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol{white-space:nowrap;align-items:center;min-height:min-content;display:flex}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li{align-items:center;display:flex}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>*{cursor:pointer;align-items:center;gap:.5rem;display:flex}@media (hover:hover){:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:hover{text-decoration-line:underline}}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus{outline-offset:2px;outline:2px solid #0000}}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus-visible{outline-offset:2px;outline:2px solid}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li+:before{content:"";opacity:.4;background-color:#0000;border-top:1px solid;border-right:1px solid;width:.375rem;height:.375rem;margin-inline:.5rem .75rem;display:block;rotate:45deg}[dir=rtl] :is(:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li)+:before{rotate:-135deg}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.label{color:color-mix(in oklab, currentcolor 60%, transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.fieldset-legend{color:var(--color-base-content);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:-.25rem;padding-block:.5rem;font-weight:600;display:flex}.carousel-item{box-sizing:content-box;scroll-snap-align:start;flex:none;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab, red, red)){.status{background-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab, red, red)){.status{color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.status{background-image:radial-gradient(circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * .5)), #0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab, red, red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border) solid var(--badge-color,var(--color-base-200));background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem) * 6);width:fit-content;height:var(--size);padding-inline:calc(var(--size) / 2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.kbd{border-radius:var(--radius-field);background-color:var(--color-base-200);vertical-align:middle;border:var(--border) solid var(--color-base-content);justify-content:center;align-items:center;padding-inline:.5em;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.kbd{border:var(--border) solid color-mix(in srgb, var(--color-base-content) 20%, #0000)}}.kbd{border-bottom:calc(var(--border) + 1px) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.kbd{border-bottom:calc(var(--border) + 1px) solid color-mix(in srgb, var(--color-base-content) 20%, #0000)}}.kbd{--size:calc(var(--size-selector,.25rem) * 6);height:var(--size);min-width:var(--size);font-size:.875rem}.text-rotate{vertical-align:bottom;white-space:nowrap;--duration:var(--tw-duration);transition-property:none;display:inline-block;overflow:hidden}.text-rotate>*{height:calc(var(--items,1) * 100%);justify-items:start;display:grid}.text-rotate>:has(:nth-child(2)){--items:2;animation:rotator var(--duration,10s) linear(0 0% 49%, .5 50% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(3)){--items:3;animation:rotator var(--duration,10s) linear(0 0% 32%, .333333 33% 65%, .666666 66% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(4)){--items:4;animation:rotator var(--duration,10s) linear(0 0% 24%, .25 25% 49%, .5 50% 74%, .75 75% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(5)){--items:5;animation:rotator var(--duration,10s) linear(0 0% 19%, .2 20% 39%, .4 40% 59%, .6 60% 79%, .8 80% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(6)){--items:6;animation:rotator var(--duration,10s) linear(0 0% 15%, .16666 16% 32%, .333333 33% 49%, .5 50% 65%, .666666 66% 82%, .833333 83% 99%, 1 100% 100%) infinite}.text-rotate>*>*{clip-path:inset(.5px 0);align-content:baseline}.text-rotate>*>:first-child{translate:var(--first-item-position)}.text-rotate:hover>*{animation-play-state:paused}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem) * 10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>*{place-items:start;gap:.5rem;display:grid}.footer.footer-center{text-align:center;grid-auto-flow:column dense;place-items:center}.footer.footer-center>*{place-items:center}.stat{grid-template-columns:repeat(1,1fr);column-gap:1rem;width:100%;padding-block:1rem;padding-inline:1.5rem;display:inline-grid}.stat:not(:last-child){border-inline-end:var(--border) dashed currentColor}@supports (color:color-mix(in lab, red, red)){.stat:not(:last-child){border-inline-end:var(--border) dashed color-mix(in oklab, currentColor 10%, #0000)}}.stat:not(:last-child){border-block-end:none}.navbar-end{justify-content:flex-end;align-items:center;width:50%;display:inline-flex}.navbar-start{justify-content:flex-start;align-items:center;width:50%;display:inline-flex}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.navbar-center{flex-shrink:0;align-items:center;display:inline-flex}.carousel{scroll-snap-type:x mandatory;scrollbar-width:none;display:inline-flex;overflow-x:scroll}@media (prefers-reduced-motion:no-preference){.carousel{scroll-behavior:smooth}}.carousel::-webkit-scrollbar{display:none}.alert{--alert-border-color:var(--color-base-200);border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px #000, 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08));border-style:solid;grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab, red, red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px color-mix(in oklab, color-mix(in oklab, #000 20%, var(--alert-color,var(--color-base-200))) calc(var(--depth) * 20%), #0000), 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.fieldset{grid-template-columns:1fr;grid-auto-rows:max-content;gap:.375rem;padding-block:.25rem;font-size:.75rem;display:grid}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e");grid-auto-rows:min-content;column-gap:.75rem;padding-block:.25rem;display:grid}.card-actions{flex-wrap:wrap;align-items:flex-start;gap:.5rem;display:flex}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.avatar-group{display:flex;overflow:hidden}.avatar-group .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}.mask{vertical-align:middle;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.timeline-box{border:var(--border) solid;border-radius:var(--radius-box);border-color:var(--color-base-300);background-color:var(--color-base-100);padding-block:.5rem;padding-inline:1rem;font-size:.75rem;box-shadow:0 1px 2px oklch(0% 0 0/.05)}.btn-accent{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-info{--btn-color:var(--color-info);--btn-fg:var(--color-info-content)}.btn-neutral{--btn-color:var(--color-neutral);--btn-fg:var(--color-neutral-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-secondary{--btn-color:var(--color-secondary);--btn-fg:var(--color-secondary-content)}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}}@layer daisyui.l1.l2{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;background-color:oklch(0% 0 0/.4)}:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal) .modal-box{opacity:1;translate:0;scale:1}:root:has(:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}@starting-style{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{opacity:0}}:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto}:where(.drawer-toggle:checked~.drawer-side)>:not(.drawer-overlay){translate:0%}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-offset:2px;outline:2px solid}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off) 50%}.tooltip:after{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail) 50%}.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.btn-disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn-disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn-disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn-disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn-disabled{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}@media (prefers-reduced-motion:no-preference){.collapse[open].collapse-arrow>.collapse-title:after,.collapse.collapse-open.collapse-arrow>.collapse-title:after{transform:translateY(-50%)rotate(225deg)}}.collapse.collapse-open.collapse-plus>.collapse-title:after{--tw-content:"−";content:var(--tw-content)}:is(.collapse[tabindex].collapse-arrow:focus:not(.collapse-close),.collapse.collapse-arrow[tabindex]:focus-within:not(.collapse-close))>.collapse-title:after,.collapse.collapse-arrow:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{transform:translateY(-50%)rotate(225deg)}.collapse[open].collapse-plus>.collapse-title:after,.collapse[tabindex].collapse-plus:focus:not(.collapse-close)>.collapse-title:after,.collapse.collapse-plus:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{--tw-content:"−";content:var(--tw-content)}.tabs-lift{--tabs-height:auto;--tabs-direction:row}.tabs-lift>.tab{--tab-border:0 0 var(--border) 0;--tab-radius-ss:var(--tab-radius-limit);--tab-radius-se:var(--tab-radius-limit);--tab-radius-es:0;--tab-radius-ee:0;--tab-paddings:var(--border) var(--tab-p) 0 var(--tab-p);--tab-border-colors:#0000 #0000 var(--tab-border-color) #0000;--tab-corner-width:calc(100% + var(--tab-radius-limit) * 2);--tab-corner-height:var(--tab-radius-limit);--tab-corner-position:top left, top right;border-width:var(--tab-border);padding:var(--tab-paddings);border-color:var(--tab-border-colors);border-start-start-radius:var(--tab-radius-ss);border-start-end-radius:var(--tab-radius-se);border-end-end-radius:var(--tab-radius-ee);border-end-start-radius:var(--tab-radius-es)}.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked)){--tab-border:var(--border) var(--border) 0 var(--border);--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color);--tab-paddings:0 calc(var(--tab-p) - var(--border)) var(--border) calc(var(--tab-p) - var(--border));--tab-inset:auto auto 0 auto;--radius-start:radial-gradient(circle at top left, var(--tab-radius-grad));--radius-end:radial-gradient(circle at top right, var(--tab-radius-grad));background-color:var(--tab-bg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):before{z-index:1;content:"";width:var(--tab-corner-width);height:var(--tab-corner-height);background-position:var(--tab-corner-position);background-image:var(--radius-start), var(--radius-end);background-size:var(--tab-radius-limit) var(--tab-radius-limit);inset:var(--tab-inset);background-repeat:no-repeat;display:block;position:absolute}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{--radius-start:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{transform:rotateY(180deg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{--radius-end:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{transform:rotateY(180deg)}.tabs-lift:has(>.tab-content)>.tab:first-child:not(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color)}.tabs-lift>.tab-content{--tabcontent-margin:calc(-1 * var(--border)) 0 0 0;--tabcontent-radius-ss:0;--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box)}:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:first-child,:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:nth-child(n+3){--tabcontent-radius-ss:var(--radius-box)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row>*{grid-row-start:1}.avatar-offline:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}.avatar-online:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}.steps .step-neutral+.step-neutral:before,.steps .step-neutral:after,.steps .step-neutral>.step-icon{--step-bg:var(--color-neutral);--step-fg:var(--color-neutral-content)}.steps .step-primary+.step-primary:before,.steps .step-primary:after,.steps .step-primary>.step-icon{--step-bg:var(--color-primary);--step-fg:var(--color-primary-content)}.steps .step-secondary+.step-secondary:before,.steps .step-secondary:after,.steps .step-secondary>.step-icon{--step-bg:var(--color-secondary);--step-fg:var(--color-secondary-content)}.steps .step-accent+.step-accent:before,.steps .step-accent:after,.steps .step-accent>.step-icon{--step-bg:var(--color-accent);--step-fg:var(--color-accent-content)}.steps .step-info+.step-info:before,.steps .step-info:after,.steps .step-info>.step-icon{--step-bg:var(--color-info);--step-fg:var(--color-info-content)}.steps .step-success+.step-success:before,.steps .step-success:after,.steps .step-success>.step-icon{--step-bg:var(--color-success);--step-fg:var(--color-success-content)}.steps .step-warning+.step-warning:before,.steps .step-warning:after,.steps .step-warning>.step-icon{--step-bg:var(--color-warning);--step-fg:var(--color-warning-content)}.steps .step-error+.step-error:before,.steps .step-error:after,.steps .step-error>.step-icon{--step-bg:var(--color-error);--step-fg:var(--color-error-content)}.tabs-border>.tab{--tab-border-color:#0000 #0000 var(--tab-border-color) #0000;border-radius:var(--radius-field);position:relative}.tabs-border>.tab:before{content:"";background-color:var(--tab-border-color);border-radius:var(--radius-field);width:80%;height:3px;transition:background-color .2s;position:absolute;bottom:0;left:10%}:is(.tabs-border>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-border>.tab:is(input:checked),.tabs-border>.tab:is(label:has(:checked))):before{--tab-border-color:currentColor;border-top:3px solid}.checkbox:disabled,.radio:disabled{cursor:not-allowed;opacity:.2}.rating.rating-xs :where(:not(.rating-hidden)){width:1rem;height:1rem}.rating.rating-sm :where(:not(.rating-hidden)){width:1.25rem;height:1.25rem}.rating.rating-md :where(:not(.rating-hidden)){width:1.5rem;height:1.5rem}.rating.rating-lg :where(:not(.rating-hidden)){width:1.75rem;height:1.75rem}.rating.rating-xl :where(:not(.rating-hidden)){width:2rem;height:2rem}:where(.navbar){position:relative}.tooltip-bottom>.tooltip-content,.tooltip-bottom[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,-.25rem));inset:var(--tt-off) auto auto 50%}.tooltip-bottom:after{transform:translateX(-50%) translateY(var(--tt-pos,-.25rem)) rotate(180deg);inset:var(--tt-tail) auto auto 50%}.tooltip-left>.tooltip-content,.tooltip-left[data-tip]:before{transform:translateX(calc(var(--tt-pos,.25rem) - .25rem)) translateY(-50%);inset:50% var(--tt-off) auto auto}.tooltip-left:after{transform:translateX(var(--tt-pos,.25rem)) translateY(-50%) rotate(-90deg);inset:50% calc(var(--tt-tail) + 1px) auto auto}.tooltip-right>.tooltip-content,.tooltip-right[data-tip]:before{transform:translateX(calc(var(--tt-pos,-.25rem) + .25rem)) translateY(-50%);inset:50% auto auto var(--tt-off)}.tooltip-right:after{transform:translateX(var(--tt-pos,-.25rem)) translateY(-50%) rotate(90deg);inset:50% auto auto calc(var(--tt-tail) + 1px)}.tooltip-top>.tooltip-content,.tooltip-top[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off) 50%}.tooltip-top:after{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail) 50%}.dropdown-right{--anchor-h:right;--anchor-v:span-bottom}.dropdown-right .dropdown-content{transform-origin:0;inset-inline-start:100%;top:0;bottom:auto}.chat-end{grid-template-columns:1fr auto;place-items:end}.chat-end .chat-header,.chat-end .chat-footer{grid-column-start:1}.chat-end .chat-image{grid-column-start:2}.chat-end .chat-bubble{border-end-end-radius:0;grid-column-start:1}.chat-end .chat-bubble:before{inset-inline-start:100%;transform:rotateY(180deg)}[dir=rtl] :is(.chat-end .chat-bubble):before{transform:rotateY(0)}.chat-start{grid-template-columns:auto 1fr;place-items:start}.chat-start .chat-header,.chat-start .chat-footer{grid-column-start:2}.chat-start .chat-image{grid-column-start:1}.chat-start .chat-bubble{border-end-start-radius:0;grid-column-start:2}.chat-start .chat-bubble:before{inset-inline-start:-.75rem;transform:rotateY(0)}[dir=rtl] :is(.chat-start .chat-bubble):before{transform:rotateY(180deg)}.dropdown-left{--anchor-h:left;--anchor-v:span-bottom}.dropdown-left .dropdown-content{transform-origin:100%;inset-inline-end:100%;top:0;bottom:auto}.dropdown-end{--anchor-h:span-left}.dropdown-end :where(.dropdown-content){inset-inline-end:0;translate:0}[dir=rtl] :is(.dropdown-end :where(.dropdown-content)){translate:0}.dropdown-end.dropdown-left{--anchor-h:left;--anchor-v:span-top}.dropdown-end.dropdown-left .dropdown-content{top:auto;bottom:0}.dropdown-end.dropdown-right{--anchor-h:right;--anchor-v:span-top}.dropdown-end.dropdown-right .dropdown-content{top:auto;bottom:0}.dropdown-bottom{--anchor-v:bottom}.dropdown-bottom .dropdown-content{transform-origin:top;top:100%;bottom:auto}.dropdown-top{--anchor-v:top}.dropdown-top .dropdown-content{transform-origin:bottom;top:auto;bottom:100%}.btn-active{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn-active{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}.btn-active{--btn-shadow:0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0);isolation:isolate}:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4}:is(.stack,.stack.stack-bottom)>:nth-child(2){grid-area:2/2/5/5}:is(.stack,.stack.stack-bottom)>:first-child{grid-area:1/1/4/6}.stack.stack-top>*{grid-area:1/3/4/4}.stack.stack-top>:nth-child(2){grid-area:2/2/5/5}.stack.stack-top>:first-child{grid-area:3/1/6/6}.stack.stack-start>*{grid-area:3/1/4/4}.stack.stack-start>:nth-child(2){grid-area:2/2/5/5}.stack.stack-start>:first-child{grid-area:1/3/6/6}.stack.stack-end>*{grid-area:3/3/4/6}.stack.stack-end>:nth-child(2){grid-area:2/2/5/5}.stack.stack-end>:first-child{grid-area:1/1/6/4}.tabs-box{background-color:var(--color-base-200);--tabs-box-radius:calc(3 * var(--radius-field));border-radius:calc(min(var(--tab-height) / 2, var(--radius-field)) + min(.25rem, var(--tabs-box-radius)));box-shadow:0 -.5px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 .5px oklch(0% 0 0 / calc(var(--depth) * .05)) inset;padding:.25rem}.tabs-box>.tab{border-radius:var(--radius-field);border-style:none}.tabs-box>.tab:focus-visible,.tabs-box>.tab:is(label:has(:checked:focus-visible)){outline-offset:2px}.tabs-box>.tab:focus-visible{z-index:1}.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){background-color:var(--tab-bg,var(--color-base-100));box-shadow:0 1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px 1px -1px var(--color-neutral), 0 1px 6px -4px var(--color-neutral)}@supports (color:color-mix(in lab, red, red)){.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){box-shadow:0 1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px 1px -1px color-mix(in oklab, var(--color-neutral) calc(var(--depth) * 50%), #0000), 0 1px 6px -4px color-mix(in oklab, var(--color-neutral) calc(var(--depth) * 100%), #0000)}}@media (forced-colors:active){.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){border:1px solid}}.tabs-box>.tab-content{height:calc(100% - var(--tab-height) + var(--border) - .5rem);border-radius:calc(min(var(--tab-height) / 2, var(--radius-field)) + min(.25rem, var(--tabs-box-radius)) - var(--border));margin-top:.25rem}.timeline-horizontal{flex-direction:row}.timeline-horizontal>li{align-items:center}.timeline-horizontal>li>hr{width:100%;height:.25rem}.timeline-horizontal>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline-horizontal>li>hr:last-child{grid-area:2/3/auto/none}.timeline-horizontal .timeline-start{grid-area:1/1/2/4;place-self:flex-end center}.timeline-horizontal .timeline-end{grid-area:3/1/4/4;place-self:flex-start center}.timeline-horizontal:has(.timeline-middle)>li>hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline-horizontal:has(.timeline-middle)>li>hr:last-child,.timeline-horizontal:not(:has(.timeline-middle)) :first-child>hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline-horizontal:not(:has(.timeline-middle)) :last-child>hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline-vertical{flex-direction:column}.timeline-vertical>li{--timeline-row-start:minmax(0, 1fr);--timeline-row-end:minmax(0, 1fr);justify-items:center}.timeline-vertical>li>hr{width:.25rem;height:100%}.timeline-vertical>li>hr:first-child{grid-row-start:1;grid-column-start:2}.timeline-vertical>li>hr:last-child{grid-area:3/2/none}.timeline-vertical .timeline-start{grid-area:1/1/4/2;place-self:center flex-end}.timeline-vertical .timeline-end{grid-area:1/3/4/4;place-self:center flex-start}.timeline-vertical:has(.timeline-middle)>li>hr:first-child{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:var(--radius-selector);border-bottom-left-radius:var(--radius-selector)}.timeline-vertical:has(.timeline-middle)>li>hr:last-child,.timeline-vertical:not(:has(.timeline-middle)) :first-child>hr:last-child{border-top-left-radius:var(--radius-selector);border-top-right-radius:var(--radius-selector);border-bottom-right-radius:0;border-bottom-left-radius:0}.timeline-vertical:not(:has(.timeline-middle)) :last-child>hr:first-child{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:var(--radius-selector);border-bottom-left-radius:var(--radius-selector)}.timeline-vertical.timeline-snap-icon>li{--timeline-col-start:minmax(0, 1fr);--timeline-row-start:.5rem}.timeline-compact{--timeline-row-start:0}.timeline-compact .timeline-start{grid-area:3/1/4/4;place-self:flex-start center}.timeline-compact li:has(.timeline-start) .timeline-end{grid-row-start:auto;grid-column-start:none}.timeline-compact.timeline-vertical>li{--timeline-col-start:0}.timeline-compact.timeline-vertical .timeline-start{grid-area:1/3/4/4;place-self:center flex-start}.timeline-compact.timeline-vertical li:has(.timeline-start) .timeline-end{grid-row-start:none;grid-column-start:auto}.drawer-end{grid-auto-columns:auto max-content}.drawer-end>.drawer-toggle~.drawer-content{grid-column-start:1}.drawer-end>.drawer-toggle~.drawer-side{grid-column-start:2;justify-items:end}.drawer-end>.drawer-toggle~.drawer-side>:not(.drawer-overlay){translate:100%}[dir=rtl] :is(.drawer-end>.drawer-toggle~.drawer-side>:not(.drawer-overlay)){translate:-100%}.drawer-end>.drawer-toggle:checked~.drawer-side>:not(.drawer-overlay){translate:0%}.input-lg{--size:calc(var(--size-field,.25rem) * 12);font-size:max(var(--font-size,1.125rem), 1.125rem)}.input-lg[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input-md{--size:calc(var(--size-field,.25rem) * 10);font-size:max(var(--font-size,.875rem), .875rem)}.input-md[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input-sm{--size:calc(var(--size-field,.25rem) * 8);font-size:max(var(--font-size,.75rem), .75rem)}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.input-xs{--size:calc(var(--size-field,.25rem) * 6);font-size:max(var(--font-size,.6875rem), .6875rem)}.input-xs[type=number]::-webkit-inner-spin-button{margin-block:-.25rem;margin-inline-end:-.75rem}.avatar-placeholder>div{justify-content:center;align-items:center;display:flex}.modal-bottom{place-items:end}.modal-bottom .modal-box{--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:0;--modal-br:0;width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 100%;scale:1}.modal-middle{place-items:center}.modal-middle .modal-box{--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:91.6667%;max-width:32rem;height:auto;max-height:calc(100vh - 5em);translate:0 2%;scale:.98}.modal-top{place-items:start}.modal-top .modal-box{--modal-tl:0;--modal-tr:0;--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 -100%;scale:1}.divider-horizontal{--divider-m:0 1rem}.divider-horizontal.divider{flex-direction:column;width:1rem;height:auto}.divider-horizontal.divider:before,.divider-horizontal.divider:after{width:.125rem;height:100%}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.btn-wide{width:100%;max-width:16rem}.rating-half.rating-xs :not(.rating-hidden){width:.5rem}.rating-half.rating-sm :not(.rating-hidden){width:.625rem}.rating-half.rating-md :not(.rating-hidden){width:.75rem}.rating-half.rating-lg :not(.rating-hidden){width:.875rem}.rating-half.rating-xl :not(.rating-hidden){width:1rem}.btn-block{width:100%}.swap-rotate .swap-on,.swap-rotate input:indeterminate~.swap-on{rotate:45deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-on,.swap-rotate.swap-active .swap-on{rotate:0deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-off,.swap-rotate.swap-active .swap-off{rotate:-45deg}.swap-flip{transform-style:preserve-3d;perspective:20rem}.swap-flip .swap-on,.swap-flip .swap-indeterminate,.swap-flip input:indeterminate~.swap-on{backface-visibility:hidden;transform:rotateY(180deg)}.swap-flip input:is(:checked,:indeterminate)~.swap-on,.swap-flip.swap-active .swap-on{transform:rotateY(0)}.swap-flip input:is(:checked,:indeterminate)~.swap-off,.swap-flip.swap-active .swap-off{backface-visibility:hidden;opacity:1;transform:rotateY(-180deg)}.badge-dash{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-style:dashed;border-color:currentColor}.badge-soft{color:var(--badge-color,var(--color-base-content));background-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.badge-soft{background-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 8%, var(--color-base-100))}}.badge-soft{border-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.badge-soft{border-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 10%, var(--color-base-100))}}.badge-soft{background-image:none}.input-ghost{box-shadow:none;background-color:#0000;border-color:#0000}.input-ghost:focus,.input-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.badge-outline{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-color:currentColor}.table-zebra tbody tr:where(:nth-child(2n)),.table-zebra tbody tr:where(:nth-child(2n)) :where(.table-pin-cols tr th){background-color:var(--color-base-200)}@media (hover:hover){:is(.table-zebra tbody tr.row-hover,.table-zebra tbody tr.row-hover:where(:nth-child(2n))):hover{background-color:var(--color-base-300)}}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.mask-circle{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e")}.mask-heart{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='200' height='185' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='200' height='185' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e")}.mask-star{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z' fill-rule='evenodd'/%3e%3c/svg%3e")}.mask-star-2{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z' fill-rule='evenodd'/%3e%3c/svg%3e")}.checkbox-lg{--size:calc(var(--size-selector,.25rem) * 7);padding:.3125rem}.checkbox-md{--size:calc(var(--size-selector,.25rem) * 6);padding:.25rem}.checkbox-sm{--size:calc(var(--size-selector,.25rem) * 5);padding:.1875rem}.checkbox-xs{--size:calc(var(--size-selector,.25rem) * 4);padding:.125rem}.radio-lg{padding:.3125rem}.radio-lg[type=radio]{--size:calc(var(--size-selector,.25rem) * 7)}.radio-md{padding:.25rem}.radio-md[type=radio]{--size:calc(var(--size-selector,.25rem) * 6)}.radio-sm{padding:.1875rem}.radio-sm[type=radio]{--size:calc(var(--size-selector,.25rem) * 5)}.radio-xs{padding:.125rem}.radio-xs[type=radio]{--size:calc(var(--size-selector,.25rem) * 4)}.select-lg{--size:calc(var(--size-field,.25rem) * 12);font-size:1.125rem}.select-lg option{padding-block:.375rem;padding-inline:1rem}.select-md{--size:calc(var(--size-field,.25rem) * 10);font-size:.875rem}.select-md option{padding-block:.375rem;padding-inline:.75rem}.select-sm{--size:calc(var(--size-field,.25rem) * 8);font-size:.75rem}.select-sm option{padding-block:.25rem;padding-inline:.625rem}.select-xs{--size:calc(var(--size-field,.25rem) * 6);font-size:.6875rem}.select-xs option{padding-block:.25rem;padding-inline:.5rem}.table-lg :not(thead,tfoot) tr{font-size:1.125rem}.table-lg :where(th,td){padding-block:1rem;padding-inline:1.25rem}.table-md :not(thead,tfoot) tr{font-size:.875rem}.table-md :where(th,td){padding-block:.75rem;padding-inline:1rem}.table-sm :not(thead,tfoot) tr{font-size:.75rem}.table-sm :where(th,td){padding-block:.5rem;padding-inline:.75rem}.table-xs :not(thead,tfoot) tr{font-size:.6875rem}.table-xs :where(th,td){padding-block:.25rem;padding-inline:.5rem}.badge-lg{--size:calc(var(--size-selector,.25rem) * 7);font-size:1rem}.badge-md{--size:calc(var(--size-selector,.25rem) * 6);font-size:.875rem}.badge-sm{--size:calc(var(--size-selector,.25rem) * 5);font-size:.75rem}.badge-xs{--size:calc(var(--size-selector,.25rem) * 4);font-size:.625rem}.kbd-lg{--size:calc(var(--size-selector,.25rem) * 7);font-size:1rem}.kbd-md{--size:calc(var(--size-selector,.25rem) * 6);font-size:.875rem}.kbd-sm{--size:calc(var(--size-selector,.25rem) * 5);font-size:.75rem}.kbd-xl{--size:calc(var(--size-selector,.25rem) * 8);font-size:1.125rem}.kbd-xs{--size:calc(var(--size-selector,.25rem) * 4);font-size:.625rem}.alert-error{color:var(--color-error-content);--alert-border-color:var(--color-error);--alert-color:var(--color-error)}.alert-info{color:var(--color-info-content);--alert-border-color:var(--color-info);--alert-color:var(--color-info)}.alert-success{color:var(--color-success-content);--alert-border-color:var(--color-success);--alert-color:var(--color-success)}.alert-warning{color:var(--color-warning-content);--alert-border-color:var(--color-warning);--alert-color:var(--color-warning)}.checkbox-accent{color:var(--color-accent-content);--input-color:var(--color-accent)}.checkbox-error{color:var(--color-error-content);--input-color:var(--color-error)}.checkbox-info{color:var(--color-info-content);--input-color:var(--color-info)}.checkbox-primary{color:var(--color-primary-content);--input-color:var(--color-primary)}.checkbox-secondary{color:var(--color-secondary-content);--input-color:var(--color-secondary)}.checkbox-success{color:var(--color-success-content);--input-color:var(--color-success)}.checkbox-warning{color:var(--color-warning-content);--input-color:var(--color-warning)}.range-accent{color:var(--color-accent);--range-thumb:var(--color-accent-content)}.range-error{color:var(--color-error);--range-thumb:var(--color-error-content)}.range-info{color:var(--color-info);--range-thumb:var(--color-info-content)}.range-primary{color:var(--color-primary);--range-thumb:var(--color-primary-content)}.range-secondary{color:var(--color-secondary);--range-thumb:var(--color-secondary-content)}.range-success{color:var(--color-success);--range-thumb:var(--color-success-content)}.range-warning{color:var(--color-warning);--range-thumb:var(--color-warning-content)}.tooltip-accent{--tt-bg:var(--color-accent)}.tooltip-accent>.tooltip-content,.tooltip-accent[data-tip]:before{color:var(--color-accent-content)}.tooltip-error{--tt-bg:var(--color-error)}.tooltip-error>.tooltip-content,.tooltip-error[data-tip]:before{color:var(--color-error-content)}.tooltip-info{--tt-bg:var(--color-info)}.tooltip-info>.tooltip-content,.tooltip-info[data-tip]:before{color:var(--color-info-content)}.tooltip-primary{--tt-bg:var(--color-primary)}.tooltip-primary>.tooltip-content,.tooltip-primary[data-tip]:before{color:var(--color-primary-content)}.tooltip-secondary{--tt-bg:var(--color-secondary)}.tooltip-secondary>.tooltip-content,.tooltip-secondary[data-tip]:before{color:var(--color-secondary-content)}.tooltip-success{--tt-bg:var(--color-success)}.tooltip-success>.tooltip-content,.tooltip-success[data-tip]:before{color:var(--color-success-content)}.tooltip-warning{--tt-bg:var(--color-warning)}.tooltip-warning>.tooltip-content,.tooltip-warning[data-tip]:before{color:var(--color-warning-content)}.progress-accent{color:var(--color-accent)}.progress-error{color:var(--color-error)}.progress-info{color:var(--color-info)}.progress-neutral{color:var(--color-neutral)}.progress-primary{color:var(--color-primary)}.progress-secondary{color:var(--color-secondary)}.progress-success{color:var(--color-success)}.progress-warning{color:var(--color-warning)}.swap-active .swap-off{opacity:0}.swap-active .swap-on{opacity:1}.btn-lg{--fontsize:1.125rem;--btn-p:1.25rem;--size:calc(var(--size-field,.25rem) * 12)}.btn-md{--fontsize:.875rem;--btn-p:1rem;--size:calc(var(--size-field,.25rem) * 10)}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem) * 8)}.btn-xl{--fontsize:1.375rem;--btn-p:1.5rem;--size:calc(var(--size-field,.25rem) * 14)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem) * 6)}.badge-accent{--badge-color:var(--color-accent);--badge-fg:var(--color-accent-content)}.badge-error{--badge-color:var(--color-error);--badge-fg:var(--color-error-content)}.badge-info{--badge-color:var(--color-info);--badge-fg:var(--color-info-content)}.badge-primary{--badge-color:var(--color-primary);--badge-fg:var(--color-primary-content)}.badge-secondary{--badge-color:var(--color-secondary);--badge-fg:var(--color-secondary-content)}.badge-success{--badge-color:var(--color-success);--badge-fg:var(--color-success-content)}.badge-warning{--badge-color:var(--color-warning);--badge-fg:var(--color-warning-content)}.input-accent,.input-accent:focus,.input-accent:focus-within{--input-color:var(--color-accent)}.input-error,.input-error:focus,.input-error:focus-within{--input-color:var(--color-error)}.input-info,.input-info:focus,.input-info:focus-within{--input-color:var(--color-info)}.input-primary,.input-primary:focus,.input-primary:focus-within{--input-color:var(--color-primary)}.input-secondary,.input-secondary:focus,.input-secondary:focus-within{--input-color:var(--color-secondary)}.input-success,.input-success:focus,.input-success:focus-within{--input-color:var(--color-success)}.input-warning,.input-warning:focus,.input-warning:focus-within{--input-color:var(--color-warning)}.radio-accent{--input-color:var(--color-accent)}.radio-error{--input-color:var(--color-error)}.radio-info{--input-color:var(--color-info)}.radio-primary{--input-color:var(--color-primary)}.radio-secondary{--input-color:var(--color-secondary)}.radio-success{--input-color:var(--color-success)}.radio-warning{--input-color:var(--color-warning)}.range-lg{--range-thumb-size:calc(var(--size-selector,.25rem) * 7)}.range-md{--range-thumb-size:calc(var(--size-selector,.25rem) * 6)}.range-sm{--range-thumb-size:calc(var(--size-selector,.25rem) * 5)}.range-xs{--range-thumb-size:calc(var(--size-selector,.25rem) * 4)}.select-accent,.select-accent:focus,.select-accent:focus-within{--input-color:var(--color-accent)}.select-error,.select-error:focus,.select-error:focus-within{--input-color:var(--color-error)}.select-info,.select-info:focus,.select-info:focus-within{--input-color:var(--color-info)}.select-primary,.select-primary:focus,.select-primary:focus-within{--input-color:var(--color-primary)}.select-secondary,.select-secondary:focus,.select-secondary:focus-within{--input-color:var(--color-secondary)}.select-success,.select-success:focus,.select-success:focus-within{--input-color:var(--color-success)}.select-warning,.select-warning:focus,.select-warning:focus-within{--input-color:var(--color-warning)}.toggle-accent:checked,.toggle-accent[aria-checked=true]{--input-color:var(--color-accent)}.toggle-lg[type=checkbox],.toggle-lg:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 7)}.toggle-md[type=checkbox],.toggle-md:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 6)}.toggle-primary:checked,.toggle-primary[aria-checked=true]{--input-color:var(--color-primary)}.toggle-secondary:checked,.toggle-secondary[aria-checked=true]{--input-color:var(--color-secondary)}.toggle-sm[type=checkbox],.toggle-sm:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 5)}.toggle-xs[type=checkbox],.toggle-xs:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 4)}}.prose :where(a.btn:not(.btn-link)):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:none}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse:not(td,tr,colgroup){visibility:revert-layer}.validator:user-invalid~.validator-hint{display:revert-layer}.validator:has(:user-invalid)~.validator-hint{display:revert-layer}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))~.validator-hint{display:revert-layer}.collapse{visibility:collapse}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.top-0{top:calc(var(--spacing) * 0)}.top-0\.5{top:calc(var(--spacing) * .5)}.top-2{top:calc(var(--spacing) * 2)}.top-10{top:calc(var(--spacing) * 10)}.right-0{right:calc(var(--spacing) * 0)}.right-0\.5{right:calc(var(--spacing) * .5)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing) * 2)}.bottom-10{bottom:calc(var(--spacing) * 10)}.left-1\/2{left:50%}.left-1\/4{left:25%}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>:where(:focus,:has(:focus)){z-index:1}@media (hover:hover){.join>:where(.btn:hover,:has(.btn:hover)){isolation:isolate}}.-z-0{z-index:calc(0 * -1)}.z-10{z-index:10}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.my-8{margin-block:calc(var(--spacing) * 8)}.my-16{margin-block:calc(var(--spacing) * 16)}.join-vertical{flex-direction:column}.join-vertical>.join-item:first-child,.join-vertical :first-child:not(:last-child) .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:0;--join-ee:0}.join-vertical>.join-item:last-child,.join-vertical :last-child:not(:first-child) .join-item{--join-ss:0;--join-se:0;--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join-vertical>.join-item:only-child,.join-vertical :only-child .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join-vertical .join-item:where(:not(:first-child)){margin-block-start:calc(var(--border,1px) * -1);margin-inline-start:0}.-mt-10{margin-top:calc(var(--spacing) * -10)}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.ml-1{margin-left:calc(var(--spacing) * 1)}.icon-\[lucide--alert-circle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 8v4m0 4h.01'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--alert-triangle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--calendar\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M8 2v4m8-4v4'/%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M3 10h18'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--check-circle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M21.801 10A10 10 0 1 1 17 3.335'/%3E%3Cpath d='m9 11l3 3L22 4'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--check\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M20 6L9 17l-5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevron-left\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m15 18l-6-6l6-6'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevron-right\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 18l6-6l-6-6'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevrons-left\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m11 17l-5-5l5-5m7 10l-5-5l5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevrons-right\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 17l5-5l-5-5m7 10l5-5l-5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--eye-off\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242'/%3E%3Cpath d='M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--eye\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--hash\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 9h16M4 15h16M10 3L8 21m8-18l-2 18'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--heart\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 9.5a5.5 5.5 0 0 1 9.591-3.676a.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--info\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4m0-4h.01'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--link\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'/%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--lock\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='18' height='11' x='3' y='11' rx='2' ry='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--mail\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7'/%3E%3Crect width='20' height='16' x='2' y='4' rx='2'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--phone\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233a14 14 0 0 0 6.392 6.384'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--search\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='m21 21l-4.34-4.34'/%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--text\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M15 18H3M17 6H3m18 6H3'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--upload\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 3v12m5-7l-5-5l-5 5m14 7v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--x\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M18 6L6 18M6 6l12 12'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.kbd{box-shadow:none}.text-rotate{height:1lh}.alert{border-width:var(--border);border-color:var(--alert-border-color,var(--color-base-200))}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-48{height:calc(var(--spacing) * 48)}.h-96{height:calc(var(--spacing) * 96)}.h-auto{height:auto}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-20{width:calc(var(--spacing) * 20)}.w-48{width:calc(var(--spacing) * 48)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-auto{width:auto}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-\[180px\]{max-width:180px}.max-w-md{max-width:var(--container-md)}.flex-1{flex:1}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-10{--tw-translate-x:calc(var(--spacing) * 10);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * -6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * -6) * calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.\!rounded-lg{border-radius:var(--radius-lg)!important}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-box{border-radius:var(--radius-box);border-radius:var(--radius-box)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}@layer daisyui.l1{.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.btn-dash:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media (hover:none){.btn-dash:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert-soft{background:color-mix(in oklab, var(--alert-color,var(--color-base-content)) 8%, var(--color-base-100))}}.alert-soft{--alert-border-color:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert-soft{--alert-border-color:color-mix(in oklab, var(--alert-color,var(--color-base-content)) 10%, var(--color-base-100))}}.alert-soft{box-shadow:none;background-image:none}.btn-link{--btn-border:#0000;--btn-bg:#0000;--btn-noise:none;--btn-shadow:"";outline-color:currentColor;text-decoration-line:underline}.btn-link:not(.btn-disabled,.btn:disabled,.btn[disabled]){--btn-fg:var(--btn-color,var(--color-primary))}.btn-link:is(.btn-active,:hover,:active:focus,:focus-visible){--btn-border:#0000;--btn-bg:#0000}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)):not(:disabled,[disabled],.btn-disabled){--btn-fg:var(--btn-color,currentColor);outline-color:currentColor}@media (hover:none){.btn-ghost:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color,currentColor);--btn-border:#0000;--btn-noise:none;outline-color:currentColor}}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media (hover:none){.btn-outline:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 8%, var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 10%, var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-noise:none}@media (hover:none){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 8%, var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 10%, var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-noise:none}}}.btn-dash{border-style:dashed}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-base-200\/30{border-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.border-base-200\/30{border-color:color-mix(in oklab, var(--color-base-200) 30%, transparent)}}.border-base-300{border-color:var(--color-base-300)}.border-base-content\/20{border-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.border-base-content\/20{border-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.border-black\/5{border-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.border-black\/5{border-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.border-primary{border-color:var(--color-primary)}.glass{-webkit-backdrop-filter:blur(var(--glass-blur,40px));backdrop-filter:blur(var(--glass-blur,40px));background-color:#0000;background-image:linear-gradient(135deg, oklch(100% 0 0 / var(--glass-opacity,30%)) 0%, oklch(0% 0 0/0) 100%), linear-gradient(var(--glass-reflect-degree,100deg), oklch(100% 0 0 / var(--glass-reflect-opacity,5%)) 25%, oklch(0% 0 0/0) 25%);box-shadow:0 0 0 1px oklch(100% 0 0 / var(--glass-border-opacity,20%)) inset, 0 0 0 2px oklch(0% 0 0/.05);text-shadow:0 1px oklch(0% 0 0 / var(--glass-text-shadow-opacity,5%));border:none}.bg-accent{background-color:var(--color-accent)}.bg-base-100,.bg-base-100\/80{background-color:var(--color-base-100)}@supports (color:color-mix(in lab, red, red)){.bg-base-100\/80{background-color:color-mix(in oklab, var(--color-base-100) 80%, transparent)}}.bg-base-200,.bg-base-200\/30{background-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.bg-base-200\/30{background-color:color-mix(in oklab, var(--color-base-200) 30%, transparent)}}.bg-base-200\/50{background-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.bg-base-200\/50{background-color:color-mix(in oklab, var(--color-base-200) 50%, transparent)}}.bg-base-300{background-color:var(--color-base-300)}.bg-primary,.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.bg-primary\/20{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.from-primary{--tw-gradient-from:var(--color-primary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-secondary{--tw-gradient-via:var(--color-secondary);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-accent{--tw-gradient-to:var(--color-accent);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.mask-circle{--tw-mask-radial-shape:circle}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-6{padding-left:calc(var(--spacing) * 6)}.\!text-center{text-align:center!important}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-accent{color:var(--color-accent)}.text-base-content,.text-base-content\/40{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/40{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}.text-base-content\/50{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/50{color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.text-base-content\/60{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/60{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.text-base-content\/90{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/90{color:color-mix(in oklab, var(--color-base-content) 90%, transparent)}}.text-error{color:var(--color-error)}.text-primary{color:var(--color-primary)}.text-secondary{color:var(--color-secondary)}.text-transparent{color:#0000}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-primary\/20{--tw-shadow-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-primary) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-primary{--tw-ring-color:var(--color-primary)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-2xl{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:z-10:hover{z-index:10}.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-accent\/40:hover{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:border-accent\/40:hover{border-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.hover\:border-base-content\/20:hover{border-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.hover\:border-base-content\/20:hover{border-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.hover\:border-primary\/40:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab, var(--color-primary) 40%, transparent)}}.hover\:border-secondary\/40:hover{border-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-secondary\/40:hover{border-color:color-mix(in oklab, var(--color-secondary) 40%, transparent)}}.hover\:bg-base-300:hover{background-color:var(--color-base-300)}.hover\:text-base-content:hover{color:var(--color-base-content)}}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (min-width:48rem){.md\:h-64{height:calc(var(--spacing) * 64)}.md\:w-64{width:calc(var(--spacing) * 64)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}}@media (min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:join-horizontal{flex-direction:row}.lg\:join-horizontal>.join-item:first-child,.lg\:join-horizontal :first-child:not(:last-child) .join-item{--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.lg\:join-horizontal>.join-item:last-child,.lg\:join-horizontal :last-child:not(:first-child) .join-item{--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.lg\:join-horizontal>.join-item:only-child,.lg\:join-horizontal :only-child .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.lg\:join-horizontal .join-item:where(:not(:first-child)){margin-block-start:0;margin-inline-start:calc(var(--border,1px) * -1)}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}:root{font-size:14px}.input,.label,.select,.textarea{transition:all .3s cubic-bezier(.4,0,.2,1)}:is(.input,.label,.select,.textarea):focus,:is(.input,.label,.select,.textarea):focus-within{box-shadow:0 0 4px;outline:none!important}:is(.input,.label,.select,.textarea):hover:not(:focus){background-color:oklch(from var(--color-base-100) calc(l - .03) c h)}.floating-label span{color:oklch(30% .01 260);font-size:1.1rem;transition:all .2s}.floating-label:focus-within span{color:oklch(25% .02 260);font-size:1.1rem}.floating-label:has(input:not(:placeholder-shown)) span{color:oklch(28% .01 260);font-size:1.1rem}.markdown-section progress.progress{all:revert-layer}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items) * 100%)}to{translate:0 -100%}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes menu{0%{opacity:0}}@keyframes progress{50%{background-position-x:-115%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--container-md:28rem;--container-3xl:48rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-7xl:4.5rem;--text-7xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-3xl:1.5rem;--drop-shadow-2xl:0 25px 25px #00000026;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab, red, red)){:root{scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) #0000}}@property --radialprogress{syntax:"";inherits:true;initial-value:0%}:root:not(span){overflow:var(--page-overflow)}:root{background:var(--page-scroll-bg,var(--root-bg));--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) var(--root-bg,#0000)}@supports (color:color-mix(in lab, red, red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000), var(--root-bg,#0000)) color-mix(in srgb, var(--root-bg,#0000), oklch(0% 0 0) calc(var(--page-has-backdrop,0) * 40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset) ; else: unset)}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root,[data-theme]{background:var(--page-scroll-bg,var(--root-bg));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}:where(:root),:root:has(input.theme-controller[value=splight]:checked),[data-theme=splight]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(92% 0 0);--color-base-content:oklch(25% .006 285);--color-primary:oklch(25% .006 285);--color-primary-content:oklch(98% 0 0);--color-secondary:oklch(55% .046 257.417);--color-secondary-content:oklch(98% 0 0);--color-accent:oklch(96% 0 0);--color-accent-content:oklch(25% .006 285);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232);--color-success:oklch(62% .17 163);--color-warning:oklch(82% .18 84);--color-error:oklch(60% .25 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media (prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(15% .005 285.823);--color-base-200:oklch(20% .005 285.823);--color-base-300:oklch(30% .005 285.823);--color-base-content:oklch(92% .004 286.32);--color-primary:oklch(98% 0 0);--color-primary-content:oklch(15% 0 0);--color-secondary:oklch(65% .046 257.417);--color-secondary-content:oklch(15% .005 285.823);--color-accent:oklch(25% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(92% .004 286.32);--color-neutral-content:oklch(14% .005 285.823);--color-info:oklch(70% .1 230);--color-success:oklch(65% .15 160);--color-warning:oklch(85% .15 90);--color-error:oklch(55% .2 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=spdark]:checked),[data-theme=spdark]{color-scheme:dark;--color-base-100:oklch(15% .005 285.823);--color-base-200:oklch(20% .005 285.823);--color-base-300:oklch(30% .005 285.823);--color-base-content:oklch(92% .004 286.32);--color-primary:oklch(98% 0 0);--color-primary-content:oklch(15% 0 0);--color-secondary:oklch(65% .046 257.417);--color-secondary-content:oklch(15% .005 285.823);--color-accent:oklch(25% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(92% .004 286.32);--color-neutral-content:oklch(14% .005 285.823);--color-info:oklch(70% .1 230);--color-success:oklch(65% .15 160);--color-warning:oklch(85% .15 90);--color-error:oklch(55% .2 27);--radius-selector:.5rem;--radius-field:.5rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}@layer components;@layer utilities{@layer daisyui.l1.l2.l3{.diff{webkit-user-select:none;-webkit-user-select:none;user-select:none;direction:ltr;grid-template-rows:1fr 1.8rem 1fr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus-visible),.diff:focus-visible{outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:95cqi;max-width:95cqi}.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-1:focus-visible) .diff-resizer{min-width:5cqi;max-width:5cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:5cqi;max-width:5cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:95cqi;max-width:95cqi}}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:visibility .3s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}:where(.drawer-side){overflow:hidden}.drawer-side{pointer-events:none;visibility:hidden;z-index:10;overscroll-behavior:contain;opacity:0;width:100%;transition:opacity .2s ease-out .1s allow-discrete, visibility .3s ease-out .1s allow-discrete;inset-inline-start:0;background-color:#0000;grid-template-rows:repeat(1,minmax(0,1fr));grid-template-columns:repeat(1,minmax(0,1fr));grid-row-start:1;grid-column-start:1;place-items:flex-start start;height:100dvh;display:grid;position:fixed;top:0}.drawer-side>.drawer-overlay{cursor:pointer;background-color:oklch(0% 0 0/.4);place-self:stretch stretch;position:sticky;top:0}.drawer-side>*{grid-row-start:1;grid-column-start:1}.drawer-side>:not(.drawer-overlay){will-change:transform;transition:translate .3s ease-out,width .2s ease-out;translate:-100%}[dir=rtl] :is(.drawer-side>:not(.drawer-overlay)){translate:100%}.fab{pointer-events:none;z-index:999;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));white-space:nowrap;inset-inline-end:1rem;flex-direction:column-reverse;align-items:flex-end;gap:.5rem;display:flex;position:fixed;bottom:1rem}.fab>*{pointer-events:auto;align-items:center;gap:.5rem;display:flex}.fab>:hover,.fab>:has(:focus-visible){z-index:1}.fab>[tabindex]:first-child{transition-property:opacity,visibility,rotate;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:grid;position:relative}.fab .fab-close,.fab .fab-main-action{inset-inline-end:0;position:absolute;bottom:0}:is(.fab:focus-within:has(.fab-close),.fab:focus-within:has(.fab-main-action))>[tabindex]{opacity:0;rotate:90deg}.fab:focus-within>[tabindex]:first-child{pointer-events:none}.fab:focus-within>:nth-child(n+2){visibility:visible;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:1}.fab>:nth-child(n+2){visibility:hidden;--tw-scale-x:80%;--tw-scale-y:80%;--tw-scale-z:80%;scale:var(--tw-scale-x) var(--tw-scale-y);opacity:0;transition-property:opacity,scale,visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.fab>:nth-child(n+2).fab-main-action,.fab>:nth-child(n+2).fab-close{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.fab>:nth-child(3){transition-delay:30ms}.fab>:nth-child(4){transition-delay:60ms}.fab>:nth-child(5){transition-delay:90ms}.fab>:nth-child(6){transition-delay:.12s}.drawer-toggle{appearance:none;opacity:0;width:0;height:0;position:fixed}:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:currentColor oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4))}@supports (color:color-mix(in lab, red, red)){:where(.drawer-toggle:checked~.drawer-side){scrollbar-color:color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop,0) * .4))}}:where(:root:has(.drawer-toggle:checked)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}.tooltip{--tt-bg:var(--color-neutral);--tt-off:calc(100% + .5rem);--tt-tail:calc(100% + 1px + .25rem);display:inline-block;position:relative}.tooltip>.tooltip-content,.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:2;--tw-content:attr(data-tip);content:var(--tw-content);width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);display:block;position:absolute}@media (prefers-reduced-motion:no-preference){.tooltip>.tooltip-content,.tooltip[data-tip]:before,.tooltip:after{transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms}}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem}@media (prefers-reduced-motion:no-preference){:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media (hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:.75rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));--tab-radius-limit:min(var(--radius-field), var(--tab-radius-min));--tab-radius-grad:#0000 calc(69% - var(--border)), var(--tab-border-color) calc(69% - var(--border) + .25px), var(--tab-border-color) 69%, var(--tab-bg) calc(69% + .25px);order:var(--tab-order);height:var(--tab-height);padding-inline:var(--tab-p);border-color:#0000;font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content{display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0}@media (prefers-reduced-motion:no-preference){.menu details::details-content{transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.menu :where(li).menu-disabled{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.floating-label{display:block;position:relative}.floating-label input{display:block}.floating-label input::placeholder,.floating-label textarea::placeholder{transition:top .1s ease-out,translate .1s ease-out,scale .1s ease-out,opacity .1s ease-out}.floating-label>span{z-index:1;background-color:var(--color-base-100);opacity:0;inset-inline-start:.75rem;top:calc(var(--size-field,.25rem) * 10 / 2);pointer-events:none;border-radius:2px;padding-inline:.25rem;font-size:.875rem;line-height:1;transition:top .1s ease-out,translate .1s ease-out,scale .1s ease-out,opacity .1s ease-out;position:absolute;translate:0 -50%}:is(.floating-label:focus-within,.floating-label:not(:has(input:placeholder-shown,textarea:placeholder-shown))) ::placeholder{opacity:0;pointer-events:auto;top:0;translate:-12.5% calc(-50% - .125em);scale:.75}:is(.floating-label:focus-within,.floating-label:not(:has(input:placeholder-shown,textarea:placeholder-shown)))>span{opacity:1;pointer-events:auto;z-index:2;top:0;translate:-12.5% calc(-50% - .125em);scale:.75}.floating-label:has(:disabled,[disabled])>span{opacity:0}.floating-label:has(.input-xs,.select-xs,.textarea-xs) span{top:calc(var(--size-field,.25rem) * 6 / 2);font-size:.6875rem}.floating-label:has(.input-sm,.select-sm,.textarea-sm) span{top:calc(var(--size-field,.25rem) * 8 / 2);font-size:.75rem}.floating-label:has(.input-md,.select-md,.textarea-md) span{top:calc(var(--size-field,.25rem) * 10 / 2);font-size:.875rem}.floating-label:has(.input-lg,.select-lg,.textarea-lg) span{top:calc(var(--size-field,.25rem) * 12 / 2);font-size:1.125rem}.floating-label:has(.input-xl,.select-xl,.textarea-xl) span{top:calc(var(--size-field,.25rem) * 14 / 2);font-size:1.375rem}.dropdown{position-area:var(--anchor-v,bottom) var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(:has(~[class*=dropdown-content])):focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.dropdown>:not(:has(~[class*=dropdown-content])):focus{outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown.dropdown-close .dropdown-content,.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content,.dropdown.dropdown-hover:not(:hover) [tabindex]:first-child:focus:not(:focus-visible)~.dropdown-content{transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover],.dropdown .dropdown-content{z-index:999}@media (prefers-reduced-motion:no-preference){.dropdown[popover],.dropdown .dropdown-content{transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:.95}}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:1}.dropdown:is(details) summary::-webkit-details-marker{display:none}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed}@supports not (position-area:bottom){.dropdown[popover]{margin:auto}.dropdown[popover].dropdown-close{transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover].dropdown-open:not(:popover-open){transform-origin:top;opacity:0;display:none;scale:.95}.dropdown[popover]::backdrop{background-color:oklab(0% none none/.3)}}:is(.dropdown[popover].dropdown-close,.dropdown[popover]:not(.dropdown-open,:popover-open)){transform-origin:top;opacity:0;display:none;scale:.95}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0 / calc(var(--depth) * .15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0 / calc(var(--depth) * 6%)) inset, var(--btn-shadow);--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab, red, red)){.btn{--btn-border:color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000)}}.btn{--btn-noise:var(--fx-noise)}@media (hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio])[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem) * 6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.collapse{border-radius:var(--radius-box,1rem);isolation:isolate;grid-template-rows:max-content 0fr;grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:hidden}@media (prefers-reduced-motion:no-preference){.collapse{transition:grid-template-rows .2s}}.collapse>input:is([type=checkbox],[type=radio]){appearance:none;opacity:0;z-index:1;grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close)),.collapse:not(.collapse-close):has(>input:is([type=checkbox],[type=radio]):checked){grid-template-rows:max-content 1fr}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){content-visibility:visible;min-height:fit-content}@supports not (content-visibility:visible){.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){visibility:visible}}.collapse:focus-visible,.collapse:has(>input:is([type=checkbox],[type=radio]):focus-visible),.collapse:has(summary:focus-visible){outline-color:var(--color-base-content);outline-offset:2px;outline-width:2px;outline-style:solid}.collapse:not(.collapse-close)>input[type=checkbox],.collapse:not(.collapse-close)>input[type=radio]:not(:checked),.collapse:not(.collapse-close)>.collapse-title{cursor:pointer}:is(.collapse[tabindex]:focus:not(.collapse-close,.collapse[open]),.collapse[tabindex]:focus-within:not(.collapse-close,.collapse[open]))>.collapse-title{cursor:unset}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>:where(.collapse-content),.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){padding-bottom:1rem}.collapse:is(details){width:100%}@media (prefers-reduced-motion:no-preference){.collapse:is(details)::details-content{transition:content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out, height .2s;interpolate-size:allow-keywords;height:0}.collapse:is(details):where([open])::details-content{height:auto}}.collapse:is(details) summary{display:block;position:relative}.collapse:is(details) summary::-webkit-details-marker{display:none}.collapse:is(details)>.collapse-content{content-visibility:visible}.collapse:is(details) summary{outline:none}.collapse-content{content-visibility:hidden;min-height:0;cursor:unset;grid-row-start:2;grid-column-start:1;padding-left:1rem;padding-right:1rem}@supports not (content-visibility:hidden){.collapse-content{visibility:hidden}}@media (prefers-reduced-motion:no-preference){.collapse-content{transition:content-visibility .2s allow-discrete, visibility .2s allow-discrete, min-height .2s ease-out allow-discrete, padding .1s ease-out 20ms, background-color .2s ease-out}}.validator-hint{visibility:hidden;margin-top:.5rem;font-size:.75rem}.validator:user-valid{--input-color:var(--color-success)}.validator:user-valid:focus{--input-color:var(--color-success)}.validator:user-valid:checked{--input-color:var(--color-success)}.validator:user-valid[aria-checked=true]{--input-color:var(--color-success)}.validator:user-valid:focus-within{--input-color:var(--color-success)}.validator:has(:user-valid){--input-color:var(--color-success)}.validator:has(:user-valid):focus{--input-color:var(--color-success)}.validator:has(:user-valid):checked{--input-color:var(--color-success)}.validator:has(:user-valid)[aria-checked=true]{--input-color:var(--color-success)}.validator:has(:user-valid):focus-within{--input-color:var(--color-success)}.validator:user-invalid{--input-color:var(--color-error)}.validator:user-invalid:focus{--input-color:var(--color-error)}.validator:user-invalid:checked{--input-color:var(--color-error)}.validator:user-invalid[aria-checked=true]{--input-color:var(--color-error)}.validator:user-invalid:focus-within{--input-color:var(--color-error)}.validator:user-invalid~.validator-hint{visibility:visible;color:var(--color-error)}.validator:has(:user-invalid){--input-color:var(--color-error)}.validator:has(:user-invalid):focus{--input-color:var(--color-error)}.validator:has(:user-invalid):checked{--input-color:var(--color-error)}.validator:has(:user-invalid)[aria-checked=true]{--input-color:var(--color-error)}.validator:has(:user-invalid):focus-within{--input-color:var(--color-error)}.validator:has(:user-invalid)~.validator-hint{visibility:visible;color:var(--color-error)}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))),:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus,:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):checked,:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))[aria-checked=true],:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false]))):focus-within{--input-color:var(--color-error)}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))~.validator-hint{visibility:visible;color:var(--color-error)}.radial-progress{height:var(--size);width:var(--size);vertical-align:middle;box-sizing:content-box;--value:0;--size:5rem;--thickness:calc(var(--size) / 10);--radialprogress:calc(var(--value) * 1%);background-color:#0000;border-radius:3.40282e38px;place-content:center;transition:--radialprogress .3s linear;display:inline-grid;position:relative}.radial-progress:before{content:"";background:radial-gradient(farthest-side, currentColor 98%, #0000) top/var(--thickness) var(--thickness) no-repeat, conic-gradient(currentColor var(--radialprogress), #0000 0);webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));mask:radial-gradient(farthest-side, #0000 calc(100% - var(--thickness)), #000 calc(100% + .5px - var(--thickness)));border-radius:3.40282e38px;position:absolute;inset:0}.radial-progress:after{content:"";inset:calc(50% - var(--thickness) / 2);transform:rotate(calc(var(--value) * 3.6deg - 90deg)) translate(calc(var(--size) / 2 - 50%));background-color:currentColor;border-radius:3.40282e38px;transition:transform .3s linear;position:absolute}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0, auto) 1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border) solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab, red, red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab, var(--color-base-content) 5%, transparent)}}.toast{translate:var(--toast-x,0) var(--toast-y,0);inset-inline:auto 1rem;background-color:#0000;flex-direction:column;gap:.5rem;width:max-content;max-width:calc(100vw - 2rem);display:flex;position:fixed;top:auto;bottom:1rem}@media (prefers-reduced-motion:no-preference){.toast>*{animation:.25s ease-out toast}}.toggle{border:var(--border) solid currentColor;color:var(--input-color);cursor:pointer;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p), var(--radius-selector-max)) + min(var(--border), var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab, red, red)){.toggle{box-shadow:0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab, red, red)){.toggle{--input-color:color-mix(in oklab, var(--color-base-content) 50%, #0000)}}.toggle{--toggle-p:calc(var(--size) * .125);--size:calc(var(--size-selector,.25rem) * 6);width:calc((var(--size) * 2) - (var(--border) + var(--toggle-p)) * 2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:0deg}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:0deg}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);width:100%;height:100%;box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab, red, red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000)}}.toggle:before{background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise)}@media (forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border) solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab, red, red)){.input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.indicator{width:max-content;display:inline-flex;position:relative}.indicator :where(.indicator-item){z-index:1;white-space:nowrap;top:var(--indicator-t,0);bottom:var(--indicator-b,auto);left:var(--indicator-s,auto);right:var(--indicator-e,0);translate:var(--indicator-x,50%) var(--indicator-y,-50%);position:absolute}.table{border-collapse:separate;--tw-border-spacing-x:calc(.25rem * 0);--tw-border-spacing-y:calc(.25rem * 0);width:100%;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y);border-radius:var(--radius-box);text-align:left;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media (hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead,tfoot){color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.table :where(thead,tfoot){font-size:.875rem;font-weight:600}.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000)}}.steps{counter-reset:step;grid-auto-columns:1fr;grid-auto-flow:column;display:inline-grid;overflow:auto hidden}.steps .step{text-align:center;--step-bg:var(--color-base-300);--step-fg:var(--color-base-content);grid-template-rows:40px 1fr;grid-template-columns:auto;place-items:center;min-width:4rem;display:grid}.steps .step:before{width:100%;height:.5rem;color:var(--step-bg);background-color:var(--step-bg);content:"";border:1px solid;grid-row-start:1;grid-column-start:1;margin-inline-start:-100%;top:0}.steps .step>.step-icon,.steps .step:not(:has(.step-icon)):after{--tw-content:counter(step);content:var(--tw-content);counter-increment:step;z-index:1;color:var(--step-fg);background-color:var(--step-bg);border:1px solid var(--step-bg);border-radius:3.40282e38px;grid-row-start:1;grid-column-start:1;place-self:center;place-items:center;width:2rem;height:2rem;display:grid;position:relative}.steps .step:first-child:before{--tw-content:none;content:var(--tw-content)}.steps .step[data-content]:after{--tw-content:attr(data-content);content:var(--tw-content)}.range{appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem) * 6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:currentColor}@supports (color:color-mix(in lab, red, red)){.range{--range-bg:color-mix(in oklab, currentColor 10%, #0000)}}.range{cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}@media (forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));background-color:var(--range-thumb);height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));position:relative;top:50%;transform:translateY(-50%)}@supports (color:color-mix(in lab, red, red)){.range::-webkit-slider-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size) * .5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p) solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));background-color:currentColor;position:relative;top:50%}@supports (color:color-mix(in lab, red, red)){.range::-moz-range-thumb{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir,1) * -100cqw) - (var(--range-dir,1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill))}}.range:disabled{cursor:not-allowed;opacity:.3}.chat-bubble{border-radius:var(--radius-field);background-color:var(--color-base-300);width:fit-content;color:var(--color-base-content);grid-row-end:3;min-width:2.5rem;max-width:90%;min-height:2rem;padding-block:.5rem;padding-inline:1rem;display:block;position:relative}.chat-bubble:before{background-color:inherit;content:"";width:.75rem;height:.75rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-chat);-webkit-mask-image:var(--mask-chat);mask-image:var(--mask-chat);position:absolute;bottom:0;-webkit-mask-position:0 -1px;mask-position:0 -1px;-webkit-mask-size:.8125rem;mask-size:.8125rem}.select{border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;white-space:nowrap;text-overflow:ellipsis;box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:.75rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.select{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.select{border-color:var(--input-color);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.select{--size:calc(var(--size-field,.25rem) * 10)}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}[dir=rtl] .select::picker(select){translate:.5rem}[dir=rtl] .select select::picker(select){translate:.5rem}.select[multiple]{background-image:none;height:auto;padding-block:.75rem;padding-inline-end:.75rem;overflow:auto}.select select{appearance:none;width:calc(100% + 2.75rem);height:calc(100% - calc(var(--border) * 2));background:inherit;border-radius:inherit;border-style:none;align-items:center;margin-inline:-.75rem -1.75rem;padding-inline:.75rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.select select:focus,.select select:focus-within{outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.select:focus,.select:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.select:focus,.select:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}@supports (appearance:base-select){.select,.select select{appearance:base-select}:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border) solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/.2);box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth) * .1)), 0 8px 10px -6px rgb(0 0 0/calc(var(--depth) * .1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) optgroup{padding-top:.5em}:is(.select,.select select) optgroup option:first-child{margin-top:.5em}:is(.select,.select select) option{border-radius:var(--radius-field);white-space:normal;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{outline-offset:2px;outline:2px solid #0000}}:is(.select,.select select) option:not(:disabled):active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth) * 3px) -2px var(--color-neutral)}.timeline{display:flex;position:relative}.timeline>li{grid-template-rows:var(--timeline-row-start,minmax(0, 1fr)) auto var(--timeline-row-end,minmax(0, 1fr));grid-template-columns:var(--timeline-col-start,minmax(0, 1fr)) auto var(--timeline-col-end,minmax(0, 1fr));flex-shrink:0;align-items:center;display:grid;position:relative}.timeline>li>hr{border:none;width:100%}.timeline>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline>li>hr:last-child{grid-area:2/3/auto/none}@media print{.timeline>li>hr{border:.1px solid var(--color-base-300)}}.timeline :where(hr){background-color:var(--color-base-300);height:.25rem}.timeline:has(.timeline-middle hr):first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline:has(.timeline-middle hr):last-child,.timeline:not(:has(.timeline-middle)) :first-child hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline:not(:has(.timeline-middle)) :last-child hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.swap{cursor:pointer;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;place-content:center;display:inline-grid;position:relative}.swap input{appearance:none;border:none}.swap>*{grid-row-start:1;grid-column-start:1}@media (prefers-reduced-motion:no-preference){.swap>*{transition-property:transform,rotate,opacity;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.swap .swap-on,.swap .swap-indeterminate,.swap input:indeterminate~.swap-on,.swap input:is(:checked,:indeterminate)~.swap-off{opacity:0}.swap input:checked~.swap-on,.swap input:indeterminate~.swap-indeterminate{opacity:1;backface-visibility:visible}.collapse-title{grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out;position:relative}.mockup-code{border-radius:var(--radius-box);background-color:var(--color-neutral);color:var(--color-neutral-content);direction:ltr;padding-block:1.25rem;font-size:.875rem;position:relative;overflow:auto hidden}.mockup-code:before{content:"";opacity:.3;border-radius:3.40282e38px;width:.75rem;height:.75rem;margin-bottom:1rem;display:block;box-shadow:1.4em 0,2.8em 0,4.2em 0}.mockup-code pre{padding-right:1.25rem}.mockup-code pre:before{content:"";margin-right:2ch}.mockup-code pre[data-prefix]:before{--tw-content:attr(data-prefix);content:var(--tw-content);text-align:right;opacity:.5;width:2rem;display:inline-block}.avatar{vertical-align:middle;display:inline-flex;position:relative}.avatar>div{aspect-ratio:1;display:block;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.checkbox{border:var(--border) solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox{border:var(--border) solid var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 0 #0000 inset, 0 0 #0000;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:0deg}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab, var(--color-base-content) 20%, #0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:0deg}.radio{cursor:pointer;appearance:none;vertical-align:middle;border:var(--border) solid var(--input-color,currentColor);border-radius:3.40282e38px;flex-shrink:0;padding:.25rem;display:inline-block;position:relative}@supports (color:color-mix(in lab, red, red)){.radio{border:var(--border) solid var(--input-color,color-mix(in srgb, currentColor 20%, #0000))}}.radio{box-shadow:0 1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset;--size:calc(var(--size-selector,.25rem) * 6);width:var(--size);height:var(--size);color:var(--input-color,currentColor)}.radio:before{--tw-content:"";content:var(--tw-content);background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);border-radius:3.40282e38px;width:100%;height:100%;display:block}.radio:focus-visible{outline:2px solid}.radio:checked,.radio[aria-checked=true]{background-color:var(--color-base-100);border-color:currentColor}@media (prefers-reduced-motion:no-preference){.radio:checked,.radio[aria-checked=true]{animation:.2s ease-out radio}}:is(.radio:checked,.radio[aria-checked=true]):before{box-shadow:0 -1px oklch(0% 0 0 / calc(var(--depth) * .1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * .1));background-color:currentColor}@media (forced-colors:active){:is(.radio:checked,.radio[aria-checked=true]):before{outline-style:var(--tw-outline-style);outline-offset:calc(1px * -1);outline-width:1px}}@media print{:is(.radio:checked,.radio[aria-checked=true]):before{outline-offset:-1rem;outline:.25rem solid}}.rating{vertical-align:middle;display:inline-flex;position:relative}.rating input{appearance:none;border:none}.rating :where(*){background-color:var(--color-base-content);opacity:.2;border-radius:0;width:1.5rem;height:1.5rem}@media (prefers-reduced-motion:no-preference){.rating :where(*){animation:.25s ease-out rating}}.rating :where(*):is(input){cursor:pointer}.rating .rating-hidden{background-color:#0000;width:.5rem}.rating input[type=radio]:checked{background-image:none}.rating :checked,.rating [aria-checked=true],.rating [aria-current=true],.rating :has(~:checked,~[aria-checked=true],~[aria-current=true]){opacity:1}.rating :focus-visible{scale:1.1}@media (prefers-reduced-motion:no-preference){.rating :focus-visible{transition:scale .2s ease-out}}.rating :active:focus{animation:none;scale:1.1}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.drawer{grid-auto-columns:max-content auto;width:100%;display:grid;position:relative}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.progress{appearance:none;border-radius:var(--radius-box);background-color:currentColor;width:100%;height:.5rem;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.progress{background-color:color-mix(in oklab, currentcolor 20%, transparent)}}.progress{color:var(--color-base-content)}.progress:indeterminate{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%}@media (prefers-reduced-motion:no-preference){.progress:indeterminate{animation:5s ease-in-out infinite progress}}@supports ((-moz-appearance:none)){.progress:indeterminate::-moz-progress-bar{background-color:#0000}@media (prefers-reduced-motion:no-preference){.progress:indeterminate::-moz-progress-bar{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%;animation:5s ease-in-out infinite progress}}.progress::-moz-progress-bar{border-radius:var(--radius-box);background-color:currentColor}}@supports ((-webkit-appearance:none)){.progress::-webkit-progress-bar{border-radius:var(--radius-box);background-color:#0000}.progress::-webkit-progress-value{border-radius:var(--radius-box);background-color:currentColor}}.file-input{cursor:pointer;cursor:pointer;border:var(--border) solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));align-items:center;padding-inline-end:.75rem;font-size:.875rem;line-height:2;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.file-input{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.file-input{--size:calc(var(--size-field,.25rem) * 10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.file-input::file-selector-button{cursor:pointer;webkit-user-select:none;-webkit-user-select:none;user-select:none;height:calc(100% + var(--border) * 2);margin-inline-end:1rem;margin-block:calc(var(--border) * -1);color:var(--btn-fg);border-width:var(--border);border-style:solid;border-color:var(--btn-border);background-color:var(--btn-bg);background-size:calc(var(--noise) * 100%);background-image:var(--btn-noise);text-shadow:0 .5px oklch(1 0 0 / calc(var(--depth) * .15));box-shadow:0 .5px 0 .5px white inset, var(--btn-shadow);border-start-start-radius:calc(var(--join-ss,var(--radius-field) - var(--border)));border-end-start-radius:calc(var(--join-es,var(--radius-field) - var(--border)));margin-inline-start:calc(var(--border) * -1);padding-inline:1rem;font-size:.875rem;font-weight:600}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{box-shadow:0 .5px 0 .5px color-mix(in oklab, color-mix(in oklab, white 30%, var(--btn-bg)) calc(var(--depth) * 20%), #0000) inset, var(--btn-shadow)}}.file-input::file-selector-button{--size:calc(var(--size-field,.25rem) * 10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-border:var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-border:color-mix(in oklab, var(--btn-bg), #000 5%)}}.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px var(--btn-bg), 0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{--btn-shadow:0 3px 2px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000), 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) 30%, #0000)}}.file-input::file-selector-button{--btn-noise:var(--fx-noise)}.file-input:focus{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.file-input:focus{box-shadow:0 1px color-mix(in oklab, var(--input-color) 10%, #0000)}}.file-input:focus{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200)}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){box-shadow:none;color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){color:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.textarea{border:var(--border) solid #0000;appearance:none;border-radius:var(--radius-field);background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);min-height:5rem;font-size:max(var(--font-size,.875rem), .875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset;flex-shrink:1;padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab, red, red)){.textarea{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset}}.textarea{--input-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea{--input-color:color-mix(in oklab, var(--color-base-content) 20%, #0000)}}.textarea textarea{appearance:none;background-color:#0000;border:none}.textarea textarea:focus,.textarea textarea:focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.textarea textarea:focus,.textarea textarea:focus-within{outline-offset:2px;outline:2px solid #0000}}.textarea:focus,.textarea:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab, red, red)){.textarea:focus,.textarea:focus-within{box-shadow:0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000)}}.textarea:focus,.textarea:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media (pointer:coarse){@supports (-webkit-touch-callout:none){.textarea:focus,.textarea:focus-within{--font-size:1rem}}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){box-shadow:none}.textarea:has(>textarea[disabled])>textarea[disabled]{cursor:not-allowed}.stack{grid-template-rows:3px 4px 1fr 4px 3px;grid-template-columns:3px 4px 1fr 4px 3px;display:inline-grid}.stack>*{width:100%;height:100%}.stack>:nth-child(n+2){opacity:.7;width:100%}.stack>:nth-child(2){z-index:2;opacity:.9}.stack>:first-child{z-index:3;width:100%}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.tab-content{order:var(--tabcontent-order);--tabcontent-radius-ss:var(--radius-box);--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box);--tabcontent-order:1;width:100%;height:calc(100% - var(--tab-height) + var(--border));margin:var(--tabcontent-margin);border-color:#0000;border-width:var(--border);border-start-start-radius:var(--tabcontent-radius-ss);border-start-end-radius:var(--tabcontent-radius-se);border-end-end-radius:var(--tabcontent-radius-ee);border-end-start-radius:var(--tabcontent-radius-es);display:none}.timeline-end{grid-area:3/1/4/4;place-self:flex-start center;margin:.25rem}.timeline-start{grid-area:1/1/2/4;place-self:flex-end center;margin:.25rem}.stat-figure{grid-row:1/span 3;grid-column-start:2;place-self:center flex-end}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:.95;box-shadow:0 25px 50px -12px oklch(0% 0 0/.25)}.drawer-content{grid-row-start:1;grid-column-start:2;min-width:0}.timeline-middle{grid-row-start:2;grid-column-start:2}.stat-value{white-space:nowrap;grid-column-start:1;font-size:2rem;font-weight:800}.stat-desc{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-desc{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-desc{font-size:.75rem}.stat-title{white-space:nowrap;color:var(--color-base-content);grid-column-start:1}@supports (color:color-mix(in lab, red, red)){.stat-title{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.stat-title{font-size:.75rem}.chat-image{grid-row:span 2/span 2;align-self:flex-end}.chat-footer{grid-row-start:3;gap:.25rem;font-size:.6875rem;display:flex}.chat-header{grid-row-start:1;gap:.25rem;font-size:.6875rem;display:flex}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.divider{--divider-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{--tw-content:"×";content:var(--tw-content)}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.filter\!{flex-wrap:wrap!important;display:flex!important}.filter\! input[type=radio]{width:auto!important}.filter\! input{opacity:1!important;transition:margin .1s,opacity .3s,padding .3s,border-width .1s!important;overflow:hidden!important;scale:1!important}.filter\! input:not(:last-child){margin-inline-end:.25rem!important}.filter\! input.filter-reset{aspect-ratio:1!important}.filter\! input.filter-reset:after{--tw-content:"×"!important;content:var(--tw-content)!important}.filter\!:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter\!:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter\!:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0!important;border-width:0!important;width:0!important;margin-inline:0!important;padding-inline:0!important;scale:0!important}.breadcrumbs{max-width:100%;padding-block:.5rem;overflow-x:auto}.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol{white-space:nowrap;align-items:center;min-height:min-content;display:flex}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li{align-items:center;display:flex}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>*{cursor:pointer;align-items:center;gap:.5rem;display:flex}@media (hover:hover){:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:hover{text-decoration-line:underline}}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus{outline-offset:2px;outline:2px solid #0000}}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li>:focus-visible{outline-offset:2px;outline:2px solid}:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li+:before{content:"";opacity:.4;background-color:#0000;border-top:1px solid;border-right:1px solid;width:.375rem;height:.375rem;margin-inline:.5rem .75rem;display:block;rotate:45deg}[dir=rtl] :is(:is(.breadcrumbs>menu,.breadcrumbs>ul,.breadcrumbs>ol)>li)+:before{rotate:-135deg}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.label{color:color-mix(in oklab, currentcolor 60%, transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab, red, red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)}}.label\!{white-space:nowrap!important;color:currentColor!important;align-items:center!important;gap:.375rem!important;display:inline-flex!important}@supports (color:color-mix(in lab, red, red)){.label\!{color:color-mix(in oklab, currentcolor 60%, transparent)!important}}.label\!:has(input){cursor:pointer!important}.label\!:is(.input>*,.select>*){white-space:nowrap!important;height:calc(100% - .5rem)!important;font-size:inherit!important;align-items:center!important;padding-inline:.75rem!important;display:flex!important}.label\!:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid currentColor!important;margin-inline:-.75rem .75rem!important}@supports (color:color-mix(in lab, red, red)){.label\!:is(.input>*,.select>*):first-child{border-inline-end:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)!important}}.label\!:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid currentColor!important;margin-inline:.75rem -.75rem!important}@supports (color:color-mix(in lab, red, red)){.label\!:is(.input>*,.select>*):last-child{border-inline-start:var(--border) solid color-mix(in oklab, currentColor 10%, #0000)!important}}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.fieldset-legend{color:var(--color-base-content);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:-.25rem;padding-block:.5rem;font-weight:600;display:flex}.carousel-item{box-sizing:content-box;scroll-snap-align:start;flex:none;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab, red, red)){.status{background-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab, red, red)){.status{color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.status{background-image:radial-gradient(circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * .5)), #0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab, red, red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border) solid var(--badge-color,var(--color-base-200));background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem) * 6);width:fit-content;height:var(--size);padding-inline:calc(var(--size) / 2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.kbd{border-radius:var(--radius-field);background-color:var(--color-base-200);vertical-align:middle;border:var(--border) solid var(--color-base-content);justify-content:center;align-items:center;padding-inline:.5em;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.kbd{border:var(--border) solid color-mix(in srgb, var(--color-base-content) 20%, #0000)}}.kbd{border-bottom:calc(var(--border) + 1px) solid var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.kbd{border-bottom:calc(var(--border) + 1px) solid color-mix(in srgb, var(--color-base-content) 20%, #0000)}}.kbd{--size:calc(var(--size-selector,.25rem) * 6);height:var(--size);min-width:var(--size);font-size:.875rem}.text-rotate{vertical-align:bottom;white-space:nowrap;--duration:var(--tw-duration);transition-property:none;display:inline-block;overflow:hidden}.text-rotate>*{height:calc(var(--items,1) * 100%);justify-items:start;display:grid}.text-rotate>:has(:nth-child(2)){--items:2;animation:rotator var(--duration,10s) linear(0 0% 49%, .5 50% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(3)){--items:3;animation:rotator var(--duration,10s) linear(0 0% 32%, .333333 33% 65%, .666666 66% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(4)){--items:4;animation:rotator var(--duration,10s) linear(0 0% 24%, .25 25% 49%, .5 50% 74%, .75 75% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(5)){--items:5;animation:rotator var(--duration,10s) linear(0 0% 19%, .2 20% 39%, .4 40% 59%, .6 60% 79%, .8 80% 99%, 1 100% 100%) infinite}.text-rotate>:has(:nth-child(6)){--items:6;animation:rotator var(--duration,10s) linear(0 0% 15%, .16666 16% 32%, .333333 33% 49%, .5 50% 65%, .666666 66% 82%, .833333 83% 99%, 1 100% 100%) infinite}.text-rotate>*>*{clip-path:inset(.5px 0);align-content:baseline}.text-rotate>*>:first-child{translate:var(--first-item-position)}.text-rotate:hover>*{animation-play-state:paused}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem) * 10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>*{place-items:start;gap:.5rem;display:grid}.footer.footer-center{text-align:center;grid-auto-flow:column dense;place-items:center}.footer.footer-center>*{place-items:center}.stat{grid-template-columns:repeat(1,1fr);column-gap:1rem;width:100%;padding-block:1rem;padding-inline:1.5rem;display:inline-grid}.stat:not(:last-child){border-inline-end:var(--border) dashed currentColor}@supports (color:color-mix(in lab, red, red)){.stat:not(:last-child){border-inline-end:var(--border) dashed color-mix(in oklab, currentColor 10%, #0000)}}.stat:not(:last-child){border-block-end:none}.navbar-end{justify-content:flex-end;align-items:center;width:50%;display:inline-flex}.navbar-start{justify-content:flex-start;align-items:center;width:50%;display:inline-flex}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.navbar-center{flex-shrink:0;align-items:center;display:inline-flex}.carousel{scroll-snap-type:x mandatory;scrollbar-width:none;display:inline-flex;overflow-x:scroll}@media (prefers-reduced-motion:no-preference){.carousel{scroll-behavior:smooth}}.carousel::-webkit-scrollbar{display:none}.alert{--alert-border-color:var(--color-base-200);border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;background-size:auto, calc(var(--noise) * 100%);background-image:none, var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px #000, 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08));border-style:solid;grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab, red, red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * .08)) inset, 0 1px color-mix(in oklab, color-mix(in oklab, #000 20%, var(--alert-color,var(--color-base-200))) calc(var(--depth) * 20%), #0000), 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * .08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.fieldset{grid-template-columns:1fr;grid-auto-rows:max-content;gap:.375rem;padding-block:.25rem;font-size:.75rem;display:grid}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e");grid-auto-rows:min-content;column-gap:.75rem;padding-block:.25rem;display:grid}.card-actions{flex-wrap:wrap;align-items:flex-start;gap:.5rem;display:flex}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.avatar-group{display:flex;overflow:hidden}.avatar-group .avatar{border:4px solid var(--color-base-100);border-radius:3.40282e38px;overflow:hidden}.mask{vertical-align:middle;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.link:focus{outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.timeline-box{border:var(--border) solid;border-radius:var(--radius-box);border-color:var(--color-base-300);background-color:var(--color-base-100);padding-block:.5rem;padding-inline:1rem;font-size:.75rem;box-shadow:0 1px 2px oklch(0% 0 0/.05)}.btn-accent{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-info{--btn-color:var(--color-info);--btn-fg:var(--color-info-content)}.btn-neutral{--btn-color:var(--color-neutral);--btn-fg:var(--color-neutral-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-secondary{--btn-color:var(--color-secondary);--btn-fg:var(--color-secondary-content)}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}}@layer daisyui.l1.l2{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete, background-color .3s ease-out, opacity .1s ease-out;background-color:oklch(0% 0 0/.4)}:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal) .modal-box{opacity:1;translate:0;scale:1}:root:has(:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}@starting-style{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{opacity:0}}:where(.drawer-toggle:checked~.drawer-side){pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto}:where(.drawer-toggle:checked~.drawer-side)>:not(.drawer-overlay){translate:0%}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-offset:2px;outline:2px solid}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off) 50%}.tooltip:after{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail) 50%}.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn:disabled{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn[disabled]{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}.btn-disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn-disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab, var(--color-base-content) 10%, transparent)}}.btn-disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn-disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.btn-disabled{--btn-fg:color-mix(in oklch, var(--color-base-content) 20%, #0000)}}@media (prefers-reduced-motion:no-preference){.collapse[open].collapse-arrow>.collapse-title:after,.collapse.collapse-open.collapse-arrow>.collapse-title:after{transform:translateY(-50%)rotate(225deg)}}.collapse.collapse-open.collapse-plus>.collapse-title:after{--tw-content:"−";content:var(--tw-content)}:is(.collapse[tabindex].collapse-arrow:focus:not(.collapse-close),.collapse.collapse-arrow[tabindex]:focus-within:not(.collapse-close))>.collapse-title:after,.collapse.collapse-arrow:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{transform:translateY(-50%)rotate(225deg)}.collapse[open].collapse-plus>.collapse-title:after,.collapse[tabindex].collapse-plus:focus:not(.collapse-close)>.collapse-title:after,.collapse.collapse-plus:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{--tw-content:"−";content:var(--tw-content)}.tabs-lift{--tabs-height:auto;--tabs-direction:row}.tabs-lift>.tab{--tab-border:0 0 var(--border) 0;--tab-radius-ss:var(--tab-radius-limit);--tab-radius-se:var(--tab-radius-limit);--tab-radius-es:0;--tab-radius-ee:0;--tab-paddings:var(--border) var(--tab-p) 0 var(--tab-p);--tab-border-colors:#0000 #0000 var(--tab-border-color) #0000;--tab-corner-width:calc(100% + var(--tab-radius-limit) * 2);--tab-corner-height:var(--tab-radius-limit);--tab-corner-position:top left, top right;border-width:var(--tab-border);padding:var(--tab-paddings);border-color:var(--tab-border-colors);border-start-start-radius:var(--tab-radius-ss);border-start-end-radius:var(--tab-radius-se);border-end-end-radius:var(--tab-radius-ee);border-end-start-radius:var(--tab-radius-es)}.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked)){--tab-border:var(--border) var(--border) 0 var(--border);--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color);--tab-paddings:0 calc(var(--tab-p) - var(--border)) var(--border) calc(var(--tab-p) - var(--border));--tab-inset:auto auto 0 auto;--radius-start:radial-gradient(circle at top left, var(--tab-radius-grad));--radius-end:radial-gradient(circle at top right, var(--tab-radius-grad));background-color:var(--tab-bg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):before{z-index:1;content:"";width:var(--tab-corner-width);height:var(--tab-corner-height);background-position:var(--tab-corner-position);background-image:var(--radius-start), var(--radius-end);background-size:var(--tab-radius-limit) var(--tab-radius-limit);inset:var(--tab-inset);background-repeat:no-repeat;display:block;position:absolute}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{--radius-start:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{transform:rotateY(180deg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{--radius-end:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{transform:rotateY(180deg)}.tabs-lift:has(>.tab-content)>.tab:first-child:not(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){--tab-border-colors:var(--tab-border-color) var(--tab-border-color) #0000 var(--tab-border-color)}.tabs-lift>.tab-content{--tabcontent-margin:calc(-1 * var(--border)) 0 0 0;--tabcontent-radius-ss:0;--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box)}:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:first-child,:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:nth-child(n+3){--tabcontent-radius-ss:var(--radius-box)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr}.list .list-row>*{grid-row-start:1}.avatar-offline:before{content:"";z-index:1;background-color:var(--color-base-300);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}.avatar-online:before{content:"";z-index:1;background-color:var(--color-success);outline:2px solid var(--color-base-100);border-radius:3.40282e38px;width:15%;height:15%;display:block;position:absolute;top:7%;right:7%}.steps .step-neutral+.step-neutral:before,.steps .step-neutral:after,.steps .step-neutral>.step-icon{--step-bg:var(--color-neutral);--step-fg:var(--color-neutral-content)}.steps .step-primary+.step-primary:before,.steps .step-primary:after,.steps .step-primary>.step-icon{--step-bg:var(--color-primary);--step-fg:var(--color-primary-content)}.steps .step-secondary+.step-secondary:before,.steps .step-secondary:after,.steps .step-secondary>.step-icon{--step-bg:var(--color-secondary);--step-fg:var(--color-secondary-content)}.steps .step-accent+.step-accent:before,.steps .step-accent:after,.steps .step-accent>.step-icon{--step-bg:var(--color-accent);--step-fg:var(--color-accent-content)}.steps .step-info+.step-info:before,.steps .step-info:after,.steps .step-info>.step-icon{--step-bg:var(--color-info);--step-fg:var(--color-info-content)}.steps .step-success+.step-success:before,.steps .step-success:after,.steps .step-success>.step-icon{--step-bg:var(--color-success);--step-fg:var(--color-success-content)}.steps .step-warning+.step-warning:before,.steps .step-warning:after,.steps .step-warning>.step-icon{--step-bg:var(--color-warning);--step-fg:var(--color-warning-content)}.steps .step-error+.step-error:before,.steps .step-error:after,.steps .step-error>.step-icon{--step-bg:var(--color-error);--step-fg:var(--color-error-content)}.tabs-border>.tab{--tab-border-color:#0000 #0000 var(--tab-border-color) #0000;border-radius:var(--radius-field);position:relative}.tabs-border>.tab:before{content:"";background-color:var(--tab-border-color);border-radius:var(--radius-field);width:80%;height:3px;transition:background-color .2s;position:absolute;bottom:0;left:10%}:is(.tabs-border>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-border>.tab:is(input:checked),.tabs-border>.tab:is(label:has(:checked))):before{--tab-border-color:currentColor;border-top:3px solid}.checkbox:disabled,.radio:disabled{cursor:not-allowed;opacity:.2}.rating.rating-xs :where(:not(.rating-hidden)){width:1rem;height:1rem}.rating.rating-sm :where(:not(.rating-hidden)){width:1.25rem;height:1.25rem}.rating.rating-md :where(:not(.rating-hidden)){width:1.5rem;height:1.5rem}.rating.rating-lg :where(:not(.rating-hidden)){width:1.75rem;height:1.75rem}.rating.rating-xl :where(:not(.rating-hidden)){width:2rem;height:2rem}:where(.navbar){position:relative}.tooltip-bottom>.tooltip-content,.tooltip-bottom[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,-.25rem));inset:var(--tt-off) auto auto 50%}.tooltip-bottom:after{transform:translateX(-50%) translateY(var(--tt-pos,-.25rem)) rotate(180deg);inset:var(--tt-tail) auto auto 50%}.tooltip-left>.tooltip-content,.tooltip-left[data-tip]:before{transform:translateX(calc(var(--tt-pos,.25rem) - .25rem)) translateY(-50%);inset:50% var(--tt-off) auto auto}.tooltip-left:after{transform:translateX(var(--tt-pos,.25rem)) translateY(-50%) rotate(-90deg);inset:50% calc(var(--tt-tail) + 1px) auto auto}.tooltip-right>.tooltip-content,.tooltip-right[data-tip]:before{transform:translateX(calc(var(--tt-pos,-.25rem) + .25rem)) translateY(-50%);inset:50% auto auto var(--tt-off)}.tooltip-right:after{transform:translateX(var(--tt-pos,-.25rem)) translateY(-50%) rotate(90deg);inset:50% auto auto calc(var(--tt-tail) + 1px)}.tooltip-top>.tooltip-content,.tooltip-top[data-tip]:before{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off) 50%}.tooltip-top:after{transform:translateX(-50%) translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail) 50%}.dropdown-right{--anchor-h:right;--anchor-v:span-bottom}.dropdown-right .dropdown-content{transform-origin:0;inset-inline-start:100%;top:0;bottom:auto}.chat-end{grid-template-columns:1fr auto;place-items:end}.chat-end .chat-header,.chat-end .chat-footer{grid-column-start:1}.chat-end .chat-image{grid-column-start:2}.chat-end .chat-bubble{border-end-end-radius:0;grid-column-start:1}.chat-end .chat-bubble:before{inset-inline-start:100%;transform:rotateY(180deg)}[dir=rtl] :is(.chat-end .chat-bubble):before{transform:rotateY(0)}.chat-start{grid-template-columns:auto 1fr;place-items:start}.chat-start .chat-header,.chat-start .chat-footer{grid-column-start:2}.chat-start .chat-image{grid-column-start:1}.chat-start .chat-bubble{border-end-start-radius:0;grid-column-start:2}.chat-start .chat-bubble:before{inset-inline-start:-.75rem;transform:rotateY(0)}[dir=rtl] :is(.chat-start .chat-bubble):before{transform:rotateY(180deg)}.dropdown-left{--anchor-h:left;--anchor-v:span-bottom}.dropdown-left .dropdown-content{transform-origin:100%;inset-inline-end:100%;top:0;bottom:auto}.dropdown-end{--anchor-h:span-left}.dropdown-end :where(.dropdown-content){inset-inline-end:0;translate:0}[dir=rtl] :is(.dropdown-end :where(.dropdown-content)){translate:0}.dropdown-end.dropdown-left{--anchor-h:left;--anchor-v:span-top}.dropdown-end.dropdown-left .dropdown-content{top:auto;bottom:0}.dropdown-end.dropdown-right{--anchor-h:right;--anchor-v:span-top}.dropdown-end.dropdown-right .dropdown-content{top:auto;bottom:0}.dropdown-bottom{--anchor-v:bottom}.dropdown-bottom .dropdown-content{transform-origin:top;top:100%;bottom:auto}.dropdown-top{--anchor-v:top}.dropdown-top .dropdown-content{transform-origin:bottom;top:auto;bottom:100%}.btn-active{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn-active{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-200)), #000 7%)}}.btn-active{--btn-shadow:0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0);isolation:isolate}:is(.stack,.stack.stack-bottom)>*{grid-area:3/3/6/4}:is(.stack,.stack.stack-bottom)>:nth-child(2){grid-area:2/2/5/5}:is(.stack,.stack.stack-bottom)>:first-child{grid-area:1/1/4/6}.stack.stack-top>*{grid-area:1/3/4/4}.stack.stack-top>:nth-child(2){grid-area:2/2/5/5}.stack.stack-top>:first-child{grid-area:3/1/6/6}.stack.stack-start>*{grid-area:3/1/4/4}.stack.stack-start>:nth-child(2){grid-area:2/2/5/5}.stack.stack-start>:first-child{grid-area:1/3/6/6}.stack.stack-end>*{grid-area:3/3/4/6}.stack.stack-end>:nth-child(2){grid-area:2/2/5/5}.stack.stack-end>:first-child{grid-area:1/1/6/4}.tabs-box{background-color:var(--color-base-200);--tabs-box-radius:calc(3 * var(--radius-field));border-radius:calc(min(var(--tab-height) / 2, var(--radius-field)) + min(.25rem, var(--tabs-box-radius)));box-shadow:0 -.5px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 .5px oklch(0% 0 0 / calc(var(--depth) * .05)) inset;padding:.25rem}.tabs-box>.tab{border-radius:var(--radius-field);border-style:none}.tabs-box>.tab:focus-visible,.tabs-box>.tab:is(label:has(:checked:focus-visible)){outline-offset:2px}.tabs-box>.tab:focus-visible{z-index:1}.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){background-color:var(--tab-bg,var(--color-base-100));box-shadow:0 1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px 1px -1px var(--color-neutral), 0 1px 6px -4px var(--color-neutral)}@supports (color:color-mix(in lab, red, red)){.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){box-shadow:0 1px oklch(100% 0 0 / calc(var(--depth) * .1)) inset, 0 1px 1px -1px color-mix(in oklab, var(--color-neutral) calc(var(--depth) * 50%), #0000), 0 1px 6px -4px color-mix(in oklab, var(--color-neutral) calc(var(--depth) * 100%), #0000)}}@media (forced-colors:active){.tabs-box>:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-box>:is(input:checked),.tabs-box>:is(label:has(:checked)){border:1px solid}}.tabs-box>.tab-content{height:calc(100% - var(--tab-height) + var(--border) - .5rem);border-radius:calc(min(var(--tab-height) / 2, var(--radius-field)) + min(.25rem, var(--tabs-box-radius)) - var(--border));margin-top:.25rem}.timeline-horizontal{flex-direction:row}.timeline-horizontal>li{align-items:center}.timeline-horizontal>li>hr{width:100%;height:.25rem}.timeline-horizontal>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline-horizontal>li>hr:last-child{grid-area:2/3/auto/none}.timeline-horizontal .timeline-start{grid-area:1/1/2/4;place-self:flex-end center}.timeline-horizontal .timeline-end{grid-area:3/1/4/4;place-self:flex-start center}.timeline-horizontal:has(.timeline-middle)>li>hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline-horizontal:has(.timeline-middle)>li>hr:last-child,.timeline-horizontal:not(:has(.timeline-middle)) :first-child>hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline-horizontal:not(:has(.timeline-middle)) :last-child>hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline-vertical{flex-direction:column}.timeline-vertical>li{--timeline-row-start:minmax(0, 1fr);--timeline-row-end:minmax(0, 1fr);justify-items:center}.timeline-vertical>li>hr{width:.25rem;height:100%}.timeline-vertical>li>hr:first-child{grid-row-start:1;grid-column-start:2}.timeline-vertical>li>hr:last-child{grid-area:3/2/none}.timeline-vertical .timeline-start{grid-area:1/1/4/2;place-self:center flex-end}.timeline-vertical .timeline-end{grid-area:1/3/4/4;place-self:center flex-start}.timeline-vertical:has(.timeline-middle)>li>hr:first-child{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:var(--radius-selector);border-bottom-left-radius:var(--radius-selector)}.timeline-vertical:has(.timeline-middle)>li>hr:last-child,.timeline-vertical:not(:has(.timeline-middle)) :first-child>hr:last-child{border-top-left-radius:var(--radius-selector);border-top-right-radius:var(--radius-selector);border-bottom-right-radius:0;border-bottom-left-radius:0}.timeline-vertical:not(:has(.timeline-middle)) :last-child>hr:first-child{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:var(--radius-selector);border-bottom-left-radius:var(--radius-selector)}.timeline-vertical.timeline-snap-icon>li{--timeline-col-start:minmax(0, 1fr);--timeline-row-start:.5rem}.timeline-compact{--timeline-row-start:0}.timeline-compact .timeline-start{grid-area:3/1/4/4;place-self:flex-start center}.timeline-compact li:has(.timeline-start) .timeline-end{grid-row-start:auto;grid-column-start:none}.timeline-compact.timeline-vertical>li{--timeline-col-start:0}.timeline-compact.timeline-vertical .timeline-start{grid-area:1/3/4/4;place-self:center flex-start}.timeline-compact.timeline-vertical li:has(.timeline-start) .timeline-end{grid-row-start:none;grid-column-start:auto}.drawer-end{grid-auto-columns:auto max-content}.drawer-end>.drawer-toggle~.drawer-content{grid-column-start:1}.drawer-end>.drawer-toggle~.drawer-side{grid-column-start:2;justify-items:end}.drawer-end>.drawer-toggle~.drawer-side>:not(.drawer-overlay){translate:100%}[dir=rtl] :is(.drawer-end>.drawer-toggle~.drawer-side>:not(.drawer-overlay)){translate:-100%}.drawer-end>.drawer-toggle:checked~.drawer-side>:not(.drawer-overlay){translate:0%}.input-lg{--size:calc(var(--size-field,.25rem) * 12);font-size:max(var(--font-size,1.125rem), 1.125rem)}.input-lg[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input-md{--size:calc(var(--size-field,.25rem) * 10);font-size:max(var(--font-size,.875rem), .875rem)}.input-md[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input-sm{--size:calc(var(--size-field,.25rem) * 8);font-size:max(var(--font-size,.75rem), .75rem)}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.input-xs{--size:calc(var(--size-field,.25rem) * 6);font-size:max(var(--font-size,.6875rem), .6875rem)}.input-xs[type=number]::-webkit-inner-spin-button{margin-block:-.25rem;margin-inline-end:-.75rem}.avatar-placeholder>div{justify-content:center;align-items:center;display:flex}.modal-bottom{place-items:end}.modal-bottom .modal-box{--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:0;--modal-br:0;width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 100%;scale:1}.modal-middle{place-items:center}.modal-middle .modal-box{--modal-tl:var(--radius-box);--modal-tr:var(--radius-box);--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:91.6667%;max-width:32rem;height:auto;max-height:calc(100vh - 5em);translate:0 2%;scale:.98}.modal-top{place-items:start}.modal-top .modal-box{--modal-tl:0;--modal-tr:0;--modal-bl:var(--radius-box);--modal-br:var(--radius-box);width:100%;max-width:none;height:auto;max-height:calc(100vh - 5em);translate:0 -100%;scale:1}.divider-horizontal{--divider-m:0 1rem}.divider-horizontal.divider{flex-direction:column;width:1rem;height:auto}.divider-horizontal.divider:before,.divider-horizontal.divider:after{width:.125rem;height:100%}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.btn-wide{width:100%;max-width:16rem}.rating-half.rating-xs :not(.rating-hidden){width:.5rem}.rating-half.rating-sm :not(.rating-hidden){width:.625rem}.rating-half.rating-md :not(.rating-hidden){width:.75rem}.rating-half.rating-lg :not(.rating-hidden){width:.875rem}.rating-half.rating-xl :not(.rating-hidden){width:1rem}.btn-block{width:100%}.swap-rotate .swap-on,.swap-rotate input:indeterminate~.swap-on{rotate:45deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-on,.swap-rotate.swap-active .swap-on{rotate:0deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-off,.swap-rotate.swap-active .swap-off{rotate:-45deg}.swap-flip{transform-style:preserve-3d;perspective:20rem}.swap-flip .swap-on,.swap-flip .swap-indeterminate,.swap-flip input:indeterminate~.swap-on{backface-visibility:hidden;transform:rotateY(180deg)}.swap-flip input:is(:checked,:indeterminate)~.swap-on,.swap-flip.swap-active .swap-on{transform:rotateY(0)}.swap-flip input:is(:checked,:indeterminate)~.swap-off,.swap-flip.swap-active .swap-off{backface-visibility:hidden;opacity:1;transform:rotateY(-180deg)}.badge-dash{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-style:dashed;border-color:currentColor}.badge-soft{color:var(--badge-color,var(--color-base-content));background-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.badge-soft{background-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 8%, var(--color-base-100))}}.badge-soft{border-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.badge-soft{border-color:color-mix(in oklab, var(--badge-color,var(--color-base-content)) 10%, var(--color-base-100))}}.badge-soft{background-image:none}.input-ghost{box-shadow:none;background-color:#0000;border-color:#0000}.input-ghost:focus,.input-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.badge-outline{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-color:currentColor}.table-zebra tbody tr:where(:nth-child(2n)),.table-zebra tbody tr:where(:nth-child(2n)) :where(.table-pin-cols tr th){background-color:var(--color-base-200)}@media (hover:hover){:is(.table-zebra tbody tr.row-hover,.table-zebra tbody tr.row-hover:where(:nth-child(2n))):hover{background-color:var(--color-base-300)}}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.mask-circle{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e")}.mask-heart{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='200' height='185' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='200' height='185' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 184.606a15.384 15.384 0 0 1-8.653-2.678C53.565 156.28 37.205 138.695 28.182 127.7 8.952 104.264-.254 80.202.005 54.146.308 24.287 24.264 0 53.406 0c21.192 0 35.869 11.937 44.416 21.879a2.884 2.884 0 0 0 4.356 0C110.725 11.927 125.402 0 146.594 0c29.142 0 53.098 24.287 53.4 54.151.26 26.061-8.956 50.122-28.176 73.554-9.023 10.994-25.383 28.58-63.165 54.228a15.384 15.384 0 0 1-8.653 2.673Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e")}.mask-star{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 137.263-58.779 42.024 22.163-68.389L.894 68.481l72.476-.243L96 0l22.63 68.238 72.476.243-58.49 42.417 22.163 68.389z' fill-rule='evenodd'/%3e%3c/svg%3e")}.mask-star-2{-webkit-mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z' fill-rule='evenodd'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg width='192' height='180' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 153.044-58.779 26.243 7.02-63.513L.894 68.481l63.117-13.01L96 0l31.989 55.472 63.117 13.01-43.347 47.292 7.02 63.513z' fill-rule='evenodd'/%3e%3c/svg%3e")}.checkbox-lg{--size:calc(var(--size-selector,.25rem) * 7);padding:.3125rem}.checkbox-md{--size:calc(var(--size-selector,.25rem) * 6);padding:.25rem}.checkbox-sm{--size:calc(var(--size-selector,.25rem) * 5);padding:.1875rem}.checkbox-xs{--size:calc(var(--size-selector,.25rem) * 4);padding:.125rem}.radio-lg{padding:.3125rem}.radio-lg[type=radio]{--size:calc(var(--size-selector,.25rem) * 7)}.radio-md{padding:.25rem}.radio-md[type=radio]{--size:calc(var(--size-selector,.25rem) * 6)}.radio-sm{padding:.1875rem}.radio-sm[type=radio]{--size:calc(var(--size-selector,.25rem) * 5)}.radio-xs{padding:.125rem}.radio-xs[type=radio]{--size:calc(var(--size-selector,.25rem) * 4)}.select-lg{--size:calc(var(--size-field,.25rem) * 12);font-size:1.125rem}.select-lg option{padding-block:.375rem;padding-inline:1rem}.select-md{--size:calc(var(--size-field,.25rem) * 10);font-size:.875rem}.select-md option{padding-block:.375rem;padding-inline:.75rem}.select-sm{--size:calc(var(--size-field,.25rem) * 8);font-size:.75rem}.select-sm option{padding-block:.25rem;padding-inline:.625rem}.select-xs{--size:calc(var(--size-field,.25rem) * 6);font-size:.6875rem}.select-xs option{padding-block:.25rem;padding-inline:.5rem}.table-lg :not(thead,tfoot) tr{font-size:1.125rem}.table-lg :where(th,td){padding-block:1rem;padding-inline:1.25rem}.table-md :not(thead,tfoot) tr{font-size:.875rem}.table-md :where(th,td){padding-block:.75rem;padding-inline:1rem}.table-sm :not(thead,tfoot) tr{font-size:.75rem}.table-sm :where(th,td){padding-block:.5rem;padding-inline:.75rem}.table-xs :not(thead,tfoot) tr{font-size:.6875rem}.table-xs :where(th,td){padding-block:.25rem;padding-inline:.5rem}.badge-lg{--size:calc(var(--size-selector,.25rem) * 7);font-size:1rem}.badge-md{--size:calc(var(--size-selector,.25rem) * 6);font-size:.875rem}.badge-sm{--size:calc(var(--size-selector,.25rem) * 5);font-size:.75rem}.badge-xs{--size:calc(var(--size-selector,.25rem) * 4);font-size:.625rem}.kbd-lg{--size:calc(var(--size-selector,.25rem) * 7);font-size:1rem}.kbd-md{--size:calc(var(--size-selector,.25rem) * 6);font-size:.875rem}.kbd-sm{--size:calc(var(--size-selector,.25rem) * 5);font-size:.75rem}.kbd-xl{--size:calc(var(--size-selector,.25rem) * 8);font-size:1.125rem}.kbd-xs{--size:calc(var(--size-selector,.25rem) * 4);font-size:.625rem}.alert-error{color:var(--color-error-content);--alert-border-color:var(--color-error);--alert-color:var(--color-error)}.alert-info{color:var(--color-info-content);--alert-border-color:var(--color-info);--alert-color:var(--color-info)}.alert-success{color:var(--color-success-content);--alert-border-color:var(--color-success);--alert-color:var(--color-success)}.alert-warning{color:var(--color-warning-content);--alert-border-color:var(--color-warning);--alert-color:var(--color-warning)}.checkbox-accent{color:var(--color-accent-content);--input-color:var(--color-accent)}.checkbox-error{color:var(--color-error-content);--input-color:var(--color-error)}.checkbox-info{color:var(--color-info-content);--input-color:var(--color-info)}.checkbox-primary{color:var(--color-primary-content);--input-color:var(--color-primary)}.checkbox-secondary{color:var(--color-secondary-content);--input-color:var(--color-secondary)}.checkbox-success{color:var(--color-success-content);--input-color:var(--color-success)}.checkbox-warning{color:var(--color-warning-content);--input-color:var(--color-warning)}.range-accent{color:var(--color-accent);--range-thumb:var(--color-accent-content)}.range-error{color:var(--color-error);--range-thumb:var(--color-error-content)}.range-info{color:var(--color-info);--range-thumb:var(--color-info-content)}.range-primary{color:var(--color-primary);--range-thumb:var(--color-primary-content)}.range-secondary{color:var(--color-secondary);--range-thumb:var(--color-secondary-content)}.range-success{color:var(--color-success);--range-thumb:var(--color-success-content)}.range-warning{color:var(--color-warning);--range-thumb:var(--color-warning-content)}.tooltip-accent{--tt-bg:var(--color-accent)}.tooltip-accent>.tooltip-content,.tooltip-accent[data-tip]:before{color:var(--color-accent-content)}.tooltip-error{--tt-bg:var(--color-error)}.tooltip-error>.tooltip-content,.tooltip-error[data-tip]:before{color:var(--color-error-content)}.tooltip-info{--tt-bg:var(--color-info)}.tooltip-info>.tooltip-content,.tooltip-info[data-tip]:before{color:var(--color-info-content)}.tooltip-primary{--tt-bg:var(--color-primary)}.tooltip-primary>.tooltip-content,.tooltip-primary[data-tip]:before{color:var(--color-primary-content)}.tooltip-secondary{--tt-bg:var(--color-secondary)}.tooltip-secondary>.tooltip-content,.tooltip-secondary[data-tip]:before{color:var(--color-secondary-content)}.tooltip-success{--tt-bg:var(--color-success)}.tooltip-success>.tooltip-content,.tooltip-success[data-tip]:before{color:var(--color-success-content)}.tooltip-warning{--tt-bg:var(--color-warning)}.tooltip-warning>.tooltip-content,.tooltip-warning[data-tip]:before{color:var(--color-warning-content)}.progress-accent{color:var(--color-accent)}.progress-error{color:var(--color-error)}.progress-info{color:var(--color-info)}.progress-neutral{color:var(--color-neutral)}.progress-primary{color:var(--color-primary)}.progress-secondary{color:var(--color-secondary)}.progress-success{color:var(--color-success)}.progress-warning{color:var(--color-warning)}.swap-active .swap-off{opacity:0}.swap-active .swap-on{opacity:1}.btn-lg{--fontsize:1.125rem;--btn-p:1.25rem;--size:calc(var(--size-field,.25rem) * 12)}.btn-md{--fontsize:.875rem;--btn-p:1rem;--size:calc(var(--size-field,.25rem) * 10)}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem) * 8)}.btn-xl{--fontsize:1.375rem;--btn-p:1.5rem;--size:calc(var(--size-field,.25rem) * 14)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem) * 6)}.badge-accent{--badge-color:var(--color-accent);--badge-fg:var(--color-accent-content)}.badge-error{--badge-color:var(--color-error);--badge-fg:var(--color-error-content)}.badge-info{--badge-color:var(--color-info);--badge-fg:var(--color-info-content)}.badge-primary{--badge-color:var(--color-primary);--badge-fg:var(--color-primary-content)}.badge-secondary{--badge-color:var(--color-secondary);--badge-fg:var(--color-secondary-content)}.badge-success{--badge-color:var(--color-success);--badge-fg:var(--color-success-content)}.badge-warning{--badge-color:var(--color-warning);--badge-fg:var(--color-warning-content)}.input-accent,.input-accent:focus,.input-accent:focus-within{--input-color:var(--color-accent)}.input-error,.input-error:focus,.input-error:focus-within{--input-color:var(--color-error)}.input-info,.input-info:focus,.input-info:focus-within{--input-color:var(--color-info)}.input-primary,.input-primary:focus,.input-primary:focus-within{--input-color:var(--color-primary)}.input-secondary,.input-secondary:focus,.input-secondary:focus-within{--input-color:var(--color-secondary)}.input-success,.input-success:focus,.input-success:focus-within{--input-color:var(--color-success)}.input-warning,.input-warning:focus,.input-warning:focus-within{--input-color:var(--color-warning)}.radio-accent{--input-color:var(--color-accent)}.radio-error{--input-color:var(--color-error)}.radio-info{--input-color:var(--color-info)}.radio-primary{--input-color:var(--color-primary)}.radio-secondary{--input-color:var(--color-secondary)}.radio-success{--input-color:var(--color-success)}.radio-warning{--input-color:var(--color-warning)}.range-lg{--range-thumb-size:calc(var(--size-selector,.25rem) * 7)}.range-md{--range-thumb-size:calc(var(--size-selector,.25rem) * 6)}.range-sm{--range-thumb-size:calc(var(--size-selector,.25rem) * 5)}.range-xs{--range-thumb-size:calc(var(--size-selector,.25rem) * 4)}.select-accent,.select-accent:focus,.select-accent:focus-within{--input-color:var(--color-accent)}.select-error,.select-error:focus,.select-error:focus-within{--input-color:var(--color-error)}.select-info,.select-info:focus,.select-info:focus-within{--input-color:var(--color-info)}.select-primary,.select-primary:focus,.select-primary:focus-within{--input-color:var(--color-primary)}.select-secondary,.select-secondary:focus,.select-secondary:focus-within{--input-color:var(--color-secondary)}.select-success,.select-success:focus,.select-success:focus-within{--input-color:var(--color-success)}.select-warning,.select-warning:focus,.select-warning:focus-within{--input-color:var(--color-warning)}.toggle-accent:checked,.toggle-accent[aria-checked=true]{--input-color:var(--color-accent)}.toggle-lg[type=checkbox],.toggle-lg:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 7)}.toggle-md[type=checkbox],.toggle-md:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 6)}.toggle-primary:checked,.toggle-primary[aria-checked=true]{--input-color:var(--color-primary)}.toggle-secondary:checked,.toggle-secondary[aria-checked=true]{--input-color:var(--color-secondary)}.toggle-sm[type=checkbox],.toggle-sm:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 5)}.toggle-xs[type=checkbox],.toggle-xs:has([type=checkbox]){--size:calc(var(--size-selector,.25rem) * 4)}}.prose :where(a.btn:not(.btn-link)):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:none}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse:not(td,tr,colgroup){visibility:revert-layer}.validator:user-invalid~.validator-hint{display:revert-layer}.validator:has(:user-invalid)~.validator-hint{display:revert-layer}:is(.validator[aria-invalid]:not([aria-invalid=false]),.validator:has([aria-invalid]:not([aria-invalid=false])))~.validator-hint{display:revert-layer}.\!visible{visibility:visible!important}.collapse{visibility:collapse}.visible{visibility:visible}.visible\!{visibility:visible!important}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing) * 0)}.top-0\.5{top:calc(var(--spacing) * .5)}.top-2{top:calc(var(--spacing) * 2)}.top-10{top:calc(var(--spacing) * 10)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-0\.5{right:calc(var(--spacing) * .5)}.right-1\/4{right:25%}.right-2{right:calc(var(--spacing) * 2)}.bottom-10{bottom:calc(var(--spacing) * 10)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-1\/4{left:25%}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>:where(:focus,:has(:focus)){z-index:1}@media (hover:hover){.join>:where(.btn:hover,:has(.btn:hover)){isolation:isolate}}.-z-0{z-index:calc(0 * -1)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-auto{margin-inline:auto}.my-8{margin-block:calc(var(--spacing) * 8)}.my-16{margin-block:calc(var(--spacing) * 16)}.join-vertical{flex-direction:column}.join-vertical>.join-item:first-child,.join-vertical :first-child:not(:last-child) .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:0;--join-ee:0}.join-vertical>.join-item:last-child,.join-vertical :last-child:not(:first-child) .join-item{--join-ss:0;--join-se:0;--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join-vertical>.join-item:only-child,.join-vertical :only-child .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join-vertical .join-item:where(:not(:first-child)){margin-block-start:calc(var(--border,1px) * -1);margin-inline-start:0}.-mt-10{margin-top:calc(var(--spacing) * -10)}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.ml-1{margin-left:calc(var(--spacing) * 1)}.icon-\[lucide--alert-circle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 8v4m0 4h.01'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--alert-triangle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--calendar\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M8 2v4m8-4v4'/%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M3 10h18'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--check-circle\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M21.801 10A10 10 0 1 1 17 3.335'/%3E%3Cpath d='m9 11l3 3L22 4'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--check\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M20 6L9 17l-5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevron-left\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m15 18l-6-6l6-6'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevron-right\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 18l6-6l-6-6'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevrons-left\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m11 17l-5-5l5-5m7 10l-5-5l5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--chevrons-right\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 17l5-5l-5-5m7 10l5-5l-5-5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--eye-off\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242'/%3E%3Cpath d='M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--eye\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--hash\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 9h16M4 15h16M10 3L8 21m8-18l-2 18'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--heart\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 9.5a5.5 5.5 0 0 1 9.591-3.676a.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--info\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cpath d='M12 16v-4m0-4h.01'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--link\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'/%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--lock\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Crect width='18' height='11' x='3' y='11' rx='2' ry='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--mail\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7'/%3E%3Crect width='20' height='16' x='2' y='4' rx='2'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--paperclip\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m16 6l-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--phone\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233a14 14 0 0 0 6.392 6.384'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--search\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='m21 21l-4.34-4.34'/%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3C/g%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--text\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M15 18H3M17 6H3m18 6H3'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--upload\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M12 3v12m5-7l-5-5l-5 5m14 7v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[lucide--x\]{width:1em;height:1em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M18 6L6 18M6 6l12 12'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.kbd{box-shadow:none}.text-rotate{height:1lh}.alert{border-width:var(--border);border-color:var(--alert-border-color,var(--color-base-200))}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\!{display:flex!important}.grid{display:grid}.hidden{display:none}.hidden\!{display:none!important}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-48{height:calc(var(--spacing) * 48)}.h-96{height:calc(var(--spacing) * 96)}.h-auto{height:auto}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[22rem\]{min-height:22rem}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-20{width:calc(var(--spacing) * 20)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-\[180px\]{max-width:180px}.max-w-md{max-width:var(--container-md)}.flex-1{flex:1}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-10{--tw-translate-x:calc(var(--spacing) * 10);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * -6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * -6) * calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.\!rounded-lg{border-radius:var(--radius-lg)!important}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-box{border-radius:var(--radius-box);border-radius:var(--radius-box)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}@layer daisyui.l1{.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.btn-dash:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media (hover:none){.btn-dash:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert-soft{background:color-mix(in oklab, var(--alert-color,var(--color-base-content)) 8%, var(--color-base-100))}}.alert-soft{--alert-border-color:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.alert-soft{--alert-border-color:color-mix(in oklab, var(--alert-color,var(--color-base-content)) 10%, var(--color-base-100))}}.alert-soft{box-shadow:none;background-image:none}.btn-link{--btn-border:#0000;--btn-bg:#0000;--btn-noise:none;--btn-shadow:"";outline-color:currentColor;text-decoration-line:underline}.btn-link:not(.btn-disabled,.btn:disabled,.btn[disabled]){--btn-fg:var(--btn-color,var(--color-primary))}.btn-link:is(.btn-active,:hover,:active:focus,:focus-visible){--btn-border:#0000;--btn-bg:#0000}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)):not(:disabled,[disabled],.btn-disabled){--btn-fg:var(--btn-color,currentColor);outline-color:currentColor}@media (hover:none){.btn-ghost:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color,currentColor);--btn-border:#0000;--btn-noise:none;outline-color:currentColor}}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media (hover:none){.btn-outline:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 8%, var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 10%, var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-noise:none}@media (hover:none){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-bg:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 8%, var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab, red, red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:color-mix(in oklab, var(--btn-color,var(--color-base-content)) 10%, var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-noise:none}}}.btn-dash{border-style:dashed}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-base-200\/30{border-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.border-base-200\/30{border-color:color-mix(in oklab, var(--color-base-200) 30%, transparent)}}.border-base-300{border-color:var(--color-base-300)}.border-base-content\/20{border-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.border-base-content\/20{border-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.border-black\/5{border-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.border-black\/5{border-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.border-primary{border-color:var(--color-primary)}.glass{-webkit-backdrop-filter:blur(var(--glass-blur,40px));backdrop-filter:blur(var(--glass-blur,40px));background-color:#0000;background-image:linear-gradient(135deg, oklch(100% 0 0 / var(--glass-opacity,30%)) 0%, oklch(0% 0 0/0) 100%), linear-gradient(var(--glass-reflect-degree,100deg), oklch(100% 0 0 / var(--glass-reflect-opacity,5%)) 25%, oklch(0% 0 0/0) 25%);box-shadow:0 0 0 1px oklch(100% 0 0 / var(--glass-border-opacity,20%)) inset, 0 0 0 2px oklch(0% 0 0/.05);text-shadow:0 1px oklch(0% 0 0 / var(--glass-text-shadow-opacity,5%));border:none}.bg-accent{background-color:var(--color-accent)}.bg-base-100,.bg-base-100\/80{background-color:var(--color-base-100)}@supports (color:color-mix(in lab, red, red)){.bg-base-100\/80{background-color:color-mix(in oklab, var(--color-base-100) 80%, transparent)}}.bg-base-200,.bg-base-200\/30{background-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.bg-base-200\/30{background-color:color-mix(in oklab, var(--color-base-200) 30%, transparent)}}.bg-base-200\/50{background-color:var(--color-base-200)}@supports (color:color-mix(in lab, red, red)){.bg-base-200\/50{background-color:color-mix(in oklab, var(--color-base-200) 50%, transparent)}}.bg-base-300{background-color:var(--color-base-300)}.bg-primary,.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.bg-primary\/20{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/20{background-color:color-mix(in oklab, var(--color-primary) 20%, transparent)}}.bg-transparent{background-color:#0000}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.from-primary{--tw-gradient-from:var(--color-primary);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-secondary{--tw-gradient-via:var(--color-secondary);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-accent{--tw-gradient-to:var(--color-accent);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.mask-circle{--tw-mask-radial-shape:circle}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-6{padding-left:calc(var(--spacing) * 6)}.\!text-center{text-align:center!important}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-accent{color:var(--color-accent)}.text-base-content,.text-base-content\/40{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/40{color:color-mix(in oklab, var(--color-base-content) 40%, transparent)}}.text-base-content\/50{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/50{color:color-mix(in oklab, var(--color-base-content) 50%, transparent)}}.text-base-content\/60{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/60{color:color-mix(in oklab, var(--color-base-content) 60%, transparent)}}.text-base-content\/90{color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/90{color:color-mix(in oklab, var(--color-base-content) 90%, transparent)}}.text-error{color:var(--color-error)}.text-primary{color:var(--color-primary)}.text-secondary{color:var(--color-secondary)}.text-transparent{color:#0000}.uppercase{text-transform:uppercase}.italic{font-style:italic}.italic\!{font-style:italic!important}.underline{text-decoration-line:underline}.underline\!{text-decoration-line:underline!important}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow\!{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-primary\/20{--tw-shadow-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-primary) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-primary{--tw-ring-color:var(--color-primary)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline\!{outline-style:var(--tw-outline-style)!important;outline-width:1px!important}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-2xl{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:translate-x-1:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:z-10:hover{z-index:10}.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-accent\/40:hover{border-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:border-accent\/40:hover{border-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.hover\:border-base-content\/20:hover{border-color:var(--color-base-content)}@supports (color:color-mix(in lab, red, red)){.hover\:border-base-content\/20:hover{border-color:color-mix(in oklab, var(--color-base-content) 20%, transparent)}}.hover\:border-primary\/40:hover{border-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab, var(--color-primary) 40%, transparent)}}.hover\:border-secondary\/40:hover{border-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:border-secondary\/40:hover{border-color:color-mix(in oklab, var(--color-secondary) 40%, transparent)}}.hover\:bg-base-300:hover{background-color:var(--color-base-300)}.hover\:text-base-content:hover{color:var(--color-base-content)}}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}@media (min-width:48rem){.md\:h-64{height:calc(var(--spacing) * 64)}.md\:w-64{width:calc(var(--spacing) * 64)}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-9xl{font-size:var(--text-9xl);line-height:var(--tw-leading,var(--text-9xl--line-height))}}@media (min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:join-horizontal{flex-direction:row}.lg\:join-horizontal>.join-item:first-child,.lg\:join-horizontal :first-child:not(:last-child) .join-item{--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.lg\:join-horizontal>.join-item:last-child,.lg\:join-horizontal :last-child:not(:first-child) .join-item{--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.lg\:join-horizontal>.join-item:only-child,.lg\:join-horizontal :only-child .join-item{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.lg\:join-horizontal .join-item:where(:not(:first-child)){margin-block-start:0;margin-inline-start:calc(var(--border,1px) * -1)}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (hover:hover){.\[\&_\.resizable-img-container\]\:hover\:border-primary .resizable-img-container:hover{border-color:var(--color-primary)}}.\[\&_blockquote\]\:border-l-4 blockquote{border-left-style:var(--tw-border-style);border-left-width:4px}.\[\&_blockquote\]\:border-base-300 blockquote{border-color:var(--color-base-300)}.\[\&_blockquote\]\:pl-4 blockquote{padding-left:calc(var(--spacing) * 4)}.\[\&_blockquote\]\:italic blockquote{font-style:italic}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.\[\&_ol\]\:pl-8 ol{padding-left:calc(var(--spacing) * 8)}.\[\&_ul\]\:list-disc ul{list-style-type:disc}.\[\&_ul\]\:pl-8 ul{padding-left:calc(var(--spacing) * 8)}.\[\&\>div\]\:m-0>div{margin:calc(var(--spacing) * 0)}.\[\&\>div\]\:min-h-\[1em\]>div{min-height:1em}.\[\&\>p\]\:m-0>p{margin:calc(var(--spacing) * 0)}}:root{font-size:14px}.input,.label,.select,.textarea{transition:all .3s cubic-bezier(.4,0,.2,1)}:is(.input,.label,.select,.textarea):focus,:is(.input,.label,.select,.textarea):focus-within{box-shadow:0 0 4px;outline:none!important}:is(.input,.label,.select,.textarea):hover:not(:focus){background-color:oklch(from var(--color-base-100) calc(l - .03) c h)}.floating-label span{color:oklch(30% .01 260);font-size:1.1rem;transition:all .2s}.floating-label:focus-within span{color:oklch(25% .02 260);font-size:1.1rem}.floating-label:has(input:not(:placeholder-shown)) span{color:oklch(28% .01 260);font-size:1.1rem}.markdown-section progress.progress{all:revert-layer}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items) * 100%)}to{translate:0 -100%}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes menu{0%{opacity:0}}@keyframes progress{50%{background-position-x:-115%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file diff --git a/package.json b/package.json index e157720..4a6cdb0 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,8 @@ "default": "./dist/sigpro.js" }, "./utils": "./dist/sigpro.utils.js", + "./grid": "./dist/sigpro.grid.js", + "./editor": "./dist/sigpro.editor.js", "./vite": "./dist/sigpro.vite.js", "./ui": "./dist/sigpro.ui.js" }, @@ -45,18 +47,21 @@ "build:core": "bun build ./src/sigpro.js --bundle --outfile=./dist/sigpro.js --format=esm --minify", "build:utils": "bun build ./src/sigpro.utils.js --bundle --outfile=./dist/sigpro.utils.js --format=esm --external ./src/sigpro.js --minify", "build:ui": "bun build ./src/sigpro.ui.js --bundle --outfile=./dist/sigpro.ui.js --format=esm --external ./src/sigpro.js --minify", + "build:grid": "bun build ./src/sigpro.grid.js --bundle --external sigpro --outfile=./dist/sigpro.grid.js --format=esm --minify", + "build:editor": "bun build ./src/sigpro.editor.js --bundle --external sigpro --outfile=./dist/sigpro.editor.js --format=esm --minify", "build:vite": "bun build ./src/sigpro.vite.js --bundle --outfile=./dist/sigpro.vite.js --format=esm --external fs --external path --minify", "build:css": "tailwindcss -i ./src/sigpro.ui.css -o ./dist/sigpro.ui.css --minify --content './src/tailwind' && du -h ./dist/sigpro.ui.css", "build:convert": "bun build ./src/sigpro.convert.js --bundle --outfile=./docs/sigpro.convert.js --format=esm --external ./src/sigpro.js --minify", - "build": "bun run build:core && bun run build:utils && bun run build:ui && bun run build:vite && bun run build:css && bun run build:convert && cp ./dist/* ./docs", + "build": "bun run build:core && bun run build:utils && bun run build:ui && bun run build:grid && bun run build:editor && bun run build:vite && bun run build:css && bun run build:convert && cp ./dist/* ./docs", "docs": "bun x serve docs" }, "devDependencies": { - "@iconify/json": "^2.2.471", + "@iconify/json": "^2.2.473", "@iconify/tailwind4": "^1.2.3", "@tailwindcss/cli": "^4.3.0", "daisyui": "^5.5.19", - "tailwindcss": "^4.3.0" + "tailwindcss": "^4.3.0", + "ag-grid-community": "^35.3.0" }, "keywords": [ "signals", diff --git a/src/grid-e/main.esm.mjs b/src/grid-e/main.esm.mjs new file mode 100644 index 0000000..1a909f2 --- /dev/null +++ b/src/grid-e/main.esm.mjs @@ -0,0 +1,66843 @@ +// packages/ag-grid-enterprise/src/license/gridLicenseManager.ts +import { BeanStub, _getDocument } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/license/shared/licenseManager.ts +import { _exists, _logPreInitWarn } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/license/shared/md5.ts +var MD5 = class { + constructor() { + this.ieCompatibility = false; + } + init() { + this.ieCompatibility = this.md5("hello") != "5d41402abc4b2a76b9719d911017c592"; + } + md5cycle(x, k) { + let a = x[0], b = x[1], c = x[2], d = x[3]; + a = this.ff(a, b, c, d, k[0], 7, -680876936); + d = this.ff(d, a, b, c, k[1], 12, -389564586); + c = this.ff(c, d, a, b, k[2], 17, 606105819); + b = this.ff(b, c, d, a, k[3], 22, -1044525330); + a = this.ff(a, b, c, d, k[4], 7, -176418897); + d = this.ff(d, a, b, c, k[5], 12, 1200080426); + c = this.ff(c, d, a, b, k[6], 17, -1473231341); + b = this.ff(b, c, d, a, k[7], 22, -45705983); + a = this.ff(a, b, c, d, k[8], 7, 1770035416); + d = this.ff(d, a, b, c, k[9], 12, -1958414417); + c = this.ff(c, d, a, b, k[10], 17, -42063); + b = this.ff(b, c, d, a, k[11], 22, -1990404162); + a = this.ff(a, b, c, d, k[12], 7, 1804603682); + d = this.ff(d, a, b, c, k[13], 12, -40341101); + c = this.ff(c, d, a, b, k[14], 17, -1502002290); + b = this.ff(b, c, d, a, k[15], 22, 1236535329); + a = this.gg(a, b, c, d, k[1], 5, -165796510); + d = this.gg(d, a, b, c, k[6], 9, -1069501632); + c = this.gg(c, d, a, b, k[11], 14, 643717713); + b = this.gg(b, c, d, a, k[0], 20, -373897302); + a = this.gg(a, b, c, d, k[5], 5, -701558691); + d = this.gg(d, a, b, c, k[10], 9, 38016083); + c = this.gg(c, d, a, b, k[15], 14, -660478335); + b = this.gg(b, c, d, a, k[4], 20, -405537848); + a = this.gg(a, b, c, d, k[9], 5, 568446438); + d = this.gg(d, a, b, c, k[14], 9, -1019803690); + c = this.gg(c, d, a, b, k[3], 14, -187363961); + b = this.gg(b, c, d, a, k[8], 20, 1163531501); + a = this.gg(a, b, c, d, k[13], 5, -1444681467); + d = this.gg(d, a, b, c, k[2], 9, -51403784); + c = this.gg(c, d, a, b, k[7], 14, 1735328473); + b = this.gg(b, c, d, a, k[12], 20, -1926607734); + a = this.hh(a, b, c, d, k[5], 4, -378558); + d = this.hh(d, a, b, c, k[8], 11, -2022574463); + c = this.hh(c, d, a, b, k[11], 16, 1839030562); + b = this.hh(b, c, d, a, k[14], 23, -35309556); + a = this.hh(a, b, c, d, k[1], 4, -1530992060); + d = this.hh(d, a, b, c, k[4], 11, 1272893353); + c = this.hh(c, d, a, b, k[7], 16, -155497632); + b = this.hh(b, c, d, a, k[10], 23, -1094730640); + a = this.hh(a, b, c, d, k[13], 4, 681279174); + d = this.hh(d, a, b, c, k[0], 11, -358537222); + c = this.hh(c, d, a, b, k[3], 16, -722521979); + b = this.hh(b, c, d, a, k[6], 23, 76029189); + a = this.hh(a, b, c, d, k[9], 4, -640364487); + d = this.hh(d, a, b, c, k[12], 11, -421815835); + c = this.hh(c, d, a, b, k[15], 16, 530742520); + b = this.hh(b, c, d, a, k[2], 23, -995338651); + a = this.ii(a, b, c, d, k[0], 6, -198630844); + d = this.ii(d, a, b, c, k[7], 10, 1126891415); + c = this.ii(c, d, a, b, k[14], 15, -1416354905); + b = this.ii(b, c, d, a, k[5], 21, -57434055); + a = this.ii(a, b, c, d, k[12], 6, 1700485571); + d = this.ii(d, a, b, c, k[3], 10, -1894986606); + c = this.ii(c, d, a, b, k[10], 15, -1051523); + b = this.ii(b, c, d, a, k[1], 21, -2054922799); + a = this.ii(a, b, c, d, k[8], 6, 1873313359); + d = this.ii(d, a, b, c, k[15], 10, -30611744); + c = this.ii(c, d, a, b, k[6], 15, -1560198380); + b = this.ii(b, c, d, a, k[13], 21, 1309151649); + a = this.ii(a, b, c, d, k[4], 6, -145523070); + d = this.ii(d, a, b, c, k[11], 10, -1120210379); + c = this.ii(c, d, a, b, k[2], 15, 718787259); + b = this.ii(b, c, d, a, k[9], 21, -343485551); + x[0] = this.add32(a, x[0]); + x[1] = this.add32(b, x[1]); + x[2] = this.add32(c, x[2]); + x[3] = this.add32(d, x[3]); + } + cmn(q, a, b, x, s2, t) { + a = this.add32(this.add32(a, q), this.add32(x, t)); + return this.add32(a << s2 | a >>> 32 - s2, b); + } + ff(a, b, c, d, x, s2, t) { + return this.cmn(b & c | ~b & d, a, b, x, s2, t); + } + gg(a, b, c, d, x, s2, t) { + return this.cmn(b & d | c & ~d, a, b, x, s2, t); + } + hh(a, b, c, d, x, s2, t) { + return this.cmn(b ^ c ^ d, a, b, x, s2, t); + } + ii(a, b, c, d, x, s2, t) { + return this.cmn(c ^ (b | ~d), a, b, x, s2, t); + } + md51(s2) { + const n = s2.length; + const state = [1732584193, -271733879, -1732584194, 271733878]; + let i; + for (i = 64; i <= s2.length; i += 64) { + this.md5cycle(state, this.md5blk(s2.substring(i - 64, i))); + } + s2 = s2.substring(i - 64); + const tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (i = 0; i < s2.length; i++) { + tail[i >> 2] |= s2.charCodeAt(i) << (i % 4 << 3); + } + tail[i >> 2] |= 128 << (i % 4 << 3); + if (i > 55) { + this.md5cycle(state, tail); + for (i = 0; i < 16; i++) { + tail[i] = 0; + } + } + tail[14] = n * 8; + this.md5cycle(state, tail); + return state; + } + /* there needs to be support for Unicode here, * unless we pretend that we can redefine the MD-5 + * algorithm for multi-byte characters (perhaps by adding every four 16-bit characters and + * shortening the sum to 32 bits). Otherwise I suthis.ggest performing MD-5 as if every character + * was two bytes--e.g., 0040 0025 = @%--but then how will an ordinary MD-5 sum be matched? + * There is no way to standardize text to something like UTF-8 before transformation; speed cost is + * utterly prohibitive. The JavaScript standard itself needs to look at this: it should start + * providing access to strings as preformed UTF-8 8-bit unsigned value arrays. + */ + md5blk(s2) { + const md5blks = []; + for (let i = 0; i < 64; i += 4) { + md5blks[i >> 2] = s2.charCodeAt(i) + (s2.charCodeAt(i + 1) << 8) + (s2.charCodeAt(i + 2) << 16) + (s2.charCodeAt(i + 3) << 24); + } + return md5blks; + } + rhex(n) { + const hex_chr = "0123456789abcdef".split(""); + let s2 = "", j = 0; + for (; j < 4; j++) { + s2 += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15]; + } + return s2; + } + hex(x) { + for (let i = 0; i < x.length; i++) { + x[i] = this.rhex(x[i]); + } + return x.join(""); + } + md5(s2) { + return this.hex(this.md51(s2)); + } + add32(a, b) { + return this.ieCompatibility ? this.add32Compat(a, b) : this.add32Std(a, b); + } + /* this function is much faster, so if possible we use it. Some IEs are the only ones I know of that + need the idiotic second function, generated by an if clause. */ + add32Std(a, b) { + return a + b & 4294967295; + } + add32Compat(x, y) { + const lsw = (x & 65535) + (y & 65535), msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return msw << 16 | lsw & 65535; + } +}; + +// packages/ag-grid-enterprise/src/license/shared/licenseManager.ts +var LICENSE_TYPES = { + "01": "GRID", + "02": "CHARTS", + "0102": "BOTH" +}; +var LICENSING_HELP_URL = "https://www.ag-grid.com/licensing/"; +var _LicenseManager = class _LicenseManager { + constructor(document2) { + this.watermarkMessage = void 0; + this.totalMessageLength = 124; + this.document = document2; + this.md5 = new MD5(); + this.md5.init(); + } + validateLicense() { + const licenseDetails = this.getLicenseDetails(_LicenseManager.licenseKey); + const currentLicenseName = `AG Grid ${licenseDetails.currentLicenseType === "BOTH" ? "and AG Charts " : ""}Enterprise`; + const suppliedLicenseName = licenseDetails.suppliedLicenseType === void 0 ? "" : `AG ${licenseDetails.suppliedLicenseType === "BOTH" ? "Grid and AG Charts" : licenseDetails.suppliedLicenseType === "GRID" ? "Grid" : "Charts"} Enterprise`; + if (licenseDetails.missing) { + if (!this.isWebsiteUrl() || this.isForceWatermark()) { + this.outputMissingLicenseKey(currentLicenseName); + } + } else if (licenseDetails.expired) { + const gridReleaseDate = _LicenseManager.getGridReleaseDate(); + const formattedReleaseDate = _LicenseManager.formatDate(gridReleaseDate); + this.outputExpiredKey(licenseDetails.expiry, formattedReleaseDate, currentLicenseName, suppliedLicenseName); + } else if (!licenseDetails.valid) { + this.outputInvalidLicenseKey( + !!licenseDetails.incorrectLicenseType, + currentLicenseName, + suppliedLicenseName + ); + } else if (licenseDetails.isTrial && licenseDetails.trialExpired) { + this.outputExpiredTrialKey(licenseDetails.expiry, currentLicenseName, suppliedLicenseName); + } + } + static extractExpiry(license) { + const restrictionHashed = license.substring(license.lastIndexOf("_") + 1, license.length); + return new Date(parseInt(_LicenseManager.decode(restrictionHashed), 10)); + } + static extractLicenseComponents(licenseKey) { + let cleanedLicenseKey = licenseKey.replace(/[\u200B-\u200D\uFEFF]/g, ""); + cleanedLicenseKey = cleanedLicenseKey.replace(/\r?\n|\r/g, ""); + if (licenseKey.length <= 32) { + return { md5: null, license: licenseKey, version: null, isTrial: null }; + } + const hashStart = cleanedLicenseKey.length - 32; + const md5 = cleanedLicenseKey.substring(hashStart); + const license = cleanedLicenseKey.substring(0, hashStart); + const [version, isTrial, type] = _LicenseManager.extractBracketedInformation(cleanedLicenseKey); + return { md5, license, version, isTrial, type }; + } + getLicenseDetails(licenseKey) { + const currentLicenseType = _LicenseManager.chartsLicenseManager ? "BOTH" : "GRID"; + if (!licenseKey?.length) { + return { + licenseKey, + valid: false, + missing: true, + currentLicenseType + }; + } + const gridReleaseDate = _LicenseManager.getGridReleaseDate(); + const { md5, license, version, isTrial, type } = _LicenseManager.extractLicenseComponents(licenseKey); + let valid = md5 === this.md5.md5(license) && !licenseKey.includes("For_Trialing_ag-Grid_Only"); + let trialExpired = void 0; + let expired = void 0; + let expiry = null; + let incorrectLicenseType = false; + let suppliedLicenseType = void 0; + function handleTrial() { + const now = /* @__PURE__ */ new Date(); + trialExpired = expiry < now; + expired = void 0; + } + if (valid) { + expiry = _LicenseManager.extractExpiry(license); + valid = !isNaN(expiry.getTime()); + if (valid) { + expired = gridReleaseDate > expiry; + switch (version) { + case "legacy": + case "2": { + if (isTrial) { + handleTrial(); + } + break; + } + case "3": { + if (!type?.length) { + valid = false; + } else { + suppliedLicenseType = type; + if (type !== LICENSE_TYPES["01"] && type !== LICENSE_TYPES["0102"] || currentLicenseType === "BOTH" && suppliedLicenseType !== "BOTH") { + valid = false; + incorrectLicenseType = true; + } else if (isTrial) { + handleTrial(); + } + } + } + } + } + } + if (!valid) { + return { + licenseKey, + valid, + incorrectLicenseType, + currentLicenseType, + suppliedLicenseType + }; + } + return { + licenseKey, + valid, + expiry: _LicenseManager.formatDate(expiry), + expired, + version, + isTrial, + trialExpired, + incorrectLicenseType, + currentLicenseType, + suppliedLicenseType + }; + } + isDisplayWatermark() { + return this.isForceWatermark() || !this.isLocalhost() && !this.isWebsiteUrl() && !!this.watermarkMessage?.length; + } + getWatermarkMessage() { + return this.watermarkMessage || ""; + } + getHostname() { + const win = this.document.defaultView || window; + const loc = win.location; + const { hostname = "" } = loc; + return hostname; + } + isForceWatermark() { + const win = this.document.defaultView || window; + const loc = win.location; + const { pathname } = loc; + return pathname ? pathname.includes("forceWatermark") : false; + } + isWebsiteUrl() { + const hostname = this.getHostname(); + return hostname.match(/^(?:[\w-]+\.)?(ag-grid|bryntum)\.com$/) !== null; + } + isLocalhost() { + const hostname = this.getHostname(); + return hostname.match(/^(?:127\.0\.0\.1|localhost)$/) !== null; + } + static formatDate(date) { + const monthNames = [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ]; + const day = date.getDate(); + const monthIndex = date.getMonth(); + const year = date.getFullYear(); + return day + " " + monthNames[monthIndex] + " " + year; + } + static getGridReleaseDate() { + return new Date(parseInt(_LicenseManager.decode(_LicenseManager.RELEASE_INFORMATION), 10)); + } + static decode(input) { + const keystr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + let t = ""; + let n, r, i; + let s2, o, u, a; + let f = 0; + const e = input.replace(/[^A-Za-z0-9+/=]/g, ""); + while (f < e.length) { + s2 = keystr.indexOf(e.charAt(f++)); + o = keystr.indexOf(e.charAt(f++)); + u = keystr.indexOf(e.charAt(f++)); + a = keystr.indexOf(e.charAt(f++)); + n = s2 << 2 | o >> 4; + r = (o & 15) << 4 | u >> 2; + i = (u & 3) << 6 | a; + t = t + String.fromCharCode(n); + if (u != 64) { + t = t + String.fromCharCode(r); + } + if (a != 64) { + t = t + String.fromCharCode(i); + } + } + t = _LicenseManager.utf8_decode(t); + return t; + } + static utf8_decode(input) { + input = input.replace(/rn/g, "n"); + let t = ""; + for (let n = 0; n < input.length; n++) { + const r = input.charCodeAt(n); + if (r < 128) { + t += String.fromCharCode(r); + } else if (r > 127 && r < 2048) { + t += String.fromCharCode(r >> 6 | 192); + t += String.fromCharCode(r & 63 | 128); + } else { + t += String.fromCharCode(r >> 12 | 224); + t += String.fromCharCode(r >> 6 & 63 | 128); + t += String.fromCharCode(r & 63 | 128); + } + } + return t; + } + static setChartsLicenseManager(dependantLicenseManager) { + this.chartsLicenseManager = dependantLicenseManager; + this.chartsLicenseManager?.setLicenseKey(this.licenseKey, true); + } + static setLicenseKey(licenseKey) { + if (_exists(this.licenseKey) && this.licenseKey !== licenseKey) { + _logPreInitWarn( + 291, + void 0, + "AG Grid: License Key being set multiple times with different values. This can result in an incorrect license key being used." + ); + } + this.licenseKey = licenseKey; + this.chartsLicenseManager?.setLicenseKey(licenseKey, true); + } + static extractBracketedInformation(licenseKey) { + if (!licenseKey.includes("[")) { + return ["legacy", false, void 0]; + } + const matches = licenseKey.match(/\[(.*?)\]/g).map((match) => match.replace("[", "").replace("]", "")); + if (!matches || matches.length === 0) { + return ["legacy", false, void 0]; + } + const isTrial = matches.filter((match) => match === "TRIAL").length === 1; + const rawVersion = matches.filter((match) => match.indexOf("v") === 0)[0]; + const version = rawVersion ? rawVersion.replace("v", "") : "legacy"; + const type = LICENSE_TYPES[matches.filter((match) => LICENSE_TYPES[match])[0]]; + return [version, isTrial, type]; + } + centerPadAndOutput(input) { + const paddingRequired = this.totalMessageLength - input.length; + } + padAndOutput(input, padding = "*", terminateWithPadding = "") { + } + outputInvalidLicenseKey(incorrectLicenseType, currentLicenseName, suppliedLicenseName) { + } + outputExpiredTrialKey(formattedExpiryDate, currentLicenseName, suppliedLicenseName) { + } + outputMissingLicenseKey(currentLicenseName) { + } + outputExpiredKey(formattedExpiryDate, formattedReleaseDate, currentLicenseName, suppliedLicenseName) { + } +}; +// eslint-disable-next-line no-restricted-syntax +_LicenseManager.RELEASE_INFORMATION = "MTc3NDQyNTc0Nzc3NQ=="; +var LicenseManager = _LicenseManager; + +// packages/ag-grid-enterprise/src/license/watermark.ts +import { Component, RefPlaceholder } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/license/watermark.css +var watermark_default = '.ag-watermark{bottom:20px;color:#9b9b9b;opacity:.7;position:absolute;transition:opacity 1s ease-out 3s}:where(.ag-ltr) .ag-watermark{right:25px}:where(.ag-rtl) .ag-watermark{left:25px}.ag-watermark:before{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDkiIGhlaWdodD0iMzYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDkgMzYiPjxwYXRoIGZpbGw9IiM5YjliOWIiIGQ9Ik0xOTIuOTkzIDIzLjY1OHYtNy45NDZoLTEzLjU0MWwtNy45NDcgNy45NDZ6TTIwOC4yNSAzLjk1aC0xNi45NzRsLTguMDEgNy45NDdoMjQuOTg0ek0xNjMuNjIyIDMxLjYwNWw0LjA2OS00LjA2OWgxMy43MzJ2Ny45NDdoLTE3LjgwMXoiLz48cGF0aCBmaWxsPSIjOWI5YjliIiBkPSJNMTY2LjYxIDE5Ljc4aDguNzczbDguMDEtNy45NDZIMTY2LjYxek0xNTcuMDExIDMxLjYwNWg2LjYxMWw3Ljg4My03Ljk0N2gtMTQuNDk0ek0xOTEuMjc2IDMuOTVsLTQuMDY4IDQuMDdIMTYxLjI3Vi4wNzJoMzAuMDA2ek0yMC44NCAzMC4yMDZIOC4zNzhsLTIuMTYyIDUuMzRILjc1TDEyLjI1NyA4LjU5Mmg0Ljc2OEwyOC41MyAzNS41NDZoLTUuNTN6bS0xLjcxNy00LjI2TDE0LjYwOSAxNC45NWwtNC41MTQgMTAuOTk4ek0xMDQuNDM3IDE4LjUwOWMxLjU4OS0yLjM1MiA1LjU5NC0yLjYwNyA3LjI0Ny0yLjYwN3Y0LjU3OGMtMi4wMzQgMC00LjA2OS4wNjMtNS4yNzcuOTUzLTEuMjA3Ljg5LTEuODQzIDIuMDk4LTEuODQzIDMuNTZ2MTAuNTUzaC00Ljk1OVYxNS45MDJoNC43Njh6TTExOS4zNzYgMTUuOTAyaC00Ljk1OHYxOS42NDRoNC45NTh6TTExOS4zNzYgNy4xM2gtNC45NTh2NS44NDhoNC45NTh6TTE0My45NzkgNy4xM3YyOC40MTZoLTQuNzY4bC0uMTI3LTIuOTg4YTguMyA4LjMgMCAwIDEtMi42NyAyLjQ4Yy0xLjA4MS41NzItMi40MTYuODktMy45NDIuODktMS4zMzUgMC0yLjYwNi0uMjU1LTMuNjg3LS43LTEuMTQ0LS41MDgtMi4xNjItMS4xNDQtMi45ODgtMi4wMzRhOS42IDkuNiAwIDAgMS0xLjk3MS0zLjE3OWMtLjUwOC0xLjIwNy0uNjk5LTIuNjA2LS42OTktNC4xMzJzLjI1NC0yLjkyNC42OTktNC4xOTZjLjUwOS0xLjI3MSAxLjE0NS0yLjM1MiAxLjk3MS0zLjI0MnMxLjg0NC0xLjU4OSAyLjk4OC0yLjA5OCAyLjM1Mi0uNzYzIDMuNjg3LS43NjNjMS41MjYgMCAyLjc5Ny4yNTUgMy44NzguODI3czEuOTcxIDEuMzM1IDIuNjcgMi40MTZWNy4xOTNoNC45NTl6bS0xMC40MjYgMjQuNTM4YzEuNjUzIDAgMi45MjQtLjU3MiAzLjk0MS0xLjY1M3MxLjUyNi0yLjU0MyAxLjUyNi00LjMyMy0uNTA5LTMuMTc4LTEuNTI2LTQuMzIyYy0xLjAxNy0xLjA4MS0yLjI4OC0xLjY1My0zLjk0MS0xLjY1My0xLjU5IDAtMi45MjUuNTcyLTMuODc4IDEuNjUzLTEuMDE3IDEuMDgtMS41MjYgMi41NDMtMS41MjYgNC4zMjIgMCAxLjc4LjUwOSAzLjE4IDEuNTI2IDQuMjYgMS4wMTcgMS4xNDQgMi4yODggMS43MTYgMy44NzggMS43MTZNNTcuMjAyIDIwLjM1M0g0NC45MzN2NC4yNTloNi45OTNjLS4xOSAyLjE2MS0xLjAxNyAzLjgxNC0yLjQxNiA1LjE1LTEuMzk4IDEuMjctMy4xNzggMS45MDYtNS40NjcgMS45MDYtMS4yNzEgMC0yLjQ4LS4yNTQtMy40OTYtLjY5OWE3IDcgMCAwIDEtMi43MzQtMS45N2MtLjc2My0uODI3LTEuMzM1LTEuODQ0LTEuNzgtMy4wNTJzLS42MzYtMi40OC0uNjM2LTMuOTQyLjE5LTIuNzMzLjYzNi0zLjk0MWMuMzgxLTEuMjA4IDEuMDE3LTIuMTYyIDEuNzgtMy4wNTIuNzYzLS44MjYgMS42NTMtMS40NjIgMi43MzMtMS45N2E5LjEgOS4xIDAgMCAxIDMuNTYtLjdxNC4wMDUgMCA2LjEwMyAxLjkwN2wzLjMwNi0zLjMwNWMtMi40OC0xLjkwNy01LjY1OC0yLjkyNS05LjQwOS0yLjkyNS0yLjA5NyAwLTQuMDA0LjMxOC01LjcyMSAxLjAxOC0xLjcxNi42OTktMy4xNzkgMS41ODktNC4zODYgMi43OTdBMTIuMSAxMi4xIDAgMCAwIDMxLjIgMTYuMjJjLS42MzUgMS43MTctLjk1MyAzLjYyNC0uOTUzIDUuNjU4cy4zMTggMy45NDIgMS4wMTcgNS42NThjLjcgMS43MTcgMS41OSAzLjE3OSAyLjc5NyA0LjM4N2ExMi4xIDEyLjEgMCAwIDAgNC4zODcgMi43OTdjMS43MTYuNyAzLjYyMyAxLjAxNyA1LjY1NyAxLjAxNyAyLjAzNSAwIDMuODc4LS4zMTggNS41MzEtMS4wMTcgMS42NTMtLjcgMy4wNTItMS41OSA0LjE5Ni0yLjc5N3ExLjcxNi0xLjgxMiAyLjY3LTQuMzg3Yy42MzYtMS43MTYuOTU0LTMuNjIzLjk1NC01LjY1OHYtLjgyNmMtLjE5MS0uMTI3LS4yNTUtLjQ0NS0uMjU1LS43TTk1Ljk4MiAyMC4zNTNoLTEyLjI3djQuMjU5aDYuOTkzYy0uMTkgMi4xNjEtMS4wMTcgMy44MTQtMi40MTYgNS4xNS0xLjM5OCAxLjI3LTMuMTc4IDEuOTA2LTUuNDY3IDEuOTA2LTEuMjcxIDAtMi40OC0uMjU0LTMuNDk2LS42OTlhNyA3IDAgMCAxLTIuNzM0LTEuOTdjLS43NjMtLjgyNy0xLjMzNS0xLjg0NC0xLjc4LTMuMDUycy0uNjM2LTIuNDgtLjYzNi0zLjk0Mi4xOS0yLjczMy42MzYtMy45NDFjLjM4MS0xLjIwOCAxLjAxNy0yLjE2MiAxLjc4LTMuMDUyLjc2My0uODI2IDEuNjUzLTEuNDYyIDIuNzM0LTEuOTdhOS4xIDkuMSAwIDAgMSAzLjU2LS43cTQuMDA1IDAgNi4xMDMgMS45MDdsMy4zMDUtMy4zMDVjLTIuNDc5LTEuOTA3LTUuNjU4LTIuOTI1LTkuNDA4LTIuOTI1LTIuMDk4IDAtNC4wMDUuMzE4LTUuNzIyIDEuMDE4LTEuNzE2LjY5OS0zLjE3OCAxLjU4OS00LjM4NiAyLjc5N2ExMi4xIDEyLjEgMCAwIDAtMi43OTcgNC4zODZjLS42MzYgMS43MTctLjk1NCAzLjYyNC0uOTU0IDUuNjU4cy4zMTggMy45NDIgMS4wMTcgNS42NThjLjcgMS43MTcgMS41OSAzLjE3OSAyLjc5NyA0LjM4N2ExMi4xIDEyLjEgMCAwIDAgNC4zODcgMi43OTdjMS43MTYuNyAzLjYyMyAxLjAxNyA1LjY1OCAxLjAxNyAyLjAzNCAwIDMuODc4LS4zMTggNS41My0xLjAxNyAxLjY1My0uNyAzLjA1Mi0xLjU5IDQuMTk2LTIuNzk3cTEuNzE4LTEuODEyIDIuNjctNC4zODdjLjYzNi0xLjcxNi45NTQtMy42MjMuOTU0LTUuNjU4di0uODI2Yy0uMTktLjEyNy0uMjU1LS40NDUtLjI1NS0uNyIvPjwvc3ZnPg==");background-repeat:no-repeat;background-size:170px 40px;content:"";display:block;height:40px;width:170px}.ag-watermark-text{font-family:Impact,sans-serif;font-size:19px;font-weight:700;opacity:.5}:where(.ag-ltr) .ag-watermark-text{padding-left:.7rem}:where(.ag-rtl) .ag-watermark-text{padding-right:.7rem}'; + +// packages/ag-grid-enterprise/src/license/watermark.ts +var WatermarkElement = { + tag: "div", + cls: "ag-watermark", + children: [{ tag: "div", ref: "eLicenseTextRef", cls: "ag-watermark-text" }] +}; +var AgWatermark = class extends Component { + constructor() { + super(WatermarkElement); + this.eLicenseTextRef = RefPlaceholder; + this.registerCSS(watermark_default); + } + wireBeans(beans) { + this.licenseManager = beans.licenseManager; + } + postConstruct() { + const show = this.shouldDisplayWatermark(); + this.setDisplayed(show); + if (show) { + this.eLicenseTextRef.textContent = this.licenseManager.getWatermarkMessage(); + window.setTimeout(() => this.addCss("ag-opacity-zero"), 0); + window.setTimeout(() => this.setDisplayed(false), 5e3); + } + } + shouldDisplayWatermark() { + return this.licenseManager.isDisplayWatermark(); + } +}; +var AgWatermarkSelector = { + selector: "AG-WATERMARK", + component: AgWatermark +}; + +// packages/ag-grid-enterprise/src/license/gridLicenseManager.ts +var GridLicenseManager = class extends BeanStub { + constructor() { + super(...arguments); + this.beanName = "licenseManager"; + } + postConstruct() { + this.validateLicense(); + } + validateLicense() { + const beans = this.beans; + if (beans.withinStudio) { + this.licenseManager = { + isDisplayWatermark: () => false, + getWatermarkMessage: () => "" + }; + } else { + const licenseManager = new LicenseManager(_getDocument(beans)); + this.licenseManager = licenseManager; + licenseManager.validateLicense(); + } + } + static getLicenseDetails(licenseKey) { + return new LicenseManager(null).getLicenseDetails(licenseKey); + } + getWatermarkSelector() { + return AgWatermarkSelector; + } + isDisplayWatermark() { + return this.licenseManager.isDisplayWatermark(); + } + getWatermarkMessage() { + return this.licenseManager.getWatermarkMessage(); + } + static setLicenseKey(licenseKey) { + + } + static setChartsLicenseManager(chartsLicenseManager) { + + } +}; + +// packages/ag-grid-enterprise/src/excelExport/excelCreator.ts +import { + BaseCreator, + _addGridCommonParams as _addGridCommonParams2, + _downloadFile, + _getHeaderClassesFromColDef, + _getHeaderRowCount, + _warn as _warn3 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/excelExport/excelSerializingSession.ts +import { + BaseGridSerializingSession, + _addGridCommonParams, + _isExpressionString, + _last, + _mergeDeep, + _warn +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/excelExport/assets/excelUtils.ts +import { _escapeString } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/excelExport/assets/excelConstants.ts +var INCH_TO_EMU = 9525; +var numberFormatMap = { + "0": 1, + "0.00": 2, + "#,##0": 3, + "#,##0.00": 4, + "0%": 9, + "0.00%": 10, + "0.00E+00": 11, + "# ?/?": 12, + "# ??/??": 13, + "mm-dd-yy": 14, + "d-mmm-yy": 15, + "d-mmm": 16, + "mmm-yy": 17, + "h:mm AM/PM": 18, + "h:mm:ss AM/PM": 19, + "h:mm": 20, + "h:mm:ss": 21, + "m/d/yy h:mm": 22, + "#,##0 ;(#,##0)": 37, + "#,##0 ;[Red](#,##0)": 38, + "#,##0.00;(#,##0.00)": 39, + "#,##0.00;[Red](#,##0.00)": 40, + "mm:ss": 45, + "[h]:mm:ss": 46, + "mmss.0": 47, + "##0.0E+0": 48, + "@": 49 +}; + +// packages/ag-grid-enterprise/src/excelExport/assets/xmlFactory.ts +var LINE_SEPARATOR = "\r\n"; +function returnAttributeIfPopulated(key, value, booleanTransformer) { + if (!value && value !== "" && value !== 0) { + return ""; + } + let xmlValue = value; + if (typeof value === "boolean") { + if (booleanTransformer) { + xmlValue = booleanTransformer(value); + } + } + return ` ${key}="${xmlValue}"`; +} +function createXmlHeader(headerElement = {}) { + const headerStart = ""; + const keys = ["version"]; + if (!headerElement.version) { + headerElement.version = "1.0"; + } + if (headerElement.encoding) { + keys.push("encoding"); + } + if (headerElement.standalone) { + keys.push("standalone"); + } + const att = keys.map((key) => `${key}="${headerElement[key]}"`).join(" "); + return `${headerStart}xml ${att} ${headerEnd}`; +} +function createXml(xmlElement, booleanTransformer) { + let props = ""; + if (xmlElement.properties) { + if (xmlElement.properties.prefixedAttributes) { + xmlElement.properties.prefixedAttributes.forEach((prefixedSet) => { + for (const key of Object.keys(prefixedSet.map)) { + props += returnAttributeIfPopulated( + prefixedSet.prefix + key, + prefixedSet.map[key], + booleanTransformer + ); + } + }); + } + if (xmlElement.properties.rawMap) { + for (const key of Object.keys(xmlElement.properties.rawMap)) { + props += returnAttributeIfPopulated(key, xmlElement.properties.rawMap[key], booleanTransformer); + } + } + } + let result = "<" + xmlElement.name + props; + if (!xmlElement.children && xmlElement.textNode == null) { + return result + "/>" + LINE_SEPARATOR; + } + if (xmlElement.textNode != null) { + return result + ">" + xmlElement.textNode + "" + LINE_SEPARATOR; + } + result += ">" + LINE_SEPARATOR; + if (xmlElement.children) { + for (const it of xmlElement.children) { + result += createXml(it, booleanTransformer); + } + } + return result + "" + LINE_SEPARATOR; +} + +// packages/ag-grid-enterprise/src/excelExport/assets/excelUtils.ts +var pointsToPixel = (points) => { + return Math.round(points * 96 / 72); +}; +var pixelsToEMU = (value) => { + return Math.ceil(value * INCH_TO_EMU); +}; +var getFontFamilyId = (name) => { + if (name === void 0) { + return; + } + const families = ["Automatic", "Roman", "Swiss", "Modern", "Script", "Decorative"]; + const pos = families.indexOf(name || "Automatic"); + return Math.max(pos, 0); +}; +var getHeightFromProperty = (rowIndex, height) => { + if (!height) { + return; + } + let finalHeight; + if (typeof height === "number") { + finalHeight = height; + } else { + const heightFunc = height; + finalHeight = heightFunc({ rowIndex }); + } + return finalHeight; +}; +var setExcelImageTotalWidth = (image, columnsToExport) => { + const { colSpan, column } = image.position; + if (!image.width) { + return; + } + if (colSpan) { + const columnsInSpan = columnsToExport.slice(column - 1, column + colSpan - 1); + let totalWidth = 0; + for (let i = 0; i < columnsInSpan.length; i++) { + const colWidth = columnsInSpan[i].getActualWidth(); + if (image.width < totalWidth + colWidth) { + image.position.colSpan = i + 1; + image.totalWidth = image.width; + image.width = image.totalWidth - totalWidth; + break; + } + totalWidth += colWidth; + } + } else { + image.totalWidth = image.width; + } +}; +var setExcelImageTotalHeight = (image, rowHeight) => { + const { rowSpan, row } = image.position; + if (!image.height) { + return; + } + if (rowSpan) { + let totalHeight = 0; + let counter = 0; + for (let i = row; i < row + rowSpan; i++) { + const nextRowHeight = pointsToPixel(getHeightFromProperty(i, rowHeight) || 20); + if (image.height < totalHeight + nextRowHeight) { + image.position.rowSpan = counter + 1; + image.totalHeight = image.height; + image.height = image.totalHeight - totalHeight; + break; + } + totalHeight += nextRowHeight; + counter++; + } + } else { + image.totalHeight = image.height; + } +}; +var createXmlPart = (body, skipHeader) => { + const header = createXmlHeader({ + encoding: "UTF-8", + standalone: "yes" + }); + const xmlBody = createXml(body); + if (skipHeader) { + return xmlBody; + } + return `${header}${xmlBody}`; +}; +var getExcelColumnName = (colIdx) => { + const startCode = 65; + const tableWidth = 26; + const fromCharCode = String.fromCharCode; + const pos = Math.floor(colIdx / tableWidth); + const tableIdx = colIdx % tableWidth; + if (!pos || colIdx === tableWidth) { + return fromCharCode(startCode + colIdx - 1); + } + if (!tableIdx) { + return getExcelColumnName(pos - 1) + "Z"; + } + if (pos < tableWidth) { + return fromCharCode(startCode + pos - 1) + fromCharCode(startCode + tableIdx - 1); + } + return getExcelColumnName(pos) + fromCharCode(startCode + tableIdx - 1); +}; +var sanitizeTableName = (name) => { + return name.replaceAll("\n", "_x000a_"); +}; +var replaceInvisibleCharacters = (str) => { + if (str == null) { + return null; + } + let newString = ""; + for (let i = 0; i < str.length; i++) { + const point = str.charCodeAt(i); + if (point >= 0 && point <= 31 && point !== 10) { + const convertedCode = point.toString(16).toUpperCase(); + const paddedCode = convertedCode.padStart(4, "0"); + const newValue = `_x${paddedCode}_`; + newString += newValue; + } else { + newString += str[i]; + } + } + return newString; +}; +var buildSharedString = (strMap) => { + const ret = []; + for (const key of strMap.keys()) { + const textNode = key.toString(); + const child = { + name: "t", + textNode: _escapeString(replaceInvisibleCharacters(textNode)) + }; + const preserveSpaces = textNode.trim().length !== textNode.length; + if (preserveSpaces) { + child.properties = { + rawMap: { + "xml:space": "preserve" + } + }; + } + ret.push({ + name: "si", + children: [child] + }); + } + return ret; +}; + +// packages/ag-grid-enterprise/src/excelExport/excelSerializingSession.ts +var ExcelSerializingSession = class extends BaseGridSerializingSession { + constructor(config) { + super(config); + this.mixedStyles = {}; + this.mixedStyleCounter = 0; + this.rows = []; + this.frozenRowCount = 0; + this.skipFrozenRows = false; + this.frozenColumnCount = 0; + this.skipFrozenColumns = false; + this.formulaSvc = config.formulaSvc; + this.config = Object.assign({}, config); + this.workbook = config.workbook; + this.stylesByIds = {}; + for (const style of this.config.baseExcelStyles) { + this.stylesByIds[style.id] = style; + } + const quotePrefixStyle = { id: "_quotePrefix", quotePrefix: 1 }; + this.stylesByIds[quotePrefixStyle.id] = quotePrefixStyle; + this.excelStyles = [...this.config.baseExcelStyles, quotePrefixStyle]; + } + addCustomContent(customContent) { + for (const row of customContent) { + const rowLen = this.rows.length + 1; + let outlineLevel; + if (!this.config.suppressRowOutline && row.outlineLevel != null) { + outlineLevel = row.outlineLevel; + } + const rowObj = { + height: getHeightFromProperty(rowLen, row.height || this.config.rowHeight), + cells: (row.cells || []).map((cell, idx) => { + const image = this.addImage(rowLen, this.columnsToExport[idx], cell.data?.value); + let excelStyles = null; + if (cell.styleId) { + excelStyles = typeof cell.styleId === "string" ? [cell.styleId] : cell.styleId; + } + const excelStyleId = this.getStyleId(excelStyles); + if (image) { + return this.createCell( + excelStyleId, + this.getDataTypeForValue(image.value), + image.value == null ? "" : image.value + ); + } + const value = cell.data?.value ?? ""; + const type = this.getDataTypeForValue(value); + if (cell.mergeAcross) { + return this.createMergedCell(excelStyleId, type, value, cell.mergeAcross); + } + return this.createCell(excelStyleId, type, value); + }), + outlineLevel + }; + if (row.collapsed != null) { + rowObj.collapsed = row.collapsed; + } + if (row.hidden != null) { + rowObj.hidden = row.hidden; + } + this.rows.push(rowObj); + } + } + onNewHeaderGroupingRow() { + const currentCells = []; + const { freezeRows, headerRowHeight } = this.config; + this.rows.push({ + cells: currentCells, + height: getHeightFromProperty(this.rows.length + 1, headerRowHeight) + }); + if (freezeRows) { + this.frozenRowCount++; + } + return { + onColumn: (columnGroup, header, index, span, collapsibleGroupRanges) => { + const styleIds = this.config.styleLinker({ + rowType: "HEADER_GROUPING", + rowIndex: 1, + value: `grouping-${header}`, + columnGroup + }); + currentCells.push({ + ...this.createMergedCell( + this.getStyleId(styleIds), + this.getDataTypeForValue("string"), + header, + span + ), + collapsibleRanges: collapsibleGroupRanges + }); + } + }; + } + onNewHeaderRow() { + const { freezeRows, headerRowHeight } = this.config; + if (freezeRows) { + this.frozenRowCount++; + } + return this.onNewRow(this.onNewHeaderColumn, headerRowHeight); + } + onNewBodyRow(node) { + const { freezeRows, rowHeight } = this.config; + if (!this.skipFrozenRows) { + if (freezeRows === "headersAndPinnedRows" && node?.rowPinned === "top") { + this.frozenRowCount++; + } else if (typeof freezeRows === "function") { + if (freezeRows(_addGridCommonParams(this.gos, { node }))) { + this.frozenRowCount++; + } else { + this.skipFrozenRows = true; + } + } else { + this.skipFrozenRows = true; + } + } + const rowAccumulator = this.onNewRow(this.onNewBodyColumn, rowHeight); + if (node) { + this.addRowOutlineIfNecessary(node); + } + return rowAccumulator; + } + prepare(columnsToExport) { + super.prepare(columnsToExport); + this.columnsToExport = [...columnsToExport]; + this.cols = columnsToExport.map((col, i) => this.convertColumnToExcel(col, i)); + } + parse() { + const longestRow = this.rows.reduce((a, b) => Math.max(a, b.cells.length), 0); + while (this.cols.length < longestRow) { + this.cols.push(this.convertColumnToExcel(null, this.cols.length + 1)); + } + const worksheet = this.createWorksheet(); + return this.addWorksheetToWorkbook(worksheet); + } + createWorksheet() { + const { sheetName } = this.config; + let name; + if (sheetName != null) { + const sheetNameValue = typeof sheetName === "function" ? sheetName(_addGridCommonParams(this.gos, {})) : sheetName; + name = String(sheetNameValue).substring(0, 31); + } else { + name = "ag-grid"; + } + return { + name, + table: { + columns: this.cols, + rows: this.rows + } + }; + } + addRowOutlineIfNecessary(node) { + const { gos, suppressRowOutline, rowGroupExpandState = "expanded" } = this.config; + const isGroupHideOpenParents = gos.get("groupHideOpenParents"); + if (isGroupHideOpenParents || suppressRowOutline || node.level == null) { + return; + } + const padding = node.footer ? 1 : 0; + const currentRow = _last(this.rows); + if (node.uiLevel == null || node.level === node.uiLevel) { + const outlineLevel = Math.min(node.level + padding, 7); + currentRow.outlineLevel = outlineLevel; + } + if (rowGroupExpandState === "expanded") { + return; + } + const collapseAll = rowGroupExpandState === "collapsed"; + if (node.isExpandable()) { + const isExpanded = !collapseAll && node.expanded; + currentRow.collapsed = !isExpanded; + } + currentRow.hidden = // always show the node if there is no parent to be expanded + !!node.parent && // or if it is a child of the root node + node.parent.level !== -1 && (collapseAll || this.isAnyParentCollapsed(node.parent)); + } + isAnyParentCollapsed(node) { + while (node && node.level !== -1) { + if (!node.expanded) { + return true; + } + node = node.parent; + } + return false; + } + convertColumnToExcel(column, index) { + const columnWidth = this.config.columnWidth; + const headerValue = column ? this.extractHeaderValue(column) : void 0; + const displayName = headerValue ?? ""; + const filterAllowed = column ? column.isFilterAllowed() : false; + if (columnWidth) { + if (typeof columnWidth === "number") { + return { width: columnWidth, displayName, filterAllowed }; + } + return { width: columnWidth({ column, index }), displayName, filterAllowed }; + } + if (column) { + const smallestUsefulWidth = 75; + return { width: Math.max(column.getActualWidth(), smallestUsefulWidth), displayName, filterAllowed }; + } + return { + displayName, + filterAllowed + }; + } + onNewHeaderColumn(rowIndex, currentCells) { + return (column) => { + const nameForCol = this.extractHeaderValue(column); + const styleIds = this.config.styleLinker({ + rowType: "HEADER", + rowIndex, + value: nameForCol, + column + }); + currentCells.push( + this.createCell(this.getStyleId(styleIds), this.getDataTypeForValue("string"), nameForCol) + ); + }; + } + onNewBodyColumn(rowIndex, currentCells) { + let skipCols = 0; + const { freezeColumns, rightToLeft } = this.config; + return (column, index, node) => { + if (skipCols > 0) { + skipCols -= 1; + return; + } + if (!this.skipFrozenColumns) { + const pinned = column.getPinned(); + const isPinnedLeft = pinned === true || pinned === "left"; + if (freezeColumns === "pinned" && pinned && isPinnedLeft !== rightToLeft) { + this.frozenColumnCount++; + } else if (typeof freezeColumns === "function" && freezeColumns(_addGridCommonParams(this.gos, { column }))) { + this.frozenColumnCount++; + } else { + this.skipFrozenColumns = true; + } + } + const { value: valueForCell, valueFormatted } = this.extractRowCellValue({ + column, + node, + currentColumnIndex: index, + accumulatedRowIndex: rowIndex, + type: "excel", + useRawFormula: true + }); + const rawValueForCell = valueForCell; + const valueForCellString = typeof rawValueForCell === "bigint" ? rawValueForCell.toString() : rawValueForCell; + const styleIds = this.config.styleLinker({ + rowType: "BODY", + rowIndex, + value: rawValueForCell, + column, + node + }); + const excelStyleId = this.getStyleId(styleIds); + const colSpan = column.getColSpan(node); + const addedImage = this.addImage(rowIndex, column, valueForCellString); + if (addedImage) { + currentCells.push( + this.createCell( + excelStyleId, + this.getDataTypeForValue(addedImage.value), + addedImage.value == null ? "" : addedImage.value + ) + ); + } else if (colSpan > 1) { + skipCols = colSpan - 1; + currentCells.push( + this.createMergedCell( + excelStyleId, + this.getDataTypeForValue(rawValueForCell), + valueForCellString, + colSpan - 1 + ) + ); + } else { + const isFormula = column.isAllowFormula() && this.formulaSvc?.isFormula(valueForCellString); + const cell = this.createCell( + excelStyleId, + isFormula ? "f" : this.getDataTypeForValue(rawValueForCell), + isFormula ? this.formulaSvc?.updateFormulaByOffset({ + value: valueForCellString, + rowDelta: rowIndex - (node.formulaRowIndex + 1), + useRefFormat: false + }) : valueForCellString, + valueFormatted + ); + currentCells.push(cell); + } + }; + } + onNewRow(onNewColumnAccumulator, height) { + const currentCells = []; + this.rows.push({ + cells: currentCells, + height: getHeightFromProperty(this.rows.length + 1, height) + }); + return { + onColumn: onNewColumnAccumulator.bind(this, this.rows.length, currentCells)() + }; + } + addWorksheetToWorkbook(worksheet) { + const { excelStyles, config } = this; + this.mapSharedStrings(worksheet); + if (this.frozenColumnCount) { + config.frozenColumnCount = this.frozenColumnCount; + } + if (this.frozenRowCount) { + config.frozenRowCount = this.frozenRowCount; + } + return this.workbook.addWorksheet(excelStyles, worksheet, config); + } + mapSharedStrings(worksheet) { + let emptyStringPosition; + for (const row of worksheet.table.rows) { + for (const cell of row.cells) { + const data = cell.data; + if (!data || data.type !== "s") { + continue; + } + const value = data.value; + if (value == null) { + continue; + } + if (value === "") { + emptyStringPosition ?? (emptyStringPosition = this.workbook.getStringPosition("").toString()); + data.value = emptyStringPosition; + continue; + } + data.value = this.workbook.getStringPosition(String(value)).toString(); + } + } + } + getDataTypeForValue(valueForCell) { + if (valueForCell === void 0) { + return "empty"; + } + let dataType = "s"; + try { + if (this.isNumerical(valueForCell)) { + dataType = "n"; + } + } catch (e) { + } + return dataType; + } + getTypeFromStyle(style, value) { + if (this.isFormula(value)) { + return "f"; + } + if (style?.dataType) { + switch (style.dataType.toLocaleLowerCase()) { + case "formula": + return "f"; + case "string": + return "s"; + case "number": + return "n"; + case "datetime": + return "d"; + case "error": + return "e"; + case "boolean": + return "b"; + default: + _warn(162, { id: style.id, dataType: style.dataType }); + } + } + return null; + } + addImage(rowIndex, column, value) { + if (!this.config.addImageToCell) { + return; + } + const addedImage = this.config.addImageToCell(rowIndex, column, value); + if (!addedImage) { + return; + } + this.workbook.addBodyImageToMap( + addedImage.image, + rowIndex, + column, + this.columnsToExport, + this.config.rowHeight + ); + return addedImage; + } + createCell(styleId, type, value, valueFormatted) { + const actualStyle = this.getStyleById(styleId); + if (!actualStyle?.dataType && type === "s" && valueFormatted != null) { + value = valueFormatted; + } + const processedType = this.getTypeFromStyle(actualStyle, value) || type; + const { value: processedValue, escaped } = this.getCellValue(processedType, value); + const styles = []; + if (actualStyle) { + styles.push(styleId); + } + if (escaped) { + styles.push("_quotePrefix"); + } + styleId = this.getStyleId(styles) || void 0; + return { + styleId, + data: { + type: processedType, + value: processedValue + } + }; + } + createMergedCell(styleId, type, value, numOfCells) { + const valueToUse = value == null ? "" : value; + return { + styleId: this.getStyleById(styleId) ? styleId : void 0, + data: { + type, + value: type === "s" ? String(valueToUse) : value + }, + mergeAcross: numOfCells + }; + } + getCellValue(type, value) { + let escaped = false; + if (value == null || type === "s" && value === "") { + return { value: "", escaped: false }; + } + if (type === "s") { + value = String(value); + if (value[0] === "'") { + escaped = true; + value = value.slice(1); + } + } else if (type === "f") { + value = this.addXlfnPrefix(value).slice(1); + } else if (type === "n") { + const numberValue = Number(value); + if (isNaN(numberValue)) { + value = ""; + } else if (value !== "") { + value = numberValue.toString(); + } + } + return { value, escaped }; + } + addXlfnPrefix(value) { + if (!value) { + return value; + } + const concatRegex = /(^|[^A-Z0-9._])(CONCAT)(\s*\()/gi; + return value.replace(concatRegex, (_match, prefix, fn, openParen) => `${prefix}_xlfn.${fn}${openParen}`); + } + getStyleId(styleIds) { + if (!styleIds?.length) { + return null; + } + const filteredStyleIds = styleIds.filter((styleId) => this.stylesByIds[styleId] != null); + if (!filteredStyleIds.length) { + return null; + } + if (filteredStyleIds.length === 1) { + return filteredStyleIds[0]; + } + const key = filteredStyleIds.join("-"); + if (!this.mixedStyles[key]) { + this.addNewMixedStyle(filteredStyleIds); + } + return this.mixedStyles[key].excelID; + } + addNewMixedStyle(styleIds) { + this.mixedStyleCounter += 1; + const excelId = `mixedStyle${this.mixedStyleCounter}`; + const resultantStyle = {}; + for (const styleId of styleIds) { + const excelStyle = this.stylesByIds[styleId]; + if (excelStyle) { + _mergeDeep(resultantStyle, excelStyle, true, true); + } + } + resultantStyle.id = excelId; + const key = styleIds.join("-"); + this.mixedStyles[key] = { + excelID: excelId, + key, + result: resultantStyle + }; + this.excelStyles.push(resultantStyle); + this.stylesByIds[excelId] = resultantStyle; + } + isFormula(value) { + if (value == null) { + return false; + } + const strValue = String(value); + return this.config.autoConvertFormulas && _isExpressionString(strValue); + } + isNumerical(value) { + if (typeof value === "bigint") { + return false; + } + return isFinite(value) && value !== "" && !isNaN(parseFloat(value)); + } + getStyleById(styleId) { + if (styleId == null) { + return null; + } + return this.stylesByIds[styleId] || null; + } +}; + +// packages/ag-grid-enterprise/src/excelExport/excelXlsxFactory.ts +import { _escapeString as _escapeString7, _warn as _warn2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/contentType.ts +var contentTypeFactory = { + getTemplate(config) { + const { name, ContentType, Extension, PartName } = config; + return { + name, + properties: { + rawMap: { + Extension, + PartName, + ContentType + } + } + }; + } +}; +var contentType_default = contentTypeFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/contentTypes.ts +var _normaliseImageExtension = (ext) => ext === "jpg" ? "jpeg" : ext; +var contentTypesFactory = { + getTemplate({ sheetLen, hasCustomProperties }) { + const worksheets = new Array(sheetLen).fill(void 0).map((v, i) => ({ + name: "Override", + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml", + PartName: `/xl/worksheets/sheet${i + 1}.xml` + })); + const sheetsWithImages = XLSX_WORKSHEET_IMAGES.size; + const headerFooterImages = XLSX_WORKSHEET_HEADER_FOOTER_IMAGES.size; + const imageTypesObject = {}; + XLSX_WORKBOOK_IMAGE_IDS.forEach((v) => { + imageTypesObject[_normaliseImageExtension(v.type)] = true; + }); + const imageDocs = new Array(sheetsWithImages).fill(void 0).map((v, i) => ({ + name: "Override", + ContentType: "application/vnd.openxmlformats-officedocument.drawing+xml", + PartName: `/xl/drawings/drawing${i + 1}.xml` + })); + const tableDocs = []; + XLSX_WORKSHEET_DATA_TABLES.forEach(({ name }) => { + tableDocs.push({ + name: "Override", + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml", + PartName: `/xl/tables/${name}.xml` + }); + }); + const customPropertiesDocs = hasCustomProperties ? [ + { + name: "Override", + ContentType: "application/vnd.openxmlformats-officedocument.custom-properties+xml", + PartName: "/docProps/custom.xml" + } + ] : []; + const imageTypes = Object.keys(imageTypesObject).map((ext) => ({ + name: "Default", + ContentType: `image/${ext}`, + Extension: ext + })); + if (headerFooterImages) { + imageTypes.push({ + name: "Default", + Extension: "vml", + ContentType: "application/vnd.openxmlformats-officedocument.vmlDrawing" + }); + } + const children = [ + ...imageTypes, + { + name: "Default", + Extension: "rels", + ContentType: "application/vnd.openxmlformats-package.relationships+xml" + }, + { + name: "Default", + ContentType: "application/xml", + Extension: "xml" + }, + { + name: "Override", + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", + PartName: "/xl/workbook.xml" + }, + ...worksheets, + { + name: "Override", + ContentType: "application/vnd.openxmlformats-officedocument.theme+xml", + PartName: "/xl/theme/theme1.xml" + }, + { + name: "Override", + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml", + PartName: "/xl/styles.xml" + }, + { + name: "Override", + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml", + PartName: "/xl/sharedStrings.xml" + }, + ...imageDocs, + ...tableDocs, + { + name: "Override", + ContentType: "application/vnd.openxmlformats-package.core-properties+xml", + PartName: "/docProps/core.xml" + }, + ...customPropertiesDocs + ].map((contentType) => contentType_default.getTemplate(contentType)); + return { + name: "Types", + properties: { + rawMap: { + xmlns: "http://schemas.openxmlformats.org/package/2006/content-types" + } + }, + children + }; + } +}; +var contentTypes_default = contentTypesFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/core.ts +var coreFactory = { + getTemplate(author) { + const dt = /* @__PURE__ */ new Date(); + const jsonDate = dt.toJSON(); + return { + name: "cp:coreProperties", + properties: { + prefixedAttributes: [ + { + prefix: "xmlns:", + map: { + cp: "http://schemas.openxmlformats.org/package/2006/metadata/core-properties", + dc: "http://purl.org/dc/elements/1.1/", + dcterms: "http://purl.org/dc/terms/", + dcmitype: "http://purl.org/dc/dcmitype/", + xsi: "http://www.w3.org/2001/XMLSchema-instance" + } + } + ] + }, + children: [ + { + name: "dc:creator", + textNode: author + }, + { + name: "dc:title", + textNode: "Workbook" + }, + { + name: "dcterms:created", + properties: { + rawMap: { + "xsi:type": "dcterms:W3CDTF" + } + }, + textNode: jsonDate + }, + { + name: "dcterms:modified", + properties: { + rawMap: { + "xsi:type": "dcterms:W3CDTF" + } + }, + textNode: jsonDate + } + ] + }; + } +}; +var core_default = coreFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/customProperties.ts +import { _escapeString as _escapeString2 } from "ag-grid-community"; +var DEFAULT_FMTID = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}"; +var buildPropertyElements = (metadata) => { + const keys = Object.keys(metadata).filter((name) => name && metadata[name] != null); + return keys.map((name, index) => ({ + name: "property", + properties: { + rawMap: { + fmtid: DEFAULT_FMTID, + pid: (index + 2).toString(), + name: _escapeString2(name) ?? "" + } + }, + children: [ + { + name: "vt:lpwstr", + textNode: _escapeString2(replaceInvisibleCharacters(String(metadata[name]))) ?? "" + } + ] + })); +}; +var customPropertiesFactory = { + getTemplate(metadata) { + return { + name: "Properties", + properties: { + rawMap: { + xmlns: "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties", + "xmlns:vt": "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes" + } + }, + children: buildPropertyElements(metadata) + }; + } +}; +var customProperties_default = customPropertiesFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/drawing.ts +var getAnchor = (name, imageAnchor) => ({ + name: `xdr:${name}`, + children: [ + { + name: "xdr:col", + textNode: imageAnchor.col.toString() + }, + { + name: "xdr:colOff", + textNode: imageAnchor.offsetX.toString() + }, + { + name: "xdr:row", + textNode: imageAnchor.row.toString() + }, + { + name: "xdr:rowOff", + textNode: imageAnchor.offsetY.toString() + } + ] +}); +var getExt = (image) => { + const children = [ + { + name: "a:ext", + properties: { + rawMap: { + uri: "{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}" + } + }, + children: [ + { + name: "a16:creationId", + properties: { + rawMap: { + id: "{822E6D20-D7BC-2841-A643-D49A6EF008A2}", + "xmlns:a16": "http://schemas.microsoft.com/office/drawing/2014/main" + } + } + } + ] + } + ]; + const recolor = image.recolor?.toLowerCase(); + switch (recolor) { + case "grayscale": + case "sepia": + case "washout": + children.push({ + name: "a:ext", + properties: { + rawMap: { + uri: "{C183D7F6-B498-43B3-948B-1728B52AA6E4}" + } + }, + children: [ + { + name: "adec:decorative", + properties: { + rawMap: { + val: "0", + "xmlns:adec": "http://schemas.microsoft.com/office/drawing/2017/decorative" + } + } + } + ] + }); + } + return { + name: "a:extLst", + children + }; +}; +var getNvPicPr = (image, index) => ({ + name: "xdr:nvPicPr", + children: [ + { + name: "xdr:cNvPr", + properties: { + rawMap: { + id: index, + name: image.id, + descr: image.altText != null ? image.altText : void 0 + } + }, + children: [getExt(image)] + }, + { + name: "xdr:cNvPicPr", + properties: { + rawMap: { + preferRelativeResize: "0" + } + }, + children: [ + { + name: "a:picLocks" + } + ] + } + ] +}); +var getColorDetails = (color) => { + if (!color.saturation && !color.tint) { + return; + } + const ret = []; + if (color.saturation) { + ret.push({ + name: "a:satMod", + properties: { + rawMap: { + val: color.saturation * 1e3 + } + } + }); + } + if (color.tint) { + ret.push({ + name: "a:tint", + properties: { + rawMap: { + val: color.tint * 1e3 + } + } + }); + } + return ret; +}; +var getDuoTone = (primaryColor, secondaryColor) => { + return { + name: "a:duotone", + children: [ + { + name: "a:prstClr", + properties: { + rawMap: { + val: primaryColor.color + } + }, + children: getColorDetails(primaryColor) + }, + { + name: "a:srgbClr", + properties: { + rawMap: { + val: secondaryColor.color + } + }, + children: getColorDetails(secondaryColor) + } + ] + }; +}; +var getBlipFill = (image, index) => { + let blipChildren; + if (image.transparency) { + const transparency = Math.min(Math.max(image.transparency, 0), 100); + blipChildren = [ + { + name: "a:alphaModFix", + properties: { + rawMap: { + amt: 1e5 - Math.round(transparency * 1e3) + } + } + } + ]; + } + if (image.recolor) { + if (!blipChildren) { + blipChildren = []; + } + switch (image.recolor.toLocaleLowerCase()) { + case "grayscale": + blipChildren.push({ name: "a:grayscl" }); + break; + case "sepia": + blipChildren.push(getDuoTone({ color: "black" }, { color: "D9C3A5", tint: 50, saturation: 180 })); + break; + case "washout": + blipChildren.push({ + name: "a:lum", + properties: { + rawMap: { + bright: "70000", + contrast: "-70000" + } + } + }); + break; + default: + } + } + return { + name: "xdr:blipFill", + children: [ + { + name: "a:blip", + properties: { + rawMap: { + cstate: "print", + "r:embed": `rId${index}`, + "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships" + } + }, + children: blipChildren + }, + { + name: "a:stretch", + children: [ + { + name: "a:fillRect" + } + ] + } + ] + }; +}; +var getSpPr = (image, imageBoxSize) => { + const xfrm = { + name: "a:xfrm", + children: [ + { + name: "a:off", + properties: { + rawMap: { + x: 0, + y: 0 + } + } + }, + { + name: "a:ext", + properties: { + rawMap: { + cx: imageBoxSize.width, + cy: imageBoxSize.height + } + } + } + ] + }; + if (image.rotation) { + const rotation = image.rotation; + xfrm.properties = { + rawMap: { + rot: Math.min(Math.max(rotation, 0), 360) * 6e4 + } + }; + } + const prstGeom = { + name: "a:prstGeom", + properties: { + rawMap: { + prst: "rect" + } + }, + children: [{ name: "a:avLst" }] + }; + const ret = { + name: "xdr:spPr", + children: [xfrm, prstGeom] + }; + return ret; +}; +var getImageBoxSize = (image) => { + image.fitCell = !!image.fitCell || !image.width || !image.height; + const { position = {}, fitCell, width = 0, height = 0, totalHeight, totalWidth } = image; + const { offsetX = 0, offsetY = 0, row = 1, rowSpan = 1, column = 1, colSpan = 1 } = position; + return { + from: { + row: row - 1, + col: column - 1, + offsetX: pixelsToEMU(offsetX), + offsetY: pixelsToEMU(offsetY) + }, + to: { + row: row - 1 + (fitCell ? 1 : rowSpan - 1), + col: column - 1 + (fitCell ? 1 : colSpan - 1), + offsetX: pixelsToEMU(width + offsetX), + offsetY: pixelsToEMU(height + offsetY) + }, + height: pixelsToEMU(totalHeight || height), + width: pixelsToEMU(totalWidth || width) + }; +}; +var getPicture = (image, currentIndex, worksheetImageIndex, imageBoxSize) => { + return { + name: "xdr:pic", + children: [ + getNvPicPr(image, currentIndex + 1), + getBlipFill(image, worksheetImageIndex + 1), + getSpPr(image, imageBoxSize) + ] + }; +}; +var drawingFactory = { + getTemplate(config) { + const { sheetIndex } = config; + const sheetImages = XLSX_WORKSHEET_IMAGES.get(sheetIndex); + const sheetImageIds = XLSX_WORKSHEET_IMAGE_IDS.get(sheetIndex); + const children = sheetImages.map((image, idx) => { + const boxSize = getImageBoxSize(image); + return { + name: "xdr:twoCellAnchor", + properties: { + rawMap: { + editAs: "absolute" + } + }, + children: [ + getAnchor("from", boxSize.from), + getAnchor("to", boxSize.to), + getPicture(image, idx, sheetImageIds.get(image.id).index, boxSize), + { name: "xdr:clientData" } + ] + }; + }); + return { + name: "xdr:wsDr", + properties: { + rawMap: { + "xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main", + "xmlns:xdr": "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" + } + }, + children + }; + } +}; +var drawing_default = drawingFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/relationship.ts +var relationshipFactory = { + getTemplate(config) { + const { Id, Type, Target } = config; + return { + name: "Relationship", + properties: { + rawMap: { + Id, + Type, + Target + } + } + }; + } +}; +var relationship_default = relationshipFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/relationships.ts +var relationshipsFactory = { + getTemplate(c) { + const children = c.map((relationship) => relationship_default.getTemplate(relationship)); + return { + name: "Relationships", + properties: { + rawMap: { + xmlns: "http://schemas.openxmlformats.org/package/2006/relationships" + } + }, + children + }; + } +}; +var relationships_default = relationshipsFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/sharedStrings.ts +var sharedStrings = { + getTemplate(strings) { + return { + name: "sst", + properties: { + rawMap: { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", + count: strings.size, + uniqueCount: strings.size + } + }, + children: buildSharedString(strings) + }; + } +}; +var sharedStrings_default = sharedStrings; + +// packages/ag-grid-enterprise/src/excelExport/assets/excelLegacyConvert.ts +var getWeightName = (value) => { + switch (value) { + case 1: + return "thin"; + case 2: + return "medium"; + case 3: + return "thick"; + default: + return "hair"; + } +}; +var mappedBorderNames = { + None: "None", + Dot: "Dotted", + Dash: "Dashed", + Double: "Double", + DashDot: "DashDot", + DashDotDot: "DashDotDot", + SlantDashDot: "SlantDashDot", + Continuous: "Continuous" +}; +var mediumBorders = ["Dashed", "DashDot", "DashDotDot"]; +var colorMap = { + None: "none", + Solid: "solid", + Gray50: "mediumGray", + Gray75: "darkGray", + Gray25: "lightGray", + HorzStripe: "darkHorizontal", + VertStripe: "darkVertical", + ReverseDiagStripe: "darkDown", + DiagStripe: "darkUp", + DiagCross: "darkGrid", + ThickDiagCross: "darkTrellis", + ThinHorzStripe: "lightHorizontal", + ThinVertStripe: "lightVertical", + ThinReverseDiagStripe: "lightDown", + ThinDiagStripe: "lightUp", + ThinHorzCross: "lightGrid", + ThinDiagCross: "lightTrellis", + Gray125: "gray125", + Gray0625: "gray0625" +}; +var horizontalAlignmentMap = { + Automatic: "general", + Left: "left", + Center: "center", + Right: "right", + Fill: "fill", + Justify: "justify", + CenterAcrossSelection: "centerContinuous", + Distributed: "distributed", + JustifyDistributed: "justify" +}; +var verticalAlignmentMap = { + Automatic: void 0, + Top: "top", + Bottom: "bottom", + Center: "center", + Justify: "justify", + Distributed: "distributed", + JustifyDistributed: "justify" +}; +var convertLegacyPattern = (name) => { + if (!name) { + return "none"; + } + return colorMap[name] || name; +}; +var convertLegacyColor = (color) => { + if (color == void 0) { + return color; + } + if (color.charAt(0) === "#") { + color = color.substring(1); + } + return color.length === 6 ? "FF" + color : color; +}; +var convertLegacyBorder = (type, weight) => { + if (!type) { + return "thin"; + } + const namedWeight = getWeightName(weight); + if (type === "Continuous") { + return namedWeight; + } + const mappedName = mappedBorderNames[type]; + if (namedWeight === "medium" && mediumBorders.some((type2) => type2 === mappedName)) { + return `medium${mappedName}`; + } + return `${mappedName.charAt(0).toLowerCase()}${mappedName.substring(1)}`; +}; +var convertLegacyHorizontalAlignment = (alignment) => { + return horizontalAlignmentMap[alignment] || "general"; +}; +var convertLegacyVerticalAlignment = (alignment) => { + return verticalAlignmentMap[alignment] || void 0; +}; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/border.ts +var getBorderColor = (color) => { + return { + name: "color", + properties: { + rawMap: { + rgb: convertLegacyColor(color || "#000000") + } + } + }; +}; +var borderFactory = { + getTemplate(border) { + const { left, right, top, bottom, diagonal } = border; + const leftChildren = left ? [getBorderColor(left.color)] : void 0; + const rightChildren = right ? [getBorderColor(right.color)] : void 0; + const topChildren = top ? [getBorderColor(top.color)] : void 0; + const bottomChildren = bottom ? [getBorderColor(bottom.color)] : void 0; + const diagonalChildren = diagonal ? [getBorderColor(diagonal.color)] : void 0; + return { + name: "border", + children: [ + { + name: "left", + properties: { rawMap: { style: left?.style } }, + children: leftChildren + }, + { + name: "right", + properties: { rawMap: { style: right?.style } }, + children: rightChildren + }, + { + name: "top", + properties: { rawMap: { style: top?.style } }, + children: topChildren + }, + { + name: "bottom", + properties: { rawMap: { style: bottom?.style } }, + children: bottomChildren + }, + { + name: "diagonal", + properties: { rawMap: { style: diagonal?.style } }, + children: diagonalChildren + } + ] + }; + } +}; +var border_default = borderFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/borders.ts +var bordersFactory = { + getTemplate(borders) { + return { + name: "borders", + properties: { + rawMap: { + count: borders.length + } + }, + children: borders.map((border) => border_default.getTemplate(border)) + }; + } +}; +var borders_default = bordersFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/alignment.ts +var getReadingOrderId = (readingOrder) => { + const order = ["Context", "LeftToRight", "RightToLeft"]; + const pos = order.indexOf(readingOrder); + return Math.max(pos, 0); +}; +var alignmentFactory = { + getTemplate(alignment) { + const { horizontal, indent, readingOrder, rotate, shrinkToFit, vertical, wrapText } = alignment; + return { + name: "alignment", + properties: { + rawMap: { + horizontal: horizontal && convertLegacyHorizontalAlignment(horizontal), + indent, + readingOrder: readingOrder && getReadingOrderId(readingOrder), + textRotation: rotate, + shrinkToFit, + vertical: vertical && convertLegacyVerticalAlignment(vertical), + wrapText + } + } + }; + } +}; +var alignment_default = alignmentFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/protection.ts +var protectionFactory = { + getTemplate(protection) { + const locked = protection.protected === false ? 0 : 1; + const hidden = protection.hideFormula === true ? 1 : 0; + return { + name: "protection", + properties: { + rawMap: { + hidden, + locked + } + } + }; + } +}; +var protection_default = protectionFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/xf.ts +var xfFactory = { + getTemplate(xf) { + const { alignment, borderId, fillId, fontId, numFmtId, protection, quotePrefix, xfId } = xf; + const children = []; + if (alignment) { + children.push(alignment_default.getTemplate(alignment)); + } + if (protection) { + children.push(protection_default.getTemplate(protection)); + } + return { + name: "xf", + properties: { + rawMap: { + applyAlignment: alignment ? 1 : void 0, + applyProtection: protection ? 1 : void 0, + applyBorder: borderId ? 1 : void 0, + applyFill: fillId ? 1 : void 0, + borderId, + fillId, + applyFont: fontId ? 1 : void 0, + fontId, + applyNumberFormat: numFmtId ? 1 : void 0, + numFmtId, + quotePrefix: quotePrefix ? 1 : void 0, + xfId + } + }, + children: children.length ? children : void 0 + }; + } +}; +var xf_default = xfFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/cellStyleXfs.ts +var cellStylesXfsFactory = { + getTemplate(xfs) { + return { + name: "cellStyleXfs", + properties: { + rawMap: { + count: xfs.length + } + }, + children: xfs.map((xf) => xf_default.getTemplate(xf)) + }; + } +}; +var cellStyleXfs_default = cellStylesXfsFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/cellStyle.ts +var borderFactory2 = { + getTemplate(cellStyle) { + const { builtinId, name, xfId } = cellStyle; + return { + name: "cellStyle", + properties: { + rawMap: { + builtinId, + name, + xfId + } + } + }; + } +}; +var cellStyle_default = borderFactory2; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/cellStyles.ts +var cellStylesFactory = { + getTemplate(cellStyles) { + return { + name: "cellStyles", + properties: { + rawMap: { + count: cellStyles.length + } + }, + children: cellStyles.map((cellStyle) => cellStyle_default.getTemplate(cellStyle)) + }; + } +}; +var cellStyles_default = cellStylesFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/cellXfs.ts +var cellXfsFactory = { + getTemplate(xfs) { + return { + name: "cellXfs", + properties: { + rawMap: { + count: xfs.length + } + }, + children: xfs.map((xf) => xf_default.getTemplate(xf)) + }; + } +}; +var cellXfs_default = cellXfsFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/fill.ts +var fillFactory = { + getTemplate(fill) { + const { patternType, fgTheme, fgTint, fgRgb, bgRgb, bgIndexed } = fill; + const pf = { + name: "patternFill", + properties: { + rawMap: { + patternType + } + } + }; + if (fgTheme || fgTint || fgRgb) { + pf.children = [ + { + name: "fgColor", + properties: { + rawMap: { + theme: fgTheme, + tint: fgTint, + rgb: fgRgb + } + } + } + ]; + } + if (bgIndexed || bgRgb) { + if (!pf.children) { + pf.children = []; + } + pf.children.push({ + name: "bgColor", + properties: { + rawMap: { + indexed: bgIndexed, + rgb: bgRgb + } + } + }); + } + return { + name: "fill", + children: [pf] + }; + } +}; +var fill_default = fillFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/fills.ts +var fillsFactory = { + getTemplate(fills) { + return { + name: "fills", + properties: { + rawMap: { + count: fills.length + } + }, + children: fills.map((fill) => fill_default.getTemplate(fill)) + }; + } +}; +var fills_default = fillsFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/font.ts +var fontFactory = { + getTemplate(font) { + const { + size, + colorTheme, + color = "FF000000", + fontName = "Calibri", + family, + scheme, + italic, + bold, + strikeThrough, + outline, + shadow: shadow2, + underline, + verticalAlign + } = font; + const children = [ + { name: "sz", properties: { rawMap: { val: size } } }, + { name: "color", properties: { rawMap: { theme: colorTheme, rgb: color } } }, + { name: "name", properties: { rawMap: { val: fontName } } } + ]; + if (family) { + children.push({ name: "family", properties: { rawMap: { val: family } } }); + } + if (scheme) { + children.push({ name: "scheme", properties: { rawMap: { val: scheme } } }); + } + if (italic) { + children.push({ name: "i" }); + } + if (bold) { + children.push({ name: "b" }); + } + if (strikeThrough) { + children.push({ name: "strike" }); + } + if (outline) { + children.push({ name: "outline" }); + } + if (shadow2) { + children.push({ name: "shadow" }); + } + if (underline) { + children.push({ name: "u", properties: { rawMap: { val: underline } } }); + } + if (verticalAlign) { + children.push({ name: "vertAlign", properties: { rawMap: { val: verticalAlign } } }); + } + return { name: "font", children }; + } +}; +var font_default = fontFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/fonts.ts +var fontsFactory = { + getTemplate(fonts) { + return { + name: "fonts", + properties: { + rawMap: { + count: fonts.length + } + }, + children: fonts.map((font) => font_default.getTemplate(font)) + }; + } +}; +var fonts_default = fontsFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/numberFormat.ts +import { _escapeString as _escapeString3 } from "ag-grid-community"; +function prepareString(str) { + const split = str.split(/(\[[^\]]*\])/); + for (let i = 0; i < split.length; i++) { + let currentString = split[i]; + if (!currentString.length) { + continue; + } + if (!currentString.startsWith("[")) { + currentString = currentString.replace(/\$/g, '"$"'); + } + split[i] = _escapeString3(currentString); + } + return split.join(""); +} +var numberFormatFactory = { + getTemplate(numberFormat) { + let { formatCode, numFmtId } = numberFormat; + if (formatCode.length) { + formatCode = prepareString(formatCode); + } + return { + name: "numFmt", + properties: { + rawMap: { + formatCode, + numFmtId + } + } + }; + } +}; +var numberFormat_default = numberFormatFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/numberFormats.ts +var numberFormatsFactory = { + getTemplate(numberFormats) { + return { + name: "numFmts", + properties: { + rawMap: { + count: numberFormats.length + } + }, + children: numberFormats.map((numberFormat) => numberFormat_default.getTemplate(numberFormat)) + }; + } +}; +var numberFormats_default = numberFormatsFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/styles/stylesheet.ts +var stylesMap; +var registeredNumberFmts; +var registeredFonts; +var registeredFills; +var registeredBorders; +var registeredCellStyleXfs; +var registeredCellXfs; +var registeredCellStyles; +var currentSheet; +var getStyleName = (name, currentSheet2) => { + if (name.includes("mixedStyle") && currentSheet2 > 1) { + name += `_${currentSheet2}`; + } + return name; +}; +var resetStylesheetValues = () => { + stylesMap = { base: 0 }; + registeredNumberFmts = []; + registeredFonts = [{ fontName: "Calibri", colorTheme: "1", family: "2", scheme: "minor" }]; + registeredFills = [{ patternType: "none" }, { patternType: "gray125" }]; + registeredBorders = [{ left: void 0, right: void 0, top: void 0, bottom: void 0, diagonal: void 0 }]; + registeredCellStyleXfs = [{ borderId: 0, fillId: 0, fontId: 0, numFmtId: 0 }]; + registeredCellXfs = [{ borderId: 0, fillId: 0, fontId: 0, numFmtId: 0, xfId: 0 }]; + registeredCellStyles = [{ builtinId: 0, name: "Normal", xfId: 0 }]; +}; +var registerFill = (fill) => { + const convertedPattern = convertLegacyPattern(fill.pattern); + const convertedFillColor = convertLegacyColor(fill.color); + const convertedPatternColor = convertLegacyColor(fill.patternColor); + let pos = registeredFills.findIndex((currentFill) => { + const { patternType, fgRgb, bgRgb } = currentFill; + return !(patternType != convertedPattern || fgRgb != convertedFillColor || bgRgb != convertedPatternColor); + }); + if (pos === -1) { + pos = registeredFills.length; + registeredFills.push({ + patternType: convertedPattern, + fgRgb: convertedFillColor, + bgRgb: convertedPatternColor + }); + } + return pos; +}; +var registerNumberFmt = (format) => { + if (numberFormatMap[format]) { + return numberFormatMap[format]; + } + let pos = registeredNumberFmts.findIndex((currentFormat) => currentFormat.formatCode === format); + if (pos === -1) { + pos = registeredNumberFmts.length + 164; + registeredNumberFmts.push({ formatCode: format, numFmtId: pos }); + } else { + pos = registeredNumberFmts[pos].numFmtId; + } + return pos; +}; +var registerBorders = (borders) => { + const { borderBottom, borderTop, borderLeft, borderRight } = borders; + let bottomStyle; + let topStyle; + let leftStyle; + let rightStyle; + let bottomColor; + let topColor; + let leftColor; + let rightColor; + if (borderLeft) { + leftStyle = convertLegacyBorder(borderLeft.lineStyle, borderLeft.weight); + leftColor = convertLegacyColor(borderLeft.color); + } + if (borderRight) { + rightStyle = convertLegacyBorder(borderRight.lineStyle, borderRight.weight); + rightColor = convertLegacyColor(borderRight.color); + } + if (borderBottom) { + bottomStyle = convertLegacyBorder(borderBottom.lineStyle, borderBottom.weight); + bottomColor = convertLegacyColor(borderBottom.color); + } + if (borderTop) { + topStyle = convertLegacyBorder(borderTop.lineStyle, borderTop.weight); + topColor = convertLegacyColor(borderTop.color); + } + let pos = registeredBorders.findIndex((currentBorder) => { + const { left, right, top, bottom } = currentBorder; + if (!left && (leftStyle || leftColor)) { + return false; + } + if (!right && (rightStyle || rightColor)) { + return false; + } + if (!top && (topStyle || topColor)) { + return false; + } + if (!bottom && (bottomStyle || bottomColor)) { + return false; + } + const { style: clS, color: clC } = left || {}; + const { style: crS, color: crC } = right || {}; + const { style: ctS, color: ctC } = top || {}; + const { style: cbS, color: cbC } = bottom || {}; + if (clS != leftStyle || clC != leftColor) { + return false; + } + if (crS != rightStyle || crC != rightColor) { + return false; + } + if (ctS != topStyle || ctC != topColor) { + return false; + } + if (cbS != bottomStyle || cbC != bottomColor) { + return false; + } + return true; + }); + if (pos === -1) { + pos = registeredBorders.length; + registeredBorders.push({ + left: { + style: leftStyle, + color: leftColor + }, + right: { + style: rightStyle, + color: rightColor + }, + top: { + style: topStyle, + color: topColor + }, + bottom: { + style: bottomStyle, + color: bottomColor + }, + diagonal: { + style: void 0, + color: void 0 + } + }); + } + return pos; +}; +var registerFont = (font) => { + const { + fontName: name = "Calibri", + color, + size, + bold, + italic, + outline, + shadow: shadow2, + strikeThrough, + underline, + family, + verticalAlign + } = font; + const convertedColor = convertLegacyColor(color); + const familyId = getFontFamilyId(family); + const convertedUnderline = underline ? underline.toLocaleLowerCase() : void 0; + const convertedVerticalAlign = verticalAlign ? verticalAlign.toLocaleLowerCase() : void 0; + let pos = registeredFonts.findIndex((currentFont) => { + return !(currentFont.fontName != name || currentFont.color != convertedColor || currentFont.size != size || currentFont.bold != bold || currentFont.italic != italic || currentFont.outline != outline || currentFont.shadow != shadow2 || currentFont.strikeThrough != strikeThrough || currentFont.underline != convertedUnderline || currentFont.verticalAlign != convertedVerticalAlign || currentFont.family != familyId); + }); + if (pos === -1) { + pos = registeredFonts.length; + registeredFonts.push({ + fontName: name, + color: convertedColor, + size, + bold, + italic, + outline, + shadow: shadow2, + strikeThrough, + underline: convertedUnderline, + verticalAlign: convertedVerticalAlign, + family: familyId != null ? familyId.toString() : void 0 + }); + } + return pos; +}; +var registerStyle = (config) => { + const { alignment, borders, font, interior, numberFormat, protection, quotePrefix } = config; + let { id } = config; + let currentFill = 0; + let currentBorder = 0; + let currentFont = 0; + let currentNumberFmt = 0; + if (!id) { + return; + } + id = getStyleName(id, currentSheet); + if (stylesMap[id] != void 0) { + return; + } + if (interior) { + currentFill = registerFill(interior); + } + if (borders) { + currentBorder = registerBorders(borders); + } + if (font) { + currentFont = registerFont(font); + } + if (numberFormat) { + currentNumberFmt = registerNumberFmt(numberFormat.format); + } + stylesMap[id] = registeredCellXfs.length; + registeredCellXfs.push({ + alignment, + borderId: currentBorder || 0, + fillId: currentFill || 0, + fontId: currentFont || 0, + numFmtId: currentNumberFmt || 0, + protection, + quotePrefix, + xfId: 0 + }); +}; +var stylesheetFactory = { + getTemplate(defaultFontSize) { + const numberFormats = numberFormats_default.getTemplate(registeredNumberFmts); + const fonts = fonts_default.getTemplate( + registeredFonts.map((font) => ({ ...font, size: font.size != null ? font.size : defaultFontSize })) + ); + const fills = fills_default.getTemplate(registeredFills); + const borders = borders_default.getTemplate(registeredBorders); + const cellStylesXfs = cellStyleXfs_default.getTemplate(registeredCellStyleXfs); + const cellXfs = cellXfs_default.getTemplate(registeredCellXfs); + const cellStyles = cellStyles_default.getTemplate(registeredCellStyles); + resetStylesheetValues(); + return { + name: "styleSheet", + properties: { + rawMap: { + "mc:Ignorable": "x14ac x16r2 xr", + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", + "xmlns:mc": "http://schemas.openxmlformats.org/markup-compatibility/2006", + "xmlns:x14ac": "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac", + "xmlns:x16r2": "http://schemas.microsoft.com/office/spreadsheetml/2015/02/main", + "xmlns:xr": "http://schemas.microsoft.com/office/spreadsheetml/2014/revision" + } + }, + children: [ + numberFormats, + fonts, + fills, + borders, + cellStylesXfs, + cellXfs, + cellStyles, + { + name: "tableStyles", + properties: { + rawMap: { + count: 0, + defaultPivotStyle: "PivotStyleLight16", + defaultTableStyle: "TableStyleMedium2" + } + } + } + ] + }; + } +}; +var getStyleId = (name, currentSheet2) => { + return stylesMap[getStyleName(name, currentSheet2)] || 0; +}; +var registerStyles = (styles, _currentSheet) => { + currentSheet = _currentSheet; + if (currentSheet === 1) { + resetStylesheetValues(); + } + styles.forEach(registerStyle); +}; +var stylesheet_default = stylesheetFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/table.ts +import { _escapeString as _escapeString4 } from "ag-grid-community"; +var tableFactory = { + getTemplate(dataTable, idx) { + const { + name, + columns, + rowRange, + displayName, + showRowStripes, + showColumnStripes, + showFilterButtons, + highlightFirstColumn, + highlightLastColumn + } = dataTable || {}; + const noRows = !rowRange || rowRange[0] - rowRange[1] === 0; + if (!dataTable || !name || !Array.isArray(columns) || !columns.length || noRows) { + return { name: "table" }; + } + const filterColumns = columns.map((col, idx2) => ({ + name: "filterColumn", + properties: { + rawMap: { + colId: idx2.toString(), + // For filters, this should start with 0 + hiddenButton: showFilterButtons[idx2] ? 0 : 1 + } + } + })); + const firstCell = `A${rowRange[0]}`; + const lastCell = `${getExcelColumnName(columns.length)}${rowRange[1]}`; + const ref = `${firstCell}:${lastCell}`; + const id = `${idx + 1}`; + const displayNameToUse = idx ? `${displayName}_${id}` : displayName; + return { + name: "table", + properties: { + rawMap: { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", + "xmlns:mc": "http://schemas.openxmlformats.org/markup-compatibility/2006", + "mc:Ignorable": "xr xr3", + "xmlns:xr": "http://schemas.microsoft.com/office/spreadsheetml/2014/revision", + "xmlns:xr3": "http://schemas.microsoft.com/office/spreadsheetml/2016/revision3", + name: displayNameToUse, + displayName: displayNameToUse, + ref, + totalsRowShown: 0, + id + } + }, + children: [ + { + name: "autoFilter", + properties: { + rawMap: { + ref + } + }, + children: filterColumns + }, + { + name: "tableColumns", + properties: { + rawMap: { + count: columns.length + } + }, + children: columns.map((col, idx2) => ({ + name: "tableColumn", + properties: { + rawMap: { + id: (idx2 + 1).toString(), + name: _escapeString4(sanitizeTableName(col)), + dataCellStyle: "Normal" + } + } + })) + }, + { + name: "tableStyleInfo", + properties: { + rawMap: { + name: "TableStyleLight1", + showFirstColumn: highlightFirstColumn ? 1 : 0, + showLastColumn: highlightLastColumn ? 1 : 0, + showRowStripes: showRowStripes ? 1 : 0, + showColumnStripes: showColumnStripes ? 1 : 0 + } + } + } + ] + }; + } +}; +var table_default = tableFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/themes/office/colorScheme.ts +var getColorChildren = (props) => { + const [type, innerType, val, lastClr] = props; + return { + name: `a:${type}`, + children: [ + { + name: `a:${innerType}`, + properties: { + rawMap: { + val, + lastClr + } + } + } + ] + }; +}; +var colorScheme = { + getTemplate() { + return { + name: "a:clrScheme", + properties: { + rawMap: { + name: "Office" + } + }, + children: [ + getColorChildren(["dk1", "sysClr", "windowText", "000000"]), + getColorChildren(["lt1", "sysClr", "window", "FFFFFF"]), + getColorChildren(["dk2", "srgbClr", "44546A"]), + getColorChildren(["lt2", "srgbClr", "E7E6E6"]), + getColorChildren(["accent1", "srgbClr", "4472C4"]), + getColorChildren(["accent2", "srgbClr", "ED7D31"]), + getColorChildren(["accent3", "srgbClr", "A5A5A5"]), + getColorChildren(["accent4", "srgbClr", "FFC000"]), + getColorChildren(["accent5", "srgbClr", "5B9BD5"]), + getColorChildren(["accent6", "srgbClr", "70AD47"]), + getColorChildren(["hlink", "srgbClr", "0563C1"]), + getColorChildren(["folHlink", "srgbClr", "954F72"]) + ] + }; + } +}; +var colorScheme_default = colorScheme; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/themes/office/fontScheme.ts +var getFont = (props) => { + const [type, typeface, script, panose] = props; + return { + name: `a:${type}`, + properties: { + rawMap: { + script, + typeface, + panose + } + } + }; +}; +var fontScheme = { + getTemplate() { + return { + name: "a:fontScheme", + properties: { + rawMap: { + name: "Office" + } + }, + children: [ + { + name: "a:majorFont", + children: [ + getFont(["latin", "Calibri Light", void 0, "020F0302020204030204"]), + getFont(["ea", ""]), + getFont(["cs", ""]), + getFont(["font", "\u6E38\u30B4\u30B7\u30C3\u30AF Light", "Jpan"]), + getFont(["font", "\uB9D1\uC740 \uACE0\uB515", "Hang"]), + getFont(["font", "\u7B49\u7EBF Light", "Hans"]), + getFont(["font", "\u65B0\u7D30\u660E\u9AD4", "Hant"]), + getFont(["font", "Times New Roman", "Arab"]), + getFont(["font", "Times New Roman", "Hebr"]), + getFont(["font", "Tahoma", "Thai"]), + getFont(["font", "Nyala", "Ethi"]), + getFont(["font", "Vrinda", "Beng"]), + getFont(["font", "Shruti", "Gujr"]), + getFont(["font", "MoolBoran", "Khmr"]), + getFont(["font", "Tunga", "Knda"]), + getFont(["font", "Raavi", "Guru"]), + getFont(["font", "Euphemia", "Cans"]), + getFont(["font", "Plantagenet Cherokee", "Cher"]), + getFont(["font", "Microsoft Yi Baiti", "Yiii"]), + getFont(["font", "Microsoft Himalaya", "Tibt"]), + getFont(["font", "MV Boli", "Thaa"]), + getFont(["font", "Mangal", "Deva"]), + getFont(["font", "Gautami", "Telu"]), + getFont(["font", "Latha", "Taml"]), + getFont(["font", "Estrangelo Edessa", "Syrc"]), + getFont(["font", "Kalinga", "Orya"]), + getFont(["font", "Kartika", "Mlym"]), + getFont(["font", "DokChampa", "Laoo"]), + getFont(["font", "Iskoola Pota", "Sinh"]), + getFont(["font", "Mongolian Baiti", "Mong"]), + getFont(["font", "Times New Roman", "Viet"]), + getFont(["font", "Microsoft Uighur", "Uigh"]), + getFont(["font", "Sylfaen", "Geor"]), + getFont(["font", "Arial", "Armn"]), + getFont(["font", "Leelawadee UI", "Bugi"]), + getFont(["font", "Microsoft JhengHei", "Bopo"]), + getFont(["font", "Javanese Text", "Java"]), + getFont(["font", "Segoe UI", "Lisu"]), + getFont(["font", "Myanmar Text", "Mymr"]), + getFont(["font", "Ebrima", "Nkoo"]), + getFont(["font", "Nirmala UI", "Olck"]), + getFont(["font", "Ebrima", "Osma"]), + getFont(["font", "Phagspa", "Phag"]), + getFont(["font", "Estrangelo Edessa", "Syrn"]), + getFont(["font", "Estrangelo Edessa", "Syrj"]), + getFont(["font", "Estrangelo Edessa", "Syre"]), + getFont(["font", "Nirmala UI", "Sora"]), + getFont(["font", "Microsoft Tai Le", "Tale"]), + getFont(["font", "Microsoft New Tai Lue", "Talu"]), + getFont(["font", "Ebrima", "Tfng"]) + ] + }, + { + name: "a:minorFont", + children: [ + getFont(["latin", "Calibri", void 0, "020F0502020204030204"]), + getFont(["ea", ""]), + getFont(["cs", ""]), + getFont(["font", "\u6E38\u30B4\u30B7\u30C3\u30AF", "Jpan"]), + getFont(["font", "\uB9D1\uC740 \uACE0\uB515", "Hang"]), + getFont(["font", "\u7B49\u7EBF", "Hans"]), + getFont(["font", "\u65B0\u7D30\u660E\u9AD4", "Hant"]), + getFont(["font", "Arial", "Arab"]), + getFont(["font", "Arial", "Hebr"]), + getFont(["font", "Tahoma", "Thai"]), + getFont(["font", "Nyala", "Ethi"]), + getFont(["font", "Vrinda", "Beng"]), + getFont(["font", "Shruti", "Gujr"]), + getFont(["font", "DaunPenh", "Khmr"]), + getFont(["font", "Tunga", "Knda"]), + getFont(["font", "Raavi", "Guru"]), + getFont(["font", "Euphemia", "Cans"]), + getFont(["font", "Plantagenet Cherokee", "Cher"]), + getFont(["font", "Microsoft Yi Baiti", "Yiii"]), + getFont(["font", "Microsoft Himalaya", "Tibt"]), + getFont(["font", "MV Boli", "Thaa"]), + getFont(["font", "Mangal", "Deva"]), + getFont(["font", "Gautami", "Telu"]), + getFont(["font", "Latha", "Taml"]), + getFont(["font", "Estrangelo Edessa", "Syrc"]), + getFont(["font", "Kalinga", "Orya"]), + getFont(["font", "Kartika", "Mlym"]), + getFont(["font", "DokChampa", "Laoo"]), + getFont(["font", "Iskoola Pota", "Sinh"]), + getFont(["font", "Mongolian Baiti", "Mong"]), + getFont(["font", "Arial", "Viet"]), + getFont(["font", "Microsoft Uighur", "Uigh"]), + getFont(["font", "Sylfaen", "Geor"]), + getFont(["font", "Arial", "Armn"]), + getFont(["font", "Leelawadee UI", "Bugi"]), + getFont(["font", "Microsoft JhengHei", "Bopo"]), + getFont(["font", "Javanese Text", "Java"]), + getFont(["font", "Segoe UI", "Lisu"]), + getFont(["font", "Myanmar Text", "Mymr"]), + getFont(["font", "Ebrima", "Nkoo"]), + getFont(["font", "Nirmala UI", "Olck"]), + getFont(["font", "Ebrima", "Osma"]), + getFont(["font", "Phagspa", "Phag"]), + getFont(["font", "Estrangelo Edessa", "Syrn"]), + getFont(["font", "Estrangelo Edessa", "Syrj"]), + getFont(["font", "Estrangelo Edessa", "Syre"]), + getFont(["font", "Nirmala UI", "Sora"]), + getFont(["font", "Microsoft Tai Le", "Tale"]), + getFont(["font", "Microsoft New Tai Lue", "Talu"]), + getFont(["font", "Ebrima", "Tfng"]) + ] + } + ] + }; + } +}; +var fontScheme_default = fontScheme; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/themes/office/formatScheme.ts +var getPropertyVal = (name, val, children) => ({ + name: `a:${name}`, + properties: { + rawMap: { + val + } + }, + children +}); +var getGs = (props) => { + const [pos, schemeColor, satMod, lumMod, tint, shade] = props; + const children = []; + children.push(getPropertyVal("satMod", satMod)); + if (lumMod) { + children.push(getPropertyVal("lumMod", lumMod)); + } + if (tint) { + children.push(getPropertyVal("tint", tint)); + } + if (shade) { + children.push(getPropertyVal("shade", shade)); + } + return { + name: "a:gs", + properties: { + rawMap: { + pos + } + }, + children: [ + { + name: "a:schemeClr", + properties: { + rawMap: { + val: schemeColor + } + }, + children + } + ] + }; +}; +var getSolidFill = (val, children) => ({ + name: "a:solidFill", + children: [getPropertyVal("schemeClr", val, children)] +}); +var getGradFill = (props) => { + const [rotWithShape, gs1, gs2, gs3, lin] = props; + const [ang, scaled] = lin; + return { + name: "a:gradFill", + properties: { + rawMap: { + rotWithShape + } + }, + children: [ + { + name: "a:gsLst", + children: [getGs(gs1), getGs(gs2), getGs(gs3)] + }, + { + name: "a:lin", + properties: { + rawMap: { + ang, + scaled + } + } + } + ] + }; +}; +var getLine = (props) => { + const [w, cap, cmpd, algn] = props; + return { + name: "a:ln", + properties: { + rawMap: { w, cap, cmpd, algn } + }, + children: [ + getSolidFill("phClr"), + getPropertyVal("prstDash", "solid"), + { + name: "a:miter", + properties: { + rawMap: { + lim: "800000" + } + } + } + ] + }; +}; +var getEffectStyle = (shadow2) => { + const children = []; + if (shadow2) { + const [blurRad, dist, dir, algn, rotWithShape] = shadow2; + children.push({ + name: "a:outerShdw", + properties: { + rawMap: { blurRad, dist, dir, algn, rotWithShape } + }, + children: [getPropertyVal("srgbClr", "000000", [getPropertyVal("alpha", "63000")])] + }); + } + return { + name: "a:effectStyle", + children: [ + Object.assign( + {}, + { + name: "a:effectLst" + }, + children.length ? { children } : {} + ) + ] + }; +}; +var getFillStyleList = () => ({ + name: "a:fillStyleLst", + children: [ + getSolidFill("phClr"), + getGradFill([ + "1", + ["0", "phClr", "105000", "110000", "67000"], + ["50000", "phClr", "103000", "105000", "73000"], + ["100000", "phClr", "109000", "105000", "81000"], + ["5400000", "0"] + ]), + getGradFill([ + "1", + ["0", "phClr", "103000", "102000", "94000"], + ["50000", "phClr", "110000", "100000", void 0, "100000"], + ["100000", "phClr", "120000", "99000", void 0, "78000"], + ["5400000", "0"] + ]) + ] +}); +var getLineStyleList = () => ({ + name: "a:lnStyleLst", + children: [ + getLine(["6350", "flat", "sng", "ctr"]), + getLine(["12700", "flat", "sng", "ctr"]), + getLine(["19050", "flat", "sng", "ctr"]) + ] +}); +var getEffectStyleList = () => ({ + name: "a:effectStyleLst", + children: [getEffectStyle(), getEffectStyle(), getEffectStyle(["57150", "19050", "5400000", "ctr", "0"])] +}); +var getBgFillStyleList = () => ({ + name: "a:bgFillStyleLst", + children: [ + getSolidFill("phClr"), + getSolidFill("phClr", [getPropertyVal("tint", "95000"), getPropertyVal("satMod", "170000")]), + getGradFill([ + "1", + ["0", "phClr", "150000", "102000", "93000", "98000"], + ["50000", "phClr", "130000", "103000", "98000", "90000"], + ["100000", "phClr", "120000", void 0, void 0, "63000"], + ["5400000", "0"] + ]) + ] +}); +var formatScheme = { + getTemplate() { + return { + name: "a:fmtScheme", + properties: { + rawMap: { + name: "Office" + } + }, + children: [getFillStyleList(), getLineStyleList(), getEffectStyleList(), getBgFillStyleList()] + }; + } +}; +var formatScheme_default = formatScheme; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/themes/office/themeElements.ts +var themeElements = { + getTemplate() { + return { + name: "a:themeElements", + children: [colorScheme_default.getTemplate(), fontScheme_default.getTemplate(), formatScheme_default.getTemplate()] + }; + } +}; +var themeElements_default = themeElements; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/themes/office.ts +var officeTheme = { + getTemplate() { + return { + name: "a:theme", + properties: { + prefixedAttributes: [ + { + prefix: "xmlns:", + map: { + a: "http://schemas.openxmlformats.org/drawingml/2006/main" + } + } + ], + rawMap: { + name: "Office Theme" + } + }, + children: [ + themeElements_default.getTemplate(), + { + name: "a:objectDefaults" + }, + { + name: "a:extraClrSchemeLst" + } + ] + }; + } +}; +var office_default = officeTheme; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/vmlDrawing.ts +var getShapeLayout = () => ({ + name: "o:shapelayout", + properties: { + prefixedAttributes: [ + { + prefix: "v:", + map: { + ext: "edit" + } + } + ] + }, + children: [ + { + name: "o:idmap", + properties: { + prefixedAttributes: [ + { + prefix: "v:", + map: { + ext: "edit" + } + } + ], + rawMap: { + data: "1" + } + } + } + ] +}); +var getStroke = () => ({ + name: "v:stroke", + properties: { + rawMap: { + joinstyle: "miter" + } + } +}); +var getFormulas = (formulas) => ({ + name: "v:formulas", + children: formulas.map((formula) => ({ + name: "v:f", + properties: { + rawMap: { + eqn: formula + } + } + })) +}); +var getPath = () => ({ + name: "v:path", + properties: { + prefixedAttributes: [ + { + prefix: "o:", + map: { + connecttype: "rect", + extrusionok: "f" + } + } + ], + rawMap: { + gradientshapeok: "t" + } + } +}); +var getLock = (params) => { + const { aspectratio, rotation } = params || {}; + const rawMap = {}; + if (aspectratio) { + rawMap.aspectratio = "t"; + } + if (rotation) { + rawMap.rotation = "t"; + } + return { + name: "o:lock", + properties: { + prefixedAttributes: [ + { + prefix: "v:", + map: { + ext: "edit" + } + } + ], + rawMap + } + }; +}; +function mapNumber(value, startSource, endSource, startTarget, endTarget) { + return (value - startSource) / (endSource - startSource) * (endTarget - startTarget) + startTarget; +} +var getImageData = (image, idx) => { + let rawMap; + const { recolor, brightness, contrast, id } = image; + if (recolor) { + rawMap = {}; + if (recolor === "Washout" || recolor === "Grayscale") { + rawMap.gain = "19661f"; + rawMap.blacklevel = "22938f"; + } + if (recolor === "Black & White" || recolor === "Grayscale") { + rawMap.grayscale = "t"; + if (recolor === "Black & White") { + rawMap.bilevel = "t"; + } + } + } + if (!recolor || recolor === "Grayscale") { + if (!rawMap) { + rawMap = {}; + } + if (contrast != null && contrast !== 50) { + let gain = "1"; + if (contrast >= 0) { + if (contrast < 50) { + gain = String(contrast / 50); + } else if (contrast < 100) { + gain = String(50 / (100 - contrast)); + } else if (contrast === 100) { + gain = "2147483647f"; + } + } + rawMap.gain = gain; + } + if (brightness != null && brightness !== 50) { + rawMap.blacklevel = mapNumber(brightness, 0, 100, -0.5, 0.5).toString(); + } + } + return { + name: "v:imagedata", + properties: { + prefixedAttributes: [ + { + prefix: "o:", + map: { + relid: `rId${idx}`, + title: id + } + } + ], + rawMap + } + }; +}; +var getShapeType = () => { + const formulas = [ + "if lineDrawn pixelLineWidth 0", + "sum @0 1 0", + "sum 0 0 @1", + "prod @2 1 2", + "prod @3 21600 pixelWidth", + "prod @3 21600 pixelHeight", + "sum @0 0 1", + "prod @6 1 2", + "prod @7 21600 pixelWidth", + "sum @8 21600 0", + "prod @7 21600 pixelHeight", + "sum @10 21600 0" + ]; + return { + name: "v:shapetype", + properties: { + prefixedAttributes: [ + { + prefix: "o:", + map: { + spt: "75", + preferrelative: "t" + } + } + ], + rawMap: { + coordsize: "21600,21600", + filled: "f", + id: "_x0000_t75", + path: "m@4@5l@4@11@9@11@9@5xe", + stroked: "f" + } + }, + children: [getStroke(), getFormulas(formulas), getPath(), getLock({ aspectratio: true })] + }; +}; +var pixelToPoint = (value) => Math.floor((value ?? 0) * 0.74999943307122); +var getShape = (image, idx) => { + const { width = 0, height = 0, altText } = image; + const imageWidth = pixelToPoint(width); + const imageHeight = pixelToPoint(height); + return { + name: "v:shape", + properties: { + rawMap: { + id: image.headerFooterPosition, + "o:spid": "_x0000_s1025", + style: `position: absolute; margin-left: 0; margin-top: 10in; margin-bottom: 0; margin-right: 0; width: ${imageWidth}pt; height: ${imageHeight}pt; z-index: ${idx + 1}`, + type: "#_x0000_t75", + alt: altText + } + }, + children: [getImageData(image, idx + 1), getLock({ rotation: true })] + }; +}; +var vmlDrawingFactory = { + getTemplate(params) { + const headerFooterImages = XLSX_WORKSHEET_HEADER_FOOTER_IMAGES.get(params.sheetIndex) || []; + const children = [ + getShapeLayout(), + getShapeType(), + ...headerFooterImages.map((img, idx) => getShape(img, idx)) + ]; + return { + name: "xml", + properties: { + prefixedAttributes: [ + { + prefix: "xmlns:", + map: { + v: "urn:schemas-microsoft-com:vml", + o: "urn:schemas-microsoft-com:office:office", + x: "urn:schemas-microsoft-com:office:excel" + } + } + ] + }, + children + }; + } +}; +var vmlDrawing_default = vmlDrawingFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/sheet.ts +var sheetFactory = { + getTemplate(name, idx) { + const sheetId = (idx + 1).toString(); + return { + name: "sheet", + properties: { + rawMap: { + name, + sheetId, + "r:id": `rId${sheetId}` + } + } + }; + } +}; +var sheet_default = sheetFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/sheets.ts +var sheetsFactory = { + getTemplate(names) { + return { + name: "sheets", + children: names.map((sheet, idx) => sheet_default.getTemplate(sheet, idx)) + }; + } +}; +var sheets_default = sheetsFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/workbook.ts +var workbookFactory = { + getTemplate(names, activeTab) { + return { + name: "workbook", + properties: { + prefixedAttributes: [ + { + prefix: "xmlns:", + map: { + r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships" + } + } + ], + rawMap: { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main" + } + }, + children: [ + { + name: "bookViews", + children: [ + { + name: "workbookView", + properties: { + rawMap: { + activeTab + } + } + } + ] + }, + sheets_default.getTemplate(names) + ] + }; + } +}; +var workbook_default = workbookFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/worksheet.ts +import { _escapeString as _escapeString6 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/column.ts +var getExcelCellWidth = (width) => Math.ceil((width - 12) / 7 + 1); +var colFactory = { + getTemplate(config) { + const { min, max, outlineLevel, s: s2, width, hidden, bestFit } = config; + let excelWidth = 1; + let customWidth = "0"; + if (width > 1) { + excelWidth = getExcelCellWidth(width); + customWidth = "1"; + } + return { + name: "col", + properties: { + rawMap: { + min, + max, + outlineLevel: outlineLevel != null ? outlineLevel : void 0, + width: excelWidth, + style: s2, + hidden: hidden ? "1" : "0", + bestFit: bestFit ? "1" : "0", + customWidth + } + } + }; + } +}; +var column_default = colFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/mergeCell.ts +var mergeCellFactory = { + getTemplate(ref) { + return { + name: "mergeCell", + properties: { + rawMap: { + ref + } + } + }; + } +}; +var mergeCell_default = mergeCellFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/cell.ts +import { _escapeString as _escapeString5 } from "ag-grid-community"; +var convertLegacyType = (type) => { + const t = type.charAt(0).toLowerCase(); + return t === "s" ? "inlineStr" : t; +}; +var cellFactory = { + getTemplate(config, idx, currentSheet2) { + const { ref, data, styleId } = config; + const { type, value } = data || { type: "empty", value: null }; + let convertedType = type; + if (type === "f") { + convertedType = "str"; + } else if (type.charAt(0) === type.charAt(0).toUpperCase()) { + convertedType = convertLegacyType(type); + } + const obj = { + name: "c", + properties: { + rawMap: { + r: ref, + t: convertedType === "empty" ? void 0 : convertedType, + s: styleId ? getStyleId(styleId, currentSheet2) : void 0 + } + } + }; + if (convertedType === "empty") { + return obj; + } + let children; + if (convertedType === "str" && type === "f") { + children = [ + { + name: "f", + textNode: _escapeString5(replaceInvisibleCharacters(value)) + } + ]; + } else if (convertedType === "inlineStr") { + children = [ + { + name: "is", + children: [ + { + name: "t", + textNode: _escapeString5(replaceInvisibleCharacters(value)) + } + ] + } + ]; + } else { + children = [ + { + name: "v", + textNode: value + } + ]; + } + return Object.assign({}, obj, { children }); + } +}; +var cell_default = cellFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/row.ts +var addEmptyCells = (cells, rowIdx) => { + const mergeMap = []; + let posCounter = 0; + for (let i = 0; i < cells.length; i++) { + const cell = cells[i]; + if (cell.mergeAcross) { + mergeMap.push({ + pos: i, + excelPos: posCounter + }); + posCounter += cell.mergeAcross; + } + posCounter++; + } + if (mergeMap.length) { + for (let i = mergeMap.length - 1; i >= 0; i--) { + const mergedCells = []; + const cell = cells[mergeMap[i].pos]; + for (let j = 1; j <= cell.mergeAcross; j++) { + mergedCells.push({ + ref: `${getExcelColumnName(mergeMap[i].excelPos + 1 + j)}${rowIdx + 1}`, + styleId: cell.styleId, + data: { type: "empty", value: null } + }); + } + if (mergedCells.length) { + cells.splice(mergeMap[i].pos + 1, 0, ...mergedCells); + } + } + } +}; +var shouldDisplayCell = (cell) => cell.data?.value !== "" || cell.styleId !== void 0; +var rowFactory = { + getTemplate(config, idx, currentSheet2) { + const { collapsed, hidden, height, outlineLevel, cells = [] } = config; + addEmptyCells(cells, idx); + const children = cells.filter(shouldDisplayCell).map((cell, idx2) => cell_default.getTemplate(cell, idx2, currentSheet2)); + return { + name: "row", + properties: { + rawMap: { + r: idx + 1, + collapsed: collapsed ? "1" : "0", + hidden: hidden ? "1" : "0", + ht: height, + customHeight: height != null ? "1" : "0", + spans: "1:1", + outlineLevel: outlineLevel || void 0 + } + }, + children + }; + } +}; +var row_default = rowFactory; + +// packages/ag-grid-enterprise/src/excelExport/files/ooxml/worksheet.ts +var getMergedCellsAndAddColumnGroups = (rows, cols, suppressColumnOutline) => { + const mergedCells = []; + const cellsWithCollapsibleGroups = []; + rows.forEach((currentRow, rowIdx) => { + const cells = currentRow.cells; + let merges = 0; + let lastCol; + cells.forEach((currentCell, cellIdx) => { + const min = cellIdx + merges + 1; + const start = getExcelColumnName(min); + const outputRow = rowIdx + 1; + if (currentCell.mergeAcross) { + merges += currentCell.mergeAcross; + const end = getExcelColumnName(cellIdx + merges + 1); + mergedCells.push(`${start}${outputRow}:${end}${outputRow}`); + } + if (!cols[min - 1]) { + cols[min - 1] = {}; + } + const { collapsibleRanges } = currentCell; + if (collapsibleRanges) { + collapsibleRanges.forEach((range) => { + cellsWithCollapsibleGroups.push([min + range[0], min + range[1]]); + }); + } + lastCol = cols[min - 1]; + lastCol.min = min; + lastCol.max = min; + currentCell.ref = `${start}${outputRow}`; + }); + }); + cellsWithCollapsibleGroups.sort((a, b) => { + if (a[0] !== b[0]) { + return a[0] - b[0]; + } + return b[1] - a[1]; + }); + const rangeMap = /* @__PURE__ */ new Map(); + const outlineLevel = /* @__PURE__ */ new Map(); + cellsWithCollapsibleGroups.filter((currentRange) => { + const rangeString = currentRange.toString(); + const inMap = rangeMap.get(rangeString); + if (inMap) { + return false; + } + rangeMap.set(rangeString, true); + return true; + }).forEach((range) => { + const refCol = cols.find((col) => col.min == range[0] && col.max == range[1]); + const currentOutlineLevel = outlineLevel.get(range[0]); + cols.push({ + min: range[0], + max: range[1], + outlineLevel: suppressColumnOutline ? void 0 : currentOutlineLevel || 1, + width: (refCol || { width: 100 }).width + }); + outlineLevel.set(range[0], (currentOutlineLevel || 0) + 1); + }); + return mergedCells; +}; +var getPageOrientation = (orientation) => { + if (!orientation || orientation !== "Portrait" && orientation !== "Landscape") { + return "portrait"; + } + return orientation.toLocaleLowerCase(); +}; +var getPageSize = (pageSize) => { + if (pageSize == null) { + return 1; + } + const positions = [ + "Letter", + "Letter Small", + "Tabloid", + "Ledger", + "Legal", + "Statement", + "Executive", + "A3", + "A4", + "A4 Small", + "A5", + "A6", + "B4", + "B5", + "Folio", + "Envelope", + "Envelope DL", + "Envelope C5", + "Envelope B5", + "Envelope C3", + "Envelope C4", + "Envelope C6", + "Envelope Monarch", + "Japanese Postcard", + "Japanese Double Postcard" + ]; + const pos = positions.indexOf(pageSize); + return pos === -1 ? 1 : pos + 1; +}; +var replaceHeaderFooterTokens = (value) => { + const map = { + "&[Page]": "&P", + "&[Pages]": "&N", + "&[Date]": "&D", + "&[Time]": "&T", + "&[Tab]": "&A", + "&[Path]": "&Z", + "&[File]": "&F", + "&[Picture]": "&G" + }; + for (const key of Object.keys(map)) { + value = value.replace(key, map[key]); + } + return value; +}; +var getHeaderPosition = (position) => { + if (position === "Center") { + return "C"; + } + if (position === "Right") { + return "R"; + } + return "L"; +}; +var applyHeaderFontStyle = (headerString, font) => { + if (!font) { + return headerString; + } + headerString += "&""; + headerString += font.fontName || "Calibri"; + if (font.bold !== font.italic) { + headerString += font.bold ? ",Bold" : ",Italic"; + } else if (font.bold) { + headerString += ",Bold Italic"; + } else { + headerString += ",Regular"; + } + headerString += """; + if (font.size) { + headerString += `&${font.size}`; + } + if (font.strikeThrough) { + headerString += "&S"; + } + if (font.underline) { + headerString += `&${font.underline === "Double" ? "E" : "U"}`; + } + if (font.color) { + headerString += `&K${font.color.replace("#", "").toUpperCase()}`; + } + return headerString; +}; +var processHeaderFooterContent = (content, location, rule) => content.reduce((prev, curr, idx) => { + const pos = getHeaderPosition(curr.position); + const output = applyHeaderFontStyle(`${prev}&${pos}`, curr.font); + const PositionMap = ["Left", "Center", "Right"]; + if (!curr.position) { + curr.position = PositionMap[idx]; + } + const { image } = curr; + if (curr.value === "&[Picture]" && image) { + const imagePosition = `${pos}${location}${rule}`; + addXlsxHeaderFooterImageToMap(image, imagePosition); + } + return `${output}${_escapeString6(replaceHeaderFooterTokens(curr.value))}`; +}, ""); +var buildHeaderFooter = (headerFooterConfig) => { + const rules = ["all", "first", "even"]; + const headersAndFooters = []; + rules.forEach((rule) => { + const headerFooter = headerFooterConfig[rule]; + const namePrefix = rule === "all" ? "odd" : rule; + if (!headerFooter) { + return; + } + for (const key of Object.keys(headerFooter)) { + const value = headerFooter[key]; + const nameSuffix = `${key.charAt(0).toUpperCase()}${key.slice(1)}`; + const location = key[0].toUpperCase(); + if (value) { + const normalizedRule = rule === "all" ? "" : rule.toUpperCase(); + headersAndFooters.push({ + name: `${namePrefix}${nameSuffix}`, + properties: { + rawMap: { "xml:space": "preserve" } + }, + textNode: processHeaderFooterContent(value, location, normalizedRule) + }); + } + } + }); + return headersAndFooters; +}; +var addColumns = (columns) => { + return (params) => { + if (columns.length) { + params.children.push({ + name: "cols", + children: columns.map((column) => column_default.getTemplate(column)) + }); + } + return params; + }; +}; +var addSheetData = (rows, sheetNumber) => { + return (params) => { + if (rows.length) { + params.children.push({ + name: "sheetData", + children: rows.map((row, idx) => row_default.getTemplate(row, idx, sheetNumber)) + }); + } + return params; + }; +}; +var getPasswordHash = (password) => { + const passwordLength = password.length; + if (!passwordLength) { + return ""; + } + const passwordArray = new Array(passwordLength + 1); + passwordArray[0] = passwordLength; + for (let i = 1; i <= passwordLength; i++) { + passwordArray[i] = password.charCodeAt(i - 1) & 255; + } + let verifier = 0; + for (let i = passwordArray.length - 1; i >= 0; i--) { + const passwordByte = passwordArray[i]; + const intermediate1 = (verifier & 16384) === 0 ? 0 : 1; + const intermediate2 = verifier << 1 & 32767; + verifier = (intermediate1 | intermediate2) ^ passwordByte; + } + return (verifier ^ 52811).toString(16).toUpperCase().padStart(4, "0"); +}; +var addSheetProtection = (protectSheet) => { + return (params) => { + if (!protectSheet) { + return params; + } + const sheetProtection = typeof protectSheet === "boolean" ? {} : protectSheet; + const rawMap = { + sheet: 1 + }; + const passwordHash = sheetProtection.password ? getPasswordHash(sheetProtection.password) : ""; + if (passwordHash) { + rawMap.password = passwordHash; + } + const defaults = { + autoFilter: false, + deleteColumns: false, + deleteRows: false, + formatCells: false, + formatColumns: false, + formatRows: false, + insertColumns: false, + insertHyperlinks: false, + insertRows: false, + pivotTables: false, + selectLockedCells: true, + selectUnlockedCells: true + }; + Object.keys(defaults).forEach( + (key) => { + const allow = sheetProtection[key]; + if (allow == null || allow === defaults[key]) { + return; + } + rawMap[key] = allow ? 0 : 1; + } + ); + params.children.push({ + name: "sheetProtection", + properties: { + rawMap + } + }); + return params; + }; +}; +var addMergeCells = (mergeCells) => { + return (params) => { + if (mergeCells.length) { + params.children.push({ + name: "mergeCells", + properties: { + rawMap: { + count: mergeCells.length + } + }, + children: mergeCells.map((mergedCell) => mergeCell_default.getTemplate(mergedCell)) + }); + } + return params; + }; +}; +var addPageMargins = (margins) => { + return (params) => { + const { top = 0.75, right = 0.7, bottom = 0.75, left = 0.7, header = 0.3, footer = 0.3 } = margins; + params.children.push({ + name: "pageMargins", + properties: { + rawMap: { bottom, footer, header, left, right, top } + } + }); + return params; + }; +}; +var addPageSetup = (pageSetup) => { + return (params) => { + if (pageSetup) { + params.children.push({ + name: "pageSetup", + properties: { + rawMap: { + horizontalDpi: 0, + verticalDpi: 0, + orientation: getPageOrientation(pageSetup.orientation), + paperSize: getPageSize(pageSetup.pageSize) + } + } + }); + } + return params; + }; +}; +var addHeaderFooter = (headerFooterConfig) => { + return (params) => { + if (!headerFooterConfig) { + return params; + } + const differentFirst = headerFooterConfig.first != null ? 1 : 0; + const differentOddEven = headerFooterConfig.even != null ? 1 : 0; + params.children.push({ + name: "headerFooter", + properties: { + rawMap: { + differentFirst, + differentOddEven + } + }, + children: buildHeaderFooter(headerFooterConfig) + }); + return params; + }; +}; +var addExcelTableRel = (excelTable) => { + return (params) => { + if (excelTable) { + params.children.push({ + name: "tableParts", + properties: { + rawMap: { + count: "1" + } + }, + children: [ + { + name: "tablePart", + properties: { + rawMap: { + "r:id": `rId${++params.rIdCounter}` + } + } + } + ] + }); + } + return params; + }; +}; +var addDrawingRel = (currentSheet2) => { + return (params) => { + const worksheetImages = XLSX_WORKSHEET_IMAGES.get(currentSheet2); + if (worksheetImages?.length) { + params.children.push({ + name: "drawing", + properties: { + rawMap: { + "r:id": `rId${++params.rIdCounter}` + } + } + }); + } + return params; + }; +}; +var addVmlDrawingRel = (currentSheet2) => { + return (params) => { + if (XLSX_WORKSHEET_HEADER_FOOTER_IMAGES.get(currentSheet2)) { + params.children.push({ + name: "legacyDrawingHF", + properties: { + rawMap: { + "r:id": `rId${++params.rIdCounter}` + } + } + }); + } + return params; + }; +}; +var getPane = (xSplit = 0, ySplit = 0) => { + const shouldSplit = xSplit > 0 || ySplit > 0; + return shouldSplit ? [ + { + name: "pane", + properties: { + rawMap: { + state: shouldSplit ? "frozen" : void 0, + topLeftCell: shouldSplit ? `${getExcelColumnName(xSplit + 1)}${ySplit + 1}` : void 0, + xSplit: xSplit === 0 ? void 0 : xSplit, + ySplit: ySplit === 0 ? void 0 : ySplit + } + } + } + ] : void 0; +}; +var addSheetViews = (rtl = false, xSplit, ySplit) => { + return (params) => { + params.children.push({ + name: "sheetViews", + children: [ + { + name: "sheetView", + properties: { + rawMap: { + rightToLeft: rtl === true ? "1" : "0", + workbookViewId: "0" + } + }, + children: getPane(xSplit, ySplit) + } + ] + }); + return params; + }; +}; +var addSheetPr = () => { + return (params) => { + params.children.push({ + name: "sheetPr", + children: [ + { + name: "outlinePr", + properties: { + rawMap: { + summaryBelow: 0 + } + } + } + ] + }); + return params; + }; +}; +var addSheetFormatPr = (rows) => { + return (params) => { + const maxOutline = rows.reduce((prev, row) => { + if (row.outlineLevel && row.outlineLevel > prev) { + return row.outlineLevel; + } + return prev; + }, 0); + params.children.push({ + name: "sheetFormatPr", + properties: { + rawMap: { + baseColWidth: 10, + defaultRowHeight: 16, + outlineLevelRow: maxOutline ? maxOutline : void 0 + } + } + }); + return params; + }; +}; +var worksheetFactory = { + getTemplate(params) { + const { worksheet, currentSheet: currentSheet2, config } = params; + const { + margins = {}, + pageSetup, + headerFooterConfig, + suppressColumnOutline, + rightToLeft, + frozenRowCount, + frozenColumnCount, + protectSheet + } = config; + const { table } = worksheet; + const { rows, columns } = table; + const mergedCells = columns?.length ? getMergedCellsAndAddColumnGroups(rows, columns, !!suppressColumnOutline) : []; + const worksheetExcelTables = XLSX_WORKSHEET_DATA_TABLES.get(currentSheet2); + const { children } = [ + addSheetPr(), + addSheetViews(rightToLeft, frozenColumnCount, frozenRowCount), + addSheetFormatPr(rows), + addColumns(columns), + addSheetData(rows, currentSheet2 + 1), + addSheetProtection(protectSheet), + addMergeCells(mergedCells), + addPageMargins(margins), + addPageSetup(pageSetup), + addHeaderFooter(headerFooterConfig), + addDrawingRel(currentSheet2), + addVmlDrawingRel(currentSheet2), + addExcelTableRel(worksheetExcelTables) + ].reduce((composed, f) => f(composed), { children: [], rIdCounter: 0 }); + return { + name: "worksheet", + properties: { + prefixedAttributes: [ + { + prefix: "xmlns:", + map: { + r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships" + } + } + ], + rawMap: { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main" + } + }, + children + }; + } +}; +var worksheet_default = worksheetFactory; + +// packages/ag-grid-enterprise/src/excelExport/excelXlsxFactory.ts +var XLSX_SHARED_STRINGS = /* @__PURE__ */ new Map(); +var XLSX_SHEET_NAMES = []; +var XLSX_SHEET_DATA = []; +var XLSX_SHEET_CONTENT_INDICES = /* @__PURE__ */ new Map(); +var XLSX_IMAGES = /* @__PURE__ */ new Map(); +var XLSX_WORKSHEET_IMAGES = /* @__PURE__ */ new Map(); +var XLSX_WORKSHEET_HEADER_FOOTER_IMAGES = /* @__PURE__ */ new Map(); +var XLSX_WORKBOOK_IMAGE_IDS = /* @__PURE__ */ new Map(); +var XLSX_WORKSHEET_IMAGE_IDS = /* @__PURE__ */ new Map(); +var XLSX_WORKSHEET_DATA_TABLES = /* @__PURE__ */ new Map(); +var DEFAULT_TABLE_DISPLAY_NAME = "AG-GRID-TABLE"; +var XLSX_FACTORY_MODE = "SINGLE_SHEET"; +function getXlsxFactoryMode() { + return XLSX_FACTORY_MODE; +} +function setXlsxFactoryMode(factoryMode) { + XLSX_FACTORY_MODE = factoryMode; +} +function createXlsxExcel(styles, worksheet, config) { + addSheetName(worksheet); + registerStyles(styles, XLSX_SHEET_NAMES.length); + const newConfig = Object.assign({}, config); + if (config.exportAsExcelTable && config.pivotModeActive) { + _warn2(163, { featureName: "pivot mode" }); + newConfig.exportAsExcelTable = false; + } + processTableConfig(worksheet, newConfig); + const worksheetXml = createWorksheet(worksheet, newConfig); + registerSheetXml(worksheetXml); + return worksheetXml; +} +function getXlsxSanitizedTableName(name) { + return name.replace(/^[^a-zA-Z_]+/, "_").replace(/\s/g, "_").replace(/[^a-zA-Z0-9_]/g, "_"); +} +function addXlsxTableToSheet(sheetIndex, table) { + if (XLSX_WORKSHEET_DATA_TABLES.has(sheetIndex)) { + _warn2(164); + return; + } + XLSX_WORKSHEET_DATA_TABLES.set(sheetIndex, table); +} +function processTableConfig(worksheet, config) { + const { exportAsExcelTable, prependContent, appendContent, headerRowCount = 0 } = config; + if (!exportAsExcelTable) { + return; + } + const tableConfig = typeof exportAsExcelTable === "boolean" ? {} : exportAsExcelTable; + const { name, showColumnStripes, showRowStripes, showFilterButton, highlightFirstColumn, highlightLastColumn } = tableConfig; + const tableName = getXlsxSanitizedTableName(name || DEFAULT_TABLE_DISPLAY_NAME); + const sheetIndex = XLSX_SHEET_NAMES.length - 1; + const { table } = worksheet; + const { rows, columns } = table; + const skipTopRows = prependContent ? prependContent.length : 0; + const removeFromBottom = appendContent ? appendContent.length : 0; + const tableRowCount = rows.length; + const tableColCount = columns.length; + const tableColumns = []; + const showFilterButtons = []; + for (let i = 0; i < tableColCount; i++) { + const col = columns[i]; + tableColumns.push(col.displayName || ""); + showFilterButtons.push( + showFilterButton === "match" || showFilterButton === void 0 ? col.filterAllowed ?? false : showFilterButton + ); + } + if (!tableColumns?.length || !tableRowCount || !tableName) { + _warn2(165); + return; + } + addXlsxTableToSheet(sheetIndex, { + name: `table${XLSX_WORKSHEET_DATA_TABLES.size + 1}`, + displayName: tableName, + columns: tableColumns, + showFilterButtons, + rowRange: [headerRowCount + skipTopRows, headerRowCount + (tableRowCount - headerRowCount) - removeFromBottom], + showRowStripes: showRowStripes ?? true, + showColumnStripes: showColumnStripes ?? false, + highlightFirstColumn: highlightFirstColumn ?? false, + highlightLastColumn: highlightLastColumn ?? false + }); +} +function addXlsxHeaderFooterImageToMap(image, position) { + const sheetIndex = XLSX_SHEET_NAMES.length - 1; + const headerFooterImage = image; + headerFooterImage.headerFooterPosition = position; + buildImageMap({ imageToAdd: headerFooterImage, idx: sheetIndex }); + let headerFooterImagesForSheet = XLSX_WORKSHEET_HEADER_FOOTER_IMAGES.get(sheetIndex); + if (!headerFooterImagesForSheet) { + headerFooterImagesForSheet = []; + XLSX_WORKSHEET_HEADER_FOOTER_IMAGES.set(sheetIndex, headerFooterImagesForSheet); + } + if (!headerFooterImagesForSheet.find((img) => img.id === image.id)) { + headerFooterImagesForSheet.push(image); + } +} +function addXlsxBodyImageToMap(image, rowIndex, col, columnsToExport, rowHeight) { + const sheetIndex = XLSX_SHEET_NAMES.length; + const { row, column } = image.position || {}; + const calculatedImage = image; + if (columnsToExport) { + if (rowIndex != null && col != null && (!row || !column)) { + if (!image.position) { + image.position = {}; + } + image.position = Object.assign({}, image.position, { + row: rowIndex, + column: columnsToExport.indexOf(col) + 1 + }); + } + setExcelImageTotalWidth(calculatedImage, columnsToExport); + setExcelImageTotalHeight(calculatedImage, rowHeight); + } + buildImageMap({ imageToAdd: calculatedImage, idx: sheetIndex }); + let worksheetImageIdMap = XLSX_WORKSHEET_IMAGE_IDS.get(sheetIndex); + if (!worksheetImageIdMap) { + worksheetImageIdMap = /* @__PURE__ */ new Map(); + XLSX_WORKSHEET_IMAGE_IDS.set(sheetIndex, worksheetImageIdMap); + } + const sheetImages = XLSX_WORKSHEET_IMAGES.get(sheetIndex); + if (!sheetImages) { + XLSX_WORKSHEET_IMAGES.set(sheetIndex, [calculatedImage]); + } else { + sheetImages.push(calculatedImage); + } + if (!worksheetImageIdMap.get(image.id)) { + worksheetImageIdMap.set(image.id, { index: worksheetImageIdMap.size, type: image.imageType }); + } +} +function buildImageMap(params) { + const { imageToAdd, idx } = params; + const mappedImagesToSheet = XLSX_IMAGES.get(imageToAdd.id); + if (mappedImagesToSheet) { + const currentSheetImages = mappedImagesToSheet.find((currentImage) => currentImage.sheetId === idx); + if (currentSheetImages) { + currentSheetImages.image.push(imageToAdd); + } else { + mappedImagesToSheet.push({ + sheetId: idx, + image: [imageToAdd] + }); + } + } else { + XLSX_IMAGES.set(imageToAdd.id, [{ sheetId: idx, image: [imageToAdd] }]); + XLSX_WORKBOOK_IMAGE_IDS.set(imageToAdd.id, { + type: imageToAdd.imageType, + index: XLSX_WORKBOOK_IMAGE_IDS.size + }); + } +} +function addSheetName(worksheet) { + const name = _escapeString7(worksheet.name) || ""; + let append = ""; + while (XLSX_SHEET_NAMES.indexOf(`${name}${append}`) !== -1) { + if (append === "") { + append = "_1"; + } else { + const curr = parseInt(append.slice(1), 10); + append = `_${curr + 1}`; + } + } + worksheet.name = `${name}${append}`; + XLSX_SHEET_NAMES.push(worksheet.name); +} +function getXlsxStringPosition(str) { + if (XLSX_SHARED_STRINGS.has(str)) { + return XLSX_SHARED_STRINGS.get(str); + } + XLSX_SHARED_STRINGS.set(str, XLSX_SHARED_STRINGS.size); + return XLSX_SHARED_STRINGS.size - 1; +} +function resetXlsxFactory() { + XLSX_SHARED_STRINGS.clear(); + XLSX_IMAGES.clear(); + XLSX_WORKSHEET_IMAGES.clear(); + XLSX_WORKSHEET_HEADER_FOOTER_IMAGES.clear(); + XLSX_WORKBOOK_IMAGE_IDS.clear(); + XLSX_WORKSHEET_IMAGE_IDS.clear(); + XLSX_WORKSHEET_DATA_TABLES.clear(); + XLSX_SHEET_NAMES = []; + XLSX_SHEET_DATA = []; + XLSX_SHEET_CONTENT_INDICES = /* @__PURE__ */ new Map(); + XLSX_FACTORY_MODE = "SINGLE_SHEET"; +} +function createXlsxWorkbook(currentSheet2) { + return createXmlPart(workbook_default.getTemplate(XLSX_SHEET_NAMES, currentSheet2)); +} +function createXlsxStylesheet(defaultFontSize) { + return createXmlPart(stylesheet_default.getTemplate(defaultFontSize)); +} +function createXlsxSharedStrings() { + return createXmlPart(sharedStrings_default.getTemplate(XLSX_SHARED_STRINGS)); +} +function createXlsxCore(author) { + return createXmlPart(core_default.getTemplate(author)); +} +function createXlsxCustomProperties(metadata) { + return createXmlPart(customProperties_default.getTemplate(metadata)); +} +function createXlsxContentTypes(sheetLen, hasCustomProperties) { + return createXmlPart(contentTypes_default.getTemplate({ sheetLen, hasCustomProperties })); +} +function createXlsxRels(hasCustomProperties) { + const relationships = [ + { + Id: "rId1", + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", + Target: "xl/workbook.xml" + }, + { + Id: "rId2", + Type: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties", + Target: "docProps/core.xml" + } + ]; + if (hasCustomProperties) { + relationships.push({ + Id: "rId3", + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties", + Target: "docProps/custom.xml" + }); + } + const rs = relationships_default.getTemplate(relationships); + return createXmlPart(rs); +} +function createXlsxTheme() { + return createXmlPart(office_default.getTemplate()); +} +function createXlsxTable(dataTable, index) { + return createXmlPart(table_default.getTemplate(dataTable, index)); +} +function createXlsxWorkbookRels(sheetLen) { + const worksheets = new Array(sheetLen).fill(void 0).map((v, i) => ({ + Id: `rId${i + 1}`, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet", + Target: `worksheets/sheet${i + 1}.xml` + })); + const rs = relationships_default.getTemplate([ + ...worksheets, + { + Id: `rId${sheetLen + 1}`, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme", + Target: "theme/theme1.xml" + }, + { + Id: `rId${sheetLen + 2}`, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", + Target: "styles.xml" + }, + { + Id: `rId${sheetLen + 3}`, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings", + Target: "sharedStrings.xml" + } + ]); + return createXmlPart(rs); +} +function createXlsxDrawing(sheetIndex) { + return createXmlPart(drawing_default.getTemplate({ sheetIndex })); +} +function createXlsxDrawingRel(sheetIndex) { + const worksheetImageIds = XLSX_WORKSHEET_IMAGE_IDS.get(sheetIndex) || []; + const XMLArr = []; + for (const [key, value] of worksheetImageIds) { + const { index, type } = value; + XMLArr.push({ + Id: `rId${index + 1}`, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", + Target: `../media/image${XLSX_WORKBOOK_IMAGE_IDS.get(key).index + 1}.${_normaliseImageExtension(type)}` + }); + } + return createXmlPart(relationships_default.getTemplate(XMLArr)); +} +function createXlsxVmlDrawing(sheetIndex) { + return createXmlPart(vmlDrawing_default.getTemplate({ sheetIndex }), true); +} +function createXlsxVmlDrawingRel(sheetIndex) { + const worksheetHeaderFooterImages = XLSX_WORKSHEET_HEADER_FOOTER_IMAGES.get(sheetIndex) || []; + const XMLArr = []; + for (let i = 0; i < worksheetHeaderFooterImages.length; i++) { + const headerFooterImage = worksheetHeaderFooterImages[i]; + const workbookImage = XLSX_WORKBOOK_IMAGE_IDS.get(headerFooterImage.id); + if (!workbookImage) { + continue; + } + const { index, type } = workbookImage; + XMLArr.push({ + Id: `rId${i + 1}`, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", + Target: `../media/image${index + 1}.${_normaliseImageExtension(type)}` + }); + } + return createXmlPart(relationships_default.getTemplate(XMLArr)); +} +function createXlsxRelationships({ + drawingIndex, + vmlDrawingIndex, + tableName +} = {}) { + if (drawingIndex === void 0 && vmlDrawingIndex === void 0 && tableName === void 0) { + return ""; + } + const config = []; + if (drawingIndex != null) { + config.push({ + Id: `rId${config.length + 1}`, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing", + Target: `../drawings/drawing${drawingIndex + 1}.xml` + }); + } + if (vmlDrawingIndex != null) { + config.push({ + Id: `rId${config.length + 1}`, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing", + Target: `../drawings/vmlDrawing${vmlDrawingIndex + 1}.vml` + }); + } + if (tableName != null) { + config.push({ + Id: `rId${config.length + 1}`, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/table", + Target: `../tables/${tableName}.xml` + }); + } + const rs = relationships_default.getTemplate(config); + return createXmlPart(rs); +} +function createWorksheet(worksheet, config) { + return createXmlPart( + worksheet_default.getTemplate({ + worksheet, + currentSheet: XLSX_SHEET_NAMES.length - 1, + config + }) + ); +} +var reorderSheetSpecificMap = (map, order) => { + if (!map.size) { + return; + } + const remapped = /* @__PURE__ */ new Map(); + order.forEach((originalIdx, newIdx) => { + if (map.has(originalIdx)) { + remapped.set(newIdx, map.get(originalIdx)); + } + }); + map.clear(); + remapped.forEach((value, key) => map.set(key, value)); +}; +var registerSheetXml = (worksheetXml) => { + const indices = XLSX_SHEET_CONTENT_INDICES.get(worksheetXml) ?? []; + indices.push(XLSX_SHEET_NAMES.length - 1); + XLSX_SHEET_CONTENT_INDICES.set(worksheetXml, indices); + XLSX_SHEET_DATA.push(worksheetXml); +}; +var getSheetOrderFromRefs = (data) => { + const refMap = new Map(XLSX_SHEET_CONTENT_INDICES); + const order = []; + for (const sheetData of data) { + const indices = refMap.get(sheetData); + if (!indices?.length) { + return null; + } + const idx = indices.shift(); + order.push(idx); + refMap.set(sheetData, indices); + } + return order; +}; +var getSheetOrderFromData = (data) => { + if (!data.length || XLSX_SHEET_DATA.length === 0) { + return null; + } + const consumed = /* @__PURE__ */ new Set(); + const order = []; + for (const sheetData of data) { + const matchIndex = XLSX_SHEET_DATA.findIndex((value, idx) => !consumed.has(idx) && value === sheetData); + if (matchIndex === -1) { + return null; + } + consumed.add(matchIndex); + order.push(matchIndex); + } + return order; +}; +var reorderSheetState = (order) => { + const indexRemap = /* @__PURE__ */ new Map(); + order.forEach((originalIdx, newIdx) => indexRemap.set(originalIdx, newIdx)); + XLSX_SHEET_NAMES = order.map((idx) => XLSX_SHEET_NAMES[idx]); + XLSX_SHEET_DATA = order.map((idx) => XLSX_SHEET_DATA[idx]); + reorderSheetSpecificMap(XLSX_WORKSHEET_IMAGES, order); + reorderSheetSpecificMap(XLSX_WORKSHEET_HEADER_FOOTER_IMAGES, order); + reorderSheetSpecificMap(XLSX_WORKSHEET_DATA_TABLES, order); + reorderSheetSpecificMap(XLSX_WORKSHEET_IMAGE_IDS, order); + XLSX_IMAGES.forEach((sheetImages) => { + sheetImages.forEach((entry) => { + const remappedId = indexRemap.get(entry.sheetId); + if (remappedId != null) { + entry.sheetId = remappedId; + } + }); + }); + XLSX_SHEET_CONTENT_INDICES = /* @__PURE__ */ new Map(); + XLSX_SHEET_DATA.forEach((xml, idx) => { + const indices = XLSX_SHEET_CONTENT_INDICES.get(xml) ?? []; + indices.push(idx); + XLSX_SHEET_CONTENT_INDICES.set(xml, indices); + }); +}; +var syncXlsxOrderWithSheetData = (data) => { + if (data.length <= 1) { + return; + } + const order = getSheetOrderFromRefs(data) ?? getSheetOrderFromData(data); + if (!order) { + return; + } + reorderSheetState(order); +}; +var Workbook = class { + getStringPosition(str) { + return getXlsxStringPosition(str); + } + addBodyImageToMap(image, rowIndex, col, columnsToExport, rowHeight) { + addXlsxBodyImageToMap(image, rowIndex, col, columnsToExport, rowHeight); + } + addHeaderFooterImageToMap(image, position) { + addXlsxHeaderFooterImageToMap(image, position); + } + addWorksheet(styles, worksheet, config) { + return createXlsxExcel(styles, worksheet, config); + } + syncOrderWithSheetData(data) { + syncXlsxOrderWithSheetData(data); + } + reset() { + resetXlsxFactory(); + } + setFactoryMode(factoryMode) { + setXlsxFactoryMode(factoryMode); + } + getFactoryMode() { + return getXlsxFactoryMode(); + } + getSheetNames() { + return [...XLSX_SHEET_NAMES]; + } +}; + +// packages/ag-grid-enterprise/src/excelExport/zipContainer/zipContainerHelper.ts +import { _errMsg } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/excelExport/zipContainer/compress.ts +var compressBlob = async (data) => { + let chunksSize = 0; + const chunks = []; + const writeCompressedData = new WritableStream({ + write: (chunk) => { + chunks.push(chunk); + chunksSize += chunk.length; + } + }); + const readable = new ReadableStream({ + start: (controller) => { + const reader = new FileReader(); + reader.onload = (e) => { + if (e.target?.result) { + controller.enqueue(e.target.result); + } + controller.close(); + }; + reader.readAsArrayBuffer(data); + } + }); + const compressStream = new window.CompressionStream("deflate-raw"); + await readable.pipeThrough(compressStream).pipeTo(writeCompressedData); + return { + size: chunksSize, + content: new Blob(chunks) + }; +}; +var deflateLocalFile = async (rawContent) => { + const contentAsBlob = new Blob([rawContent]); + const { size: compressedSize, content: compressedContent } = await compressBlob(contentAsBlob); + const compressedContentAsUint8Array = new Uint8Array(await compressedContent.arrayBuffer()); + return { + size: compressedSize, + content: compressedContentAsUint8Array + }; +}; + +// packages/ag-grid-enterprise/src/excelExport/zipContainer/convert.ts +var convertTime = (date) => { + let time = date.getHours(); + time <<= 6; + time = time | date.getMinutes(); + time <<= 5; + time = time | date.getSeconds() / 2; + return time; +}; +var convertDate = (date) => { + let dt = date.getFullYear() - 1980; + dt <<= 4; + dt = dt | date.getMonth() + 1; + dt <<= 5; + dt = dt | date.getDate(); + return dt; +}; +function convertDecToHex(number, bytes) { + let hex = ""; + for (let i = 0; i < bytes; i++) { + hex += String.fromCharCode(number & 255); + number >>>= 8; + } + return hex; +} + +// packages/ag-grid-enterprise/src/excelExport/zipContainer/crcTable.ts +var getCrcFromCrc32TableAndByteArray = (content) => { + if (!content.length) { + return 0; + } + let crc = 0 ^ -1; + let j = 0; + let k = 0; + let l = 0; + for (let i = 0; i < content.length; i++) { + j = content[i]; + k = (crc ^ j) & 255; + l = crcTable[k]; + crc = crc >>> 8 ^ l; + } + return crc ^ -1; +}; +var getCrcFromCrc32Table = (content) => { + if (!content.length) { + return 0; + } + if (typeof content === "string") { + return getCrcFromCrc32TableAndByteArray(new TextEncoder().encode(content)); + } + return getCrcFromCrc32TableAndByteArray(content); +}; +var crcTable = /* @__PURE__ */ new Uint32Array([ + 0, + 1996959894, + 3993919788, + 2567524794, + 124634137, + 1886057615, + 3915621685, + 2657392035, + 249268274, + 2044508324, + 3772115230, + 2547177864, + 162941995, + 2125561021, + 3887607047, + 2428444049, + 498536548, + 1789927666, + 4089016648, + 2227061214, + 450548861, + 1843258603, + 4107580753, + 2211677639, + 325883990, + 1684777152, + 4251122042, + 2321926636, + 335633487, + 1661365465, + 4195302755, + 2366115317, + 997073096, + 1281953886, + 3579855332, + 2724688242, + 1006888145, + 1258607687, + 3524101629, + 2768942443, + 901097722, + 1119000684, + 3686517206, + 2898065728, + 853044451, + 1172266101, + 3705015759, + 2882616665, + 651767980, + 1373503546, + 3369554304, + 3218104598, + 565507253, + 1454621731, + 3485111705, + 3099436303, + 671266974, + 1594198024, + 3322730930, + 2970347812, + 795835527, + 1483230225, + 3244367275, + 3060149565, + 1994146192, + 31158534, + 2563907772, + 4023717930, + 1907459465, + 112637215, + 2680153253, + 3904427059, + 2013776290, + 251722036, + 2517215374, + 3775830040, + 2137656763, + 141376813, + 2439277719, + 3865271297, + 1802195444, + 476864866, + 2238001368, + 4066508878, + 1812370925, + 453092731, + 2181625025, + 4111451223, + 1706088902, + 314042704, + 2344532202, + 4240017532, + 1658658271, + 366619977, + 2362670323, + 4224994405, + 1303535960, + 984961486, + 2747007092, + 3569037538, + 1256170817, + 1037604311, + 2765210733, + 3554079995, + 1131014506, + 879679996, + 2909243462, + 3663771856, + 1141124467, + 855842277, + 2852801631, + 3708648649, + 1342533948, + 654459306, + 3188396048, + 3373015174, + 1466479909, + 544179635, + 3110523913, + 3462522015, + 1591671054, + 702138776, + 2966460450, + 3352799412, + 1504918807, + 783551873, + 3082640443, + 3233442989, + 3988292384, + 2596254646, + 62317068, + 1957810842, + 3939845945, + 2647816111, + 81470997, + 1943803523, + 3814918930, + 2489596804, + 225274430, + 2053790376, + 3826175755, + 2466906013, + 167816743, + 2097651377, + 4027552580, + 2265490386, + 503444072, + 1762050814, + 4150417245, + 2154129355, + 426522225, + 1852507879, + 4275313526, + 2312317920, + 282753626, + 1742555852, + 4189708143, + 2394877945, + 397917763, + 1622183637, + 3604390888, + 2714866558, + 953729732, + 1340076626, + 3518719985, + 2797360999, + 1068828381, + 1219638859, + 3624741850, + 2936675148, + 906185462, + 1090812512, + 3747672003, + 2825379669, + 829329135, + 1181335161, + 3412177804, + 3160834842, + 628085408, + 1382605366, + 3423369109, + 3138078467, + 570562233, + 1426400815, + 3317316542, + 2998733608, + 733239954, + 1555261956, + 3268935591, + 3050360625, + 752459403, + 1541320221, + 2607071920, + 3965973030, + 1969922972, + 40735498, + 2617837225, + 3943577151, + 1913087877, + 83908371, + 2512341634, + 3803740692, + 2075208622, + 213261112, + 2463272603, + 3855990285, + 2094854071, + 198958881, + 2262029012, + 4057260610, + 1759359992, + 534414190, + 2176718541, + 4139329115, + 1873836001, + 414664567, + 2282248934, + 4279200368, + 1711684554, + 285281116, + 2405801727, + 4167216745, + 1634467795, + 376229701, + 2685067896, + 3608007406, + 1308918612, + 956543938, + 2808555105, + 3495958263, + 1231636301, + 1047427035, + 2932959818, + 3654703836, + 1088359270, + 936918e3, + 2847714899, + 3736837829, + 1202900863, + 817233897, + 3183342108, + 3401237130, + 1404277552, + 615818150, + 3134207493, + 3453421203, + 1423857449, + 601450431, + 3009837614, + 3294710456, + 1567103746, + 711928724, + 3020668471, + 3272380065, + 1510334235, + 755167117 +]); + +// packages/ag-grid-enterprise/src/excelExport/zipContainer/zipContainerHelper.ts +function _utf8_encode(s2) { + const stringFromCharCode = String.fromCharCode; + function ucs2decode(string) { + const output = []; + if (!string) { + return []; + } + const len = string.length; + let counter = 0; + let value; + let extra; + while (counter < len) { + value = string.charCodeAt(counter++); + if (value >= 55296 && value <= 56319 && counter < len) { + extra = string.charCodeAt(counter++); + if ((extra & 64512) == 56320) { + output.push(((value & 1023) << 10) + (extra & 1023) + 65536); + } else { + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + function checkScalarValue(point) { + if (point >= 55296 && point <= 57343) { + throw new Error(_errMsg(255, { point })); + } + } + function createByte(point, shift) { + return stringFromCharCode(point >> shift & 63 | 128); + } + function encodeCodePoint(point) { + if ((point & 4294967168) == 0) { + return stringFromCharCode(point); + } + let symbol = ""; + if ((point & 4294965248) == 0) { + symbol = stringFromCharCode(point >> 6 & 31 | 192); + } else if ((point & 4294901760) == 0) { + checkScalarValue(point); + symbol = stringFromCharCode(point >> 12 & 15 | 224); + symbol += createByte(point, 6); + } else if ((point & 4292870144) == 0) { + symbol = stringFromCharCode(point >> 18 & 7 | 240); + symbol += createByte(point, 12); + symbol += createByte(point, 6); + } + symbol += stringFromCharCode(point & 63 | 128); + return symbol; + } + const codePoints = ucs2decode(s2); + const length = codePoints.length; + let index = -1; + let codePoint; + let byteString = ""; + while (++index < length) { + codePoint = codePoints[index]; + byteString += encodeCodePoint(codePoint); + } + return byteString; +} +var getHeaders = (currentFile, isCompressed, offset, rawSize, rawContent, deflatedSize) => { + const { content, path, created: creationDate } = currentFile; + const time = convertTime(creationDate); + const dt = convertDate(creationDate); + const crcFlag = getCrcFromCrc32Table(rawContent); + const zipSize = deflatedSize !== void 0 ? deflatedSize : rawSize; + const utfPath = _utf8_encode(path); + const isUTF8 = utfPath !== path; + let extraFields = ""; + if (isUTF8) { + const uExtraFieldPath = convertDecToHex(1, 1) + convertDecToHex(getCrcFromCrc32Table(utfPath), 4) + utfPath; + extraFields = "up" + convertDecToHex(uExtraFieldPath.length, 2) + uExtraFieldPath; + } + const commonHeader = "\0" + // version needed to extract + (isUTF8 ? "\0\b" : "\0\0") + // Language encoding flag (EFS) (12th bit turned on) + convertDecToHex(isCompressed ? 8 : 0, 2) + // As per ECMA-376 Part 2 specs + convertDecToHex(time, 2) + // last modified time + convertDecToHex(dt, 2) + // last modified date + convertDecToHex(zipSize ? crcFlag : 0, 4) + convertDecToHex(deflatedSize ?? rawSize, 4) + // compressed size + convertDecToHex(rawSize, 4) + // uncompressed size + convertDecToHex(utfPath.length, 2) + // file name length + convertDecToHex(extraFields.length, 2); + const localFileHeader = "PK" + commonHeader + utfPath + extraFields; + const centralDirectoryHeader = "PK\0" + commonHeader + // file header + "\0\0\0\0\0\0" + (content ? "\0\0\0\0" : "\0\0\0") + // external file attributes + convertDecToHex(offset, 4) + // relative offset of local header + utfPath + // file name + extraFields; + return { + localFileHeader: Uint8Array.from(localFileHeader, (c) => c.charCodeAt(0)), + centralDirectoryHeader: Uint8Array.from(centralDirectoryHeader, (c) => c.charCodeAt(0)) + }; +}; +var getDecodedContent = (content) => { + let contentToUse; + if (typeof content === "string") { + const base64String = atob(content.split(";base64,")[1]); + contentToUse = Uint8Array.from(base64String, (c) => c.charCodeAt(0)); + } else { + contentToUse = content; + } + return { + size: contentToUse.length, + content: contentToUse + }; +}; +var preprocessFileForZip = async (currentFile) => { + const { content } = currentFile; + const { size: rawSize, content: rawContent } = !content ? { size: 0, content: Uint8Array.from([]) } : getDecodedContent(content); + let deflatedContent; + let deflatedSize; + let deflationPerformed = false; + const shouldDeflate = currentFile.type === "file" && rawContent && rawSize > 0; + if (shouldDeflate) { + const result = await deflateLocalFile(rawContent); + deflatedContent = result.content; + deflatedSize = result.size; + deflationPerformed = true; + } + return { + rawContent, + rawSize, + deflatedContent, + deflatedSize, + isCompressed: deflationPerformed + }; +}; +var getHeaderAndContent = (currentFile, offset) => { + const { content } = currentFile; + const { content: rawContent } = !content ? { content: Uint8Array.from([]) } : getDecodedContent(content); + const headers = getHeaders(currentFile, false, offset, rawContent.length, rawContent, void 0); + return { + ...headers, + content: rawContent, + isCompressed: false + }; +}; +var buildCentralDirectoryEnd = (tLen, cLen, lLen) => { + const str = "PK\0\0\0\0" + convertDecToHex(tLen, 2) + // total number of entries in the central folder + convertDecToHex(tLen, 2) + // total number of entries in the central folder + convertDecToHex(cLen, 4) + // size of the central folder + convertDecToHex(lLen, 4) + // central folder start offset + "\0\0"; + return Uint8Array.from(str, (c) => c.charCodeAt(0)); +}; + +// packages/ag-grid-enterprise/src/excelExport/zipContainer/zipContainer.ts +var ZipContainer = class { + constructor() { + this.folders = []; + this.files = []; + } + addFolders(paths) { + paths.forEach(this.addFolder.bind(this)); + } + addFolder(path) { + this.folders.push({ + path, + created: /* @__PURE__ */ new Date(), + isBase64: false, + type: "folder" + }); + } + addFile(path, content, isBase64 = false) { + this.files.push({ + path, + created: /* @__PURE__ */ new Date(), + content: isBase64 ? content : new TextEncoder().encode(content), + isBase64, + type: "file" + }); + } + async getZipFile(mimeType = "application/zip") { + const textOutput = await this.buildCompressedFileStream(); + this.clearStream(); + return new Blob([textOutput], { type: mimeType }); + } + getUncompressedZipFile(mimeType = "application/zip") { + const textOutput = this.buildFileStream(); + this.clearStream(); + return new Blob([textOutput], { type: mimeType }); + } + clearStream() { + this.folders = []; + this.files = []; + } + packageFiles(files) { + let fileLen = 0; + let folderLen = 0; + for (const currentFile of files) { + const { localFileHeader, centralDirectoryHeader, content } = currentFile; + fileLen += localFileHeader.length + content.length; + folderLen += centralDirectoryHeader.length; + } + const fileData = new Uint8Array(fileLen); + const folderData = new Uint8Array(folderLen); + let fileOffset = 0; + let folderOffset = 0; + for (const currentFile of files) { + const { localFileHeader, centralDirectoryHeader, content } = currentFile; + fileData.set(localFileHeader, fileOffset); + fileOffset += localFileHeader.length; + fileData.set(content, fileOffset); + fileOffset += content.length; + folderData.set(centralDirectoryHeader, folderOffset); + folderOffset += centralDirectoryHeader.length; + } + const folderEnd = buildCentralDirectoryEnd(files.length, folderLen, fileLen); + const result = new Uint8Array(fileData.length + folderData.length + folderEnd.length); + result.set(fileData); + result.set(folderData, fileData.length); + result.set(folderEnd, fileData.length + folderData.length); + return result; + } + async buildCompressedFileStream() { + const totalFiles = [...this.folders, ...this.files]; + const preprocessed = await Promise.all(totalFiles.map(preprocessFileForZip)); + const processed = []; + let offset = 0; + for (let i = 0; i < totalFiles.length; i++) { + const currentFile = totalFiles[i]; + const { rawContent, rawSize, deflatedContent, deflatedSize, isCompressed } = preprocessed[i]; + const headers = getHeaders(currentFile, isCompressed, offset, rawSize, rawContent, deflatedSize); + const contentToUse = deflatedContent ?? rawContent; + processed.push({ + ...headers, + content: contentToUse, + isCompressed + }); + offset += headers.localFileHeader.length + contentToUse.length; + } + return this.packageFiles(processed); + } + buildFileStream() { + const totalFiles = [...this.folders, ...this.files]; + const readyFiles = []; + let lL = 0; + for (const currentFile of totalFiles) { + const readyFile = getHeaderAndContent(currentFile, lL); + const { localFileHeader, content } = readyFile; + readyFiles.push(readyFile); + lL += localFileHeader.length + content.length; + } + return this.packageFiles(readyFiles); + } +}; + +// packages/ag-grid-enterprise/src/excelExport/excelCreator.ts +var createExcelXMLCoreFolderStructure = (zipContainer) => { + zipContainer.addFolders(["_rels/", "docProps/", "xl/", "xl/theme/", "xl/_rels/", "xl/worksheets/"]); + if (!XLSX_IMAGES.size) { + return; + } + zipContainer.addFolders(["xl/worksheets/_rels", "xl/drawings/", "xl/drawings/_rels", "xl/media/"]); + let imgCounter = 0; + XLSX_IMAGES.forEach((value) => { + const firstImage = value[0].image[0]; + const { base64, imageType } = firstImage; + zipContainer.addFile(`xl/media/image${++imgCounter}.${_normaliseImageExtension(imageType)}`, base64, true); + }); +}; +var createExcelXmlWorksheets = (zipContainer, data) => { + let imageRelationCounter = 0; + let headerFooterImageCounter = 0; + for (let i = 0; i < data.length; i++) { + const value = data[i]; + zipContainer.addFile(`xl/worksheets/sheet${i + 1}.xml`, value, false); + const hasImages = XLSX_IMAGES.size > 0 && XLSX_WORKSHEET_IMAGES.has(i); + const tableData = XLSX_WORKSHEET_DATA_TABLES.size > 0 && XLSX_WORKSHEET_DATA_TABLES.get(i); + const hasHeaderFooterImages = XLSX_IMAGES.size && XLSX_WORKSHEET_HEADER_FOOTER_IMAGES.has(i); + if (!hasImages && !tableData && !hasHeaderFooterImages) { + continue; + } + let tableName; + let drawingIndex; + let vmlDrawingIndex; + if (hasImages) { + createExcelXmlDrawings(zipContainer, i, imageRelationCounter); + drawingIndex = imageRelationCounter; + imageRelationCounter++; + } + if (hasHeaderFooterImages) { + createExcelVmlDrawings(zipContainer, i, headerFooterImageCounter); + vmlDrawingIndex = headerFooterImageCounter; + headerFooterImageCounter++; + } + if (tableData) { + tableName = tableData.name; + } + const worksheetRelFile = `xl/worksheets/_rels/sheet${i + 1}.xml.rels`; + zipContainer.addFile( + worksheetRelFile, + createXlsxRelationships({ + tableName, + drawingIndex, + vmlDrawingIndex + }) + ); + } +}; +var createExcelXmlDrawings = (zipContainer, sheetIndex, drawingIndex) => { + const drawingFolder = "xl/drawings"; + const drawingFileName = `${drawingFolder}/drawing${drawingIndex + 1}.xml`; + const relFileName = `${drawingFolder}/_rels/drawing${drawingIndex + 1}.xml.rels`; + zipContainer.addFile(relFileName, createXlsxDrawingRel(sheetIndex)); + zipContainer.addFile(drawingFileName, createXlsxDrawing(sheetIndex)); +}; +var createExcelVmlDrawings = (zipContainer, sheetIndex, drawingIndex) => { + const drawingFolder = "xl/drawings"; + const drawingFileName = `${drawingFolder}/vmlDrawing${drawingIndex + 1}.vml`; + const relFileName = `${drawingFolder}/_rels/vmlDrawing${drawingIndex + 1}.vml.rels`; + zipContainer.addFile(drawingFileName, createXlsxVmlDrawing(sheetIndex)); + zipContainer.addFile(relFileName, createXlsxVmlDrawingRel(sheetIndex)); +}; +var createExcelXmlTables = (zipContainer) => { + const tablesDataByWorksheet = XLSX_WORKSHEET_DATA_TABLES; + const worksheetKeys = Array.from(tablesDataByWorksheet.keys()); + for (let i = 0; i < worksheetKeys.length; i++) { + const sheetIndex = worksheetKeys[i]; + const table = tablesDataByWorksheet.get(sheetIndex); + if (!table) { + continue; + } + zipContainer.addFile(`xl/tables/${table.name}.xml`, createXlsxTable(table, i)); + } +}; +var createExcelXmlCoreSheets = (zipContainer, fontSize, author, sheetLen, activeTab, customMetadata) => { + const hasCustomMetadata = !!customMetadata && Object.keys(customMetadata).some((key) => customMetadata[key] != null); + zipContainer.addFile("xl/workbook.xml", createXlsxWorkbook(activeTab)); + zipContainer.addFile("xl/styles.xml", createXlsxStylesheet(fontSize)); + zipContainer.addFile("xl/sharedStrings.xml", createXlsxSharedStrings()); + zipContainer.addFile("xl/theme/theme1.xml", createXlsxTheme()); + zipContainer.addFile("xl/_rels/workbook.xml.rels", createXlsxWorkbookRels(sheetLen)); + zipContainer.addFile("docProps/core.xml", createXlsxCore(author)); + if (hasCustomMetadata) { + zipContainer.addFile("docProps/custom.xml", createXlsxCustomProperties(customMetadata)); + } + zipContainer.addFile("[Content_Types].xml", createXlsxContentTypes(sheetLen, hasCustomMetadata)); + zipContainer.addFile("_rels/.rels", createXlsxRels(hasCustomMetadata)); +}; +var createExcelFileForExcel = (zipContainer, data, options = {}, workbook) => { + if (!data || data.length === 0) { + _warn3(159); + workbook.reset(); + return false; + } + workbook.syncOrderWithSheetData(data); + const { fontSize = 11, author = "AG Grid", activeTab = 0, customMetadata } = options; + const len = data.length; + const activeTabWithinBounds = Math.max(Math.min(activeTab, len - 1), 0); + createExcelXMLCoreFolderStructure(zipContainer); + createExcelXmlTables(zipContainer); + createExcelXmlWorksheets(zipContainer, data); + createExcelXmlCoreSheets(zipContainer, fontSize, author, len, activeTabWithinBounds, customMetadata); + workbook.reset(); + return true; +}; +var getMultipleSheetsAsExcelCompressed = (params, workbook = new Workbook()) => { + const { data, fontSize, author, activeSheetIndex, customMetadata } = params; + const mimeType = params.mimeType || "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + const zipContainer = new ZipContainer(); + if (!createExcelFileForExcel( + zipContainer, + data, + { + author, + fontSize, + activeTab: activeSheetIndex, + customMetadata + }, + workbook + )) { + return Promise.resolve(void 0); + } + return zipContainer.getZipFile(mimeType); +}; +var getMultipleSheetsAsExcel = (params, workbook = new Workbook()) => { + const { data, fontSize, author, activeSheetIndex: activeTab, customMetadata } = params; + const mimeType = params.mimeType || "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + const zipContainer = new ZipContainer(); + if (!createExcelFileForExcel( + zipContainer, + data, + { + author, + fontSize, + activeTab, + customMetadata + }, + workbook + )) { + return; + } + return zipContainer.getUncompressedZipFile(mimeType); +}; +var exportMultipleSheetsAsExcel = (params) => { + const { fileName = "export.xlsx" } = params; + const workbook = new Workbook(); + getMultipleSheetsAsExcelCompressed(params, workbook).then((contents) => { + if (contents) { + const downloadFileName = typeof fileName === "function" ? fileName() : fileName; + _downloadFile(downloadFileName, contents); + } + }); +}; +var ExcelCreator = class extends BaseCreator { + constructor() { + super(...arguments); + this.beanName = "excelCreator"; + this.workbook = new Workbook(); + } + getMergedParams(params) { + const baseParams = this.gos.get("defaultExcelExportParams"); + return Object.assign({}, baseParams, params); + } + export(userParams) { + if (this.isExportSuppressed()) { + _warn3(160); + return; + } + const exportFunc = () => { + const mergedParams = this.getMergedParams(userParams); + const data = this.getData(mergedParams); + const { fontSize, author, mimeType, customMetadata } = mergedParams; + const exportParams = { + data: [data], + fontSize, + author, + mimeType, + customMetadata + }; + this.packageCompressedFile(exportParams).then((packageFile) => { + if (packageFile) { + const { fileName } = mergedParams; + const providedFileName = typeof fileName === "function" ? fileName(_addGridCommonParams2(this.gos, {})) : fileName; + _downloadFile(this.getFileName(providedFileName), packageFile); + } + }); + }; + const { overlays } = this.beans; + if (overlays) { + overlays.showExportOverlay(exportFunc); + } else { + exportFunc(); + } + } + exportDataAsExcel(params) { + this.export(params); + } + getDataAsExcel(params) { + const mergedParams = this.getMergedParams(params); + const data = this.getData(mergedParams); + const { fontSize, author, mimeType, customMetadata } = mergedParams; + const exportParams = { + data: [data], + fontSize, + author, + mimeType, + customMetadata + }; + return this.packageFile(exportParams); + } + setFactoryMode(factoryMode) { + this.workbook.setFactoryMode(factoryMode); + } + getFactoryMode() { + return this.workbook.getFactoryMode(); + } + getSheetDataForExcel(params) { + const mergedParams = this.getMergedParams(params); + return this.getData(mergedParams); + } + getMultipleSheetsAsExcel(params) { + return getMultipleSheetsAsExcel(params, this.workbook); + } + exportMultipleSheetsAsExcel(params) { + getMultipleSheetsAsExcelCompressed(params, this.workbook).then((contents) => { + const { fileName = "export.xlsx" } = params; + if (contents) { + const downloadFileName = typeof fileName === "function" ? fileName() : fileName; + _downloadFile(downloadFileName, contents); + } + }); + } + getDefaultFileExtension() { + return "xlsx"; + } + createSerializingSession(params) { + const { colModel, colNames, rowGroupColsSvc, valueSvc, formula, gos } = this.beans; + const baseExcelStyles = gos.get("excelStyles") || []; + const styleLinker = this.createStyleLinker(baseExcelStyles); + const config = { + ...params, + colModel, + colNames, + rowGroupColsSvc, + valueSvc, + formulaSvc: formula, + gos, + suppressRowOutline: params.suppressRowOutline || params.skipRowGroups, + headerRowHeight: params.headerRowHeight || params.rowHeight, + baseExcelStyles, + rightToLeft: params.rightToLeft ?? gos.get("enableRtl"), + styleLinker, + headerRowCount: _getHeaderRowCount(colModel), + pivotModeActive: colModel.isPivotActive(), + workbook: this.workbook + }; + return new ExcelSerializingSession(config); + } + createStyleLinker(baseExcelStyles) { + const styleIds = []; + const styleIdsSet = /* @__PURE__ */ new Set(); + const styleIdOrder = /* @__PURE__ */ new Map(); + baseExcelStyles.forEach((it, idx) => { + styleIds.push(it.id); + styleIdsSet.add(it.id); + styleIdOrder.set(it.id, idx); + }); + const { gos, cellStyles } = this.beans; + return (params) => { + const { rowType, rowIndex, value, column, columnGroup, node } = params; + const isHeader = rowType === "HEADER"; + const isGroupHeader = rowType === "HEADER_GROUPING"; + const col = isHeader ? column : columnGroup; + let headerClasses = []; + if (isHeader || isGroupHeader) { + headerClasses.push("header"); + if (isGroupHeader) { + headerClasses.push("headerGroup"); + } + if (col) { + headerClasses = headerClasses.concat( + _getHeaderClassesFromColDef( + col.getDefinition(), + gos, + column || null, + columnGroup || null + ) + ); + } + return headerClasses; + } + const applicableStyles = ["cell"]; + if (!styleIds.length) { + return applicableStyles; + } + const colDef = column.getDefinition(); + cellStyles?.processAllCellClasses( + colDef, + _addGridCommonParams2(gos, { + value, + data: node.data, + node, + colDef, + column, + rowIndex + }), + (className) => { + if (styleIdsSet.has(className)) { + applicableStyles.push(className); + } + } + ); + return applicableStyles.sort((left, right) => { + const leftIdx = styleIdOrder.get(left) ?? -1; + const rightIdx = styleIdOrder.get(right) ?? -1; + return leftIdx === rightIdx ? 0 : leftIdx < rightIdx ? -1 : 1; + }); + }; + } + isExportSuppressed() { + return this.gos.get("suppressExcelExport"); + } + packageCompressedFile(params) { + return getMultipleSheetsAsExcelCompressed(params, this.workbook); + } + packageFile(params) { + return getMultipleSheetsAsExcel(params, this.workbook); + } +}; + +// packages/ag-grid-enterprise/src/agStack/agVirtualList.ts +import { + KeyCode, + RefPlaceholder as RefPlaceholder2, + _AgTabGuardComp, + _createAgElement, + _getAriaPosInSet, + _observeResize, + _requestAnimationFrame, + _setAriaLabel, + _setAriaPosInSet, + _setAriaRole, + _setAriaSetSize, + _waitUntil +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agVirtualList.css +var agVirtualList_default = ":where(.ag-virtual-list-viewport) .ag-tab-guard{position:sticky}.ag-virtual-list-viewport{flex:1 1 auto;height:100%;min-width:0;overflow:auto;position:relative;width:100%}.ag-virtual-list-container{overflow:hidden;position:relative}.ag-virtual-list-item{height:var(--ag-list-item-height);position:absolute;width:100%}"; + +// packages/ag-grid-enterprise/src/agStack/agVirtualList.ts +function getVirtualListTemplate(cssIdentifier) { + return { + tag: "div", + cls: `ag-virtual-list-viewport ag-${cssIdentifier}-virtual-list-viewport`, + role: "presentation", + children: [ + { + tag: "div", + ref: "eContainer", + cls: `ag-virtual-list-container ag-${cssIdentifier}-virtual-list-container` + } + ] + }; +} +var AgVirtualList = class extends _AgTabGuardComp { + constructor(stopPropagationCallbacks, params) { + super(getVirtualListTemplate(params?.cssIdentifier || "default")); + this.stopPropagationCallbacks = stopPropagationCallbacks; + this.renderedRows = /* @__PURE__ */ new Map(); + this.rowHeight = 20; + this.pageSize = -1; + this.isScrolling = false; + this.isHeightFromTheme = true; + this.eContainer = RefPlaceholder2; + this.awaitStableCallbacks = []; + this.registerCSS(agVirtualList_default); + const { cssIdentifier = "default", ariaRole = "listbox", listName, moveItemCallback } = params || {}; + this.cssIdentifier = cssIdentifier; + this.ariaRole = ariaRole; + this.listName = listName; + this.moveItemCallback = moveItemCallback; + } + postConstruct() { + this.addScrollListener(); + this.rowHeight = this.getItemHeight(); + this.addResizeObserver(); + this.initialiseTabGuard( + { + onFocusIn: (e) => this.onFocusIn(e), + onFocusOut: (e) => this.onFocusOut(e), + focusInnerElement: (fromBottom) => this.focusInnerElement(fromBottom), + onTabKeyDown: (e) => this.onTabKeyDown(e), + handleKeyDown: (e) => this.handleKeyDown(e) + }, + this.stopPropagationCallbacks + ); + this.refreshAriaProperties(); + this.addManagedEventListeners({ stylesChanged: this.onStylesChanged.bind(this) }); + } + onStylesChanged(e) { + if (e.listItemHeightChanged) { + this.rowHeight = this.getItemHeight(); + this.refresh(); + } + } + refreshAriaProperties() { + const translate = this.getLocaleTextFunc(); + const listName = translate("ariaDefaultListName", this.listName || "List"); + const ariaEl = this.eContainer; + _setAriaRole(ariaEl, this.model?.getRowCount() > 0 ? this.ariaRole : "presentation"); + _setAriaLabel(ariaEl, listName); + } + addResizeObserver() { + const listener = () => _requestAnimationFrame(this.beans, () => this.drawVirtualRows()); + const destroyObserver = _observeResize(this.beans, this.getGui(), listener); + this.addDestroyFunc(destroyObserver); + } + focusInnerElement(fromBottom) { + this.focusRow(fromBottom ? this.model.getRowCount() - 1 : 0); + return true; + } + onFocusIn(e) { + const target = e.target; + if (target.classList.contains("ag-virtual-list-item")) { + this.lastFocusedRowIndex = _getAriaPosInSet(target) - 1; + } + } + onFocusOut(e) { + if (!this.getFocusableElement().contains(e.relatedTarget)) { + this.lastFocusedRowIndex = null; + } + } + handleKeyDown(e) { + const { key, shiftKey } = e; + switch (key) { + case KeyCode.UP: + case KeyCode.DOWN: + { + const isUp = key === KeyCode.UP; + e.preventDefault(); + if (shiftKey) { + this.moveItem(isUp); + } else { + this.navigate(isUp); + } + } + break; + case KeyCode.PAGE_HOME: + case KeyCode.PAGE_END: + case KeyCode.PAGE_UP: + case KeyCode.PAGE_DOWN: + if (this.navigateToPage(key) !== null) { + e.preventDefault(); + } + break; + } + } + onTabKeyDown(e) { + this.stopPropagationCallbacks?.stopPropagation(e); + this.forceFocusOutOfContainer(e.shiftKey); + } + getNextRow(up) { + if (this.lastFocusedRowIndex == null) { + return void 0; + } + const nextRow = this.lastFocusedRowIndex + (up ? -1 : 1); + if (nextRow < 0 || nextRow >= this.model.getRowCount()) { + return void 0; + } + return nextRow; + } + moveItem(up) { + if (!this.moveItemCallback) { + return; + } + const item = this.getComponentAt(this.lastFocusedRowIndex); + if (!item) { + return; + } + this.moveItemCallback(item, up); + } + navigate(up) { + const nextRow = this.getNextRow(up); + if (nextRow === void 0) { + return; + } + this.focusRow(nextRow); + } + navigateToPage(key, fromItem = "focused") { + let hasFocus = false; + if (fromItem === "focused") { + fromItem = this.getLastFocusedRow(); + hasFocus = true; + } + const rowCount = this.model.getRowCount() - 1; + let newIndex = -1; + if (key === KeyCode.PAGE_HOME) { + newIndex = 0; + } else if (key === KeyCode.PAGE_END) { + newIndex = rowCount; + } else if (key === KeyCode.PAGE_DOWN) { + newIndex = Math.min(fromItem + this.pageSize, rowCount); + } else if (key === KeyCode.PAGE_UP) { + newIndex = Math.max(fromItem - this.pageSize, 0); + } + if (newIndex === -1) { + return null; + } + if (hasFocus) { + this.focusRow(newIndex); + } else { + this.ensureIndexVisible(newIndex); + } + return newIndex; + } + getLastFocusedRow() { + return this.lastFocusedRowIndex; + } + focusRow(rowNumber) { + if (this.isScrolling) { + return; + } + this.isScrolling = true; + this.ensureIndexVisible(rowNumber); + _requestAnimationFrame(this.beans, () => { + this.isScrolling = false; + if (!this.isAlive()) { + return; + } + const renderedRow = this.renderedRows.get(rowNumber); + if (renderedRow) { + renderedRow.eDiv.focus(); + } + }); + } + getComponentAt(rowIndex) { + const comp = this.renderedRows.get(rowIndex); + return comp && comp.rowComponent; + } + forEachRenderedRow(func) { + this.renderedRows.forEach((value, key) => func(value.rowComponent, key)); + } + getItemHeight() { + if (!this.isHeightFromTheme) { + return this.rowHeight; + } + return this.beans.environment.getDefaultListItemHeight(); + } + /** + * Returns true if the view had to be scrolled, otherwise, false. + */ + ensureIndexVisible(index, scrollPartialIntoView = true) { + const lastRow = this.model.getRowCount(); + if (typeof index !== "number" || index < 0 || index >= lastRow) { + return false; + } + const rowTopPixel = index * this.rowHeight; + const rowBottomPixel = rowTopPixel + this.rowHeight; + const eGui = this.getGui(); + const viewportTopPixel = eGui.scrollTop; + const viewportHeight = eGui.offsetHeight; + const viewportBottomPixel = viewportTopPixel + viewportHeight; + const diff = scrollPartialIntoView ? 0 : this.rowHeight; + const viewportScrolledPastRow = viewportTopPixel > rowTopPixel + diff; + const viewportScrolledBeforeRow = viewportBottomPixel < rowBottomPixel - diff; + if (viewportScrolledPastRow) { + eGui.scrollTop = rowTopPixel; + return true; + } + if (viewportScrolledBeforeRow) { + const newScrollPosition = rowBottomPixel - viewportHeight; + eGui.scrollTop = newScrollPosition; + return true; + } + return false; + } + setComponentCreator(componentCreator) { + this.componentCreator = componentCreator; + } + setComponentUpdater(componentUpdater) { + this.componentUpdater = componentUpdater; + } + getRowHeight() { + return this.rowHeight; + } + getScrollTop() { + return this.getGui().scrollTop; + } + setRowHeight(rowHeight) { + this.isHeightFromTheme = false; + this.rowHeight = rowHeight; + this.refresh(); + } + refresh(softRefresh) { + if (this.model == null || !this.isAlive()) { + return; + } + const rowCount = this.model.getRowCount(); + this.eContainer.style.height = `${rowCount * this.rowHeight}px`; + this.refreshAriaProperties(); + this.awaitStable(() => { + if (!this.isAlive()) { + return; + } + if (this.canSoftRefresh(softRefresh)) { + this.drawVirtualRows(true); + } else { + this.clearVirtualRows(); + this.drawVirtualRows(); + } + }); + } + awaitStable(callback) { + this.awaitStableCallbacks.push(callback); + if (this.awaitStableCallbacks.length > 1) { + return; + } + const rowCount = this.model.getRowCount(); + _waitUntil( + this, + () => this.eContainer.clientHeight >= rowCount * this.rowHeight, + () => { + if (!this.isAlive()) { + return; + } + const callbacks = this.awaitStableCallbacks; + this.awaitStableCallbacks = []; + for (const c of callbacks) { + c(); + } + } + ); + } + canSoftRefresh(softRefresh) { + return !!(softRefresh && this.renderedRows.size && typeof this.model.areRowsEqual === "function" && this.componentUpdater); + } + clearVirtualRows() { + this.renderedRows.forEach((_, rowIndex) => this.removeRow(rowIndex)); + } + drawVirtualRows(softRefresh) { + if (!this.isAlive() || !this.model) { + return; + } + const gui = this.getGui(); + const topPixel = gui.scrollTop; + const bottomPixel = topPixel + gui.offsetHeight; + if (topPixel === bottomPixel) { + this.clearVirtualRows(); + } else { + const firstRow = Math.floor(topPixel / this.rowHeight); + const lastRow = Math.floor(bottomPixel / this.rowHeight); + this.pageSize = Math.floor((bottomPixel - topPixel) / this.rowHeight); + this.ensureRowsRendered(firstRow, lastRow, softRefresh); + } + } + ensureRowsRendered(start, finish, softRefresh) { + this.renderedRows.forEach((_, rowIndex) => { + if ((rowIndex < start || rowIndex > finish) && rowIndex !== this.lastFocusedRowIndex) { + this.removeRow(rowIndex); + } + }); + if (softRefresh) { + this.refreshRows(); + } + for (let rowIndex = start; rowIndex <= finish; rowIndex++) { + if (this.renderedRows.has(rowIndex)) { + continue; + } + if (rowIndex < this.model.getRowCount()) { + this.insertRow(rowIndex); + } + } + } + insertRow(rowIndex) { + const { model } = this; + if (rowIndex < 0 || rowIndex >= model.getRowCount()) { + return; + } + const { cssIdentifier, ariaRole, renderedRows, eContainer } = this; + const value = model.getRow(rowIndex); + const role = ariaRole === "tree" ? "treeitem" : "option"; + const eDiv = _createAgElement({ + tag: "div", + cls: `ag-virtual-list-item ag-${cssIdentifier}-virtual-list-item`, + role, + attrs: { tabindex: "-1" } + }); + _setAriaSetSize(eDiv, model.getRowCount()); + _setAriaPosInSet(eDiv, rowIndex + 1); + const rowHeight = this.rowHeight; + eDiv.style.height = `${rowHeight}px`; + eDiv.style.top = `${rowHeight * rowIndex}px`; + const rowComponent = this.componentCreator(value, eDiv); + rowComponent.addGuiEventListener("focusin", () => this.lastFocusedRowIndex = rowIndex); + eDiv.appendChild(rowComponent.getGui()); + if (renderedRows.has(rowIndex - 1)) { + renderedRows.get(rowIndex - 1).eDiv.insertAdjacentElement("afterend", eDiv); + } else if (renderedRows.has(rowIndex + 1)) { + renderedRows.get(rowIndex + 1).eDiv.insertAdjacentElement("beforebegin", eDiv); + } else { + eContainer.appendChild(eDiv); + } + renderedRows.set(rowIndex, { rowComponent, eDiv, value }); + } + removeRow(rowIndex) { + const component = this.renderedRows.get(rowIndex); + component.eDiv.remove(); + this.destroyBean(component.rowComponent); + this.renderedRows.delete(rowIndex); + } + refreshRows() { + const rowCount = this.model.getRowCount(); + this.renderedRows.forEach((row, rowIndex) => { + if (rowIndex >= rowCount) { + this.removeRow(rowIndex); + } else { + const newValue = this.model.getRow(rowIndex); + if (this.model.areRowsEqual?.(row.value, newValue)) { + this.componentUpdater(newValue, row.rowComponent); + } else { + this.removeRow(rowIndex); + } + } + }); + } + addScrollListener() { + this.addGuiEventListener("scroll", () => this.drawVirtualRows(), { passive: true }); + } + setModel(model) { + this.model = model; + } + getAriaElement() { + return this.eContainer; + } + destroy() { + if (!this.isAlive()) { + return; + } + this.clearVirtualRows(); + this.awaitStableCallbacks.length = 0; + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/agStack/agVirtualListDragFeature.ts +import { AutoScrollService, _AgBeanStub, _radioCssClass } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agVirtualListDragFeature.css +var agVirtualListDragFeature_default = '.ag-list-item-hovered:after{background-color:var(--ag-accent-color);content:"";height:1px;left:0;position:absolute;right:0}.ag-item-highlight-top:after{top:0}.ag-item-highlight-bottom:after{bottom:0}'; + +// packages/ag-grid-enterprise/src/agStack/agVirtualListDragFeature.ts +var LIST_ITEM_HOVERED = "ag-list-item-hovered"; +var AgVirtualListDragFeature = class extends _AgBeanStub { + constructor(comp, virtualList, params) { + super(); + this.comp = comp; + this.virtualList = virtualList; + this.params = params; + this.currentDragValue = null; + this.lastHoveredListItem = null; + } + postConstruct() { + this.beans.environment.addGlobalCSS(agVirtualListDragFeature_default, "component-AgVirtualListDragFeature"); + this.params.addListeners(this, this.listItemDragStart.bind(this), this.listItemDragEnd.bind(this)); + this.createDropTarget(); + this.createAutoScrollService(); + } + listItemDragStart(event) { + this.currentDragValue = this.params.getCurrentDragValue(event); + this.moveBlocked = this.params.isMoveBlocked(this.currentDragValue); + } + listItemDragEnd() { + window.setTimeout(() => { + this.currentDragValue = null; + this.moveBlocked = false; + }, 10); + } + createDropTarget() { + const dropTarget = { + isInterestedIn: (type) => type === this.params.dragSourceType, + getIconName: () => this.moveBlocked ? "pinned" : "move", + getContainer: () => this.comp.getGui(), + onDragging: (e) => this.onDragging(e), + onDragStop: () => this.onDragStop(), + onDragLeave: () => this.onDragLeave(), + onDragCancel: () => this.onDragCancel() + }; + this.beans.dragAndDrop?.addDropTarget(dropTarget); + } + createAutoScrollService() { + const virtualListGui = this.virtualList.getGui(); + this.autoScrollService = new AutoScrollService({ + scrollContainer: virtualListGui, + scrollAxis: "y", + getVerticalPosition: () => virtualListGui.scrollTop, + setVerticalPosition: (position) => virtualListGui.scrollTop = position + }); + } + onDragging(e) { + if (!this.currentDragValue || this.moveBlocked) { + return; + } + const hoveredListItem = this.getListDragItem(e); + const comp = this.virtualList.getComponentAt(hoveredListItem.rowIndex); + if (!comp) { + return; + } + const el = comp.getGui().parentElement; + if (this.lastHoveredListItem && this.lastHoveredListItem.rowIndex === hoveredListItem.rowIndex && this.lastHoveredListItem.position === hoveredListItem.position) { + return; + } + this.autoScrollService.check(e.event); + this.clearHoveredItems(); + this.lastHoveredListItem = hoveredListItem; + _radioCssClass(el, LIST_ITEM_HOVERED); + _radioCssClass(el, `ag-item-highlight-${hoveredListItem.position}`); + } + getListDragItem(e) { + const virtualListGui = this.virtualList.getGui(); + const paddingTop = Number.parseFloat(window.getComputedStyle(virtualListGui).paddingTop); + const rowHeight = this.virtualList.getRowHeight(); + const scrollTop = this.virtualList.getScrollTop(); + const rowIndex = Math.max(0, (e.y - paddingTop + scrollTop) / rowHeight); + const maxLen = this.params.getNumRows(this.comp) - 1; + const normalizedRowIndex = Math.min(maxLen, rowIndex) | 0; + return { + rowIndex: normalizedRowIndex, + position: Math.round(rowIndex) > rowIndex || rowIndex > maxLen ? "bottom" : "top", + component: this.virtualList.getComponentAt(normalizedRowIndex) + }; + } + onDragStop() { + if (this.moveBlocked) { + return; + } + this.params.moveItem(this.currentDragValue, this.lastHoveredListItem); + this.clearDragProperties(); + } + onDragCancel() { + this.clearDragProperties(); + } + onDragLeave() { + this.clearDragProperties(); + } + clearDragProperties() { + this.clearHoveredItems(); + this.autoScrollService.ensureCleared(); + } + clearHoveredItems() { + const virtualListGui = this.virtualList.getGui(); + for (const el of virtualListGui.querySelectorAll(`.${LIST_ITEM_HOVERED}`)) { + for (const cls of [LIST_ITEM_HOVERED, "ag-item-highlight-top", "ag-item-highlight-bottom"]) { + el.classList.remove(cls); + } + } + this.lastHoveredListItem = null; + } +}; + +// packages/ag-grid-enterprise/src/agStack/agSlider.ts +import { AgAbstractLabel, AgInputNumberFieldSelector, RefPlaceholder as RefPlaceholder3 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agInputRange.ts +import { AgAbstractInputField } from "ag-grid-community"; +var AgInputRange = class extends AgAbstractInputField { + constructor(config) { + super(config, "ag-range-field", "range"); + } + postConstruct() { + super.postConstruct(); + const { min, max, step } = this.config; + if (min != null) { + this.setMinValue(min); + } + if (max != null) { + this.setMaxValue(max); + } + this.setStep(step || 1); + } + addInputListeners() { + this.addManagedElementListeners(this.eInput, { + input: (e) => { + const value = e.target.value; + this.setValue(value); + } + }); + } + setMinValue(value) { + this.min = value; + this.eInput.setAttribute("min", value.toString()); + return this; + } + setMaxValue(value) { + this.max = value; + this.eInput.setAttribute("max", value.toString()); + return this; + } + setStep(value) { + this.eInput.setAttribute("step", value.toString()); + return this; + } + setValue(value, silent) { + if (this.min != null) { + value = Math.max(parseFloat(value), this.min).toString(); + } + if (this.max != null) { + value = Math.min(parseFloat(value), this.max).toString(); + } + const ret = super.setValue(value, silent); + this.eInput.value = value; + return ret; + } +}; +var AgInputRangeSelector = { + selector: "AG-INPUT-RANGE", + component: AgInputRange +}; + +// packages/ag-grid-enterprise/src/agStack/agSlider.ts +var AgSlider = class extends AgAbstractLabel { + constructor(config) { + super( + config, + /* html */ + `
+ +
+ + +
+
`, + [AgInputRangeSelector, AgInputNumberFieldSelector] + ); + this.eLabel = RefPlaceholder3; + this.eSlider = RefPlaceholder3; + this.eText = RefPlaceholder3; + this.labelAlignment = "top"; + } + postConstruct() { + super.postConstruct(); + this.eSlider.addCss("ag-slider-field"); + const { minValue, maxValue, textFieldWidth, step, value, onValueChange } = this.config; + if (minValue != null) { + this.setMinValue(minValue); + } + if (maxValue != null) { + this.setMaxValue(maxValue); + } + if (textFieldWidth != null) { + this.setTextFieldWidth(textFieldWidth); + } + if (step != null) { + this.setStep(step); + } + if (value != null) { + this.setValue(value); + } + if (onValueChange != null) { + this.onValueChange(onValueChange); + } + } + onValueChange(callbackFn) { + this.addManagedListeners(this.eText, { + fieldValueChanged: () => { + const textValue = parseFloat(this.eText.getValue()); + this.eSlider.setValue(textValue.toString(), true); + callbackFn(textValue || 0); + } + }); + this.addManagedListeners(this.eSlider, { + fieldValueChanged: () => { + const sliderValue = this.eSlider.getValue(); + this.eText.setValue(sliderValue, true); + callbackFn(parseFloat(sliderValue)); + } + }); + return this; + } + setSliderWidth(width) { + this.eSlider.setWidth(width); + return this; + } + setTextFieldWidth(width) { + this.eText.setWidth(width); + return this; + } + setMinValue(minValue) { + this.eSlider.setMinValue(minValue); + this.eText.setMin(minValue); + return this; + } + setMaxValue(maxValue) { + this.eSlider.setMaxValue(maxValue); + this.eText.setMax(maxValue); + return this; + } + getValue() { + return this.eText.getValue(); + } + setValue(value, silent) { + if (this.getValue() === value) { + return this; + } + this.eText.setValue(value, true); + this.eSlider.setValue(value, true); + if (!silent) { + this.dispatchLocalEvent({ type: "fieldValueChanged" }); + } + return this; + } + setStep(step) { + this.eSlider.setStep(step); + this.eText.setStep(step); + return this; + } +}; +var AgSliderSelector = { + selector: "AG-SLIDER", + component: AgSlider +}; + +// packages/ag-grid-enterprise/src/agStack/agColorPicker.ts +import { AgPickerField, _createElement } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agColorPanel.ts +import { KeyCode as KeyCode2, RefPlaceholder as RefPlaceholder5, _AgComponentStub, _exists as _exists2, _setDisplayed } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agColorInput.ts +import { AgInputTextField, RefPlaceholder as RefPlaceholder4 } from "ag-grid-community"; +var AgColorInput = class extends AgInputTextField { + constructor() { + super({ + template: { + tag: "div", + cls: "ag-color-input", + role: "presentation", + children: [ + { tag: "div", ref: "eLabel", cls: "ag-input-field-label" }, + { + tag: "div", + ref: "eWrapper", + cls: "ag-wrapper ag-input-wrapper", + role: "presentation", + children: [ + { tag: "input", ref: "eInput", cls: "ag-input-field-input" }, + { tag: "div", ref: "eColor", cls: "ag-color-input-color" } + ] + } + ] + } + }); + this.eColor = RefPlaceholder4; + } + wireBeans(beans) { + this.color = beans.agChartsExports._Util.Color; + } + setColor(color) { + const rgbaColor = color.toRgbaString(); + this.setValue(this.color.fromString(rgbaColor).toHexString().toUpperCase(), true); + this.eColor.style.backgroundColor = rgbaColor; + } + setValue(value, silent) { + const isValid = this.color.validColorString(value ?? ""); + this.eInput.setCustomValidity( + isValid ? "" : this.getLocaleTextFunc()("invalidColor", "Color value is invalid") + ); + super.setValue(value, silent); + if (isValid && !silent) { + this.dispatchLocalEvent({ type: "colorChanged" }); + } + return this; + } + onColorChanged(callback) { + this.addManagedListeners(this, { colorChanged: () => callback(this.color.fromString(this.value)) }); + } +}; +var AgColorInputSelector = { + selector: "AG-COLOR-INPUT", + component: AgColorInput +}; + +// packages/ag-grid-enterprise/src/agStack/agColorPanel.ts +var maxRecentColors = 8; +var sharedRecentColors = []; +var AgColorPanel = class extends _AgComponentStub { + constructor(config) { + super( + /* html */ + `
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
`, + [AgColorInputSelector] + ); + this.H = 1; + // in the [0, 1] range + this.S = 1; + // in the [0, 1] range + this.B = 1; + // in the [0, 1] range + this.A = 1; + this.isSpectrumDragging = false; + this.isSpectrumHueDragging = false; + this.isSpectrumAlphaDragging = false; + this.colorChanged = false; + this.spectrumColor = RefPlaceholder5; + this.spectrumVal = RefPlaceholder5; + this.spectrumDragger = RefPlaceholder5; + this.spectrumHue = RefPlaceholder5; + this.spectrumHueSlider = RefPlaceholder5; + this.spectrumAlpha = RefPlaceholder5; + this.spectrumAlphaSlider = RefPlaceholder5; + this.colorInput = RefPlaceholder5; + this.recentColors = RefPlaceholder5; + this.picker = config.picker; + } + wireBeans(beans) { + this._Color = beans.agChartsExports._Util.Color; + } + postConstruct() { + this.initTabIndex(); + this.initRecentColors(); + this.addGuiEventListener("focus", () => this.spectrumColor.focus()); + this.addGuiEventListener("keydown", (e) => { + if (e.key === KeyCode2.ENTER && !e.defaultPrevented) { + this.destroy(); + } + }); + this.addManagedListeners(this.spectrumColor, { keydown: (e) => this.moveDragger(e) }); + this.addManagedListeners(this.spectrumAlphaSlider, { keydown: (e) => this.moveAlphaSlider(e) }); + this.addManagedListeners(this.spectrumHueSlider, { keydown: (e) => this.moveHueSlider(e) }); + this.addManagedListeners(this.spectrumVal, { mousedown: this.onSpectrumDraggerDown.bind(this) }); + this.addManagedListeners(this.spectrumHue, { mousedown: this.onSpectrumHueDown.bind(this) }); + this.addManagedListeners(this.spectrumAlpha, { mousedown: this.onSpectrumAlphaDown.bind(this) }); + this.addGuiEventListener("mousemove", (e) => { + this.onSpectrumDraggerMove(e); + this.onSpectrumHueMove(e); + this.onSpectrumAlphaMove(e); + }); + this.addManagedListeners(document, { mouseup: this.onMouseUp.bind(this) }); + this.colorInput.onColorChanged(this.setColor.bind(this)); + this.addManagedListeners(this.recentColors, { + click: this.onRecentColorClick.bind(this), + keydown: (e) => { + if (e.key === KeyCode2.ENTER || e.key === KeyCode2.SPACE) { + e.preventDefault(); + this.onRecentColorClick(e); + } + } + }); + } + initTabIndex() { + const tabIndex = this.tabIndex = this.gos.get("tabIndex").toString(); + this.spectrumColor.setAttribute("tabindex", tabIndex); + this.spectrumHueSlider.setAttribute("tabindex", tabIndex); + this.spectrumAlphaSlider.setAttribute("tabindex", tabIndex); + } + refreshSpectrumRect() { + return this.spectrumValRect = this.spectrumVal.getBoundingClientRect(); + } + refreshHueRect() { + return this.spectrumHueRect = this.spectrumHue.getBoundingClientRect(); + } + refreshAlphaRect() { + return this.spectrumAlphaRect = this.spectrumAlpha.getBoundingClientRect(); + } + onSpectrumDraggerDown(e) { + e.preventDefault(); + this.refreshSpectrumRect(); + this.isSpectrumDragging = true; + this.moveDragger(e); + } + onSpectrumDraggerMove(e) { + if (this.isSpectrumDragging) { + this.moveDragger(e); + } + } + onSpectrumHueDown(e) { + this.refreshHueRect(); + this.isSpectrumHueDragging = true; + this.moveHueSlider(e); + } + onSpectrumHueMove(e) { + if (this.isSpectrumHueDragging) { + this.moveHueSlider(e); + } + } + onSpectrumAlphaDown(e) { + this.refreshAlphaRect(); + this.isSpectrumAlphaDragging = true; + this.moveAlphaSlider(e); + } + onSpectrumAlphaMove(e) { + if (this.isSpectrumAlphaDragging) { + this.moveAlphaSlider(e); + } + } + onMouseUp() { + this.isSpectrumDragging = false; + this.isSpectrumHueDragging = false; + this.isSpectrumAlphaDragging = false; + } + moveDragger(e) { + const valRect = this.spectrumValRect; + if (!valRect) { + return; + } + let x; + let y; + if (e instanceof MouseEvent) { + x = e.clientX - valRect.left; + y = e.clientY - valRect.top; + } else { + const isLeft = e.key === KeyCode2.LEFT; + const isRight = e.key === KeyCode2.RIGHT; + const isUp = e.key === KeyCode2.UP; + const isDown = e.key === KeyCode2.DOWN; + const isVertical = isUp || isDown; + const isHorizontal = isLeft || isRight; + if (!isVertical && !isHorizontal) { + return; + } + e.preventDefault(); + const { x: currentX, y: currentY } = this.getSpectrumValue(); + x = currentX + (isHorizontal ? isLeft ? -5 : 5 : 0); + y = currentY + (isVertical ? isUp ? -5 : 5 : 0); + } + x = Math.max(x, 0); + x = Math.min(x, valRect.width); + y = Math.max(y, 0); + y = Math.min(y, valRect.height); + this.setSpectrumValue(x / valRect.width, 1 - y / valRect.height); + } + moveHueSlider(e) { + const rect = this.spectrumHueRect; + if (!rect) { + return; + } + const x = this.moveSlider(this.spectrumHueSlider, e); + if (x == null) { + return; + } + this.H = 1 - x / rect.width; + this.update(); + } + moveAlphaSlider(e) { + const rect = this.spectrumAlphaRect; + if (!rect) { + return; + } + const x = this.moveSlider(this.spectrumAlphaSlider, e); + if (x == null) { + return; + } + this.A = x / rect.width; + this.update(); + } + moveSlider(slider, e) { + const sliderRect = slider.getBoundingClientRect(); + const parentRect = slider.parentElement?.getBoundingClientRect(); + if (!slider || !parentRect) { + return null; + } + const offset = sliderRect.width / 2; + let x; + if (e instanceof MouseEvent) { + x = Math.floor(e.clientX - parentRect.left); + } else { + const isLeft = e.key === KeyCode2.LEFT; + const isRight = e.key === KeyCode2.RIGHT; + if (!isLeft && !isRight) { + return null; + } + e.preventDefault(); + const diff = isLeft ? -5 : 5; + x = parseFloat(slider.style.left) + offset + diff; + } + x = Math.max(x, 0); + x = Math.min(x, parentRect.width); + slider.style.left = x - offset + "px"; + return x; + } + update(suppressColorInputUpdate) { + const { A, S, B, H, _Color } = this; + const hue = H * 360; + const color = _Color.fromHSB(hue, S, B, A); + const rgbaColor = color.toRgbaString(); + const colorWithoutAlpha = _Color.fromHSB(hue, S, B); + const rgbaColorWithoutAlpha = colorWithoutAlpha.toRgbaString(); + const spectrumColor = _Color.fromHSB(hue, 1, 1); + const spectrumRgbaColor = spectrumColor.toRgbaString(); + const colorPicker = this.picker; + const existingColor = _Color.fromString(colorPicker.getValue()); + if (existingColor.toRgbaString() !== rgbaColor) { + this.colorChanged = true; + } + colorPicker.setValue(rgbaColor); + this.spectrumColor.style.backgroundColor = spectrumRgbaColor; + this.spectrumDragger.style.backgroundColor = rgbaColorWithoutAlpha; + this.spectrumHueSlider.style.backgroundColor = spectrumRgbaColor; + this.spectrumAlpha.style.setProperty( + "--ag-internal-spectrum-alpha-color-from", + _Color.fromHSB(hue, S, B, 0).toRgbaString() + ); + this.spectrumAlpha.style.setProperty("--ag-internal-spectrum-alpha-color-to", rgbaColorWithoutAlpha); + this.spectrumAlpha.style.setProperty("--ag-internal-spectrum-alpha-color", rgbaColor); + if (!suppressColorInputUpdate) { + this.colorInput.setColor(color); + } + } + /** + * @param saturation In the [0, 1] interval. + * @param brightness In the [0, 1] interval. + */ + setSpectrumValue(saturation, brightness, suppressColorInputUpdate) { + const valRect = this.spectrumValRect || this.refreshSpectrumRect(); + if (valRect == null) { + return; + } + const dragger = this.spectrumDragger; + const draggerRect = dragger.getBoundingClientRect(); + saturation = Math.max(0, saturation); + saturation = Math.min(1, saturation); + brightness = Math.max(0, brightness); + brightness = Math.min(1, brightness); + this.S = saturation; + this.B = brightness; + dragger.style.left = saturation * valRect.width - draggerRect.width / 2 + "px"; + dragger.style.top = (1 - brightness) * valRect.height - draggerRect.height / 2 + "px"; + this.update(suppressColorInputUpdate); + } + getSpectrumValue() { + const dragger = this.spectrumDragger; + const draggerRect = dragger.getBoundingClientRect(); + const x = parseFloat(dragger.style.left) + draggerRect.width / 2; + const y = parseFloat(dragger.style.top) + draggerRect.height / 2; + return { x, y }; + } + initRecentColors() { + const recentColors = sharedRecentColors; + const colorsHtmlStr = recentColors.map((color, index) => { + return ( + /* html */ + `
` + ); + }); + this.recentColors.innerHTML = colorsHtmlStr.join(""); + _setDisplayed(this.recentColors, !!recentColors.length); + } + setValue(val) { + const color = this._Color.fromString(val); + this.setColor(color, true); + } + setColor(color, updateColorInput) { + const [h, s2, b] = color.toHSB(); + this.H = (isNaN(h) ? 0 : h) / 360; + this.A = color.a; + const spectrumHueRect = this.spectrumHueRect || this.refreshHueRect(); + const spectrumAlphaRect = this.spectrumAlphaRect || this.refreshAlphaRect(); + this.spectrumHueSlider.style.left = `${(this.H - 1) * -spectrumHueRect.width - this.spectrumHueSlider.getBoundingClientRect().width / 2}px`; + this.spectrumAlphaSlider.style.left = `${this.A * spectrumAlphaRect.width - this.spectrumAlphaSlider.getBoundingClientRect().width / 2}px`; + this.setSpectrumValue(s2, b, !updateColorInput); + } + onRecentColorClick(e) { + const target = e.target; + if (!_exists2(target.id)) { + return; + } + const id = parseInt(target.id, 10); + this.setValue(sharedRecentColors[id]); + this.destroy(); + } + addRecentColor() { + const color = this._Color.fromHSB(this.H * 360, this.S, this.B, this.A); + const rgbaColor = color.toRgbaString(); + let recentColors = sharedRecentColors; + if (!this.colorChanged || recentColors[0] === rgbaColor) { + return; + } + recentColors = recentColors.filter((currentColor) => currentColor != rgbaColor); + recentColors = [rgbaColor].concat(recentColors); + if (recentColors.length > maxRecentColors) { + recentColors = recentColors.slice(0, maxRecentColors); + } + sharedRecentColors = recentColors; + } + destroy() { + this.addRecentColor(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/agStack/agDialog.ts +import { _AgComponentStub as _AgComponentStub3, _AgTabGuardFeature, _findNextFocusableElement, _setDisplayed as _setDisplayed3 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agPanel.ts +import { + RefPlaceholder as RefPlaceholder6, + _AgComponentStub as _AgComponentStub2, + _AgPositionableFeature, + _getActiveDomElement, + _getInnerHeight, + _getInnerWidth, + _isVisible, + _setDisplayed as _setDisplayed2 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agPanel.css +var agPanel_default = ".ag-panel{background-color:var(--ag-panel-background-color);display:flex;flex-direction:column;overflow:hidden;position:relative}.ag-dialog{border:var(--ag-dialog-border);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dialog-shadow);position:absolute}.ag-panel-title-bar{align-items:center;background-color:var(--ag-panel-title-bar-background-color);border-bottom:var(--ag-panel-title-bar-border);color:var(--ag-panel-title-bar-text-color);cursor:default;display:flex;flex:none;font-family:var(--ag-panel-title-bar-font-family);font-size:var(--ag-panel-title-bar-font-size);font-weight:var(--ag-panel-title-bar-font-weight);height:var(--ag-panel-title-bar-height);padding:var(--ag-spacing) var(--ag-cell-horizontal-padding)}.ag-panel-title-bar-button{cursor:pointer;:where(.ag-icon){color:var(--ag-panel-title-bar-icon-color)}}:where(.ag-ltr) .ag-panel-title-bar-button{margin-left:calc(var(--ag-spacing)*2);margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-panel-title-bar-button{margin-left:var(--ag-spacing);margin-right:calc(var(--ag-spacing)*2)}.ag-panel-title-bar-title{flex:1 1 auto}.ag-panel-title-bar-buttons{display:flex}.ag-panel-content-wrapper{display:flex;flex:1 1 auto;overflow:hidden;position:relative}:where(.ag-dragging-fill-handle) .ag-dialog,:where(.ag-dragging-range-handle) .ag-dialog{opacity:.7;pointer-events:none}"; + +// packages/ag-grid-enterprise/src/agStack/agPanel.ts +function getTemplate(cssIdentifier) { + cssIdentifier ?? (cssIdentifier = cssIdentifier || "default"); + return { + tag: "div", + cls: `ag-panel ag-${cssIdentifier}-panel`, + attrs: { tabindex: "-1" }, + children: [ + { + tag: "div", + ref: "eTitleBar", + cls: `ag-panel-title-bar ag-${cssIdentifier}-panel-title-bar ag-unselectable`, + children: [ + { + tag: "span", + ref: "eTitle", + cls: `ag-panel-title-bar-title ag-${cssIdentifier}-panel-title-bar-title` + }, + { + tag: "div", + ref: "eTitleBarButtons", + cls: `ag-panel-title-bar-buttons ag-${cssIdentifier}-panel-title-bar-buttons` + } + ] + }, + { + tag: "div", + ref: "eContentWrapper", + cls: `ag-panel-content-wrapper ag-${cssIdentifier}-panel-content-wrapper` + } + ] + }; +} +var AgPanel = class extends _AgComponentStub2 { + constructor(config) { + super(getTemplate(config.cssIdentifier)); + this.config = config; + this.closable = true; + this.eContentWrapper = RefPlaceholder6; + this.eTitleBar = RefPlaceholder6; + this.eTitleBarButtons = RefPlaceholder6; + this.eTitle = RefPlaceholder6; + this.registerCSS(agPanel_default); + } + postConstruct() { + const { + component, + closable, + hideTitleBar, + title, + minWidth = 250, + width, + minHeight = 250, + height, + centered, + popup, + x, + y, + postProcessPopupParams + } = this.config; + const beans = this.beans; + const positionableFeature = this.createManagedBean( + new _AgPositionableFeature( + this.getGui(), + { + minWidth, + width, + minHeight, + height, + centered, + x, + y, + popup, + calculateTopBuffer: () => this.positionableFeature.getHeight() - this.getBodyHeight() + } + ) + ); + this.positionableFeature = positionableFeature; + const eGui = this.getGui(); + if (component) { + this.setBodyComponent(component); + } + if (!hideTitleBar) { + if (title) { + this.setTitle(title); + } + this.setClosable(closable != null ? closable : this.closable); + } else { + _setDisplayed2(this.eTitleBar, false); + } + this.addManagedElementListeners(this.eTitleBar, { + mousedown: (e) => { + if (eGui.contains(e.relatedTarget) || eGui.contains(_getActiveDomElement(beans)) || this.eTitleBarButtons.contains(e.target)) { + e.preventDefault(); + return; + } + const focusEl = this.eContentWrapper.querySelector( + "button, [href], input, select, textarea, [tabindex]" + ); + if (focusEl) { + focusEl.focus(); + } + } + }); + if (popup && positionableFeature.isPositioned()) { + return; + } + if (this.renderComponent) { + this.renderComponent(); + } + let postProcessCallback; + if (postProcessPopupParams) { + const { type, eventSource, mouseEvent } = postProcessPopupParams; + postProcessCallback = () => beans.popupSvc?.callPostProcessPopup(postProcessPopupParams, type, eGui, eventSource, mouseEvent); + } + positionableFeature.initialisePosition(postProcessCallback); + this.eContentWrapper.style.height = "0"; + } + renderComponent() { + const eGui = this.getGui(); + eGui.focus(); + this.close = () => { + eGui.remove(); + this.destroy(); + }; + } + getHeight() { + return this.positionableFeature.getHeight(); + } + setHeight(height) { + this.positionableFeature.setHeight(height); + } + getWidth() { + return this.positionableFeature.getWidth(); + } + setWidth(width) { + this.positionableFeature.setWidth(width); + } + setClosable(closable) { + if (closable !== this.closable) { + this.closable = closable; + } + if (closable) { + const closeButtonComp = this.closeButtonComp = new _AgComponentStub2({ tag: "div", cls: "ag-button" }); + this.createBean(closeButtonComp); + const eGui = closeButtonComp.getGui(); + const child = this.beans.iconSvc.createIconNoSpan("close", this.beans); + child.classList.add("ag-panel-title-bar-button-icon"); + eGui.appendChild(child); + this.addTitleBarButton(closeButtonComp); + closeButtonComp.addManagedElementListeners(eGui, { click: this.onBtClose.bind(this) }); + } else if (this.closeButtonComp) { + const eGui = this.closeButtonComp.getGui(); + eGui.remove(); + this.closeButtonComp = this.destroyBean(this.closeButtonComp); + } + } + setBodyComponent(bodyComponent) { + bodyComponent.setParentComponent(this); + this.eContentWrapper.appendChild(bodyComponent.getGui()); + } + addTitleBarButton(button, position) { + const eTitleBarButtons = this.eTitleBarButtons; + const buttons = eTitleBarButtons.children; + const len = buttons.length; + if (position == null) { + position = len; + } + position = Math.max(0, Math.min(position, len)); + button.addCss("ag-panel-title-bar-button"); + const eGui = button.getGui(); + if (position === 0) { + eTitleBarButtons.prepend(eGui); + } else if (position === len) { + eTitleBarButtons.append(eGui); + } else { + buttons[position - 1].after(eGui); + } + button.setParentComponent(this); + } + getBodyHeight() { + return _getInnerHeight(this.eContentWrapper); + } + getBodyWidth() { + return _getInnerWidth(this.eContentWrapper); + } + setTitle(title) { + this.eTitle.innerText = title; + } + // called when user hits the 'x' in the top right + onBtClose() { + this.close(); + } + destroy() { + if (this.closeButtonComp) { + this.closeButtonComp = this.destroyBean(this.closeButtonComp); + } + const eGui = this.getGui(); + if (eGui && _isVisible(eGui)) { + this.close(); + } + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/agStack/agDialog.ts +var AgDialog = class extends AgPanel { + constructor(config, callbacks) { + super({ ...config, popup: true }); + this.callbacks = callbacks; + this.isMaximizable = false; + this.isMaximized = false; + this.maximizeListeners = []; + this.resizeListenerDestroy = null; + this.lastPosition = { + x: 0, + y: 0, + width: 0, + height: 0 + }; + } + wireBeans(beans) { + this.popupSvc = beans.popupSvc; + } + postConstruct() { + const eGui = this.getGui(); + const { movable, resizable, maximizable, modal } = this.config; + this.addCss("ag-dialog"); + super.postConstruct(); + this.tabGuardFeature = this.createManagedBean( + new _AgTabGuardFeature(this, this.callbacks?.stopPropagationCallbacks) + ); + this.tabGuardFeature.initialiseTabGuard({ + isFocusableContainer: true, + onFocusIn: () => { + this.popupSvc?.bringPopupToFront(eGui); + }, + onTabKeyDown: (e) => { + if (modal) { + return; + } + const backwards = e.shiftKey; + const nextFocusableElement = _findNextFocusableElement(this.beans, eGui, false, backwards); + if (!nextFocusableElement || this.tabGuardFeature.getTabGuardCtrl().isTabGuard(nextFocusableElement)) { + if (this.callbacks?.focusNextContainer(this.beans, backwards)) { + e.preventDefault(); + } + } + } + }); + if (movable) { + this.setMovable(movable); + } + if (maximizable) { + this.setMaximizable(maximizable); + } + if (resizable) { + this.setResizable(resizable); + } + if (!this.config.modal) { + this.callbacks?.configureFocusableContainer(this.beans, this); + } + } + setAllowFocus(allowFocus) { + this.tabGuardFeature.getTabGuardCtrl().setAllowFocus(allowFocus); + } + renderComponent() { + const eGui = this.getGui(); + const { alwaysOnTop, modal, title, afterGuiAttached } = this.config; + const translate = this.getLocaleTextFunc(); + const addPopupRes = this.popupSvc?.addPopup({ + modal, + eChild: eGui, + closeOnEsc: true, + closedCallback: this.onClosed.bind(this), + alwaysOnTop, + ariaLabel: title || translate("ariaLabelDialog", "Dialog"), + afterGuiAttached + }); + if (addPopupRes) { + this.close = addPopupRes.hideFunc; + } + } + onClosed(event) { + this.destroy(); + this.config.closedCallback?.(event); + } + setMaximized(maximized) { + if (this.isMaximizable && maximized !== this.isMaximized) { + this.toggleMaximize(); + } + } + toggleMaximize() { + const position = this.positionableFeature.getPosition(); + if (this.isMaximized) { + const { x, y, width, height } = this.lastPosition; + this.setWidth(width); + this.setHeight(height); + this.positionableFeature.offsetElement(x, y); + } else { + this.lastPosition.width = this.getWidth(); + this.lastPosition.height = this.getHeight(); + this.lastPosition.x = position.x; + this.lastPosition.y = position.y; + this.positionableFeature.offsetElement(0, 0); + this.setHeight("100%"); + this.setWidth("100%"); + } + this.isMaximized = !this.isMaximized; + this.refreshMaximizeIcon(); + } + refreshMaximizeIcon() { + _setDisplayed3(this.maximizeIcon, !this.isMaximized); + _setDisplayed3(this.minimizeIcon, this.isMaximized); + } + clearMaximizebleListeners() { + if (this.maximizeListeners.length) { + for (const destroyListener of this.maximizeListeners) { + destroyListener(); + } + this.maximizeListeners.length = 0; + } + if (this.resizeListenerDestroy) { + this.resizeListenerDestroy(); + this.resizeListenerDestroy = null; + } + } + destroy() { + this.maximizeButtonComp = this.destroyBean(this.maximizeButtonComp); + this.clearMaximizebleListeners(); + super.destroy(); + } + setResizable(resizable) { + this.positionableFeature.setResizable(resizable); + } + setMovable(movable) { + this.positionableFeature.setMovable(movable, this.eTitleBar); + } + setMaximizable(maximizable) { + if (!maximizable) { + this.clearMaximizebleListeners(); + if (this.maximizeButtonComp) { + this.destroyBean(this.maximizeButtonComp); + this.maximizeButtonComp = this.maximizeIcon = this.minimizeIcon = void 0; + } + return; + } + const eTitleBar = this.eTitleBar; + if (!eTitleBar || maximizable === this.isMaximizable) { + return; + } + this.isMaximizable = maximizable; + const maximizeButtonComp = this.buildMaximizeAndMinimizeElements(); + this.refreshMaximizeIcon(); + maximizeButtonComp.addManagedElementListeners(maximizeButtonComp.getGui(), { + click: this.toggleMaximize.bind(this) + }); + this.addTitleBarButton(maximizeButtonComp, 0); + this.maximizeListeners.push( + ...this.addManagedElementListeners(eTitleBar, { + dblclick: this.toggleMaximize.bind(this) + }) + ); + [this.resizeListenerDestroy] = this.addManagedListeners(this.positionableFeature, { + resize: () => { + this.isMaximized = false; + this.refreshMaximizeIcon(); + } + }); + } + buildMaximizeAndMinimizeElements() { + const maximizeButtonComp = this.maximizeButtonComp = this.createBean(new _AgComponentStub3({ tag: "div", cls: "ag-dialog-button" })); + const eGui = maximizeButtonComp.getGui(); + const iconSvc = this.beans.iconSvc; + this.maximizeIcon = iconSvc.createIconNoSpan("maximize"); + eGui.appendChild(this.maximizeIcon); + this.maximizeIcon.classList.add("ag-panel-title-bar-button-icon"); + this.minimizeIcon = iconSvc.createIconNoSpan("minimize"); + eGui.appendChild(this.minimizeIcon); + this.minimizeIcon.classList.add("ag-panel-title-bar-button-icon"); + return maximizeButtonComp; + } +}; + +// packages/ag-grid-enterprise/src/agStack/agColorPicker.ts +var AgColorPicker = class extends AgPickerField { + constructor(config) { + super({ + pickerAriaLabelKey: "ariaLabelColorPicker", + pickerAriaLabelValue: "Color Picker", + pickerType: "ag-list", + className: "ag-color-picker", + pickerIcon: "chartsColorPicker", + ...config + }); + } + postConstruct() { + this.eDisplayFieldColor = _createElement({ + tag: "span", + cls: "ag-color-picker-color" + }); + this.eDisplayFieldText = _createElement({ + tag: "span", + cls: "ag-color-picker-value" + }); + this.eDisplayField.append(this.eDisplayFieldColor, this.eDisplayFieldText); + super.postConstruct(); + if (this.value) { + this.setValue(this.value); + } + } + createPickerComponent() { + const eGuiRect = this.eWrapper.getBoundingClientRect(); + const parentRect = this.beans.popupSvc.getParentRect(); + const colorDialog = this.createBean( + new AgDialog( + { + closable: false, + modal: true, + hideTitleBar: true, + minWidth: 190, + width: 190, + height: 250, + x: eGuiRect.right - parentRect.left - 190, + y: eGuiRect.top - parentRect.top - 250 - (this.config.pickerGap ?? 0), + postProcessPopupParams: { + type: "colorPicker", + eventSource: this.eWrapper + } + }, + this.config.dialogCallbacks + ) + ); + return colorDialog; + } + renderAndPositionPicker() { + const pickerComponent = this.pickerComponent; + const colorPanel = this.createBean( + new AgColorPanel({ picker: this }) + ); + pickerComponent.addCss("ag-color-dialog"); + colorPanel.addDestroyFunc(() => { + if (pickerComponent.isAlive()) { + this.destroyBean(pickerComponent); + } + }); + pickerComponent.setParentComponent(this); + pickerComponent.setBodyComponent(colorPanel); + colorPanel.setValue(this.getValue()); + colorPanel.getGui().focus(); + pickerComponent.addDestroyFunc(() => { + if (!this.isDestroyingPicker) { + this.beforeHidePicker(); + this.isDestroyingPicker = true; + if (colorPanel.isAlive()) { + this.destroyBean(colorPanel); + } + if (this.isAlive()) { + this.getFocusableElement().focus(); + } + } else { + this.isDestroyingPicker = false; + } + }); + return () => this.pickerComponent?.close(); + } + setValue(color) { + if (this.value === color) { + return this; + } + this.eDisplayFieldColor.style.backgroundColor = color; + this.eDisplayFieldText.textContent = this.beans.agChartsExports._Util.Color.fromString( + color + ).toHexString().toUpperCase(); + return super.setValue(color); + } + getValue() { + return this.value; + } +}; +var AgColorPickerSelector = { + selector: "AG-COLOR-PICKER", + component: AgColorPicker +}; + +// packages/ag-grid-enterprise/src/agStack/agMenuList.ts +import { AgPromise, KeyCode as KeyCode5, _AgTabGuardComp as _AgTabGuardComp3, _createAgElement as _createAgElement2, _last as _last2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agMenuItemComponent.ts +import { + KeyCode as KeyCode4, + _AgBeanStub as _AgBeanStub2, + _createElement as _createElement2, + _setAriaDisabled, + _setAriaExpanded, + _setAriaHasPopup, + _setAriaRole as _setAriaRole2 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agMenuPanel.ts +import { KeyCode as KeyCode3, _AgTabGuardComp as _AgTabGuardComp2 } from "ag-grid-community"; +var AgMenuPanel = class extends _AgTabGuardComp2 { + constructor(wrappedComponent) { + super(); + this.setTemplateFromElement(wrappedComponent.getGui(), void 0, void 0, true); + } + postConstruct() { + this.initialiseTabGuard({ + onTabKeyDown: (e) => this.onTabKeyDown(e), + handleKeyDown: (e) => this.handleKeyDown(e) + }); + } + handleKeyDown(e) { + if (e.key === KeyCode3.ESCAPE) { + this.closePanel(); + } + } + onTabKeyDown(e) { + if (e.defaultPrevented) { + return; + } + this.closePanel(); + e.preventDefault(); + } + closePanel() { + const menuItem = this.parentComponent; + menuItem.closeSubMenu(); + setTimeout(() => menuItem.getGui().focus(), 0); + } +}; + +// packages/ag-grid-enterprise/src/agStack/agMenuItemComponent.ts +var AgMenuItemComponent = class extends _AgBeanStub2 { + constructor(callbacks) { + super(); + this.callbacks = callbacks; + this.ACTIVATION_DELAY = 80; + this.isActive = false; + this.subMenuIsOpen = false; + this.subMenuIsOpening = false; + this.suppressRootStyles = true; + this.suppressAria = true; + this.suppressFocus = true; + } + init(params) { + const { menuItemDef, isAnotherSubMenuOpen, level, childComponent, contextParams } = params; + this.params = params.menuItemDef; + this.level = level; + this.isAnotherSubMenuOpen = isAnotherSubMenuOpen; + this.childComponent = childComponent; + this.contextParams = contextParams; + this.cssClassPrefix = this.params.menuItemParams?.cssClassPrefix ?? "ag-menu-option"; + return this.callbacks.getMenuItemComp(this.beans, this.params, { + ...menuItemDef, + level, + isAnotherSubMenuOpen, + openSubMenu: (activateFirstItem) => this.openSubMenu(activateFirstItem), + closeSubMenu: () => this.closeSubMenu(), + closeMenu: (event) => this.closeMenu(event), + updateTooltip: (tooltip, shouldDisplayTooltip) => this.refreshTooltip(tooltip, shouldDisplayTooltip), + onItemActivated: () => this.onItemActivated() + }).then((comp) => { + if (!comp) { + return; + } + this.menuItemComp = comp; + const configureDefaults = comp.configureDefaults?.(); + if (configureDefaults) { + this.configureDefaults(configureDefaults === true ? void 0 : configureDefaults); + } + }); + } + addListeners(eGui, params) { + if (!params?.suppressClick) { + this.addManagedElementListeners(eGui, { click: (e) => this.onItemSelected(e) }); + } + if (!params?.suppressKeyboardSelect) { + this.addManagedElementListeners(eGui, { + keydown: (e) => { + if (e.key === KeyCode4.ENTER || e.key === KeyCode4.SPACE) { + e.preventDefault(); + this.onItemSelected(e); + } + } + }); + } + if (!params?.suppressMouseDown) { + this.addManagedElementListeners(eGui, { + mousedown: (e) => { + e.stopPropagation(); + e.preventDefault(); + } + }); + } + if (!params?.suppressMouseOver) { + this.addManagedElementListeners(eGui, { + mouseenter: () => this.onMouseEnter(), + mouseleave: () => this.onMouseLeave() + }); + } + } + isDisabled() { + return !!this.params.disabled; + } + openSubMenu(activateFirstItem = false, event) { + this.closeSubMenu(); + if (!this.params.subMenu) { + return; + } + this.subMenuIsOpening = true; + const ePopup = _createElement2({ tag: "div", cls: "ag-menu", role: "presentation" }); + this.eSubMenuGui = ePopup; + let destroySubMenu; + let afterGuiAttached = () => { + this.subMenuIsOpening = false; + }; + if (this.childComponent) { + const menuPanel = this.createBean( + new AgMenuPanel(this.childComponent) + ); + menuPanel.setParentComponent(this); + const subMenuGui = menuPanel.getGui(); + const mouseEvent = "mouseenter"; + const mouseEnterListener = () => this.cancelDeactivate(); + subMenuGui.addEventListener(mouseEvent, mouseEnterListener); + destroySubMenu = () => { + subMenuGui.removeEventListener(mouseEvent, mouseEnterListener); + this.destroyBean(menuPanel); + }; + ePopup.appendChild(subMenuGui); + if (this.childComponent.afterGuiAttached) { + afterGuiAttached = () => { + this.childComponent.afterGuiAttached(); + this.subMenuIsOpening = false; + }; + } + } else if (this.params.subMenu) { + const childMenu = this.createBean( + new AgMenuList(this.level + 1, this.contextParams, this.callbacks) + ); + childMenu.setParentComponent(this); + childMenu.addMenuItems(this.params.subMenu); + ePopup.appendChild(childMenu.getGui()); + this.addManagedListeners(childMenu, { closeMenu: (e) => this.dispatchLocalEvent(e) }); + childMenu.addGuiEventListener("mouseenter", () => this.cancelDeactivate()); + destroySubMenu = () => this.destroyBean(childMenu); + if (activateFirstItem) { + afterGuiAttached = () => { + childMenu.activateFirstItem(); + this.subMenuIsOpening = false; + }; + } + } + const popupSvc = this.beans.popupSvc; + const positionCallback = () => { + const eventSource = this.eGui; + popupSvc?.positionPopupForMenu({ + eventSource, + ePopup, + event: event instanceof MouseEvent ? event : void 0, + additionalParams: this.callbacks.getPostProcessPopupParams(this.contextParams) + }); + }; + const translate = this.getLocaleTextFunc(); + const addPopupRes = popupSvc?.addPopup({ + modal: true, + eChild: ePopup, + positionCallback, + anchorToElement: this.eGui, + ariaLabel: translate("ariaLabelSubMenu", "SubMenu"), + afterGuiAttached + }); + this.subMenuIsOpen = true; + this.setAriaExpanded(true); + this.hideSubMenu = () => { + if (addPopupRes) { + addPopupRes.hideFunc(); + } + this.subMenuIsOpen = false; + this.setAriaExpanded(false); + destroySubMenu(); + this.menuItemComp.setExpanded?.(false); + this.eSubMenuGui = void 0; + }; + this.menuItemComp.setExpanded?.(true); + } + setAriaExpanded(expanded) { + if (!this.suppressAria) { + _setAriaExpanded(this.eGui, expanded); + } + } + closeSubMenu() { + if (!this.hideSubMenu) { + return; + } + this.hideSubMenu(); + this.hideSubMenu = null; + this.setAriaExpanded(false); + } + isSubMenuOpen() { + return this.subMenuIsOpen; + } + isSubMenuOpening() { + return this.subMenuIsOpening; + } + activate(openSubMenu, fromKeyNav) { + this.cancelActivate(); + if (this.params.disabled && !fromKeyNav) { + return; + } + this.isActive = true; + if (!this.suppressRootStyles) { + this.eGui.classList.add(`${this.cssClassPrefix}-active`); + } + this.menuItemComp.setActive?.(true); + if (!this.suppressFocus) { + this.callbacks.preserveRangesWhile(this.beans, () => this.eGui.focus({ preventScroll: !fromKeyNav })); + } + if (openSubMenu && this.params.subMenu) { + window.setTimeout(() => { + if (this.isAlive() && this.isActive) { + this.openSubMenu(); + } + }, 300); + } + this.onItemActivated(); + } + deactivate() { + this.cancelDeactivate(); + if (!this.suppressRootStyles) { + this.eGui.classList.remove(`${this.cssClassPrefix}-active`); + } + this.menuItemComp.setActive?.(false); + this.isActive = false; + if (this.subMenuIsOpen) { + this.closeSubMenu(); + } + } + getGui() { + return this.menuItemComp.getGui(); + } + getParentComponent() { + return this.parentComponent; + } + setParentComponent(component) { + this.parentComponent = component; + } + getSubMenuGui() { + return this.eSubMenuGui; + } + onItemSelected(event) { + this.menuItemComp.select?.(); + if (this.params.action) { + this.beans.frameworkOverrides.wrapOutgoing( + () => this.params.action( + this.gos.addCommon({ + ...this.contextParams + }) + ) + ); + } else { + this.openSubMenu(event && event.type === "keydown", event); + } + if (this.params.subMenu && !this.params.action || this.params.suppressCloseOnSelect) { + return; + } + this.closeMenu(event); + } + closeMenu(event) { + const e = { + type: "closeMenu" + }; + if (event) { + if (event instanceof MouseEvent) { + e.mouseEvent = event; + } else { + e.keyboardEvent = event; + } + } + this.dispatchLocalEvent(e); + } + onItemActivated() { + const event = { + type: "menuItemActivated", + menuItem: this + }; + this.dispatchLocalEvent(event); + } + cancelActivate() { + if (this.activateTimeoutId) { + window.clearTimeout(this.activateTimeoutId); + this.activateTimeoutId = 0; + } + } + cancelDeactivate() { + if (this.deactivateTimeoutId) { + window.clearTimeout(this.deactivateTimeoutId); + this.deactivateTimeoutId = 0; + } + } + onMouseEnter() { + this.cancelDeactivate(); + if (this.isAnotherSubMenuOpen()) { + this.activateTimeoutId = window.setTimeout(() => this.activate(true), this.ACTIVATION_DELAY); + } else { + this.activate(true); + } + } + onMouseLeave() { + this.cancelActivate(); + if (this.isSubMenuOpen()) { + this.deactivateTimeoutId = window.setTimeout(() => this.deactivate(), this.ACTIVATION_DELAY); + } else { + this.deactivate(); + } + } + refreshRootElementGui(suppressRootStyles) { + let eGui = this.menuItemComp.getGui(); + const { + cssClassPrefix, + params: { cssClasses, disabled } + } = this; + const rootElement = this.menuItemComp.getRootElement?.(); + if (rootElement) { + if (!suppressRootStyles) { + eGui.classList.add("ag-menu-option-custom"); + } + eGui = rootElement; + } + this.suppressRootStyles = !!suppressRootStyles; + if (!this.suppressRootStyles) { + eGui.classList.add(cssClassPrefix); + for (const it of cssClasses ?? []) { + eGui.classList.add(it); + } + if (disabled) { + eGui.classList.add(`${cssClassPrefix}-disabled`); + } + } + return eGui; + } + applyAriaProperties(eGui) { + const { + params: { checked, subMenu, subMenuRole, disabled } + } = this; + const hasCheck = checked != null; + _setAriaRole2(eGui, hasCheck ? "menuitemcheckbox" : "menuitem"); + if (subMenu) { + _setAriaHasPopup(eGui, subMenuRole ?? "menu"); + } + if (disabled) { + _setAriaDisabled(eGui, true); + } + } + configureDefaults(configParams) { + if (!this.menuItemComp) { + setTimeout(() => this.configureDefaults(configParams)); + return; + } + const { suppressRootStyles, suppressTooltip, suppressAria, suppressTabIndex, suppressFocus } = configParams || {}; + const { + params: { tooltip, disabled } + } = this; + const eGui = this.eGui = this.refreshRootElementGui(!!suppressRootStyles); + this.suppressAria = !!suppressAria; + if (!suppressAria) { + this.applyAriaProperties(eGui); + } + if (!suppressTabIndex) { + eGui.setAttribute("tabindex", "-1"); + } + if (!suppressTooltip) { + this.refreshTooltip(tooltip); + } + if (!disabled) { + this.addListeners(eGui, configParams); + } + this.suppressFocus = !!suppressFocus; + } + refreshTooltip(tooltip, shouldDisplayTooltip) { + this.tooltip = tooltip; + this.tooltipFeature = this.destroyBean(this.tooltipFeature); + if (!tooltip || !this.menuItemComp) { + return; + } + const tooltipFeature = this.beans.registry.createDynamicBean( + "tooltipFeature", + false, + { + getGui: () => this.getGui(), + getTooltipValue: () => this.tooltip, + getLocation: () => "menu", + shouldDisplayTooltip + } + ); + if (tooltipFeature) { + this.tooltipFeature = this.createBean(tooltipFeature); + } + } + destroy() { + this.tooltipFeature = this.destroyBean(this.tooltipFeature); + this.menuItemComp?.destroy?.(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/agStack/agMenuList.ts +var AgMenuList = class extends _AgTabGuardComp3 { + constructor(level = 0, menuActionParams, callbacks) { + super({ tag: "div", cls: "ag-menu-list", role: "menu" }); + this.level = level; + this.menuActionParams = menuActionParams; + this.callbacks = callbacks; + this.menuItems = []; + } + postConstruct() { + this.initialiseTabGuard({ + onTabKeyDown: (e) => this.onTabKeyDown(e), + handleKeyDown: (e) => this.callbacks.preserveRangesWhile(this.beans, () => this.handleKeyDown(e)), + onFocusIn: (e) => this.handleFocusIn(e), + onFocusOut: (e) => this.handleFocusOut(e) + }); + } + onTabKeyDown(e) { + const parent = this.getParentComponent(); + const isManaged = parent?.getGui()?.classList.contains("ag-focus-managed"); + if (!isManaged) { + e.preventDefault(); + } + if (e.shiftKey) { + this.closeIfIsChild(e); + } + } + handleKeyDown(e) { + switch (e.key) { + case KeyCode5.UP: + case KeyCode5.RIGHT: + case KeyCode5.DOWN: + case KeyCode5.LEFT: + e.preventDefault(); + this.handleNavKey(e.key); + break; + case KeyCode5.ESCAPE: + if (this.closeIfIsChild()) { + this.callbacks.stopPropagationCallbacks.stopPropagation(e); + } + break; + } + } + handleFocusIn(e) { + const oldFocusedElement = e.relatedTarget; + if (!this.tabGuardFeature.getTabGuardCtrl().isTabGuard(oldFocusedElement) && (this.getGui().contains(oldFocusedElement) || this.activeMenuItem?.getSubMenuGui()?.contains(oldFocusedElement))) { + return; + } + if (this.activeMenuItem) { + this.activeMenuItem.activate(); + } else { + this.activateFirstItem(); + } + } + handleFocusOut(e) { + const newFocusedElement = e.relatedTarget; + if (!this.activeMenuItem || this.getGui().contains(newFocusedElement) || this.activeMenuItem.getSubMenuGui()?.contains(newFocusedElement)) { + return; + } + if (!this.activeMenuItem.isSubMenuOpening()) { + this.activeMenuItem.deactivate(); + } + } + clearActiveItem() { + if (this.activeMenuItem) { + this.activeMenuItem.deactivate(); + this.activeMenuItem = null; + } + } + addMenuItems(menuItems) { + if (menuItems == null) { + return; + } + AgPromise.all( + menuItems.map((menuItemOrString) => { + if (menuItemOrString === "separator") { + return AgPromise.resolve({ eGui: this.createSeparator() }); + } else if (typeof menuItemOrString === "string") { + this.callbacks.warnNoItem?.(menuItemOrString); + return AgPromise.resolve({ eGui: null }); + } else { + return this.addItem(menuItemOrString); + } + }) + ).then((elements) => { + for (const element of elements ?? []) { + if (element?.eGui) { + this.appendChild(element.eGui); + if (element.comp) { + this.menuItems.push(element.comp); + } + } + } + }); + } + addItem(menuItemDef) { + const menuItem = this.createManagedBean( + new AgMenuItemComponent(this.callbacks) + ); + return menuItem.init({ + menuItemDef, + isAnotherSubMenuOpen: () => this.menuItems.some((m) => m.isSubMenuOpen()), + level: this.level, + contextParams: this.menuActionParams + }).then(() => { + menuItem.setParentComponent(this); + this.addManagedListeners(menuItem, { + closeMenu: (event) => { + this.dispatchLocalEvent(event); + }, + menuItemActivated: (event) => { + if (this.activeMenuItem && this.activeMenuItem !== event.menuItem) { + this.activeMenuItem.deactivate(); + } + this.activeMenuItem = event.menuItem; + } + }); + return { + comp: menuItem, + eGui: menuItem.getGui() + }; + }); + } + activateFirstItem() { + const item = this.menuItems.filter((currentItem) => !currentItem.isDisabled())[0]; + if (!item) { + return; + } + item.activate(); + } + createSeparator() { + const part = { tag: "div", cls: "ag-menu-separator-part" }; + return _createAgElement2({ + tag: "div", + cls: "ag-menu-separator", + attrs: { + "aria-hidden": "true" + }, + children: [part, part, part, part] + }); + } + handleNavKey(key) { + switch (key) { + case KeyCode5.UP: + case KeyCode5.DOWN: { + const nextItem = this.findNextItem(key === KeyCode5.UP); + if (nextItem && nextItem !== this.activeMenuItem) { + nextItem.activate(false, true); + } + return; + } + } + const left = this.gos.get("enableRtl") ? KeyCode5.RIGHT : KeyCode5.LEFT; + if (key === left) { + this.closeIfIsChild(); + } else { + this.openChild(); + } + } + closeIfIsChild(e) { + const parentItem = this.getParentComponent(); + if (parentItem && parentItem instanceof AgMenuItemComponent) { + if (e) { + e.preventDefault(); + } + parentItem.closeSubMenu(); + parentItem.getGui().focus(); + return true; + } + return false; + } + openChild() { + if (this.activeMenuItem) { + this.activeMenuItem.openSubMenu(true); + } + } + findNextItem(up) { + const items = [...this.menuItems]; + if (!items.length) { + return; + } + if (!this.activeMenuItem) { + return up ? _last2(items) : items[0]; + } + if (up) { + items.reverse(); + } + let nextItem; + let foundCurrent = false; + for (const item of items) { + if (!foundCurrent) { + if (item === this.activeMenuItem) { + foundCurrent = true; + } + continue; + } + nextItem = item; + break; + } + if (foundCurrent && !nextItem) { + return items[0]; + } + return nextItem || this.activeMenuItem; + } + destroy() { + this.clearActiveItem(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/agStack/agContextMenuService.ts +import { + _AgBeanStub as _AgBeanStub3, + _AgComponentStub as _AgComponentStub4, + _anchorElementToMouseMoveEvent, + _createAgElement as _createAgElement3, + _focusInto, + _getPageBody, + _getRootNode, + _isPromise, + _isVisible as _isVisible2 +} from "ag-grid-community"; +var CSS_MENU = "ag-menu"; +var CSS_CONTEXT_MENU_LOADING_ICON = "ag-context-menu-loading-icon"; +var AgContextMenuService = class extends _AgBeanStub3 { + constructor(params) { + super(); + this.params = params; + this.destroyLoadingSpinner = null; + this.lastPromise = 0; + } + hideActiveMenu() { + this.destroyBean(this.activeMenu); + } + showMenu(menuActionParams, mouseEvent, anchorToElement) { + const { getMenuItems, shouldBlockMenuOpen: shouldBlockMenu } = this.params; + const menuItems = getMenuItems(menuActionParams, mouseEvent); + if (_isPromise(menuItems)) { + const currentPromise = this.lastPromise + 1; + this.lastPromise = currentPromise; + if (!this.destroyLoadingSpinner) { + this.createLoadingIcon(mouseEvent); + } + menuItems.then((menuItems2) => { + if (this.lastPromise !== currentPromise) { + return; + } + const { target } = mouseEvent; + const isFromFakeEvent = !target; + const shouldShowMenu = ( + // check if there are actual menu items to be displayed + menuItems2?.length && // check if the element that triggered the context menu was removed from the DOM + (isFromFakeEvent || _isVisible2(target)) && !shouldBlockMenu?.() + ); + if (shouldShowMenu) { + this.createContextMenu({ menuItems: menuItems2, menuActionParams, mouseEvent, anchorToElement }); + } + this.destroyLoadingSpinner?.(); + }); + return true; + } + if (!menuItems?.length) { + return false; + } + this.createContextMenu({ menuItems, menuActionParams, mouseEvent, anchorToElement }); + return true; + } + createLoadingIcon(mouseEvent) { + const { beans } = this; + const translate = this.getLocaleTextFunc(); + const loadingIcon = beans.iconSvc.createIconNoSpan("loadingMenuItems"); + const wrapperEl = _createAgElement3({ tag: "div", cls: CSS_CONTEXT_MENU_LOADING_ICON }); + wrapperEl.appendChild(loadingIcon); + const rootNode = _getRootNode(beans); + const targetEl = _getPageBody(beans); + if (!targetEl) { + return; + } + targetEl.appendChild(wrapperEl); + beans.ariaAnnounce?.announceValue( + translate("ariaLabelLoadingContextMenu", "Loading Context Menu"), + "contextmenu" + ); + beans.environment.applyThemeClasses(wrapperEl); + _anchorElementToMouseMoveEvent(wrapperEl, mouseEvent, beans); + const mouseMoveCallback = (e) => { + _anchorElementToMouseMoveEvent(wrapperEl, e, beans); + }; + rootNode.addEventListener("mousemove", mouseMoveCallback); + this.destroyLoadingSpinner = () => { + rootNode.removeEventListener("mousemove", mouseMoveCallback); + wrapperEl.remove(); + this.destroyLoadingSpinner = null; + }; + } + createContextMenu(params) { + const { + mapMenuItems, + menuItemCallbacks, + beforeMenuOpen, + onMenuClose, + afterMenuDestroyed, + onVisibleChanged, + onMenuOpen + } = this.params; + const { menuItems, menuActionParams, mouseEvent, anchorToElement } = params; + const popupSvc = this.beans.popupSvc; + const getMenuItems = mapMenuItems ? (getGui) => mapMenuItems(menuItems, menuActionParams, getGui) : () => menuItems; + const menu = new ContextMenu(getMenuItems, menuActionParams, menuItemCallbacks); + this.createBean(menu); + const eMenuGui = menu.getGui(); + beforeMenuOpen?.(menuActionParams); + const positionParams = { + additionalParams: menuItemCallbacks.getPostProcessPopupParams(menuActionParams), + type: "contextMenu", + mouseEvent, + ePopup: eMenuGui, + // move one pixel away so that accidentally double clicking + // won't show the browser's contextmenu + nudgeY: 1 + }; + const translate = this.getLocaleTextFunc(); + const addPopupRes = popupSvc?.addPopup({ + modal: true, + eChild: eMenuGui, + closeOnEsc: true, + closedCallback: (e) => { + menuItemCallbacks.preserveRangesWhile(this.beans, () => { + onMenuClose?.(); + this.destroyBean(menu); + afterMenuDestroyed?.(); + onVisibleChanged?.(false, e === void 0 ? "api" : "ui"); + }); + }, + click: mouseEvent, + positionCallback: () => { + const isRtl = this.gos.get("enableRtl"); + popupSvc?.positionPopupUnderMouseEvent({ + ...positionParams, + nudgeX: isRtl ? (eMenuGui.offsetWidth + 1) * -1 : 1 + }); + }, + // so when browser is scrolled down, or grid is scrolled, context menu stays with cell + anchorToElement, + ariaLabel: translate("ariaLabelContextMenu", "Context Menu") + }); + if (addPopupRes) { + onMenuOpen?.(); + menu.afterGuiAttached({ container: "contextMenu", hidePopup: addPopupRes.hideFunc }); + } + if (this.activeMenu) { + this.hideActiveMenu(); + } + this.activeMenu = menu; + menu.addEventListener("destroyed", () => { + if (this.activeMenu === menu) { + this.activeMenu = null; + } + }); + if (addPopupRes) { + menu.addEventListener( + "closeMenu", + (e) => addPopupRes.hideFunc({ + mouseEvent: e.mouseEvent ?? void 0, + keyboardEvent: e.keyboardEvent ?? void 0, + forceHide: true + }) + ); + } + const isApi = mouseEvent && mouseEvent instanceof MouseEvent && mouseEvent.type === "mousedown"; + onVisibleChanged?.(true, isApi ? "api" : "ui"); + } + destroy() { + this.destroyLoadingSpinner?.(); + super.destroy(); + } +}; +var ContextMenu = class extends _AgComponentStub4 { + constructor(getMenuItems, menuActionParams, callbacks) { + super({ tag: "div", cls: CSS_MENU, role: "presentation" }); + this.getMenuItems = getMenuItems; + this.menuActionParams = menuActionParams; + this.callbacks = callbacks; + this.menuList = null; + } + postConstruct() { + const menuList = this.createManagedBean( + new AgMenuList(0, this.menuActionParams, this.callbacks) + ); + const menuItemsMapped = this.getMenuItems(() => this.getGui()); + menuList.addMenuItems(menuItemsMapped); + this.appendChild(menuList); + this.menuList = menuList; + menuList.addEventListener("closeMenu", (e) => this.dispatchLocalEvent(e)); + } + afterGuiAttached({ hidePopup }) { + if (hidePopup) { + this.addDestroyFunc(hidePopup); + } + const menuList = this.menuList; + if (menuList) { + this.callbacks.preserveRangesWhile(this.beans, () => _focusInto(menuList.getGui())); + } + } +}; + +// packages/ag-grid-enterprise/src/agStack/agMenuItemRenderer.ts +import { + _AgComponentStub as _AgComponentStub5, + _createAgElement as _createAgElement4, + _isNodeOrElement, + _setAriaChecked, + _setAriaExpanded as _setAriaExpanded2 +} from "ag-grid-community"; +var AgMenuItemRenderer = class extends _AgComponentStub5 { + constructor(callbacks) { + super({ tag: "div" }); + this.callbacks = callbacks; + } + init(params) { + this.params = params; + this.cssClassPrefix = this.params.cssClassPrefix ?? "ag-menu-option"; + this.addAriaAttributes(); + this.addIcon(); + this.addName(); + this.addShortcut(); + this.addSubMenu(); + } + configureDefaults() { + return true; + } + addAriaAttributes() { + const { checked, subMenu } = this.params; + const eGui = this.getGui(); + if (checked) { + _setAriaChecked(eGui, checked); + } + if (subMenu) { + _setAriaExpanded2(eGui, false); + } + } + addIcon() { + if (this.params.isCompact) { + return; + } + const iconWrapper = _createAgElement4({ + tag: "span", + ref: "eIcon", + cls: `${this.getClassName("part")} ${this.getClassName("icon")}`, + role: "presentation" + }); + const { checked, icon } = this.params; + if (checked) { + iconWrapper.appendChild(this.beans.iconSvc.createIconNoSpan("check")); + } else if (icon) { + if (_isNodeOrElement(icon)) { + iconWrapper.appendChild(icon); + } else if (typeof icon === "string") { + iconWrapper.innerHTML = icon; + } else { + this.callbacks?.warnNoIcon?.(); + } + } + this.getGui().appendChild(iconWrapper); + } + addName() { + const name = _createAgElement4({ + tag: "span", + ref: "eName", + cls: `${this.getClassName("part")} ${this.getClassName("text")}`, + children: this.params.name || "" + }); + this.getGui().appendChild(name); + } + addShortcut() { + if (this.params.isCompact) { + return; + } + const shortcut = _createAgElement4({ + tag: "span", + ref: "eShortcut", + cls: `${this.getClassName("part")} ${this.getClassName("shortcut")}`, + children: this.params.shortcut || "" + }); + this.getGui().appendChild(shortcut); + } + addSubMenu() { + const pointer = _createAgElement4({ + tag: "span", + ref: "ePopupPointer", + cls: `${this.getClassName("part")} ${this.getClassName("popup-pointer")}` + }); + const eGui = this.getGui(); + if (this.params.subMenu) { + const iconName = this.gos.get("enableRtl") ? "subMenuOpenRtl" : "subMenuOpen"; + pointer.appendChild(this.beans.iconSvc.createIconNoSpan(iconName)); + } + eGui.appendChild(pointer); + } + getClassName(suffix) { + return `${this.cssClassPrefix}-${suffix}`; + } +}; + +// packages/ag-grid-enterprise/src/agStack/agTabbedLayout.ts +import { + KeyCode as KeyCode6, + RefPlaceholder as RefPlaceholder7, + _AgTabGuardComp as _AgTabGuardComp4, + _clearElement, + _createAgElement as _createAgElement5, + _findNextFocusableElement as _findNextFocusableElement2, + _focusInto as _focusInto2, + _getActiveDomElement as _getActiveDomElement2, + _getDocument as _getDocument2, + _isKeyboardMode, + _setAriaLabel as _setAriaLabel2, + _setAriaRole as _setAriaRole3 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/misc/enterpriseFocusUtils.ts +import { TabGuardClassNames, _FOCUS_MANAGED_CLASS, _findFocusableElements } from "ag-grid-community"; +function findFocusableElementBeforeTabGuard(rootNode, referenceElement) { + if (!referenceElement) { + return null; + } + const focusableElements = _findFocusableElements(rootNode); + const referenceIndex = focusableElements.indexOf(referenceElement); + if (referenceIndex === -1) { + return null; + } + let lastTabGuardIndex = -1; + for (let i = referenceIndex - 1; i >= 0; i--) { + if (focusableElements[i].classList.contains(TabGuardClassNames.TAB_GUARD_TOP)) { + lastTabGuardIndex = i; + break; + } + } + if (lastTabGuardIndex <= 0) { + return null; + } + return focusableElements[lastTabGuardIndex - 1]; +} +function isTargetUnderManagedComponent(rootNode, target) { + if (!target) { + return false; + } + const managedContainers = rootNode.querySelectorAll(`.${_FOCUS_MANAGED_CLASS}`); + if (!managedContainers.length) { + return false; + } + for (let i = 0; i < managedContainers.length; i++) { + if (managedContainers[i].contains(target)) { + return true; + } + } + return false; +} + +// packages/ag-grid-enterprise/src/agStack/agTabbedLayout.ts +function getTabbedLayoutTemplate(cssClass) { + return { + tag: "div", + cls: `ag-tabs ${cssClass}`, + children: [ + { tag: "div", ref: "eHeader" }, + { + tag: "div", + ref: "eBody", + role: "presentation", + cls: "ag-tabs-body" + cssClass ? ` ${cssClass}-body` : "" + } + ] + }; +} +var AgTabbedLayout = class extends _AgTabGuardComp4 { + constructor(params) { + super(getTabbedLayoutTemplate(params.cssClass)); + this.eHeader = RefPlaceholder7; + this.eBody = RefPlaceholder7; + this.items = []; + this.tabbedItemScrollMap = /* @__PURE__ */ new Map(); + this.params = params; + } + postConstruct() { + this.setupHeader(); + if (this.params.items) { + for (const item of this.params.items) { + this.addItem(item); + } + } + this.initialiseTabGuard({ + onTabKeyDown: this.onTabKeyDown.bind(this), + handleKeyDown: this.handleKeyDown.bind(this), + focusInnerElement: this.focusInnerElement.bind(this), + focusTrapActive: true + }); + this.addDestroyFunc(() => this.activeItem?.tabbedItem?.afterDetachedCallback?.()); + } + setupHeader() { + const { enableCloseButton, cssClass } = this.params; + const addCssClasses = (el, suffix) => { + el.classList.add(`ag-tabs-${suffix}`); + if (cssClass) { + el.classList.add(`${cssClass}-${suffix}`); + } + }; + if (enableCloseButton) { + this.setupCloseButton(addCssClasses); + this.eTabHeader = _createAgElement5({ tag: "div", role: "presentation" }); + addCssClasses(this.eHeader, "header-wrapper"); + this.eHeader.appendChild(this.eTabHeader); + } else { + this.eTabHeader = this.eHeader; + } + _setAriaRole3(this.eTabHeader, "tablist"); + addCssClasses(this.eTabHeader, "header"); + } + setupCloseButton(addCssClasses) { + const eCloseButton = _createAgElement5({ tag: "button" }); + addCssClasses(eCloseButton, "close-button"); + const eIcon = this.beans.iconSvc.createIconNoSpan("close"); + _setAriaLabel2(eCloseButton, this.params.closeButtonAriaLabel); + eCloseButton.appendChild(eIcon); + this.addManagedElementListeners(eCloseButton, { click: () => this.params.onCloseClicked?.() }); + const eCloseButtonWrapper = _createAgElement5({ tag: "div", role: "presentation" }); + addCssClasses(eCloseButtonWrapper, "close-button-wrapper"); + eCloseButtonWrapper.appendChild(eCloseButton); + this.eHeader.appendChild(eCloseButtonWrapper); + this.eCloseButton = eCloseButton; + } + handleKeyDown(e) { + switch (e.key) { + case KeyCode6.RIGHT: + case KeyCode6.LEFT: { + if (!this.eTabHeader.contains(_getActiveDomElement2(this.beans))) { + return; + } + const isRightKey = e.key === KeyCode6.RIGHT; + const isRtl = this.gos.get("enableRtl"); + const currentPosition = this.items.indexOf(this.activeItem); + const nextPosition = isRightKey !== isRtl ? Math.min(currentPosition + 1, this.items.length - 1) : Math.max(currentPosition - 1, 0); + if (currentPosition === nextPosition) { + return; + } + e.preventDefault(); + const nextItem = this.items[nextPosition]; + this.showItemWrapper(nextItem); + nextItem.eHeaderButton.focus(); + break; + } + case KeyCode6.UP: + case KeyCode6.DOWN: + e.stopPropagation(); + break; + } + } + onTabKeyDown(e) { + if (e.defaultPrevented) { + return; + } + const { beans, eHeader, eBody, activeItem, params } = this; + const { suppressTrapFocus, enableCloseButton } = params; + const activeElement = _getActiveDomElement2(beans); + const target = e.target; + const backwards = e.shiftKey; + if (eHeader.contains(activeElement)) { + e.preventDefault(); + if (enableCloseButton && backwards && !this.eCloseButton?.contains(activeElement)) { + this.eCloseButton?.focus(); + } else if (suppressTrapFocus && backwards) { + findFocusableElementBeforeTabGuard(_getDocument2(beans).body, target)?.focus(); + } else { + this.focusBody(e.shiftKey); + } + return; + } + let nextEl = null; + if (isTargetUnderManagedComponent(eBody, target)) { + if (backwards) { + nextEl = findFocusableElementBeforeTabGuard(eBody, target); + } + if (!nextEl && !suppressTrapFocus) { + nextEl = activeItem.eHeaderButton; + } + } + if (!nextEl && eBody.contains(activeElement)) { + nextEl = _findNextFocusableElement2(beans, eBody, false, backwards); + if (!nextEl) { + if (suppressTrapFocus && !backwards) { + this.forceFocusOutOfContainer(backwards); + } else if (enableCloseButton && !backwards) { + e.preventDefault(); + this.eCloseButton?.focus(); + } else { + e.preventDefault(); + this.focusHeader(); + } + return; + } + } + if (nextEl) { + e.preventDefault(); + nextEl.focus(); + } + } + focusInnerElement(fromBottom) { + if (fromBottom) { + return this.focusBody(true); + } else { + this.focusHeader(); + return true; + } + } + focusHeader(preventScroll) { + this.activeItem.eHeaderButton.focus({ preventScroll }); + } + focusBody(fromBottom) { + return _focusInto2(this.eBody, fromBottom); + } + setAfterAttachedParams(params) { + this.afterAttachedParams = params; + } + showFirstItem() { + if (this.items.length > 0) { + this.showItemWrapper(this.items[0]); + } + } + addItem(item) { + const eHeaderButton = _createAgElement5({ + tag: "span", + cls: "ag-tab", + role: "tab", + attrs: { tabindex: "-1" } + }); + eHeaderButton.appendChild(item.title); + this.eTabHeader.appendChild(eHeaderButton); + _setAriaLabel2(eHeaderButton, item.titleLabel); + const wrapper = { + tabbedItem: item, + eHeaderButton + }; + this.items.push(wrapper); + eHeaderButton.addEventListener("click", this.showItemWrapper.bind(this, wrapper)); + } + showItem(tabbedItem) { + const itemWrapper = this.items.find((wrapper) => wrapper.tabbedItem === tabbedItem); + if (itemWrapper) { + this.showItemWrapper(itemWrapper); + } + } + showItemWrapper(wrapper) { + const { tabbedItem, eHeaderButton } = wrapper; + this.params.onItemClicked?.({ item: tabbedItem }); + if (this.activeItem === wrapper) { + this.params.onActiveItemClicked?.(); + return; + } + if (this.lastScrollListener) { + this.lastScrollListener = this.lastScrollListener(); + } + _clearElement(this.eBody); + tabbedItem.bodyPromise.then((body) => { + this.eBody.appendChild(body); + const onlyUnmanaged = !_isKeyboardMode(); + if (!this.params.suppressFocusBodyOnOpen) { + _focusInto2(this.eBody, false, onlyUnmanaged); + } + if (tabbedItem.afterAttachedCallback) { + tabbedItem.afterAttachedCallback(this.afterAttachedParams); + } + if (this.params.keepScrollPosition) { + const scrollableContainer = tabbedItem.getScrollableContainer?.() || body; + [this.lastScrollListener] = this.addManagedElementListeners(scrollableContainer, { + scroll: () => { + this.tabbedItemScrollMap.set(tabbedItem.name, scrollableContainer.scrollTop); + } + }); + const scrollPosition = this.tabbedItemScrollMap.get(tabbedItem.name); + if (scrollPosition !== void 0) { + setTimeout(() => { + scrollableContainer.scrollTop = scrollPosition; + }, 0); + } + } + }); + if (this.activeItem) { + this.activeItem.eHeaderButton.classList.remove("ag-tab-selected"); + this.activeItem.tabbedItem.afterDetachedCallback?.(); + } + eHeaderButton.classList.add("ag-tab-selected"); + this.activeItem = wrapper; + } +}; + +// packages/ag-grid-enterprise/src/agStack/agGroupComponent.ts +import { + AgCheckboxSelector, + AgToggleButton, + KeyCode as KeyCode7, + RefPlaceholder as RefPlaceholder8, + _AgComponentStub as _AgComponentStub6, + _isComponent, + _removeFromParent, + _setAriaExpanded as _setAriaExpanded3, + _setAriaRole as _setAriaRole4, + _setDisplayed as _setDisplayed4 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/agStack/agGroupComponent.css +var agGroupComponent_default = ".ag-group{position:relative;width:100%}.ag-group-title-bar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-title{display:inline;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:where(.ag-group-title-bar) .ag-group-title{cursor:default}.ag-group-toolbar{align-items:center;display:flex;padding:var(--ag-spacing)}.ag-group-container{display:flex}.ag-disabled .ag-group-container{pointer-events:none}.ag-disabled-group-container,.ag-disabled-group-title-bar{opacity:.5}.ag-group-container-horizontal{flex-flow:row wrap}.ag-group-container-vertical{flex-direction:column}.ag-group-title-bar-icon{cursor:pointer;flex:none}:where(.ag-ltr) .ag-group-title-bar-icon{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-group-title-bar-icon{margin-left:var(--ag-spacing)}:where(.ag-group-item-alignment-stretch) .ag-group-item{align-items:stretch}:where(.ag-group-item-alignment-start) .ag-group-item{align-items:flex-start}:where(.ag-group-item-alignment-end) .ag-group-item{align-items:flex-end}"; + +// packages/ag-grid-enterprise/src/agStack/agGroupComponent.ts +function getAgGroupComponentTemplate(params) { + const cssIdentifier = params.cssIdentifier || "default"; + const direction = params.direction || "vertical"; + return { + tag: "div", + cls: `ag-group ag-${cssIdentifier}-group`, + role: "presentation", + children: [ + { + tag: "div", + ref: "eToolbar", + cls: `ag-group-toolbar ag-${cssIdentifier}-group-toolbar`, + children: [{ tag: "ag-checkbox", ref: "cbGroupEnabled" }] + }, + { + tag: "div", + ref: "eContainer", + cls: `ag-group-container ag-group-container-${direction} ag-${cssIdentifier}-group-container` + } + ] + }; +} +var AgGroupComponent = class extends _AgComponentStub6 { + constructor(params = {}) { + super( + getAgGroupComponentTemplate(params), + [AgCheckboxSelector] + ); + this.params = params; + this.suppressEnabledCheckbox = true; + this.suppressToggleExpandOnEnableChange = false; + this.eToolbar = RefPlaceholder8; + this.cbGroupEnabled = RefPlaceholder8; + this.eContainer = RefPlaceholder8; + this.registerCSS(agGroupComponent_default); + const { + enabled, + items, + suppressEnabledCheckbox, + expanded, + suppressToggleExpandOnEnableChange, + useToggle: toggleMode + } = params; + this.cssIdentifier = params.cssIdentifier || "default"; + this.enabled = enabled != null ? enabled : true; + this.items = items || []; + this.useToggle = toggleMode ?? false; + this.alignItems = params.alignItems || "center"; + this.expanded = expanded == null ? true : expanded; + if (suppressEnabledCheckbox != null) { + this.suppressEnabledCheckbox = suppressEnabledCheckbox; + } + if (suppressToggleExpandOnEnableChange != null) { + this.suppressToggleExpandOnEnableChange = suppressToggleExpandOnEnableChange; + } + } + postConstruct() { + this.setupTitleBar(); + if (this.items.length) { + const initialItems = this.items; + this.items = []; + this.addItems(initialItems); + } + const localeTextFunc = this.getLocaleTextFunc(); + this.cbGroupEnabled.setLabel(localeTextFunc("enabled", "Enabled")); + if (this.enabled) { + this.setEnabled(this.enabled, void 0, true); + } + this.setAlignItems(this.alignItems); + const { onEnableChange, onExpandedChange, suppressOpenCloseIcons } = this.params; + this.hideEnabledCheckbox(this.suppressEnabledCheckbox); + this.hideOpenCloseIcons(suppressOpenCloseIcons ?? false); + this.refreshChildDisplay(); + _setDisplayed4(this.eContainer, this.expanded); + this.cbGroupEnabled.onValueChange((newSelection) => { + this.setEnabled(newSelection, true, this.suppressToggleExpandOnEnableChange); + this.dispatchEnableChangeEvent(newSelection); + }); + if (onEnableChange != null) { + this.onEnableChange(onEnableChange); + } + if (onExpandedChange != null) { + this.onExpandedChange(onExpandedChange); + } + } + refreshChildDisplay() { + _setDisplayed4(this.eToolbar, this.expanded && !this.suppressEnabledCheckbox); + this.eTitleBar?.refreshOnExpand(this.expanded); + } + isExpanded() { + return this.expanded; + } + setAlignItems(alignment) { + if (this.alignItems !== alignment) { + this.removeCss(`ag-group-item-alignment-${this.alignItems}`); + } + this.alignItems = alignment; + const newCls = `ag-group-item-alignment-${this.alignItems}`; + this.addCss(newCls); + return this; + } + toggleGroupExpand(expanded, silent) { + if (this.eTitleBar?.isSuppressCollapse() && !this.useToggle) { + expanded = true; + silent = true; + } else { + expanded = expanded != null ? expanded : !this.expanded; + if (this.expanded === expanded) { + return this; + } + } + this.expanded = expanded; + this.refreshChildDisplay(); + _setDisplayed4(this.eContainer, expanded); + if (!silent) { + this.dispatchLocalEvent({ + type: expanded ? "expanded" : "collapsed" + }); + } + return this; + } + addItems(items) { + for (const item of items) { + this.addItem(item); + } + } + prependItem(item) { + this.insertItem(item, true); + } + addItem(item) { + this.insertItem(item, false); + } + updateItems(newItems) { + const oldItems = this.items; + let newIndex = 0; + for (let prevIndex = 0; prevIndex < oldItems.length; ++prevIndex) { + const ePrevItem = oldItems[prevIndex]; + if (ePrevItem === newItems[newIndex]) { + newIndex++; + } else { + const el = _isComponent(ePrevItem) ? ePrevItem.getGui() : ePrevItem; + _removeFromParent(el); + } + } + while (newIndex < newItems.length) { + this.insertItem(newItems[newIndex++]); + } + this.items = newItems; + } + insertItem(item, prepend) { + const container = this.eContainer; + const el = _isComponent(item) ? item.getGui() : item; + el.classList.add("ag-group-item", `ag-${this.cssIdentifier}-group-item`); + if (prepend) { + container.prepend(el); + this.items.unshift(el); + } else { + container.appendChild(el); + this.items.push(el); + } + } + hideItem(hide, index) { + const itemToHide = this.items[index]; + _setDisplayed4(itemToHide, !hide); + } + getItemIndex(item) { + const el = _isComponent(item) ? item.getGui() : item; + return this.items.indexOf(el); + } + setTitle(title) { + this.eTitleBar?.setTitle(title); + return this; + } + addTitleBarWidget(el) { + this.eTitleBar?.addWidget(el); + return this; + } + addCssClassToTitleBar(cssClass) { + this.eTitleBar?.addCss(cssClass); + } + dispatchEnableChangeEvent(enabled) { + const event = { + type: "enableChange", + enabled + }; + this.dispatchLocalEvent(event); + } + setEnabled(enabled, skipToggle, skipExpand) { + this.enabled = enabled; + this.refreshDisabledStyles(); + if (!skipExpand) { + this.toggleGroupExpand(enabled); + } + if (!skipToggle) { + this.cbGroupEnabled.setValue(enabled); + this.eToggle?.setValue(enabled); + } + return this; + } + isEnabled() { + return this.enabled; + } + onEnableChange(callbackFn) { + this.addManagedListeners(this, { enableChange: (event) => callbackFn(event.enabled) }); + return this; + } + onExpandedChange(callbackFn) { + this.addManagedListeners(this, { + expanded: () => callbackFn(true), + collapsed: () => callbackFn(false) + }); + return this; + } + hideEnabledCheckbox(hide) { + this.suppressEnabledCheckbox = hide; + this.refreshChildDisplay(); + this.refreshDisabledStyles(); + return this; + } + hideOpenCloseIcons(hide) { + this.eTitleBar?.hideOpenCloseIcons(hide); + return this; + } + refreshDisabledStyles() { + const disabled = !this.enabled; + this.eContainer.classList.toggle("ag-disabled", disabled); + this.eTitleBar?.refreshDisabledStyles(this.suppressEnabledCheckbox && disabled); + this.eContainer.classList.toggle("ag-disabled-group-container", disabled); + } + setupTitleBar() { + const titleBar = this.useToggle ? this.createToggleTitleBar() : this.createDefaultTitleBar(); + this.eToolbar.insertAdjacentElement("beforebegin", titleBar.getGui()); + } + createDefaultTitleBar() { + const titleBar = this.createManagedBean( + new DefaultTitleBar(this.params) + ); + this.eTitleBar = titleBar; + titleBar.refreshOnExpand(this.expanded); + this.addManagedListeners(titleBar, { + expandedChanged: (event) => this.toggleGroupExpand(event.expanded) + }); + return titleBar; + } + createToggleTitleBar() { + const eToggle = this.createManagedBean( + new AgToggleButton({ + value: this.enabled, + label: this.params.title, + labelAlignment: "left", + labelWidth: "flex", + onValueChange: (enabled) => { + this.setEnabled(enabled, true); + this.dispatchEnableChangeEvent(enabled); + } + }) + ); + eToggle.addCss("ag-group-title-bar"); + eToggle.addCss(`ag-${this.params.cssIdentifier ?? "default"}-group-title-bar ag-unselectable`); + this.eToggle = eToggle; + this.toggleGroupExpand(this.enabled); + return eToggle; + } +}; +var TITLE_BAR_DISABLED_CLASS = "ag-disabled-group-title-bar"; +function getDefaultTitleBarTemplate(params) { + const cssIdentifier = params.cssIdentifier ?? "default"; + return { + tag: "div", + cls: `ag-group-title-bar ag-${cssIdentifier}-group-title-bar ag-unselectable`, + role: params.suppressKeyboardNavigation ? "presentation" : "group", + children: [ + { + tag: "span", + ref: "eGroupOpenedIcon", + cls: `ag-group-title-bar-icon ag-${cssIdentifier}-group-title-bar-icon`, + role: "presentation" + }, + { + tag: "span", + ref: "eGroupClosedIcon", + cls: `ag-group-title-bar-icon ag-${cssIdentifier}-group-title-bar-icon`, + role: "presentation" + }, + { tag: "span", ref: "eTitle", cls: `ag-group-title ag-${cssIdentifier}-group-title` } + ] + }; +} +var DefaultTitleBar = class extends _AgComponentStub6 { + constructor(params = {}) { + super(getDefaultTitleBarTemplate(params)); + this.suppressOpenCloseIcons = false; + this.suppressKeyboardNavigation = false; + this.eGroupOpenedIcon = RefPlaceholder8; + this.eGroupClosedIcon = RefPlaceholder8; + this.eTitle = RefPlaceholder8; + const { title, suppressOpenCloseIcons, suppressKeyboardNavigation } = params; + if (!!title && title.length > 0) { + this.title = title; + } + if (suppressOpenCloseIcons != null) { + this.suppressOpenCloseIcons = suppressOpenCloseIcons; + } + this.suppressKeyboardNavigation = suppressKeyboardNavigation ?? false; + } + postConstruct() { + this.setTitle(this.title); + this.hideOpenCloseIcons(this.suppressOpenCloseIcons); + this.setupExpandContract(); + } + setupExpandContract() { + const iconSvc = this.beans.iconSvc; + this.eGroupClosedIcon.appendChild(iconSvc.createIconNoSpan("accordionClosed")); + this.eGroupOpenedIcon.appendChild(iconSvc.createIconNoSpan("accordionOpen")); + this.addManagedElementListeners(this.getGui(), { + click: () => this.dispatchExpandChanged(), + keydown: (e) => { + switch (e.key) { + case KeyCode7.ENTER: + case KeyCode7.SPACE: + e.preventDefault(); + this.dispatchExpandChanged(); + break; + case KeyCode7.RIGHT: + case KeyCode7.LEFT: + e.preventDefault(); + this.dispatchExpandChanged(e.key === KeyCode7.RIGHT); + break; + } + } + }); + } + refreshOnExpand(expanded) { + this.refreshAriaStatus(expanded); + this.refreshOpenCloseIcons(expanded); + } + refreshAriaStatus(expanded) { + if (!this.suppressOpenCloseIcons) { + _setAriaExpanded3(this.getGui(), expanded); + } + } + refreshOpenCloseIcons(expanded) { + const showIcon = !this.suppressOpenCloseIcons; + _setDisplayed4(this.eGroupOpenedIcon, showIcon && expanded); + _setDisplayed4(this.eGroupClosedIcon, showIcon && !expanded); + } + isSuppressCollapse() { + return this.suppressOpenCloseIcons; + } + dispatchExpandChanged(expanded) { + const event = { + type: "expandedChanged", + expanded + }; + this.dispatchLocalEvent(event); + } + setTitle(title) { + const eGui = this.getGui(); + const hasTitle = !!title && title.length > 0; + title = hasTitle ? title : void 0; + this.eTitle.textContent = title ?? ""; + _setDisplayed4(eGui, hasTitle); + if (title !== this.title) { + this.title = title; + } + const disabled = eGui.classList.contains(TITLE_BAR_DISABLED_CLASS); + this.refreshDisabledStyles(disabled); + return this; + } + addWidget(el) { + this.getGui().appendChild(el); + return this; + } + hideOpenCloseIcons(hide) { + this.suppressOpenCloseIcons = hide; + if (hide) { + this.dispatchExpandChanged(true); + } + return this; + } + refreshDisabledStyles(disabled) { + const eGui = this.getGui(); + if (disabled) { + eGui.classList.add(TITLE_BAR_DISABLED_CLASS); + eGui.removeAttribute("tabindex"); + _setAriaRole4(eGui, "presentation"); + } else { + eGui.classList.remove(TITLE_BAR_DISABLED_CLASS); + if (typeof this.title === "string" && !this.suppressKeyboardNavigation) { + this.activateTabIndex([eGui]); + _setAriaRole4(eGui, "group"); + } else { + eGui.removeAttribute("tabindex"); + _setAriaRole4(eGui, "presentation"); + } + } + } +}; +var AgGroupComponentSelector = { + selector: "AG-GROUP-COMPONENT", + component: AgGroupComponent +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterModule.ts +import { + TooltipModule, + _FilterCoreModule, + _FilterValueModule, + _PopupModule, + _SharedDragAndDropModule +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/version.ts +var VERSION = "35.2.0"; + +// packages/ag-grid-enterprise/src/agGridEnterpriseModule.ts +var EnterpriseCoreModule = { + moduleName: "EnterpriseCore", + version: VERSION, + beans: [GridLicenseManager], + icons: { + // accordion open (filter tool panel group, charts group) + accordionOpen: "tree-open", + // accordion closed (filter tool panel group, charts group) + accordionClosed: "tree-closed", + // accordion indeterminate - shown when some children are expanded and + // others are collapsed (filter tool panel group, charts group) + accordionIndeterminate: "tree-indeterminate", + // dialog title bar + close: "cross", + // X (remove) on column 'pill' after adding it to a drop zone list + cancel: "cancel", + // button in chart regular size window title bar (click to maximise) + maximize: "maximize", + // button in chart maximised window title bar (click to make regular size) + minimize: "minimize", + // drag handle used to pick up draggable columns + columnDrag: "grip" + }, + dependsOn: [], + setLicenseKey: GridLicenseManager.setLicenseKey +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advanced-filter.css +var advanced_filter_default = '.ag-advanced-filter-header{align-items:center;background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border);display:flex;position:relative}.ag-advanced-filter{align-items:center;display:flex;width:100%}.ag-advanced-filter-buttons{display:contents}.ag-advanced-filter-header-cell{height:100%;padding-left:var(--ag-cell-horizontal-padding);padding-right:var(--ag-cell-horizontal-padding)}.ag-advanced-filter-apply-button,.ag-advanced-filter-builder-button{align-items:center;background-color:unset;border:0;display:flex;font-size:var(--ag-font-size);font-weight:600;line-height:normal;padding:var(--ag-spacing);white-space:nowrap;&:where(.ag-standard-button):where(:not(:disabled)){cursor:pointer;&:where(.ag-standard-button):hover{background-color:var(--ag-row-hover-color)}}}:where(.ag-ltr) .ag-advanced-filter-apply-button,:where(.ag-ltr) .ag-advanced-filter-builder-button{margin-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-advanced-filter-apply-button,:where(.ag-rtl) .ag-advanced-filter-builder-button{margin-right:calc(var(--ag-spacing)*2)}:where(.ag-ltr) .ag-advanced-filter-builder-button-label{margin-left:var(--ag-spacing)}:where(.ag-rtl) .ag-advanced-filter-builder-button-label{margin-right:var(--ag-spacing)}.ag-advanced-filter-builder{display:flex;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.ag-advanced-filter-builder-list{flex:1;overflow:auto}.ag-advanced-filter-builder-button-panel{border-top:var(--ag-advanced-filter-builder-button-bar-border);display:flex;justify-content:flex-end;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding)}:where(.ag-ltr) .ag-advanced-filter-builder-apply-button,:where(.ag-ltr) .ag-advanced-filter-builder-cancel-button{margin-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-advanced-filter-builder-apply-button,:where(.ag-rtl) .ag-advanced-filter-builder-cancel-button{margin-right:calc(var(--ag-spacing)*2)}.ag-advanced-filter-builder-item-wrapper{align-items:center;display:flex;flex:1 1 auto;justify-content:space-between;overflow:hidden}:where(.ag-ltr) .ag-advanced-filter-builder-item-wrapper{padding-left:calc(var(--ag-icon-size)/2);padding-right:var(--ag-icon-size)}:where(.ag-rtl) .ag-advanced-filter-builder-item-wrapper{padding-left:var(--ag-icon-size);padding-right:calc(var(--ag-icon-size)/2)}:where(.ag-virtual-list-viewport) .ag-advanced-filter-builder-item-wrapper .ag-tab-guard{position:absolute}.ag-advanced-filter-builder-item-tree-line{width:var(--ag-advanced-filter-builder-indent-size)}.ag-advanced-filter-builder-item-tree-line-root{width:var(--ag-icon-size)}.ag-advanced-filter-builder-item-tree-line-root:before{height:50%;top:50%}.ag-advanced-filter-builder-item-tree-line-horizontal,.ag-advanced-filter-builder-item-tree-line-vertical,.ag-advanced-filter-builder-item-tree-line-vertical-bottom,.ag-advanced-filter-builder-item-tree-line-vertical-top{align-items:center;display:flex;height:100%;position:relative}.ag-advanced-filter-builder-item-tree-line-horizontal:after,.ag-advanced-filter-builder-item-tree-line-horizontal:before,.ag-advanced-filter-builder-item-tree-line-vertical-bottom:after,.ag-advanced-filter-builder-item-tree-line-vertical-bottom:before,.ag-advanced-filter-builder-item-tree-line-vertical-top:after,.ag-advanced-filter-builder-item-tree-line-vertical-top:before,.ag-advanced-filter-builder-item-tree-line-vertical:after,.ag-advanced-filter-builder-item-tree-line-vertical:before{content:"";height:100%;position:absolute}.ag-advanced-filter-builder-item-tree-line-horizontal:after{border-bottom:var(--ag-border-width) solid var(--ag-border-color);height:50%;top:0;width:calc(var(--ag-advanced-filter-builder-indent-size) - var(--ag-icon-size))}:where(.ag-ltr) .ag-advanced-filter-builder-item-tree-line-horizontal:after{left:calc(var(--ag-icon-size)/2)}:where(.ag-rtl) .ag-advanced-filter-builder-item-tree-line-horizontal:after{right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-tree-line-vertical:before{top:0;width:calc(var(--ag-advanced-filter-builder-indent-size) - var(--ag-icon-size)/2)}:where(.ag-ltr) .ag-advanced-filter-builder-item-tree-line-vertical:before{border-left:var(--ag-border-width) solid var(--ag-border-color);left:calc(var(--ag-icon-size)/2)}:where(.ag-rtl) .ag-advanced-filter-builder-item-tree-line-vertical:before{border-right:var(--ag-border-width) solid var(--ag-border-color);right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-tree-line-vertical-top:before{height:50%;top:0;width:calc(var(--ag-advanced-filter-builder-indent-size) - var(--ag-icon-size)/2)}:where(.ag-ltr) .ag-advanced-filter-builder-item-tree-line-vertical-top:before{border-left:var(--ag-border-width) solid var(--ag-border-color);left:calc(var(--ag-icon-size)/2)}:where(.ag-rtl) .ag-advanced-filter-builder-item-tree-line-vertical-top:before{border-right:var(--ag-border-width) solid var(--ag-border-color);right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-tree-line-vertical-bottom:before{height:calc(50% - var(--ag-icon-size)*1.5/2);top:calc(50% + var(--ag-icon-size)*1.5/2);width:calc(var(--ag-icon-size)/2)}:where(.ag-ltr) .ag-advanced-filter-builder-item-tree-line-vertical-bottom:before{border-left:var(--ag-border-width) solid var(--ag-border-color);left:calc(var(--ag-icon-size)/2)}:where(.ag-rtl) .ag-advanced-filter-builder-item-tree-line-vertical-bottom:before{border-right:var(--ag-border-width) solid var(--ag-border-color);right:calc(var(--ag-icon-size)/2)}.ag-advanced-filter-builder-item-condition{padding-bottom:var(--ag-spacing);padding-top:var(--ag-spacing)}.ag-advanced-filter-builder-item,.ag-advanced-filter-builder-item-buttons,.ag-advanced-filter-builder-item-condition,.ag-advanced-filter-builder-item-tree-lines,.ag-advanced-filter-builder-pill,.ag-advanced-filter-builder-pill-wrapper{align-items:center;display:flex;height:100%}.ag-advanced-filter-builder-pill-wrapper{margin:0 var(--ag-spacing)}.ag-advanced-filter-builder-pill{border-radius:var(--ag-border-radius);min-height:calc(100% - var(--ag-spacing)*3);min-width:calc(var(--ag-spacing)*2);padding:var(--ag-spacing) calc(var(--ag-spacing)*2);position:relative}:where(.ag-advanced-filter-builder-pill){.ag-advanced-filter-builder-value-number{font-family:monospace;font-weight:700}.ag-advanced-filter-builder-value-empty{color:var(--ag-subtle-text-color)}}:where(.ag-ltr) :where(.ag-advanced-filter-builder-pill){.ag-picker-field-display{margin-right:var(--ag-spacing)}}:where(.ag-rtl) :where(.ag-advanced-filter-builder-pill){.ag-picker-field-display{margin-left:var(--ag-spacing)}}.ag-advanced-filter-builder-pill-display{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-advanced-filter-builder-join-pill{background-color:var(--ag-advanced-filter-builder-join-pill-color);cursor:pointer}.ag-advanced-filter-builder-column-pill{background-color:var(--ag-advanced-filter-builder-column-pill-color);cursor:pointer}.ag-advanced-filter-builder-option-pill{background-color:var(--ag-advanced-filter-builder-option-pill-color);cursor:pointer}.ag-advanced-filter-builder-value-pill{background-color:var(--ag-advanced-filter-builder-value-pill-color);cursor:text;max-width:140px;:where(.ag-advanced-filter-builder-pill-display){display:block}}.ag-advanced-filter-builder-item-buttons{display:flex;gap:var(--ag-spacing);padding:0 calc(var(--ag-spacing)*.5)}.ag-advanced-filter-builder-item-button{color:var(--ag-subtle-text-color);cursor:pointer;position:relative}.ag-advanced-filter-builder-item-button,.ag-advanced-filter-builder-pill{&:focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-advanced-filter-builder-item-button-disabled{cursor:default;opacity:.5}.ag-advanced-filter-builder-virtual-list-container{top:var(--ag-spacing)}.ag-advanced-filter-builder-virtual-list-item{cursor:default;display:flex;height:var(--ag-list-item-height)}.ag-advanced-filter-builder-virtual-list-item:hover{background-color:var(--ag-row-hover-color);:where(.ag-advanced-filter-builder-item-button){opacity:1}}.ag-advanced-filter-builder-invalid{color:var(--ag-subtle-text-color);cursor:default;margin:0 var(--ag-spacing)}:where(.ag-advanced-filter-builder-validation) .ag-advanced-filter-builder-invalid{color:var(--ag-invalid-color)}:where(.ag-advanced-filter-builder-virtual-list-item-highlight) .ag-advanced-filter-builder-item-button:focus-visible{opacity:1}'; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterApi.ts +function getAdvancedFilterModel(beans) { + return beans.filterManager?.getAdvFilterModel() ?? null; +} +function setAdvancedFilterModel(beans, advancedFilterModel) { + beans.filterManager?.setAdvFilterModel(advancedFilterModel); +} +function showAdvancedFilterBuilder(beans) { + beans.filterManager?.toggleAdvFilterBuilder(true, "api"); +} +function hideAdvancedFilterBuilder(beans) { + beans.filterManager?.toggleAdvFilterBuilder(false, "api"); +} + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterExpressionService.ts +import { BeanStub as BeanStub2, _exists as _exists3, _parseDateTimeFromString, _serialiseDate, _toStringOrNull } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterLocaleText.ts +var ADVANCED_FILTER_LOCALE_TEXT = { + ariaAdvancedFilterBuilderItem: (variableValues) => `${variableValues[0]}. Level ${variableValues[1]}. Press ENTER to edit`, + ariaAdvancedFilterBuilderItemValidation: (variableValues) => `${variableValues[0]}. Level ${variableValues[1]}. ${variableValues[2]} Press ENTER to edit`, + ariaAdvancedFilterBuilderList: "Advanced Filter Builder List", + ariaAdvancedFilterBuilderFilterItem: "Filter Condition", + ariaAdvancedFilterBuilderGroupItem: "Filter Group", + ariaAdvancedFilterBuilderColumn: "Column", + ariaAdvancedFilterBuilderOption: "Option", + ariaAdvancedFilterBuilderValue: "Value", + ariaAdvancedFilterBuilderJoinOperator: "Join Operator", + ariaAdvancedFilterInput: "Advanced Filter Input", + ariaLabelAdvancedFilterAutocomplete: "Advanced Filter Autocomplete", + advancedFilterContains: "contains", + advancedFilterNotContains: "does not contain", + advancedFilterTextEquals: "equals", + advancedFilterTextNotEqual: "does not equal", + advancedFilterStartsWith: "begins with", + advancedFilterEndsWith: "ends with", + advancedFilterBlank: "is blank", + advancedFilterNotBlank: "is not blank", + advancedFilterEquals: "=", + advancedFilterNotEqual: "!=", + advancedFilterGreaterThan: ">", + advancedFilterGreaterThanOrEqual: ">=", + advancedFilterLessThan: "<", + advancedFilterLessThanOrEqual: "<=", + advancedFilterTrue: "is true", + advancedFilterFalse: "is false", + advancedFilterAnd: "AND", + advancedFilterOr: "OR", + advancedFilterApply: "Apply", + advancedFilterReset: "Reset", + advancedFilterCancel: "Cancel", + advancedFilterClear: "Clear", + advancedFilterBuilder: "Builder", + advancedFilterValidationMissingColumn: "Column is missing", + advancedFilterValidationMissingOption: "Option is missing", + advancedFilterValidationMissingValue: "Value is missing", + advancedFilterValidationInvalidColumn: "Column not found", + advancedFilterValidationInvalidOption: "Option not found", + advancedFilterValidationMissingQuote: "Value is missing an end quote", + advancedFilterValidationNotANumber: "Value is not a number", + advancedFilterValidationNotABigInt: "Value is not a big integer", + advancedFilterValidationInvalidDate: "Value is not a valid date", + advancedFilterValidationMissingCondition: "Condition is missing", + advancedFilterValidationJoinOperatorMismatch: "Join operators within a condition must be the same", + advancedFilterValidationInvalidJoinOperator: "Join operator not found", + advancedFilterValidationMissingEndBracket: "Missing end bracket", + advancedFilterValidationExtraEndBracket: "Too many end brackets", + advancedFilterValidationMessage: (variableValues) => `Expression has an error. ${variableValues[0]} - ${variableValues[1]}.`, + advancedFilterValidationMessageAtEnd: (variableValues) => `Expression has an error. ${variableValues[0]} at end of expression.`, + advancedFilterBuilderTitle: "Advanced Filter", + advancedFilterBuilderApply: "Apply", + advancedFilterBuilderCancel: "Cancel", + advancedFilterBuilderClear: "Clear", + advancedFilterBuilderReset: "Reset", + advancedFilterBuilderAddButtonTooltip: "Add Filter or Group", + advancedFilterBuilderRemoveButtonTooltip: "Remove", + advancedFilterBuilderMoveUpButtonTooltip: "Move Up", + advancedFilterBuilderMoveDownButtonTooltip: "Move Down", + advancedFilterBuilderAddJoin: "Add Group", + advancedFilterBuilderAddCondition: "Add Filter", + advancedFilterBuilderSelectColumn: "Select a column", + advancedFilterBuilderSelectOption: "Select an option", + advancedFilterBuilderEnterValue: "Enter a value...", + advancedFilterBuilderValidationAlreadyApplied: "Current filter already applied.", + advancedFilterBuilderValidationIncomplete: "Not all conditions are complete.", + advancedFilterBuilderValidationSelectColumn: "Must select a column.", + advancedFilterBuilderValidationSelectOption: "Must select an option.", + advancedFilterBuilderValidationEnterValue: "Must enter a value." +}; + +// packages/ag-grid-enterprise/src/advancedFilter/colFilterExpressionParser.ts +import { _parseBigIntOrNull } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/advancedFilter/filterExpressionUtils.ts +function getSearchString(value, position, endPosition) { + if (!value) { + return ""; + } + const numChars = endPosition - position; + return numChars ? value.slice(0, value.length - numChars) : value; +} +function updateExpression(expression, startPosition, endPosition, updatedValuePart, appendSpace, appendQuote, empty) { + const secondPartStartPosition = endPosition + (!expression.length || empty ? 0 : 1); + let positionOffset = 0; + if (appendSpace) { + if (expression[secondPartStartPosition] === " ") { + positionOffset = 1; + } else { + updatedValuePart += " "; + if (appendQuote) { + updatedValuePart += `"`; + } + } + } + const updatedValue = expression.slice(0, startPosition) + updatedValuePart + expression.slice(secondPartStartPosition); + return { updatedValue, updatedPosition: startPosition + updatedValuePart.length + positionOffset }; +} +function findStartPosition(expression, position, endPosition) { + let startPosition = position; + while (startPosition < endPosition) { + const char = expression[startPosition]; + if (char !== " ") { + break; + } + startPosition++; + } + return startPosition; +} +function findEndPosition(expression, position, includeCloseBracket, isStartPositionUnknown) { + let endPosition = position; + let isEmpty = false; + while (endPosition < expression.length) { + const char = expression[endPosition]; + if (char === "(") { + if (isStartPositionUnknown && expression[endPosition - 1] === " ") { + isEmpty = true; + } else { + endPosition = endPosition - 1; + } + break; + } else if (char === " " || includeCloseBracket && char === ")") { + endPosition = endPosition - 1; + break; + } + endPosition++; + } + return { endPosition, isEmpty }; +} +function checkAndUpdateExpression(params, userValue, displayValue, endPosition) { + if (displayValue !== userValue) { + params.expression = updateExpression( + params.expression, + endPosition - userValue.length + 1, + endPosition, + displayValue + ).updatedValue; + } +} + +// packages/ag-grid-enterprise/src/advancedFilter/colFilterExpressionParser.ts +var ColumnParser = class { + constructor(params, startPosition) { + this.params = params; + this.startPosition = startPosition; + this.type = "column"; + this.valid = true; + this.hasStartChar = false; + this.hasEndChar = false; + this.colName = ""; + } + parse(char, position) { + if (char === COL_FILTER_EXPRESSION_START_CHAR && !this.colName) { + this.hasStartChar = true; + } else if (char === COL_FILTER_EXPRESSION_END_CHAR && this.hasStartChar) { + const isMatch = this.parseColumn(false, position); + if (isMatch) { + this.hasEndChar = true; + return false; + } else { + this.colName += char; + } + } else { + this.colName += char; + } + return void 0; + } + getDisplayValue() { + return (this.hasStartChar ? COL_FILTER_EXPRESSION_START_CHAR : "") + this.colName + (this.hasEndChar ? COL_FILTER_EXPRESSION_END_CHAR : ""); + } + getColId() { + return this.colId; + } + complete(position) { + this.parseColumn(true, position); + } + getValidationError() { + return this.valid ? null : { + message: this.params.advFilterExpSvc.translate("advancedFilterValidationInvalidColumn"), + startPosition: this.startPosition, + endPosition: this.endPosition ?? this.params.expression.length - 1 + }; + } + parseColumn(fromComplete, endPosition) { + this.endPosition = endPosition; + const colValue = this.params.advFilterExpSvc.getColId(this.colName); + if (colValue && this.hasStartChar) { + this.colId = colValue.colId; + checkAndUpdateExpression(this.params, this.colName, colValue.columnName, endPosition - 1); + this.colName = colValue.columnName; + this.column = this.params.colModel.getColDefCol(this.colId); + if (this.column) { + this.baseCellDataType = this.params.dataTypeSvc?.getBaseDataType(this.column) ?? "text"; + return true; + } + } + if (fromComplete) { + this.valid = false; + } + this.baseCellDataType = "text"; + return false; + } +}; +var OperatorParser = class { + constructor(params, startPosition, baseCellDataType) { + this.params = params; + this.startPosition = startPosition; + this.baseCellDataType = baseCellDataType; + this.type = "operator"; + this.valid = true; + this.expectedNumOperands = 0; + this.operator = ""; + } + parse(char, position) { + if (char === " " || char === ")") { + const isMatch = this.parseOperator(false, position - 1); + if (isMatch) { + return true; + } else { + this.operator += char; + } + } else { + this.operator += char; + } + return void 0; + } + complete(position) { + this.parseOperator(true, position); + } + getValidationError() { + return this.valid ? null : { + message: this.params.advFilterExpSvc.translate("advancedFilterValidationInvalidOption"), + startPosition: this.startPosition, + endPosition: this.endPosition ?? this.params.expression.length - 1 + }; + } + getDisplayValue() { + return this.operator; + } + getOperatorKey() { + return this.parsedOperator; + } + parseOperator(fromComplete, endPosition) { + const operatorForType = this.params.advFilterExpSvc.getDataTypeExpressionOperator(this.baseCellDataType); + const parsedOperator = operatorForType.findOperator(this.operator); + this.endPosition = endPosition; + if (parsedOperator) { + this.parsedOperator = parsedOperator; + const operator = operatorForType.operators[parsedOperator]; + this.expectedNumOperands = operator.numOperands; + const operatorDisplayValue = operator.displayValue; + checkAndUpdateExpression(this.params, this.operator, operatorDisplayValue, endPosition); + this.operator = operatorDisplayValue; + return true; + } + const isPartialMatch = parsedOperator === null; + if (fromComplete || !isPartialMatch) { + this.valid = false; + } + return false; + } +}; +var OperandParser = class { + constructor(params, startPosition, baseCellDataType, column) { + this.params = params; + this.startPosition = startPosition; + this.baseCellDataType = baseCellDataType; + this.column = column; + this.type = "operand"; + this.valid = true; + this.operand = ""; + this.validationMessage = null; + this.filterValidationSetters = { + number: () => { + if (this.quotes || isNaN(this.modelValue)) { + this.valid = false; + this.validationMessage = this.params.advFilterExpSvc.translate("advancedFilterValidationNotANumber"); + } + }, + bigint: () => { + if (this.quotes || _parseBigIntOrNull(this.modelValue) === null) { + this.valid = false; + this.validationMessage = this.params.advFilterExpSvc.translate("advancedFilterValidationNotABigInt"); + } + }, + date: (modelValue) => { + if (modelValue == null) { + this.valid = false; + this.validationMessage = this.params.advFilterExpSvc.translate("advancedFilterValidationInvalidDate"); + } + }, + dateString: (...args) => this.filterValidationSetters.date(...args), + dateTime: (...args) => this.filterValidationSetters.date(...args), + dateTimeString: (...args) => this.filterValidationSetters.date(...args), + boolean() { + }, + object() { + }, + text() { + } + }; + } + parse(char, position) { + if (char === " ") { + if (this.quotes) { + this.operand += char; + } else { + this.parseOperand(false, position); + return true; + } + } else if (char === ")") { + if (this.baseCellDataType === "number" || !this.quotes) { + this.parseOperand(false, position - 1); + return true; + } else { + this.operand += char; + } + } else if (!this.operand && !this.quotes && (char === `'` || char === `"`)) { + this.quotes = char; + } else if (this.quotes && char === this.quotes) { + this.parseOperand(false, position); + return false; + } else { + this.operand += char; + } + return void 0; + } + complete(position) { + this.parseOperand(true, position); + } + getValidationError() { + return this.validationMessage ? { + message: this.validationMessage, + startPosition: this.startPosition, + endPosition: this.endPosition ?? this.params.expression.length - 1 + } : null; + } + getRawValue() { + return this.operand; + } + getModelValue() { + return this.modelValue; + } + parseOperand(fromComplete, position) { + const { advFilterExpSvc } = this.params; + this.endPosition = position; + this.modelValue = this.operand; + if (fromComplete && this.quotes) { + this.valid = false; + this.validationMessage = advFilterExpSvc.translate("advancedFilterValidationMissingQuote"); + } else if (this.modelValue === "") { + this.valid = false; + this.validationMessage = advFilterExpSvc.translate("advancedFilterValidationMissingValue"); + } else { + const modelValue = advFilterExpSvc.getOperandModelValue(this.operand, this.baseCellDataType, this.column); + if (modelValue != null) { + this.modelValue = modelValue; + } + this.filterValidationSetters[this.baseCellDataType](modelValue); + } + } +}; +var COL_FILTER_EXPRESSION_START_CHAR = "["; +var COL_FILTER_EXPRESSION_END_CHAR = "]"; +var ColFilterExpressionParser = class { + constructor(params, startPosition) { + this.params = params; + this.startPosition = startPosition; + this.isAwaiting = true; + this.operandValueGetters = { + number: Number, + bigint: (operand) => _parseBigIntOrNull(operand), + date: (operand) => this.params.valueSvc.parseValue(this.columnParser.column, null, operand, void 0), + dateString: (operand) => this.operandValueGetters.date(operand), + dateTime: (operand) => this.operandValueGetters.date(operand), + dateTimeString: (operand) => this.operandValueGetters.date(operand), + boolean: (operand) => operand, + object: (operand) => operand, + text: (operand) => operand + }; + } + parseExpression() { + let i = this.startPosition; + const { expression } = this.params; + while (i < expression.length) { + const char = expression[i]; + if (char === " " && this.isAwaiting) { + } else { + this.isAwaiting = false; + if (!this.parser) { + let parser; + if (!this.columnParser) { + this.columnParser = new ColumnParser(this.params, i); + parser = this.columnParser; + } else if (!this.operatorParser) { + this.operatorParser = new OperatorParser(this.params, i, this.columnParser.baseCellDataType); + parser = this.operatorParser; + } else { + this.operandParser = new OperandParser( + this.params, + i, + this.columnParser.baseCellDataType, + this.columnParser.column + ); + parser = this.operandParser; + } + this.parser = parser; + } + const hasCompletedOnPrevChar = this.parser.parse(char, i); + if (hasCompletedOnPrevChar != null) { + if (this.isComplete()) { + return this.returnEndPosition(hasCompletedOnPrevChar ? i - 1 : i, true); + } + this.parser = void 0; + this.isAwaiting = true; + } + } + i++; + } + this.parser?.complete?.(i - 1); + return this.returnEndPosition(i); + } + isValid() { + return this.isComplete() && this.columnParser.valid && this.operatorParser.valid && (!this.operandParser || this.operandParser.valid); + } + getValidationError() { + const validationError = this.columnParser?.getValidationError() ?? this.operatorParser?.getValidationError() ?? this.operandParser?.getValidationError(); + if (validationError) { + return validationError; + } + const endPosition = this.params.expression.length; + let translateKey; + if (!this.columnParser) { + translateKey = "advancedFilterValidationMissingColumn"; + } else if (!this.operatorParser) { + translateKey = "advancedFilterValidationMissingOption"; + } else if (this.operatorParser.expectedNumOperands && !this.operandParser) { + translateKey = "advancedFilterValidationMissingValue"; + } + if (translateKey) { + return { + message: this.params.advFilterExpSvc.translate(translateKey), + startPosition: endPosition, + endPosition + }; + } + return null; + } + getFunction(params) { + return this.getFunctionCommon(params, (operandIndex, operatorIndex, colId, evaluatorParamsIndex) => { + return (expressionProxy, node, p) => p.operators[operatorIndex].evaluator( + expressionProxy.getValue(colId, node), + node, + p.evaluatorParams[evaluatorParamsIndex], + operandIndex == null ? void 0 : p.operands[operandIndex] + ); + }); + } + getAutocompleteListParams(position) { + if (this.isColumnPosition(position)) { + return this.getColumnAutocompleteListParams(position); + } + if (this.isOperatorPosition(position)) { + return this.getOperatorAutocompleteListParams(position); + } + if (this.isBeyondEndPosition(position)) { + return void 0; + } + return { enabled: false }; + } + updateExpression(position, updateEntry, type) { + const { expression } = this.params; + if (this.isColumnPosition(position)) { + return updateExpression( + this.params.expression, + this.startPosition, + this.columnParser?.getColId() ? this.columnParser.endPosition : findEndPosition(expression, position).endPosition, + this.params.advFilterExpSvc.getColumnValue(updateEntry), + true + ); + } else if (this.isOperatorPosition(position)) { + const baseCellDataType = this.getBaseCellDataTypeFromOperatorAutocompleteType(type); + const hasOperand = this.hasOperand(baseCellDataType, updateEntry.key); + const doesOperandNeedQuotes = hasOperand && this.doesOperandNeedQuotes(baseCellDataType); + let update; + if (this.operatorParser?.startPosition != null && position < this.operatorParser.startPosition) { + update = updateExpression( + expression, + position, + position, + updateEntry.displayValue ?? updateEntry.key, + hasOperand, + doesOperandNeedQuotes + ); + } else { + let endPosition; + let empty = false; + if (this.operatorParser?.getOperatorKey()) { + endPosition = this.operatorParser.endPosition; + } else { + const { endPosition: calculatedEndPosition, isEmpty } = findEndPosition( + expression, + position, + true, + true + ); + endPosition = calculatedEndPosition; + empty = isEmpty; + } + update = updateExpression( + expression, + findStartPosition(expression, this.columnParser.endPosition + 1, endPosition), + endPosition, + updateEntry.displayValue ?? updateEntry.key, + hasOperand, + doesOperandNeedQuotes, + empty + ); + } + return { ...update, hideAutocomplete: !hasOperand }; + } + return null; + } + getModel() { + const colId = this.columnParser.getColId(); + const model = { + filterType: this.columnParser.baseCellDataType, + colId, + type: this.operatorParser.getOperatorKey() + }; + if (this.operatorParser.expectedNumOperands) { + model.filter = this.operandParser.getModelValue(); + } + return model; + } + getFunctionCommon(params, processFunc) { + const colId = this.columnParser.getColId(); + const operator = this.operatorParser?.getOperatorKey(); + const { operators, evaluatorParams, operands } = params; + const operatorForColumn = this.params.advFilterExpSvc.getExpressionOperator( + this.columnParser.baseCellDataType, + operator + ); + const operatorIndex = this.addToListAndGetIndex(operators, operatorForColumn); + const evaluatorParamsForColumn = this.params.advFilterExpSvc.getExpressionEvaluatorParams(colId); + const evaluatorParamsIndex = this.addToListAndGetIndex(evaluatorParams, evaluatorParamsForColumn); + const operandIndex = this.operatorParser?.expectedNumOperands === 0 ? void 0 : this.addToListAndGetIndex(operands, this.getOperandValue()); + return processFunc(operandIndex, operatorIndex, colId, evaluatorParamsIndex); + } + getOperandValue() { + const { baseCellDataType, column } = this.columnParser; + const operand = this.operandValueGetters[baseCellDataType](this.operandParser.getRawValue()); + if (baseCellDataType === "dateString" || baseCellDataType === "dateTimeString") { + return this.params.dataTypeSvc?.getDateParserFunction(column)(operand) ?? operand; + } + return operand; + } + isComplete() { + return !!(this.operatorParser && (!this.operatorParser.expectedNumOperands || this.operatorParser.expectedNumOperands && this.operandParser)); + } + isColumnPosition(position) { + return this.columnParser?.endPosition == null || position <= this.columnParser.endPosition + 1; + } + isOperatorPosition(position) { + return this.operatorParser?.endPosition == null || position <= this.operatorParser.endPosition + 1; + } + isBeyondEndPosition(position) { + return this.isComplete() && this.endPosition != null && position > this.endPosition + 1 && this.endPosition + 1 < this.params.expression.length; + } + returnEndPosition(returnPosition, treatAsEnd) { + this.endPosition = treatAsEnd ? returnPosition : returnPosition - 1; + return returnPosition; + } + getColumnAutocompleteListParams(position) { + return this.params.advFilterExpSvc.generateAutocompleteListParams( + this.params.advFilterExpSvc.getColumnAutocompleteEntries(), + "column", + this.getColumnSearchString(position) + ); + } + getColumnSearchString(position) { + const columnName = this.columnParser?.getDisplayValue() ?? ""; + const searchString = getSearchString( + columnName, + position, + this.columnParser?.endPosition == null ? this.params.expression.length : this.columnParser.endPosition + 1 + ); + const containsStartChar = this.columnParser?.hasStartChar && searchString.length > 0; + const containsEndChar = this.columnParser?.hasEndChar && searchString.length === columnName.length + 2; + if (containsStartChar) { + return searchString.slice(1, containsEndChar ? -1 : void 0); + } + return searchString; + } + getOperatorAutocompleteListParams(position) { + const column = this.columnParser?.column; + if (!column) { + return { enabled: false }; + } + const baseCellDataType = this.columnParser.baseCellDataType; + const searchString = this.operatorParser?.startPosition != null && position < this.operatorParser.startPosition ? "" : getSearchString( + this.operatorParser?.getDisplayValue() ?? "", + position, + this.operatorParser?.endPosition == null ? this.params.expression.length : this.operatorParser.endPosition + 1 + ); + return this.params.advFilterExpSvc.generateAutocompleteListParams( + this.params.advFilterExpSvc.getOperatorAutocompleteEntries(column, baseCellDataType), + `operator-${baseCellDataType}`, + searchString + ); + } + getBaseCellDataTypeFromOperatorAutocompleteType(type) { + return type?.replace("operator-", ""); + } + hasOperand(baseCellDataType, operator) { + return !baseCellDataType || !operator || (this.params.advFilterExpSvc.getExpressionOperator(baseCellDataType, operator)?.numOperands ?? 0) > 0; + } + doesOperandNeedQuotes(baseCellDataType) { + return baseCellDataType !== "number" && baseCellDataType !== "bigint"; + } + addToListAndGetIndex(list, value) { + const index = list.length; + list.push(value); + return index; + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/filterExpressionOperators.ts +function findMatch(searchValue, values, getDisplayValue) { + let partialMatch = false; + const searchValueLowerCase = searchValue.toLocaleLowerCase(); + const partialSearchValue = searchValueLowerCase + " "; + const parsedValue = Object.keys(values).find((key) => { + const value = values[key]; + const displayValueLowerCase = getDisplayValue(value).toLocaleLowerCase(); + if (displayValueLowerCase.startsWith(partialSearchValue)) { + partialMatch = true; + } + return displayValueLowerCase === searchValueLowerCase; + }); + if (parsedValue) { + return parsedValue; + } else if (partialMatch) { + return null; + } else { + return void 0; + } +} +function getEntries(operators, activeOperatorKeys) { + const keys = activeOperatorKeys ?? Object.keys(operators); + return keys.map((key) => ({ + key, + displayValue: operators[key].displayValue + })); +} +var TextFilterExpressionOperators = class { + constructor(params) { + this.params = params; + this.initOperators(); + } + getEntries(activeOperators) { + return getEntries(this.operators, activeOperators); + } + findOperator(displayValue) { + return findMatch(displayValue, this.operators, ({ displayValue: displayValue2 }) => displayValue2); + } + initOperators() { + const { translate } = this.params; + this.operators = { + contains: { + displayValue: translate("advancedFilterContains"), + evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, false, (v, o) => v.includes(o)), + numOperands: 1 + }, + notContains: { + displayValue: translate("advancedFilterNotContains"), + evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, true, (v, o) => !v.includes(o)), + numOperands: 1 + }, + equals: { + displayValue: translate("advancedFilterTextEquals"), + evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, false, (v, o) => v === o), + numOperands: 1 + }, + notEqual: { + displayValue: translate("advancedFilterTextNotEqual"), + evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, true, (v, o) => v != o), + numOperands: 1 + }, + startsWith: { + displayValue: translate("advancedFilterStartsWith"), + evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, false, (v, o) => v.startsWith(o)), + numOperands: 1 + }, + endsWith: { + displayValue: translate("advancedFilterEndsWith"), + evaluator: (value, node, params, operand1) => this.evaluateExpression(value, node, params, operand1, false, (v, o) => v.endsWith(o)), + numOperands: 1 + }, + blank: { + displayValue: translate("advancedFilterBlank"), + evaluator: (value) => value == null || typeof value === "string" && value.trim().length === 0, + numOperands: 0 + }, + notBlank: { + displayValue: translate("advancedFilterNotBlank"), + evaluator: (value) => value != null && (typeof value !== "string" || value.trim().length > 0), + numOperands: 0 + } + }; + } + evaluateExpression(value, node, params, operand, nullsMatch, expression) { + if (value == null) { + return nullsMatch; + } + return params.caseSensitive ? expression(params.valueConverter(value, node), operand) : expression(params.valueConverter(value, node).toLocaleLowerCase(), operand.toLocaleLowerCase()); + } +}; +var ScalarFilterExpressionOperators = class { + constructor(params) { + this.params = params; + this.initOperators(); + } + getEntries(activeOperators) { + return getEntries(this.operators, activeOperators); + } + findOperator(displayValue) { + return findMatch(displayValue, this.operators, ({ displayValue: displayValue2 }) => displayValue2); + } + initOperators() { + const { translate, equals } = this.params; + this.operators = { + equals: { + displayValue: translate("advancedFilterEquals"), + evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression( + value, + node, + params, + operand1, + !!params.includeBlanksInEquals, + equals + ), + numOperands: 1 + }, + notEqual: { + displayValue: translate("advancedFilterNotEqual"), + evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression( + value, + node, + params, + operand1, + !!params.includeBlanksInEquals, + (v, o) => !equals(v, o) + ), + numOperands: 1 + }, + greaterThan: { + displayValue: translate("advancedFilterGreaterThan"), + evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression( + value, + node, + params, + operand1, + !!params.includeBlanksInGreaterThan, + (v, o) => v > o + ), + numOperands: 1 + }, + greaterThanOrEqual: { + displayValue: translate("advancedFilterGreaterThanOrEqual"), + evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression( + value, + node, + params, + operand1, + !!params.includeBlanksInGreaterThan, + (v, o) => v >= o + ), + numOperands: 1 + }, + lessThan: { + displayValue: translate("advancedFilterLessThan"), + evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression( + value, + node, + params, + operand1, + !!params.includeBlanksInLessThan, + (v, o) => v < o + ), + numOperands: 1 + }, + lessThanOrEqual: { + displayValue: translate("advancedFilterLessThanOrEqual"), + evaluator: (value, node, params, operand1) => this.evaluateSingleOperandExpression( + value, + node, + params, + operand1, + !!params.includeBlanksInLessThan, + (v, o) => v <= o + ), + numOperands: 1 + }, + blank: { + displayValue: translate("advancedFilterBlank"), + evaluator: (value) => value == null, + numOperands: 0 + }, + notBlank: { + displayValue: translate("advancedFilterNotBlank"), + evaluator: (value) => value != null, + numOperands: 0 + } + }; + } + evaluateSingleOperandExpression(value, node, params, operand, nullsMatch, expression) { + if (value == null) { + return nullsMatch; + } + return expression(params.valueConverter(value, node), operand); + } +}; +var BooleanFilterExpressionOperators = class { + constructor(params) { + this.params = params; + this.initOperators(); + } + getEntries(activeOperators) { + return getEntries(this.operators, activeOperators); + } + findOperator(displayValue) { + return findMatch(displayValue, this.operators, ({ displayValue: displayValue2 }) => displayValue2); + } + initOperators() { + const { translate } = this.params; + this.operators = { + true: { + displayValue: translate("advancedFilterTrue"), + evaluator: (value) => !!value, + numOperands: 0 + }, + false: { + displayValue: translate("advancedFilterFalse"), + evaluator: (value) => value === false, + numOperands: 0 + }, + blank: { + displayValue: translate("advancedFilterBlank"), + evaluator: (value) => value == null, + numOperands: 0 + }, + notBlank: { + displayValue: translate("advancedFilterNotBlank"), + evaluator: (value) => value != null, + numOperands: 0 + } + }; + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterExpressionService.ts +var AdvancedFilterExpressionService = class extends BeanStub2 { + constructor() { + super(...arguments); + this.beanName = "advFilterExpSvc"; + this.filterOperandGetters = { + number: (model) => _toStringOrNull(model.filter) ?? "", + bigint: (model) => _toStringOrNull(model.filter) ?? "", + date: (model) => { + const column = this.colModel.getColDefCol(model.colId); + if (!column) { + return null; + } + return this.valueSvc.formatValue( + column, + null, + _parseDateTimeFromString(_toStringOrNull(model.filter) ?? "") + ); + }, + dateTime: (model) => this.filterOperandGetters.date(model), + dateString: (model) => { + const column = this.colModel.getColDefCol(model.colId); + if (!column) { + return null; + } + const { filter } = model; + const dateFormatFn = this.dataTypeSvc?.getDateFormatterFunction(column); + const dateStringStringValue = dateFormatFn?.(_parseDateTimeFromString(_toStringOrNull(model.filter) ?? "") ?? void 0) ?? filter; + return this.valueSvc.formatValue(column, null, dateStringStringValue); + }, + dateTimeString: (model) => this.filterOperandGetters.dateString(model), + boolean: () => null, + object: () => null, + text: () => null + }; + this.operandModelValueGetters = { + number: (operand) => _exists3(operand) ? Number(operand) : null, + bigint: (operand) => operand, + date: (operand, column, baseCellDataType) => _serialiseDate( + this.valueSvc.parseValue(column, null, operand, void 0), + !!this.dataTypeSvc?.getDateIncludesTimeFlag(baseCellDataType) + ), + dateTime: (...args) => this.operandModelValueGetters.date(...args), + dateString: (operand, column, baseCellDataType) => { + const parsedDateString = this.valueSvc.parseValue(column, null, operand, void 0); + if (this.dataTypeSvc) { + return _serialiseDate( + this.dataTypeSvc.getDateParserFunction(column)(parsedDateString) ?? null, + this.dataTypeSvc.getDateIncludesTimeFlag(baseCellDataType) + ); + } + return parsedDateString; + }, + dateTimeString: (...args) => this.operandModelValueGetters.dateString(...args), + boolean: (operand) => operand, + object: (operand) => operand, + text: (operand) => operand + }; + this.columnNameToIdMap = {}; + this.columnAutocompleteEntries = null; + this.expressionEvaluatorParams = {}; + } + wireBeans(beans) { + this.valueSvc = beans.valueSvc; + this.colModel = beans.colModel; + this.colNames = beans.colNames; + this.dataTypeSvc = beans.dataTypeSvc; + } + postConstruct() { + this.expressionJoinOperators = this.generateExpressionJoinOperators(); + this.expressionOperators = this.generateExpressionOperators(); + } + parseJoinOperator(model) { + const { type } = model; + return this.expressionJoinOperators[type] ?? type; + } + getColumnDisplayValue(model) { + const { colId } = model; + const columnEntries = this.getColumnAutocompleteEntries(); + const columnEntry = columnEntries.find(({ key }) => key === colId); + let columnName; + if (columnEntry) { + columnName = columnEntry.displayValue; + this.columnNameToIdMap[columnName.toLocaleUpperCase()] = { colId, columnName }; + } else { + columnName = colId; + } + return columnName; + } + getOperatorDisplayValue(model) { + return this.getExpressionOperator(model.filterType, model.type)?.displayValue ?? model.type; + } + getOperandModelValue(operand, baseCellDataType, column) { + return this.operandModelValueGetters[baseCellDataType](operand, column, baseCellDataType); + } + getOperandDisplayValue(model, skipFormatting) { + const { filter, filterType } = model; + if (filter == null) { + return ""; + } + let operand1 = this.filterOperandGetters[filterType]( + model + ); + if (filterType !== "number" && filterType !== "bigint") { + operand1 ?? (operand1 = _toStringOrNull(filter) ?? ""); + if (!skipFormatting) { + operand1 = `"${operand1}"`; + } + } + return skipFormatting ? operand1 : ` ${operand1}`; + } + parseColumnFilterModel(model) { + const columnName = this.getColumnDisplayValue(model) ?? ""; + const operator = this.getOperatorDisplayValue(model) ?? ""; + const operands = this.getOperandDisplayValue(model); + return `[${columnName}] ${operator}${operands}`; + } + updateAutocompleteCache(updateEntry, type) { + if (type === "column") { + const { key: colId, displayValue } = updateEntry; + this.columnNameToIdMap[updateEntry.displayValue.toLocaleUpperCase()] = { + colId, + columnName: displayValue + }; + } + } + translate(key, variableValues) { + let defaultValue = ADVANCED_FILTER_LOCALE_TEXT[key]; + if (typeof defaultValue === "function") { + defaultValue = defaultValue(variableValues); + } + return this.getLocaleTextFunc()(key, defaultValue, variableValues); + } + generateAutocompleteListParams(entries, type, searchString) { + return { + enabled: true, + type, + searchString, + entries + }; + } + getColumnAutocompleteEntries() { + if (this.columnAutocompleteEntries) { + return this.columnAutocompleteEntries; + } + const columns = this.colModel.getColDefCols() ?? []; + const entries = []; + const includeHiddenColumns = this.gos.get("includeHiddenColumnsInAdvancedFilter"); + for (const column of columns) { + if (column.getColDef().filter && (includeHiddenColumns || column.isVisible() || column.isRowGroupActive())) { + entries.push({ + key: column.getColId(), + displayValue: this.colNames.getDisplayNameForColumn(column, "advancedFilter") + }); + } + } + entries.sort((a, b) => { + const aValue = a.displayValue ?? ""; + const bValue = b.displayValue ?? ""; + if (aValue < bValue) { + return -1; + } else if (bValue > aValue) { + return 1; + } + return 0; + }); + return entries; + } + getOperatorAutocompleteEntries(column, baseCellDataType) { + const activeOperators = this.getActiveOperators(column); + return this.getDataTypeExpressionOperator(baseCellDataType).getEntries(activeOperators); + } + getJoinOperatorAutocompleteEntries() { + return Object.entries(this.expressionJoinOperators).map(([key, displayValue]) => ({ key, displayValue })); + } + getDefaultAutocompleteListParams(searchString) { + return this.generateAutocompleteListParams(this.getColumnAutocompleteEntries(), "column", searchString); + } + getDataTypeExpressionOperator(baseCellDataType) { + return this.expressionOperators[baseCellDataType]; + } + getExpressionOperator(baseCellDataType, operator) { + return this.getDataTypeExpressionOperator(baseCellDataType)?.operators?.[operator]; + } + getExpressionJoinOperators() { + return this.expressionJoinOperators; + } + getColId(columnName) { + const upperCaseColumnName = columnName.toLocaleUpperCase(); + const cachedColId = this.columnNameToIdMap[upperCaseColumnName]; + if (cachedColId) { + return cachedColId; + } + const columnAutocompleteEntries = this.getColumnAutocompleteEntries(); + const colEntry = columnAutocompleteEntries.find( + ({ displayValue }) => displayValue.toLocaleUpperCase() === upperCaseColumnName + ); + if (colEntry) { + const { key: colId, displayValue } = colEntry; + const colValue = { colId, columnName: displayValue }; + this.columnNameToIdMap[upperCaseColumnName] = colValue; + return colValue; + } + return null; + } + getExpressionEvaluatorParams(colId) { + let params = this.expressionEvaluatorParams[colId]; + if (params) { + return params; + } + const column = this.colModel.getColDefCol(colId); + if (!column) { + return { valueConverter: (v) => v }; + } + const baseCellDataType = this.dataTypeSvc?.getBaseDataType(column); + switch (baseCellDataType) { + case "dateTimeString": + case "dateString": + params = { + valueConverter: this.dataTypeSvc?.getDateParserFunction(column) ?? ((v) => v) + }; + break; + case "object": + if (column.getColDef().filterValueGetter) { + params = { valueConverter: (v) => v }; + } else { + params = { + valueConverter: (value, node) => this.valueSvc.formatValue(column, node, value) ?? (typeof value.toString === "function" ? value.toString() : "") + }; + } + break; + case "text": + case void 0: + params = { valueConverter: (v) => _toStringOrNull(v) }; + break; + default: + params = { valueConverter: (v) => v }; + break; + } + const { filterParams } = column.getColDef(); + if (filterParams) { + ["caseSensitive", "includeBlanksInEquals", "includeBlanksInLessThan", "includeBlanksInGreaterThan"].forEach( + (param) => { + const paramValue = filterParams[param]; + if (paramValue) { + params[param] = paramValue; + } + } + ); + } + this.expressionEvaluatorParams[colId] = params; + return params; + } + getColumnDetails(colId) { + const column = this.colModel.getColDefCol(colId) ?? void 0; + const baseCellDataType = (column ? this.dataTypeSvc?.getBaseDataType(column) : void 0) ?? "text"; + return { column, baseCellDataType }; + } + generateExpressionOperators() { + const translate = (key, variableValues) => this.translate(key, variableValues); + const dateOperatorsParams = { + translate, + equals: (v, o) => v.getTime() === o.getTime() + }; + return { + text: new TextFilterExpressionOperators({ translate }), + boolean: new BooleanFilterExpressionOperators({ translate }), + object: new TextFilterExpressionOperators({ translate }), + number: new ScalarFilterExpressionOperators({ translate, equals: (v, o) => v === o }), + bigint: new ScalarFilterExpressionOperators({ translate, equals: (v, o) => v === o }), + date: new ScalarFilterExpressionOperators(dateOperatorsParams), + dateString: new ScalarFilterExpressionOperators(dateOperatorsParams), + dateTime: new ScalarFilterExpressionOperators(dateOperatorsParams), + dateTimeString: new ScalarFilterExpressionOperators(dateOperatorsParams) + }; + } + getColumnValue({ displayValue }) { + return `${COL_FILTER_EXPRESSION_START_CHAR}${displayValue}${COL_FILTER_EXPRESSION_END_CHAR}`; + } + generateExpressionJoinOperators() { + return { + AND: this.translate("advancedFilterAnd"), + OR: this.translate("advancedFilterOr") + }; + } + getActiveOperators(column) { + const filterOptions = column.getColDef().filterParams?.filterOptions; + if (!filterOptions) { + return void 0; + } + const isValid = filterOptions.every((filterOption) => typeof filterOption === "string"); + return isValid ? filterOptions : void 0; + } + resetColumnCaches() { + this.columnAutocompleteEntries = null; + this.columnNameToIdMap = {}; + this.expressionEvaluatorParams = {}; + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterService.ts +import { BeanStub as BeanStub6, _exists as _exists11, _isClientSideRowModel, _isServerSideRowModel, _warn as _warn4 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterCtrl.ts +import { BeanStub as BeanStub5, _getAbsoluteHeight, _getAbsoluteWidth, _removeFromParent as _removeFromParent4 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/dialog.ts +import { _STOP_PROPAGATION_CALLBACKS, _focusNextGridCoreContainer } from "ag-grid-community"; +var DIALOG_CALLBACKS = { + stopPropagationCallbacks: _STOP_PROPAGATION_CALLBACKS, + focusNextContainer: (beans, backwards) => { + return _focusNextGridCoreContainer(beans, backwards); + }, + configureFocusableContainer: (beans, dialog) => { + const gridCtrl = beans.ctrlsSvc.get("gridCtrl"); + gridCtrl.addFocusableContainer(dialog); + dialog.addDestroyFunc(() => gridCtrl.removeFocusableContainer(dialog)); + } +}; +var Dialog = class extends AgDialog { + constructor(config) { + super(config, DIALOG_CALLBACKS); + } + getFocusableContainerName() { + return "dialog"; + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterComp.ts +import { + AgFilterButtonSelector, + Component as Component4, + RefPlaceholder as RefPlaceholder11, + _createIconNoSpan, + _makeNull as _makeNull2, + _setDisabled, + _setDisplayed as _setDisplayed5 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/advancedFilter/autocomplete/agAutocomplete.ts +import { + AgInputTextFieldSelector, + Component as Component3, + KeyCode as KeyCode9, + RefPlaceholder as RefPlaceholder10, + _isNothingFocused, + _makeNull +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/advancedFilter/autocomplete/agAutocomplete.css +var agAutocomplete_default = ".ag-autocomplete{align-items:center;display:flex;width:100%;>:where(.ag-text-field){flex:1 1 auto}}.ag-autocomplete-list-popup{background-color:var(--ag-background-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);padding:0;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-autocomplete-list{height:calc(var(--ag-row-height)*6.5);min-width:200px;position:relative;width:100%}.ag-autocomplete-virtual-list-item{cursor:default;display:flex;height:var(--ag-list-item-height);&:focus-visible:after{content:none}}.ag-autocomplete-virtual-list-item:hover{background-color:var(--ag-row-hover-color)}.ag-autocomplete-row{align-items:center;display:flex;flex:1 1 auto;overflow:hidden}.ag-autocomplete-row-label{margin:0 var(--ag-widget-container-horizontal-padding);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-autocomplete-row-selected{background-color:var(--ag-selected-row-background-color)}"; + +// packages/ag-grid-enterprise/src/advancedFilter/autocomplete/agAutocompleteList.ts +import { AgPopupComponent, KeyCode as KeyCode8, RefPlaceholder as RefPlaceholder9, _exists as _exists5, _fuzzySuggestions, _isVisible as _isVisible3 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/virtualList.ts +import { _STOP_PROPAGATION_CALLBACKS as _STOP_PROPAGATION_CALLBACKS2 } from "ag-grid-community"; +var VirtualList = class extends AgVirtualList { + constructor(params) { + super(_STOP_PROPAGATION_CALLBACKS2, params); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/autocomplete/agAutocompleteRow.ts +import { Component as Component2, _clearElement as _clearElement2, _createElement as _createElement3, _exists as _exists4 } from "ag-grid-community"; +var AgAutocompleteRowElement = { + tag: "div", + cls: "ag-autocomplete-row", + role: "presentation", + children: [{ tag: "div", cls: "ag-autocomplete-row-label" }] +}; +var AgAutocompleteRow = class extends Component2 { + constructor() { + super(AgAutocompleteRowElement); + this.hasHighlighting = false; + } + setState(value, selected) { + this.value = value; + this.render(); + this.updateSelected(selected); + } + updateSelected(selected) { + this.toggleCss("ag-autocomplete-row-selected", selected); + } + setSearchString(searchString) { + let keepHighlighting = false; + const { value } = this; + if (value && _exists4(searchString)) { + const index = value.toLocaleLowerCase().indexOf(searchString.toLocaleLowerCase()); + if (index >= 0) { + keepHighlighting = true; + this.hasHighlighting = true; + const highlightEndIndex = index + searchString.length; + const child = this.getGui().lastElementChild; + _clearElement2(child); + child.append( + // Start part + value.slice(0, index), + // Highlighted part wrapped in bold tag + _createElement3({ tag: "b", children: value.slice(index, highlightEndIndex) }), + // End part + value.slice(highlightEndIndex) + ); + } + } + if (!keepHighlighting && this.hasHighlighting) { + this.hasHighlighting = false; + this.render(); + } + } + render() { + this.getGui().lastElementChild.textContent = this.value ?? "\xA0"; + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/autocomplete/agAutocompleteList.ts +var AgAutocompleteListElement = { + tag: "div", + cls: "ag-autocomplete-list-popup", + children: [ + { + tag: "div", + ref: "eList", + cls: "ag-autocomplete-list" + } + ] +}; +var AgAutocompleteList = class extends AgPopupComponent { + constructor(params) { + super(AgAutocompleteListElement); + this.params = params; + this.eList = RefPlaceholder9; + this.searchString = ""; + this.lastAutoListHeight = null; + } + postConstruct() { + this.autocompleteEntries = this.params.autocompleteEntries; + this.virtualList = this.createManagedBean(new VirtualList({ cssIdentifier: "autocomplete" })); + this.virtualList.setComponentCreator(this.createRowComponent.bind(this)); + this.eList.appendChild(this.virtualList.getGui()); + this.virtualList.setModel({ + getRowCount: () => this.autocompleteEntries.length, + getRow: (index) => this.autocompleteEntries[index] + }); + const virtualListGui = this.virtualList.getGui(); + this.addManagedListeners(virtualListGui, { + click: () => this.params.onConfirmed(), + mousemove: this.onMouseMove.bind(this), + mousedown: (e) => e.preventDefault() + }); + this.setSelectedValue(0); + this.updateListHeight(); + } + onNavigationKeyDown(event, key) { + event.preventDefault(); + const oldIndex = this.autocompleteEntries.indexOf(this.selectedValue); + const newIndex = key === KeyCode8.UP ? oldIndex - 1 : oldIndex + 1; + this.checkSetSelectedValue(newIndex); + } + setSearch(searchString) { + this.searchString = searchString; + if (_exists5(searchString)) { + this.runSearch(); + } else { + this.autocompleteEntries = this.params.autocompleteEntries; + this.virtualList.refresh(); + this.checkSetSelectedValue(0); + this.updateListHeight(); + } + this.updateSearchInList(); + } + runContainsSearch(searchString, searchStrings) { + let topMatch; + let topMatchStartsWithSearchString = false; + const lowerCaseSearchString = searchString.toLocaleLowerCase(); + const allMatches = searchStrings.filter((string) => { + const lowerCaseString = string.toLocaleLowerCase(); + const index = lowerCaseString.indexOf(lowerCaseSearchString); + const startsWithSearchString = index === 0; + const isMatch = index >= 0; + if (isMatch && (!topMatch || !topMatchStartsWithSearchString && startsWithSearchString || topMatchStartsWithSearchString === startsWithSearchString && string.length < topMatch.length)) { + topMatch = string; + topMatchStartsWithSearchString = startsWithSearchString; + } + return isMatch; + }); + if (!topMatch && allMatches.length) { + topMatch = allMatches[0]; + } + return { topMatch, allMatches }; + } + runStartsWithSearch(searchString, searchStrings) { + const lowerCaseSearchString = searchString.toLocaleLowerCase(); + const allMatches = searchStrings.filter( + (string) => string.toLocaleLowerCase().startsWith(lowerCaseSearchString) + ); + const topMatch = allMatches[0]; + return { topMatch, allMatches }; + } + runSearch() { + const { autocompleteEntries, useFuzzySearch, useStartsWithSearch, forceLastSelection } = this.params; + const searchStrings = autocompleteEntries.map((v) => v.displayValue ?? v.key); + let matchingStrings; + let topSuggestion; + if (useFuzzySearch) { + matchingStrings = _fuzzySuggestions({ + inputValue: this.searchString, + allSuggestions: searchStrings, + hideIrrelevant: true + }).values; + topSuggestion = matchingStrings.length ? matchingStrings[0] : void 0; + } else { + const matches = useStartsWithSearch ? this.runStartsWithSearch(this.searchString, searchStrings) : this.runContainsSearch(this.searchString, searchStrings); + matchingStrings = matches.allMatches; + topSuggestion = matches.topMatch; + } + let filteredEntries = autocompleteEntries.filter( + ({ key, displayValue }) => matchingStrings.includes(displayValue ?? key) + ); + if (!filteredEntries.length && this.selectedValue && forceLastSelection?.(this.selectedValue, this.searchString)) { + filteredEntries = [this.selectedValue]; + } + this.autocompleteEntries = filteredEntries; + this.virtualList.refresh(); + this.updateListHeight(); + if (!topSuggestion) { + return; + } + const topSuggestionIndex = matchingStrings.indexOf(topSuggestion); + this.checkSetSelectedValue(topSuggestionIndex); + } + updateSearchInList() { + this.virtualList.forEachRenderedRow((row) => row.setSearchString(this.searchString)); + } + updateListHeight() { + if (!this.params.autoSizeList) { + return; + } + const rowCount = this.autocompleteEntries.length; + const rowHeight = this.virtualList.getRowHeight(); + const maxItems = this.params.maxVisibleItems ?? rowCount; + const visibleCount = Math.min(rowCount, maxItems); + let height = visibleCount * rowHeight; + if (rowCount === 0) { + height = rowHeight; + } + if (this.lastAutoListHeight === height) { + return; + } + this.lastAutoListHeight = height; + this.eList.style.height = `${height}px`; + if (_isVisible3(this.eList)) { + this.params.onListHeightChanged?.(); + } + } + checkSetSelectedValue(index) { + if (index >= 0 && index < this.autocompleteEntries.length) { + this.setSelectedValue(index); + } + } + setSelectedValue(index) { + const value = this.autocompleteEntries[index]; + if (this.selectedValue === value) { + return; + } + this.selectedValue = value; + this.virtualList.ensureIndexVisible(index); + this.virtualList.forEachRenderedRow((cmp, idx) => { + cmp.updateSelected(index === idx); + }); + } + createRowComponent(value) { + const row = new AgAutocompleteRow(); + this.createBean(row); + row.setState(value.displayValue ?? value.key, value === this.selectedValue); + return row; + } + onMouseMove(mouseEvent) { + const virtualList = this.virtualList; + const rect = virtualList.getGui().getBoundingClientRect(); + const scrollTop = virtualList.getScrollTop(); + const mouseY = mouseEvent.clientY - rect.top + scrollTop; + const row = Math.floor(mouseY / virtualList.getRowHeight()); + this.checkSetSelectedValue(row); + } + afterGuiAttached() { + this.virtualList.refresh(); + this.updateListHeight(); + } + getSelectedValue() { + if (!this.autocompleteEntries.length) { + return null; + } + return this.selectedValue ?? null; + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/autocomplete/agAutocomplete.ts +var AgAutocompleteElement = { + tag: "div", + cls: "ag-autocomplete", + role: "presentation", + children: [ + { + tag: "ag-input-text-field", + ref: "eAutocompleteInput" + } + ] +}; +var AgAutocomplete = class extends Component3 { + constructor() { + super(AgAutocompleteElement, [AgInputTextFieldSelector]); + this.eAutocompleteInput = RefPlaceholder10; + this.isListOpen = false; + this.lastPosition = 0; + this.valid = true; + this.registerCSS(agAutocomplete_default); + } + wireBeans(beans) { + this.popupSvc = beans.popupSvc; + } + postConstruct() { + this.eAutocompleteInput.onValueChange((value) => this.onValueChanged(value)); + this.eAutocompleteInput.getInputElement().setAttribute("autocomplete", "off"); + this.addGuiEventListener("keydown", this.onKeyDown.bind(this)); + this.addGuiEventListener("click", this.updatePositionAndList.bind(this)); + this.addDestroyFunc(() => { + this.destroyBean(this.autocompleteList); + }); + this.addGuiEventListener("focusout", () => this.onFocusOut()); + } + onValueChanged(value) { + const parsedValue = _makeNull(value); + this.updateValue(parsedValue); + this.updateAutocompleteList(parsedValue); + } + updateValue(value) { + this.updateLastPosition(); + this.dispatchLocalEvent({ + type: "eventValueChanged", + value + }); + this.validate(value); + } + updateAutocompleteList(value) { + const autocompleteListParams = this.listGenerator?.(value, this.lastPosition) ?? { enabled: false }; + if (!autocompleteListParams.type || autocompleteListParams.type !== this.autocompleteListParams?.type) { + if (this.isListOpen) { + this.closeList(); + } + } + const isListOpen = this.isListOpen; + this.autocompleteListParams = autocompleteListParams; + if (autocompleteListParams?.enabled) { + if (!isListOpen) { + this.openList(); + } + const { searchString } = autocompleteListParams; + this.autocompleteList.setSearch(searchString ?? ""); + } else if (isListOpen) { + this.closeList(); + } + } + onKeyDown(event) { + const key = event.key; + this.updateLastPosition(); + switch (key) { + case KeyCode9.ENTER: + this.onEnterKeyDown(event); + break; + case KeyCode9.TAB: + this.onTabKeyDown(event); + break; + case KeyCode9.DOWN: + case KeyCode9.UP: + this.onUpDownKeyDown(event, key); + break; + case KeyCode9.LEFT: + case KeyCode9.RIGHT: + case KeyCode9.PAGE_HOME: + case KeyCode9.PAGE_END: + setTimeout(() => { + this.updatePositionAndList(); + }); + break; + case KeyCode9.ESCAPE: + this.onEscapeKeyDown(event); + break; + case KeyCode9.SPACE: + if (event.ctrlKey && !this.isListOpen) { + event.preventDefault(); + this.forceOpenList(); + } + break; + } + } + confirmSelection() { + const selectedValue = this.autocompleteList?.getSelectedValue(); + if (selectedValue) { + this.closeList(); + this.dispatchLocalEvent({ + type: "eventOptionSelected", + value: this.getValue(), + position: this.lastPosition, + updateEntry: selectedValue, + autocompleteType: this.autocompleteListParams.type + }); + } + } + onTabKeyDown(event) { + if (this.isListOpen) { + event.preventDefault(); + event.stopPropagation(); + this.confirmSelection(); + } + } + onEnterKeyDown(event) { + event.preventDefault(); + if (this.isListOpen) { + this.confirmSelection(); + } else { + this.onCompleted(); + } + } + onUpDownKeyDown(event, key) { + event.preventDefault(); + if (!this.isListOpen) { + this.forceOpenList(); + } else { + this.autocompleteList?.onNavigationKeyDown(event, key); + } + } + onEscapeKeyDown(event) { + if (this.isListOpen) { + event.preventDefault(); + event.stopPropagation(); + this.closeList(); + this.setCaret(this.lastPosition, true); + } + } + onFocusOut() { + if (this.isListOpen) { + this.closeList(); + } + } + updatePositionAndList() { + this.updateLastPosition(); + this.updateAutocompleteList(this.eAutocompleteInput.getValue() ?? null); + } + setCaret(position, setFocus) { + if (setFocus || _isNothingFocused(this.beans)) { + this.eAutocompleteInput.getFocusableElement().focus(); + } + const eInput = this.eAutocompleteInput.getInputElement(); + eInput.setSelectionRange(position, position); + if (position === eInput.value.length) { + eInput.scrollLeft = eInput.scrollWidth; + } + } + forceOpenList() { + this.onValueChanged(this.eAutocompleteInput.getValue()); + } + updateLastPosition() { + this.lastPosition = this.eAutocompleteInput.getInputElement().selectionStart ?? 0; + } + validate(value) { + if (!this.validator) { + return; + } + const validationMessage = this.validationMessage = this.validator(value); + this.eAutocompleteInput.getInputElement().setCustomValidity(validationMessage ?? ""); + this.valid = !validationMessage; + this.dispatchLocalEvent({ + type: "eventValidChanged", + isValid: this.valid, + validationMessage + }); + } + openList() { + this.isListOpen = true; + this.autocompleteList = this.createBean( + new AgAutocompleteList({ + autocompleteEntries: this.autocompleteListParams.entries, + onConfirmed: () => this.confirmSelection(), + forceLastSelection: this.forceLastSelection + }) + ); + const ePopupGui = this.autocompleteList.getGui(); + const positionParams = { + ePopup: ePopupGui, + type: "autocomplete", + eventSource: this.getGui(), + position: "under", + alignSide: this.gos.get("enableRtl") ? "right" : "left", + keepWithinBounds: true + }; + const addPopupRes = this.popupSvc.addPopup({ + eChild: ePopupGui, + anchorToElement: this.getGui(), + positionCallback: () => this.popupSvc.positionPopupByComponent(positionParams), + ariaLabel: this.listAriaLabel + }); + this.hidePopup = addPopupRes.hideFunc; + this.autocompleteList.afterGuiAttached(); + } + closeList() { + this.isListOpen = false; + this.hidePopup(); + this.destroyBean(this.autocompleteList); + this.autocompleteList = null; + } + onCompleted() { + if (this.isListOpen) { + this.closeList(); + } + this.dispatchLocalEvent({ + type: "eventValueConfirmed", + value: this.getValue(), + isValid: this.isValid() + }); + } + getValue() { + return _makeNull(this.eAutocompleteInput.getValue()); + } + setInputPlaceholder(placeholder) { + this.eAutocompleteInput.setInputPlaceholder(placeholder); + return this; + } + setInputAriaLabel(label) { + this.eAutocompleteInput.setInputAriaLabel(label); + return this; + } + setListAriaLabel(label) { + this.listAriaLabel = label; + return this; + } + setListGenerator(listGenerator) { + this.listGenerator = listGenerator; + return this; + } + setValidator(validator) { + this.validator = validator; + return this; + } + isValid() { + return this.valid; + } + setValue(params) { + const { value, position, silent, updateListOnlyIfOpen, restoreFocus } = params; + this.eAutocompleteInput.setValue(value, true); + this.setCaret(position ?? this.lastPosition, restoreFocus); + if (!silent) { + this.updateValue(value); + } + if (!updateListOnlyIfOpen || this.isListOpen) { + this.updateAutocompleteList(value); + } + } + setForceLastSelection(forceLastSelection) { + this.forceLastSelection = forceLastSelection; + return this; + } + setInputDisabled(disabled) { + this.eAutocompleteInput.setDisabled(disabled); + return this; + } +}; +var AgAutocompleteSelector = { + selector: "AG-AUTOCOMPLETE", + component: AgAutocomplete +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterComp.ts +var DEFAULT_ADVANCED_FILTER_PARAMS = { + buttons: ["apply"], + suppressBuilderButton: false +}; +var ButtonLocaleMap = { + apply: "advancedFilterApply", + clear: "advancedFilterClear", + cancel: "advancedFilterCancel", + reset: "advancedFilterReset" +}; +var AdvancedFilterElement = { + tag: "div", + cls: "ag-advanced-filter", + role: "presentation", + attrs: { tabindex: "-1" }, + children: [ + { tag: "ag-autocomplete", ref: "eAutocomplete" }, + { + tag: "ag-filter-button", + ref: "eButtons", + cls: "ag-advanced-filter-buttons" + }, + { + tag: "button", + ref: "eBuilderFilterButton", + cls: "ag-button ag-advanced-filter-builder-button", + children: [ + { tag: "span", ref: "eBuilderFilterButtonIcon", attrs: { "aria-hidden": "true" } }, + { tag: "span", ref: "eBuilderFilterButtonLabel", cls: "ag-advanced-filter-builder-button-label" } + ] + } + ] +}; +var AdvancedFilterComp = class extends Component4 { + constructor() { + super(AdvancedFilterElement, [AgAutocompleteSelector, AgFilterButtonSelector]); + this.eAutocomplete = RefPlaceholder11; + this.eButtons = RefPlaceholder11; + this.eBuilderFilterButton = RefPlaceholder11; + this.eBuilderFilterButtonIcon = RefPlaceholder11; + this.eBuilderFilterButtonLabel = RefPlaceholder11; + this.expressionParser = null; + this.isApplyDisabled = true; + this.builderOpen = false; + } + wireBeans(beans) { + this.advFilterExpSvc = beans.advFilterExpSvc; + this.advancedFilter = beans.advancedFilter; + this.filterManager = beans.filterManager; + this.registry = beans.registry; + } + postConstruct() { + this.tooltipFeature = this.createOptionalManagedBean( + this.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.getGui(), + getTooltipShowDelayOverride: () => 1e3, + getLocation: () => "advancedFilter" + }) + ); + this.eAutocomplete.setListGenerator((_value, position) => this.generateAutocompleteListParams(position)).setValidator(() => this.validateValue()).setForceLastSelection( + (lastSelection, searchString) => this.forceLastSelection(lastSelection, searchString) + ).setInputAriaLabel(this.advFilterExpSvc.translate("ariaAdvancedFilterInput")).setListAriaLabel(this.advFilterExpSvc.translate("ariaLabelAdvancedFilterAutocomplete")); + this.refresh(); + this.addManagedListeners(this.eAutocomplete, { + eventValueChanged: ({ value }) => this.onValueChanged(value), + eventValueConfirmed: ({ isValid }) => this.onValueConfirmed(isValid), + eventOptionSelected: ({ position, updateEntry, autocompleteType }) => this.onOptionSelected(position, updateEntry, autocompleteType), + eventValidChanged: ({ isValid, validationMessage }) => this.onValidChanged(isValid, validationMessage) + }); + const { buttons, suppressBuilderButton } = { + ...DEFAULT_ADVANCED_FILTER_PARAMS, + ...this.gos.get("advancedFilterParams") + }; + this.setupButtons(buttons); + this.setupBuilderButton(suppressBuilderButton); + this.beans.gos.addManagedPropertyListener("advancedFilterParams", (event) => { + const currentValue = { ...DEFAULT_ADVANCED_FILTER_PARAMS, ...event.currentValue }; + const previousValue = { ...DEFAULT_ADVANCED_FILTER_PARAMS, ...event.previousValue }; + if (currentValue.buttons !== previousValue.buttons) { + const buttons2 = currentValue.buttons.map((type) => ({ + type, + label: this.advFilterExpSvc.translate(ButtonLocaleMap[type]) + })); + this.eButtons.updateButtons(buttons2); + } + if (currentValue.suppressBuilderButton !== previousValue.suppressBuilderButton) { + _setDisplayed5(this.eBuilderFilterButton, !currentValue.suppressBuilderButton); + } + }); + } + refresh() { + const expression = this.advancedFilter.getExpressionDisplayValue(); + this.eAutocomplete.setValue({ + value: expression ?? "", + position: expression?.length, + updateListOnlyIfOpen: true + }); + } + setInputDisabled(disabled) { + this.eAutocomplete.setInputDisabled(disabled); + this.eButtons.updateValidity( + !disabled && !this.isApplyDisabled && !this.advancedFilter.isCurrentExpressionApplied() + ); + } + setupButtons(actions) { + const buttons = actions.map((type) => ({ + type, + label: this.advFilterExpSvc.translate(ButtonLocaleMap[type]) + })); + const getListener = (action) => () => { + this.updateModel(action); + }; + this.eButtons.addManagedListeners(this.eButtons, { + apply: getListener("apply"), + clear: getListener("clear"), + reset: getListener("reset"), + cancel: getListener("cancel") + }); + this.eButtons.updateButtons(buttons); + } + updateModel(action) { + switch (action) { + case "apply": + this.onValueConfirmed(this.eAutocomplete.isValid()); + break; + case "reset": + this.advancedFilter.setModel(null); + this.filterManager?.onFilterChanged({ source: "advancedFilter" }); + break; + case "cancel": + this.advancedFilter.setModel(this.advancedFilter.getModel()); + this.filterManager?.onFilterChanged({ source: "advancedFilter" }); + break; + case "clear": + this.eAutocomplete.setValue({ + value: "", + restoreFocus: true + }); + break; + } + } + setupBuilderButton(suppressed) { + this.eBuilderFilterButtonIcon.appendChild(_createIconNoSpan("advancedFilterBuilder", this.beans)); + this.eBuilderFilterButtonLabel.textContent = this.advFilterExpSvc.translate("advancedFilterBuilder"); + this.activateTabIndex([this.eBuilderFilterButton]); + this.addManagedElementListeners(this.eBuilderFilterButton, { click: () => this.openBuilder() }); + this.addManagedListeners(this.advancedFilter.getCtrl(), { + advancedFilterBuilderClosed: () => this.closeBuilder() + }); + _setDisplayed5(this.eBuilderFilterButton, !suppressed); + } + onValueChanged(value) { + value = _makeNull2(value); + this.advancedFilter.setExpressionDisplayValue(value); + this.expressionParser = this.advancedFilter.createExpressionParser(value); + const updatedExpression = this.expressionParser?.parseExpression(); + if (updatedExpression && updatedExpression !== value) { + this.eAutocomplete.setValue({ value: updatedExpression, silent: true, restoreFocus: true }); + } + } + onValueConfirmed(isValid) { + if (!isValid || this.isApplyDisabled) { + return; + } + this.eButtons?.updateValidity(false); + this.advancedFilter.applyExpression(); + this.filterManager?.onFilterChanged({ source: "advancedFilter" }); + } + onOptionSelected(position, updateEntry, type) { + const { updatedValue, updatedPosition, hideAutocomplete } = this.updateExpression(position, updateEntry, type); + this.eAutocomplete.setValue({ + value: updatedValue, + position: updatedPosition, + updateListOnlyIfOpen: hideAutocomplete, + restoreFocus: true + }); + } + validateValue() { + return this.expressionParser?.isValid() ? null : this.expressionParser?.getValidationMessage() ?? null; + } + onValidChanged(isValid, validationMessage) { + this.isApplyDisabled = !isValid || this.advancedFilter.isCurrentExpressionApplied(); + this.eButtons.updateValidity(!this.isApplyDisabled); + this.tooltipFeature?.setTooltipAndRefresh(validationMessage); + } + generateAutocompleteListParams(position) { + return this.expressionParser ? this.expressionParser.getAutocompleteListParams(position) : this.advFilterExpSvc.getDefaultAutocompleteListParams(""); + } + updateExpression(position, updateEntry, type) { + this.advFilterExpSvc.updateAutocompleteCache(updateEntry, type); + return this.expressionParser?.updateExpression(position, updateEntry, type) ?? this.advancedFilter.getDefaultExpression(updateEntry); + } + forceLastSelection({ key, displayValue }, searchString) { + return !!searchString.toLocaleLowerCase().match(`^${(displayValue ?? key).toLocaleLowerCase()}\\s*$`); + } + openBuilder() { + if (this.builderOpen) { + return; + } + this.builderOpen = true; + _setDisabled(this.eBuilderFilterButton, true); + this.advancedFilter.getCtrl().toggleFilterBuilder({ source: "ui", eventSource: this.eBuilderFilterButton }); + } + closeBuilder() { + if (!this.builderOpen) { + return; + } + this.builderOpen = false; + _setDisabled(this.eBuilderFilterButton, false); + this.eBuilderFilterButton.focus(); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterHeaderComp.ts +import { + Component as Component5, + KeyCode as KeyCode10, + _clearElement as _clearElement3, + _findNextFocusableElement as _findNextFocusableElement3, + _focusInto as _focusInto3, + _getActiveDomElement as _getActiveDomElement3, + _getFloatingFiltersHeight, + _setAriaColIndex, + _setAriaColSpan, + _setAriaRole as _setAriaRole5, + _setAriaRowIndex, + _setDisplayed as _setDisplayed6 +} from "ag-grid-community"; +var AdvancedFilterHeaderElement = { + tag: "div", + cls: "ag-advanced-filter-header", + role: "row" +}; +var AdvancedFilterHeaderComp = class extends Component5 { + constructor(enabled) { + super(AdvancedFilterHeaderElement); + this.enabled = enabled; + } + wireBeans(beans) { + this.colModel = beans.colModel; + this.focusSvc = beans.focusSvc; + this.ctrlsSvc = beans.ctrlsSvc; + } + postConstruct() { + this.setupAdvancedFilter(this.enabled); + this.addDestroyFunc(() => this.destroyBean(this.eAdvancedFilter)); + const heightListener = () => { + if (this.enabled) { + this.setEnabledHeight(); + } + }; + this.addManagedEventListeners({ + gridColumnsChanged: () => this.onGridColumnsChanged(), + columnHeaderHeightChanged: heightListener, + stylesChanged: heightListener + }); + this.addManagedPropertyListener("headerHeight", heightListener); + this.addManagedPropertyListener("floatingFiltersHeight", heightListener); + this.addGuiEventListener("keydown", (event) => this.onKeyDown(event)); + this.addGuiEventListener("focusout", (event) => { + if (!this.getFocusableElement().contains(event.relatedTarget)) { + this.focusSvc.clearAdvancedFilterColumn(); + } + }); + } + getFocusableElement() { + return this.eAdvancedFilter?.getGui() ?? this.getGui(); + } + setEnabled(enabled) { + if (enabled === this.enabled) { + return; + } + this.setupAdvancedFilter(enabled); + } + refresh() { + this.eAdvancedFilter?.refresh(); + } + getHeight() { + return this.height; + } + setInputDisabled(disabled) { + this.eAdvancedFilter?.setInputDisabled(disabled); + } + setupAdvancedFilter(enabled) { + const eGui = this.getGui(); + if (enabled) { + this.eAdvancedFilter = this.createBean(new AdvancedFilterComp()); + const eAdvancedFilterGui = this.eAdvancedFilter.getGui(); + this.eAdvancedFilter.addCss("ag-advanced-filter-header-cell"); + this.setEnabledHeight(); + this.setAriaRowIndex(); + _setAriaRole5(eAdvancedFilterGui, "gridcell"); + _setAriaColIndex(eAdvancedFilterGui, 1); + this.setAriaColumnCount(eAdvancedFilterGui); + eGui.appendChild(eAdvancedFilterGui); + } else { + _clearElement3(eGui); + this.destroyBean(this.eAdvancedFilter); + this.height = 0; + } + _setDisplayed6(eGui, enabled); + this.enabled = enabled; + } + setEnabledHeight() { + const eGui = this.getGui(); + this.height = _getFloatingFiltersHeight(this.beans); + const height = `${this.height}px`; + eGui.style.height = height; + eGui.style.minHeight = height; + } + setAriaColumnCount(eAdvancedFilterGui) { + _setAriaColSpan(eAdvancedFilterGui, this.colModel.getCols().length); + } + setAriaRowIndex() { + _setAriaRowIndex(this.getGui(), this.ctrlsSvc.getHeaderRowContainerCtrl()?.getRowCount() ?? 0); + } + onGridColumnsChanged() { + if (!this.eAdvancedFilter) { + return; + } + this.setAriaColumnCount(this.eAdvancedFilter.getGui()); + this.setAriaRowIndex(); + } + onKeyDown(event) { + switch (event.key) { + case KeyCode10.ENTER: { + if (this.hasFocus()) { + if (_focusInto3(this.getFocusableElement())) { + event.preventDefault(); + } + } + break; + } + case KeyCode10.ESCAPE: + if (!this.hasFocus()) { + this.getFocusableElement().focus(); + } + break; + case KeyCode10.UP: + this.navigateUpDown(true, event); + break; + case KeyCode10.DOWN: + this.navigateUpDown(false, event); + break; + case KeyCode10.TAB: + if (this.hasFocus()) { + this.navigateLeftRight(event); + } else { + const nextFocusableEl = _findNextFocusableElement3( + this.beans, + this.getFocusableElement(), + null, + event.shiftKey + ); + if (nextFocusableEl) { + event.preventDefault(); + nextFocusableEl.focus(); + } else { + this.navigateLeftRight(event); + } + } + break; + } + } + navigateUpDown(backwards, event) { + if (this.hasFocus()) { + if (this.focusSvc.focusNextFromAdvancedFilter(backwards)) { + event.preventDefault(); + } + } + } + navigateLeftRight(event) { + if (event.shiftKey ? this.focusSvc.focusLastHeader() : this.focusSvc.focusNextFromAdvancedFilter(false, true)) { + event.preventDefault(); + } + } + hasFocus() { + return _getActiveDomElement3(this.beans) === this.getFocusableElement(); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderComp.ts +import { Component as Component13, FilterButtonComp, RefPlaceholder as RefPlaceholder17, _exists as _exists10, _removeFromParent as _removeFromParent3 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderDragFeature.ts +import { BeanStub as BeanStub3, DragSourceType } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/features/virtualListDragFeature.ts +var VirtualListDragFeature = class extends AgVirtualListDragFeature { +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderDragFeature.ts +var AdvancedFilterBuilderDragFeature = class extends BeanStub3 { + constructor(comp, virtualList) { + super(); + this.comp = comp; + this.virtualList = virtualList; + } + postConstruct() { + this.createManagedBean( + new VirtualListDragFeature(this.comp, this.virtualList, { + dragSourceType: DragSourceType.AdvancedFilterBuilder, + addListeners: (parent, listItemDragStart, listItemDragEnd) => { + parent.addManagedListeners(this, { + advancedFilterBuilderDragStarted: listItemDragStart, + advancedFilterBuilderDragEnded: listItemDragEnd + }); + }, + getCurrentDragValue: (listItemDragStartEvent) => this.getCurrentDragValue(listItemDragStartEvent), + isMoveBlocked: () => false, + getNumRows: (comp) => comp.getNumItems(), + moveItem: (currentDragValue, lastHoveredListItem) => this.moveItem(currentDragValue, lastHoveredListItem) + }) + ); + } + getCurrentDragValue(listItemDragStartEvent) { + return listItemDragStartEvent.item; + } + moveItem(currentDragValue, lastHoveredListItem) { + this.comp.moveItem(currentDragValue, lastHoveredListItem); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderItemAddComp.ts +import { Component as Component9, RefPlaceholder as RefPlaceholder14, _setAriaLabel as _setAriaLabel5, _setAriaLevel } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/addDropdownComp.ts +import { + AgInputTextFieldSelector as AgInputTextFieldSelector3, + _setAriaLabel as _setAriaLabel4, + _setAriaLabelledBy, + _setDisplayed as _setDisplayed8, + _stopPropagationForAgGrid as _stopPropagationForAgGrid2 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/agRichSelect.ts +import { + AgInputTextFieldSelector as AgInputTextFieldSelector2, + AgPickerField as AgPickerField2, + KeyCode as KeyCode13, + RefPlaceholder as RefPlaceholder13, + _addGridCommonParams as _addGridCommonParams4, + _addOrRemoveAttribute as _addOrRemoveAttribute2, + _clearElement as _clearElement6, + _createIconNoSpan as _createIconNoSpan3, + _debounce, + _exists as _exists7, + _fuzzySuggestions as _fuzzySuggestions2, + _getActiveDomElement as _getActiveDomElement5, + _getEditorRendererDetails as _getEditorRendererDetails2, + _isElementOverflowingCallback as _isElementOverflowingCallback2, + _isEventFromPrintableCharacter, + _isVisible as _isVisible4, + _setAriaActiveDescendant as _setAriaActiveDescendant2, + _setScrollLeft, + _stopPropagationForAgGrid +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/richSelect/richSelectAsyncRequestsFeature.ts +import { _consoleError } from "ag-grid-community"; +var DEFAULT_VALUES_PAGE_SIZE = 100; +function createRichSelectAsyncRequestBindings(params) { + const { host, source, useAsyncSearch, onMisconfiguredSearchSource, onFirstValuesPageLoaded } = params; + const controller = new RichSelectAsyncRequestsFeature({ + host, + source, + onMisconfiguredSearchSource, + onFirstValuesPageLoaded: onFirstValuesPageLoaded ?? (() => { + }) + }); + const hasPagedSource = typeof source.loadValuesPage === "function"; + return { + controller, + hasPagedSource, + onSearch: useAsyncSearch ? (searchString) => controller.onSearch(searchString) : void 0, + onLoadMoreRows: hasPagedSource ? (direction) => controller.loadValuesPage(direction ?? "down") : void 0 + }; +} +var RichSelectAsyncRequestsFeature = class { + constructor(ctrlParams) { + this.ctrlParams = ctrlParams; + this.currentSearchRequest = 0; + this.currentValuesPageRequest = 0; + this.valuesPageLoading = false; + this.valuesPageHasMoreNext = false; + this.valuesPageHasMorePrev = false; + this.valuesPageLoadedValues = []; + this.valuesPageSearch = ""; + this.valuesPageWindowStartRow = 0; + this.destroyed = false; + } + destroy() { + this.destroyed = true; + this.currentSearchRequest++; + this.currentValuesPageRequest++; + } + onSearch(searchString) { + if (this.destroyed) { + return; + } + if (this.isValuesPaged()) { + this.resetValuesPage(searchString); + return; + } + const currentRequest = ++this.currentSearchRequest; + const { host, source, onMisconfiguredSearchSource } = this.ctrlParams; + host.setValueList({ refresh: true, valueList: void 0 }); + if (!searchString) { + return; + } + if (typeof source.searchValues !== "function") { + onMisconfiguredSearchSource?.(); + return; + } + let valuesPromise; + try { + valuesPromise = source.searchValues(searchString); + } catch (error) { + _consoleError("Rich Select", error); + if (currentRequest === this.currentSearchRequest) { + host.setValueList({ refresh: true, valueList: [] }); + } + return; + } + if (Array.isArray(valuesPromise)) { + onMisconfiguredSearchSource?.(); + host.setValueList({ refresh: true, valueList: valuesPromise }); + return; + } + host.setValueList({ + valueList: valuesPromise.then((results) => { + if (currentRequest === this.currentSearchRequest) { + return results; + } + }).catch((error) => { + _consoleError("Rich Select", error); + if (currentRequest === this.currentSearchRequest) { + return []; + } + }), + refresh: true + }); + } + resetValuesPage(searchString) { + if (this.destroyed) { + return; + } + this.valuesPageSearch = searchString; + this.valuesPageLoadedValues = []; + this.valuesPageWindowStartRow = this.resolveValuesPageStartRow(searchString); + this.valuesPageNextCursor = void 0; + this.valuesPageHasMoreNext = true; + this.valuesPageHasMorePrev = this.valuesPageWindowStartRow > 0; + this.valuesPageLoading = false; + this.currentValuesPageRequest++; + this.ctrlParams.host.setValueList({ valueList: void 0, refresh: true, isInitial: true }); + this.loadValuesPage("down"); + } + loadValuesPage(direction) { + if (this.destroyed) { + return; + } + const valuesPage = this.ctrlParams.source.loadValuesPage; + if (typeof valuesPage !== "function" || this.valuesPageLoading) { + return; + } + if (direction === "up" && !this.valuesPageHasMorePrev || direction === "down" && !this.valuesPageHasMoreNext) { + return; + } + const pageSize = Math.max(this.ctrlParams.source.valuesPageSize ?? DEFAULT_VALUES_PAGE_SIZE, 1); + const startRow = direction === "up" ? Math.max(this.valuesPageWindowStartRow - pageSize, 0) : this.valuesPageWindowStartRow + this.valuesPageLoadedValues.length; + const endRow = direction === "up" ? this.valuesPageWindowStartRow : startRow + pageSize; + if (startRow >= endRow) { + if (direction === "up") { + this.valuesPageHasMorePrev = false; + } else { + this.valuesPageHasMoreNext = false; + } + return; + } + const requestVersion = this.currentValuesPageRequest; + const requestParams = { + search: this.valuesPageSearch, + startRow, + endRow, + cursor: direction === "down" ? this.valuesPageNextCursor : void 0 + }; + this.valuesPageLoading = true; + if (this.valuesPageLoadedValues.length === 0) { + this.ctrlParams.host.setIsLoading(); + } + let pageResultOrPromise; + try { + pageResultOrPromise = valuesPage(requestParams); + } catch (error) { + this.handleValuesPageError(error, requestVersion); + return; + } + Promise.resolve(pageResultOrPromise).then( + (pageResult) => this.applyValuesPageResult(pageResult, pageSize, requestVersion, direction, startRow, endRow) + ).catch((error) => this.handleValuesPageError(error, requestVersion)); + } + applyValuesPageResult(pageResult, pageSize, requestVersion, direction, requestStartRow, requestEndRow) { + if (this.destroyed || requestVersion !== this.currentValuesPageRequest) { + return; + } + this.valuesPageLoading = false; + const isFirstLoadedPage = this.valuesPageLoadedValues.length === 0; + const values = pageResult?.values ?? []; + if (direction === "up") { + if (values.length) { + this.valuesPageLoadedValues = [...values, ...this.valuesPageLoadedValues]; + this.valuesPageWindowStartRow = requestStartRow; + } + const expectedCount = requestEndRow - requestStartRow; + this.valuesPageHasMorePrev = requestStartRow > 0 && values.length >= expectedCount; + } else { + if (values.length) { + this.valuesPageLoadedValues = [...this.valuesPageLoadedValues, ...values]; + } + this.valuesPageNextCursor = pageResult?.cursor; + const loadedRowCount = this.valuesPageLoadedValues.length; + if (typeof pageResult?.lastRow === "number") { + this.valuesPageHasMoreNext = this.valuesPageWindowStartRow + loadedRowCount < pageResult.lastRow; + } else if (pageResult?.cursor !== void 0) { + this.valuesPageHasMoreNext = !!pageResult.cursor; + } else { + this.valuesPageHasMoreNext = values.length >= pageSize; + } + } + this.ctrlParams.host.setValueList({ + valueList: this.valuesPageLoadedValues, + refresh: true, + isInitial: true, + scrollToCurrentValue: isFirstLoadedPage, + prependedRowCount: direction === "up" ? values.length : void 0 + }); + if (isFirstLoadedPage) { + this.ctrlParams.onFirstValuesPageLoaded(); + } + } + handleValuesPageError(error, requestVersion) { + _consoleError("Rich Select", error); + if (this.destroyed || requestVersion !== this.currentValuesPageRequest) { + return; + } + this.valuesPageLoading = false; + this.valuesPageHasMoreNext = false; + this.valuesPageHasMorePrev = false; + this.ctrlParams.host.setValueList({ valueList: this.valuesPageLoadedValues, refresh: true, isInitial: true }); + } + resolveValuesPageStartRow(searchString) { + if (searchString) { + return 0; + } + const startRow = this.ctrlParams.source.valuesPageInitialStartRow?.(searchString); + return Math.max(Math.floor(startRow ?? 0), 0); + } + isValuesPaged() { + return typeof this.ctrlParams.source.loadValuesPage === "function"; + } +}; + +// packages/ag-grid-enterprise/src/widgets/AgPillContainer.ts +import { + Component as Component7, + KeyCode as KeyCode11, + _clearElement as _clearElement4, + _findFocusableElements as _findFocusableElements2, + _findNextFocusableElement as _findNextFocusableElement4, + _getActiveDomElement as _getActiveDomElement4, + _getDocument as _getDocument3, + _setAriaPosInSet as _setAriaPosInSet2, + _setAriaRole as _setAriaRole6, + _setAriaSetSize as _setAriaSetSize2 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/agPill.ts +import { Component as Component6, RefPlaceholder as RefPlaceholder12 } from "ag-grid-community"; +var AgPillElement = { + tag: "div", + cls: "ag-pill", + role: "option", + children: [ + { + tag: "span", + ref: "eText", + cls: "ag-pill-text" + }, + { + tag: "span", + ref: "eButton", + cls: "ag-button ag-pill-button", + role: "presentation" + } + ] +}; +var AgPill = class extends Component6 { + constructor(config) { + super(AgPillElement); + this.config = config; + this.eText = RefPlaceholder12; + this.eButton = RefPlaceholder12; + } + postConstruct() { + const { config, eButton } = this; + const { onKeyDown, onButtonClick } = config; + this.getGui().setAttribute("tabindex", String(this.gos.get("tabIndex"))); + this.addGuiEventListener("focus", () => { + this.eButton.focus(); + }); + if (onKeyDown) { + this.addGuiEventListener("keydown", onKeyDown); + } + if (onButtonClick) { + this.addManagedElementListeners(eButton, { + click: onButtonClick + }); + } + } + toggleCloseButtonClass(className, force) { + this.eButton.classList.toggle(className, force); + } + setText(text) { + this.eText.textContent = text; + } + getText() { + return this.eText.textContent; + } +}; + +// packages/ag-grid-enterprise/src/widgets/AgPillContainer.ts +var AgPillContainerElement = { + tag: "div", + cls: "ag-pill-container" +}; +var AgPillContainer = class extends Component7 { + constructor() { + super(AgPillContainerElement); + this.pills = []; + } + init(params) { + this.params = params; + this.getKey = params.valueFormatter ?? ((v) => String(v)); + this.refresh(); + } + refresh() { + this.clearPills(); + const { params, onPillKeyDown, getKey } = this; + let values = params.getValue(); + if (!Array.isArray(values)) { + if (values == null) { + return; + } + values = [values]; + } + const valueFormatter = params.valueFormatter ?? ((v) => String(v)); + const len = values.length; + _setAriaRole6(this.getGui(), len === 0 ? "presentation" : "listbox"); + for (let i = 0; i < len; i++) { + const value = values[i]; + const pill = this.createBean( + new AgPill({ + onButtonClick: () => this.onPillButtonClick(pill), + onKeyDown: onPillKeyDown.bind(this) + }) + ); + const pillGui = pill.getGui(); + _setAriaPosInSet2(pillGui, i + 1); + _setAriaSetSize2(pillGui, len); + if (params.onPillMouseDown) { + pill.addGuiEventListener("mousedown", params.onPillMouseDown); + } + if (params.announceItemFocus) { + pill.addGuiEventListener("focus", params.announceItemFocus); + } + pill.setText(valueFormatter(value) ?? ""); + pill.toggleCloseButtonClass("ag-icon-cancel", true); + this.appendChild(pillGui); + this.pills.push({ key: getKey(value) ?? i.toString(), pill }); + } + } + onNavigationKeyDown(e) { + const { key } = e; + const isRtl = this.gos.get("enableRtl"); + const isPrevious = !isRtl && key === KeyCode11.LEFT || isRtl && key === KeyCode11.RIGHT; + const isNext = !isRtl && key === KeyCode11.RIGHT || isRtl && key === KeyCode11.LEFT; + if (!this.pills.length || !isPrevious && !isNext) { + return; + } + e.preventDefault(); + const { beans, params } = this; + const activeEl = _getActiveDomElement4(beans); + const eGui = this.getGui(); + const focusableElements = _findFocusableElements2(eGui); + if (eGui.contains(activeEl)) { + const activePill = focusableElements.find((el) => el.contains(activeEl)); + if (activePill && activePill !== activeEl) { + activePill.focus(); + } + const nextFocusableEl = _findNextFocusableElement4(beans, eGui, false, isPrevious); + if (nextFocusableEl) { + nextFocusableEl.focus(); + } else if (isNext) { + params.focusAfterForwardBoundary?.(); + } + } else if (focusableElements.length > 0) { + focusableElements[isNext ? 0 : focusableElements.length - 1].focus(); + } + } + clearPills() { + const eGui = this.getGui(); + if (eGui.contains(_getActiveDomElement4(this.beans)) && this.params.eWrapper) { + this.params.eWrapper.focus(); + } + _clearElement4(eGui); + this.destroyBeans(this.pills.map(({ pill }) => pill)); + this.pills = []; + } + onPillButtonClick(pill) { + this.deletePill(pill); + } + onPillKeyDown(e) { + const key = e.key; + if (key === KeyCode11.LEFT || key === KeyCode11.RIGHT) { + e.stopPropagation(); + if (this.params.onHorizontalArrowKeyDown) { + this.params.onHorizontalArrowKeyDown(e); + } else { + this.onNavigationKeyDown(e); + } + return; + } + if (key !== KeyCode11.DELETE && key !== KeyCode11.BACKSPACE) { + return; + } + e.preventDefault(); + const eDoc = _getDocument3(this.beans); + const pillIndex = this.pills.findIndex(({ pill }) => pill.getGui().contains(eDoc.activeElement)); + if (pillIndex === -1) { + return; + } + const pillObj = this.pills[pillIndex]; + if (pillObj?.pill) { + this.deletePill(pillObj.pill, pillIndex); + } + } + deletePill(p, restoreFocusToIndex) { + const { getKey, pills, params } = this; + const pillKey = (pills[restoreFocusToIndex ?? -1] ?? pills.find(({ pill }) => pill === p))?.key; + const values = (params.getValue() || []).filter((val) => getKey(val) !== pillKey); + params.setValue(values); + if (!values.length) { + if (params.focusAfterDelete) { + params.focusAfterDelete(); + } else { + params.eWrapper?.focus(); + } + } else if (restoreFocusToIndex != null) { + const { pill } = pills[Math.min(restoreFocusToIndex, pills.length - 1)]; + if (pill) { + pill.getFocusableElement().focus(); + } + } + } + destroy() { + this.clearPills(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/widgets/agRichSelect.css +var agRichSelect_default = ".ag-rich-select{cursor:default;height:100%}.ag-rich-select-value{align-items:center;background-color:var(--ag-picker-button-background-color);display:flex;height:100%;padding:var(--ag-spacing);:where(.ag-picker-field-display){overflow:hidden;text-overflow:ellipsis;&:where(.ag-display-as-placeholder){opacity:.5}}}.ag-virtual-list-viewport.ag-rich-select-list{background-color:var(--ag-picker-list-background-color);border:var(--ag-picker-list-border);border-radius:var(--ag-input-border-radius);box-shadow:var(--ag-dropdown-shadow);height:auto;position:relative;width:100%;:where(.ag-rich-select-loading){display:flex;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);:where(.ag-loading-text){overflow:hidden;text-overflow:ellipsis}}}.ag-rich-select-row{align-items:center;display:flex;flex:1 1 auto;height:100%;overflow:hidden;padding:0 var(--ag-spacing);white-space:nowrap}.ag-rich-select-row-selected{background-color:var(--ag-selected-row-background-color)}.ag-rich-select-row-highlighted,.ag-rich-select-row:hover{background-image:linear-gradient(var(--ag-row-hover-color),var(--ag-row-hover-color))}.ag-rich-select-row-text-highlight{font-weight:700}.ag-rich-select-field-input{flex:1 1 auto;:where(.ag-input-field-input){border:none!important;box-shadow:none!important;padding:0!important;text-overflow:ellipsis;&::-moz-placeholder{opacity:.8}&::placeholder{opacity:.8}}}:where(.ag-ltr) .ag-rich-select-field-input{left:var(--ag-spacing)}:where(.ag-rtl) .ag-rich-select-field-input{right:var(--ag-spacing)}.ag-rich-select-typing-multi{:where(.ag-picker-field-display){flex:0 1 auto;max-width:100%;min-width:0}:where(.ag-rich-select-pill-display){align-items:center;display:flex;flex:0 1 auto;max-width:100%;min-width:0;overflow:hidden;:where(.ag-pill-container){flex:0 1 auto;max-width:100%;min-width:0;overflow:hidden}}:where(.ag-rich-select-field-input){flex:0 0 auto;max-width:100%;min-width:0;:where(.ag-input-wrapper){flex:0 0 auto;max-width:100%}:where(.ag-input-field-input){max-width:100%;min-width:1ch;width:auto}}}:where(.ag-ltr) .ag-rich-select-typing-multi{:where(.ag-rich-select-field-input){margin-left:.25rem}:where(.ag-rich-select-deselect-button){margin-left:auto}:where(.ag-rich-select-deselect-button.ag-hidden+.ag-picker-field-icon){margin-left:auto}}:where(.ag-rtl) .ag-rich-select-typing-multi{:where(.ag-rich-select-field-input){margin-right:.25rem}:where(.ag-rich-select-deselect-button){margin-right:auto}:where(.ag-rich-select-deselect-button.ag-hidden+.ag-picker-field-icon){margin-right:auto}}:where(.ag-popup-editor) .ag-rich-select-value{height:var(--ag-row-height);min-width:200px}.ag-rich-select-virtual-list-item{cursor:default;height:var(--ag-list-item-height)}.ag-pill-container{display:flex;flex-wrap:nowrap;gap:.25rem;min-width:0}.ag-pill{align-items:center;background:var(--ag-select-cell-background-color);border:var(--ag-select-cell-border);border-radius:var(--ag-border-radius);display:flex;padding:0 .25rem;white-space:nowrap}.ag-pill-button{border:none;padding:0}:where(.ag-ltr) .ag-pill-button{margin-left:var(--ag-spacing)}:where(.ag-rtl) .ag-pill-button{margin-right:var(--ag-spacing)}.ag-pill-button:hover{color:var(--ag-accent-color);cursor:pointer}"; + +// packages/ag-grid-enterprise/src/widgets/agRichSelectList.ts +import { + KeyCode as KeyCode12, + _addOrRemoveAttribute, + _createElement as _createElement5, + _createIconNoSpan as _createIconNoSpan2, + _requestAnimationFrame as _requestAnimationFrame2, + _setAriaActiveDescendant, + _setAriaControlsAndLabel, + _setAriaLabel as _setAriaLabel3, + _setDisplayed as _setDisplayed7 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/agRichSelectRow.ts +import { + Component as Component8, + _addGridCommonParams as _addGridCommonParams3, + _clearElement as _clearElement5, + _createElement as _createElement4, + _exists as _exists6, + _getEditorRendererDetails, + _isElementOverflowingCallback, + _setAriaSelected, + _toString +} from "ag-grid-community"; +var RichSelectRowElement = { tag: "div", cls: "ag-rich-select-row", role: "presentation" }; +var RichSelectRow = class extends Component8 { + constructor(params) { + super(RichSelectRowElement); + this.params = params; + this.valueFormatter = resolveRichSelectValueFormatter(params.valueFormatter); + } + wireBeans(beans) { + this.userCompFactory = beans.userCompFactory; + this.registry = beans.registry; + } + postConstruct() { + this.tooltipFeature = this.createOptionalManagedBean( + this.registry.createDynamicBean( + "highlightTooltipFeature", + false, + { + getGui: () => this.getGui(), + shouldDisplayTooltip: () => this.shouldDisplayTooltip?.() ?? true + }, + this + ) + ); + } + setState(value) { + const formattedValue = this.valueFormatter(value); + const rendererSuccessful = this.populateWithRenderer(value, formattedValue); + if (!rendererSuccessful) { + this.populateWithoutRenderer(value, formattedValue); + } + this.value = value; + } + highlightString(matchString) { + const { parsedValue, params } = this; + if (params.cellRenderer || !_exists6(parsedValue)) { + return; + } + let hasMatch = _exists6(matchString); + if (hasMatch) { + const index = parsedValue?.toLocaleLowerCase().indexOf(matchString.toLocaleLowerCase()); + if (index >= 0) { + const highlightEndIndex = index + matchString.length; + const child = this.getGui().querySelector("span"); + if (child) { + _clearElement5(child); + child.append( + // Start part + parsedValue.slice(0, index), + // Highlighted part wrapped in bold tag + _createElement4({ + tag: "span", + cls: "ag-rich-select-row-text-highlight", + children: parsedValue.slice(index, highlightEndIndex) + }), + // End part + parsedValue.slice(highlightEndIndex) + ); + } + } else { + hasMatch = false; + } + } + if (!hasMatch) { + this.renderValueWithoutRenderer(parsedValue); + } + } + updateSelected(selected) { + const eGui = this.getGui(); + _setAriaSelected(eGui.parentElement, selected); + this.toggleCss("ag-rich-select-row-selected", selected); + } + getValue() { + return this.value; + } + toggleHighlighted(highlighted) { + this.toggleCss("ag-rich-select-row-highlighted", highlighted); + this.dispatchLocalEvent({ + type: "itemHighlighted", + highlighted + }); + } + populateWithoutRenderer(value, valueFormatted) { + const eGui = this.getGui(); + const span = _createElement4({ tag: "span" }); + span.style.overflow = "hidden"; + span.style.textOverflow = "ellipsis"; + const parsedValue = _toString(_exists6(valueFormatted) ? valueFormatted : value); + this.parsedValue = _exists6(parsedValue) ? parsedValue : null; + eGui.appendChild(span); + this.renderValueWithoutRenderer(parsedValue); + this.shouldDisplayTooltip = _isElementOverflowingCallback(() => span); + this.tooltipFeature?.setTooltipAndRefresh(this.parsedValue); + } + renderValueWithoutRenderer(value) { + const span = this.getGui().querySelector("span"); + if (!span) { + return; + } + span.textContent = _exists6(value) ? value : "\xA0"; + } + populateWithRenderer(value, valueFormatted) { + let cellRendererPromise; + let userCompDetails; + const { cellRenderer, cellRendererParams } = this.params; + if (cellRenderer) { + const richSelect = this.getParentComponent()?.getParentComponent(); + userCompDetails = _getEditorRendererDetails( + this.userCompFactory, + this.params, + _addGridCommonParams3(this.gos, { + value, + valueFormatted, + cellRendererParams, + getValue: () => richSelect?.getValue(), + setValue: (value2) => { + richSelect?.setValue(value2, true); + }, + setTooltip: (value2, shouldDisplayTooltip) => { + this.gos.assertModuleRegistered("Tooltip", 3); + this.shouldDisplayTooltip = shouldDisplayTooltip; + this.tooltipFeature?.setTooltipAndRefresh(value2); + } + }) + ); + } + if (userCompDetails) { + cellRendererPromise = userCompDetails.newAgStackInstance(); + } + if (cellRendererPromise) { + _bindCellRendererToHtmlElement(cellRendererPromise, this.getGui()); + } + if (cellRendererPromise) { + cellRendererPromise.then((childComponent) => { + this.addDestroyFunc(() => { + this.destroyBean(childComponent); + }); + }); + return true; + } + return false; + } +}; + +// packages/ag-grid-enterprise/src/widgets/agRichSelectList.ts +var LIST_COMPONENT_NAME = "ag-rich-select-list"; +var ROW_COMPONENT_NAME = "ag-rich-select-row"; +var STATE_LOADING = 0; +var STATE_READY_WITH_RESULTS = 1; +var STATE_NO_RESULTS = 2; +var STATE_READY_FOR_INPUT = 3; +var AgRichSelectList = class extends VirtualList { + constructor(params, richSelectWrapper, getSearchString2) { + super({ cssIdentifier: "rich-select" }); + this.params = params; + this.richSelectWrapper = richSelectWrapper; + this.getSearchString = getSearchString2; + this.lastRowHovered = -1; + this.selectedItems = /* @__PURE__ */ new Set(); + this.loadingState = STATE_READY_FOR_INPUT; + this.loadMoreRowsThreshold = 10; + this.valueFormatter = resolveRichSelectValueFormatter(params.valueFormatter); + this.setComponentCreator(this.createRowComponent.bind(this)); + this.setComponentUpdater(() => { + }); + } + postConstruct() { + super.postConstruct(); + const translate = this.getLocaleTextFunc(); + this.loadingLabel = translate("loadingOoo", "Loading..."); + this.noMatchesLabel = translate("noMatches", "No matches to show"); + this.eLoadingIcon = _createIconNoSpan2("richSelectLoading", this.beans, null); + this.eStateCompLabel = _createElement5({ tag: "span", cls: "ag-loading-text", children: this.loadingLabel }); + this.eStateComp = _createElement5({ + tag: "div", + cls: "ag-rich-select-loading", + children: [ + { + tag: "span", + cls: "ag-loading-icon", + children: [this.eLoadingIcon ? () => this.eLoadingIcon : void 0] + }, + { tag: "span", cls: "ag-loading-text", children: [() => this.eStateCompLabel] } + ] + }); + this.appendChild(this.eStateComp); + const { cellRowHeight, pickerAriaLabelKey, pickerAriaLabelValue } = this.params; + if (cellRowHeight) { + this.setRowHeight(cellRowHeight); + } + const eGui = this.getGui(); + const eListAriaEl = this.getAriaElement(); + this.addManagedListeners(eGui, { + mousemove: this.onMouseMove.bind(this), + mouseout: this.onMouseOut.bind(this), + mousedown: this.onMouseDown.bind(this), + click: this.onClick.bind(this), + scroll: this.onGuiScroll.bind(this) + }); + eGui.classList.add(LIST_COMPONENT_NAME); + const listId = `${LIST_COMPONENT_NAME}-${this.getCompId()}`; + eListAriaEl.setAttribute("id", listId); + const ariaLabel = translate(pickerAriaLabelKey, pickerAriaLabelValue); + _setAriaLabel3(eListAriaEl, ariaLabel); + _setAriaControlsAndLabel(this.richSelectWrapper, eListAriaEl); + } + setIsLoading() { + this.setLoadingState(STATE_LOADING); + } + setLoadingState(state) { + const hasChanged = this.loadingState !== state; + this.loadingState = state; + this.toggleStateComp(); + this.toggleVisibility(); + if (hasChanged) { + const stateAnnouncement = this.getStateAnnouncementText(state); + if (stateAnnouncement) { + this.stateAnnouncementCallback?.(stateAnnouncement); + } + } + } + toggleStateComp() { + const { eStateComp, eStateCompLabel, eLoadingIcon, loadingState, loadingLabel, noMatchesLabel, params } = this; + if (!eStateComp) { + return; + } + if (loadingState === STATE_LOADING) { + eStateCompLabel.textContent = loadingLabel; + if (eLoadingIcon) { + _setDisplayed7(eLoadingIcon, true); + } + _setDisplayed7(eStateComp, true); + return; + } + if (loadingState === STATE_NO_RESULTS && params.allowNoResultsCopy) { + eStateCompLabel.textContent = noMatchesLabel; + if (eLoadingIcon) { + _setDisplayed7(eLoadingIcon, false); + } + _setDisplayed7(eStateComp, true); + return; + } + _setDisplayed7(eStateComp, false); + } + shouldBeVisible() { + if (this.loadingState === STATE_NO_RESULTS) { + return !!this.params.allowNoResultsCopy; + } + return this.loadingState !== STATE_READY_FOR_INPUT; + } + toggleVisibility(forceVisible) { + const eListGui = this.getGui(); + if (forceVisible === void 0) { + _setDisplayed7(eListGui, this.shouldBeVisible()); + } else { + _setDisplayed7(eListGui, forceVisible); + } + this.scheduleMaybeRequestMoreRows(); + } + setLoadMoreRowsCallback(callback, thresholdRows = 10) { + this.loadMoreRowsCallback = callback; + this.loadMoreRowsThreshold = Math.max(thresholdRows, 1); + this.maybeRequestMoreRows(); + } + setStateAnnouncementCallback(callback) { + this.stateAnnouncementCallback = callback; + } + navigateToPage(key) { + const newIndex = super.navigateToPage(key, this.lastRowHovered); + if (newIndex != null) { + _requestAnimationFrame2(this.beans, () => { + if (!this.isAlive()) { + return null; + } + this.highlightIndex(newIndex); + }); + } + return newIndex; + } + drawVirtualRows(softRefresh) { + super.drawVirtualRows(softRefresh); + this.refreshSelectedItems(); + if (this.lastRowHovered !== -1) { + this.updateRenderedHighlightState(this.lastRowHovered); + } + } + highlightFilterMatch(searchString) { + this.forEachRenderedRow((cmp) => { + cmp.highlightString(searchString); + }); + } + onNavigationKeyDown(key, announceItem) { + _requestAnimationFrame2(this.beans, () => { + if (!this.currentList || !this.isAlive()) { + return; + } + const len = this.currentList.length; + const oldIndex = this.lastRowHovered; + const diff = key === KeyCode12.DOWN ? 1 : -1; + const newIndex = Math.min(Math.max(oldIndex === -1 ? 0 : oldIndex + diff, 0), len - 1); + this.highlightIndex(newIndex); + announceItem(); + }); + } + selectValue(value) { + if (!this.currentList || value == null) { + return false; + } + const selectedPositions = this.getIndicesForValues(value); + const refresh = selectedPositions.length > 0; + if (refresh) { + this.refresh(); + this.ensureIndexVisible(selectedPositions[0]); + this.refresh(true); + } + this.selectListItems(Array.isArray(value) ? value : [value]); + if (refresh) { + this.highlightIndex(selectedPositions[0], true); + } + return refresh; + } + selectListItems(values, append = false) { + if (!append) { + this.selectedItems.clear(); + } + for (let i = 0; i < values.length; i++) { + const currentItem = values[i]; + if (this.findItemInSelected(currentItem) !== void 0) { + continue; + } + this.selectedItems.add(currentItem); + } + this.refreshSelectedItems(); + } + getCurrentList() { + return this.currentList; + } + setCurrentList(list) { + const newState = getListStateBasedOnResults(list); + this.setLoadingState(newState); + list || (list = []); + this.currentList = list; + this.setModel({ + getRowCount: () => list.length, + getRow: (index) => list[index], + areRowsEqual: (oldRow, newRow) => oldRow === newRow + }); + } + offsetHoveredIndexOnPrependedRows(prependedRowCount) { + if (prependedRowCount <= 0 || this.lastRowHovered < 0) { + return; + } + this.lastRowHovered += prependedRowCount; + } + restoreScrollOnPrependedRows(previousScrollTop, prependedRowCount) { + if (prependedRowCount <= 0) { + return; + } + const eGui = this.getGui(); + const rowHeight = this.getRowHeight(); + const nextScrollTop = previousScrollTop + prependedRowCount * rowHeight; + this.awaitStable(() => { + if (!this.isAlive()) { + return; + } + eGui.scrollTop = nextScrollTop; + }); + } + getSelectedItems() { + return this.selectedItems; + } + getLastItemHovered() { + return this.currentList?.[this.lastRowHovered]; + } + highlightIndex(index, preventUnnecessaryScroll) { + if (!this.currentList) { + return; + } + if (index < 0 || index >= this.currentList.length) { + this.lastRowHovered = -1; + this.setActiveOption(); + } else { + this.lastRowHovered = index; + const wasScrolled = this.ensureIndexVisible(index, !preventUnnecessaryScroll); + if (wasScrolled && !preventUnnecessaryScroll) { + this.refresh(true); + } + } + this.updateRenderedHighlightState(index); + } + updateRenderedHighlightState(index) { + let activeOptionId; + this.forEachRenderedRow((cmp, idx) => { + const highlighted = index === idx; + cmp.toggleHighlighted(highlighted); + if (highlighted) { + activeOptionId = `${ROW_COMPONENT_NAME}-${cmp.getCompId()}`; + } + }); + this.setActiveOption(activeOptionId); + } + setActiveOption(activeOptionId) { + _setAriaActiveDescendant(this.richSelectWrapper, activeOptionId ?? null); + _addOrRemoveAttribute(this.richSelectWrapper, "data-active-option", activeOptionId); + } + getIndicesForValues(values) { + const { currentList } = this; + if (!currentList || currentList.length === 0 || values === void 0) { + return []; + } + const valuesToFind = Array.isArray(values) ? values : [values]; + if (valuesToFind.length === 0) { + return []; + } + const positions = []; + let formattedList; + for (const value of valuesToFind) { + let idx = currentList.indexOf(value); + if (idx === -1 && value != null) { + formattedList ?? (formattedList = currentList.map((item) => this.valueFormatter(item))); + const formattedValue = this.getComparableFormattedValue(value); + idx = formattedList.indexOf(formattedValue); + } + if (idx >= 0) { + positions.push(idx); + } + } + return positions; + } + toggleListItemSelection(value) { + const item = this.findItemInSelected(value); + if (item !== void 0) { + this.selectedItems.delete(item); + } else { + this.selectedItems.add(value); + } + this.refreshSelectedItems(); + this.dispatchValueSelected(); + } + refreshSelectedItems() { + this.forEachRenderedRow((cmp) => { + const selected = this.findItemInSelected(cmp.getValue()) !== void 0; + cmp.updateSelected(selected); + }); + } + findItemInSelected(value) { + if (typeof value === "object") { + if (this.selectedItems.has(value)) { + return value; + } + const valueFormatted = this.valueFormatter(value); + for (const item of this.selectedItems) { + if (this.valueFormatter(item) === valueFormatted) { + return item; + } + } + } else { + return this.selectedItems.has(value) ? value : void 0; + } + } + getComparableFormattedValue(value) { + return value != null && typeof value === "object" ? this.valueFormatter(value) : String(value ?? ""); + } + createRowComponent(value, listItemElement) { + const row = new RichSelectRow(this.params); + listItemElement.setAttribute("id", `${ROW_COMPONENT_NAME}-${row.getCompId()}`); + row.setParentComponent(this); + this.createBean(row); + row.setState(value); + const { highlightMatch, searchType = "fuzzy" } = this.params; + if (highlightMatch && searchType !== "fuzzy") { + row.highlightString(this.getSearchString()); + } + return row; + } + getRowForMouseEvent(e) { + if (!this.model) { + return -1; + } + const eGui = this.getGui(); + const rect = eGui.getBoundingClientRect(); + const scrollTop = this.getScrollTop(); + const mouseY = e.clientY - rect.top + scrollTop; + return Math.min(Math.max(Math.floor(mouseY / this.getRowHeight()), 0), this.model.getRowCount() - 1); + } + onMouseMove(e) { + const row = this.getRowForMouseEvent(e); + if (row !== -1 && row != this.lastRowHovered) { + this.lastRowHovered = row; + this.highlightIndex(row, true); + } + } + onGuiScroll() { + this.maybeRequestMoreRows(true); + } + scheduleMaybeRequestMoreRows() { + if (this.beans) { + _requestAnimationFrame2(this.beans, () => this.maybeRequestMoreRows(false)); + return; + } + this.maybeRequestMoreRows(false); + } + maybeRequestMoreRows(fromScrollEvent = false) { + const callback = this.loadMoreRowsCallback; + const currentList = this.currentList; + if (!callback || !currentList || this.loadingState === STATE_LOADING) { + return; + } + const eGui = this.getGui(); + if (eGui.clientHeight <= 0) { + return; + } + const remainingPixels = eGui.scrollHeight - (eGui.scrollTop + eGui.clientHeight); + const remainingRows = remainingPixels / this.getRowHeight(); + const rowsFromTop = eGui.scrollTop / this.getRowHeight(); + const hasVerticalOverflow = eGui.scrollHeight > eGui.clientHeight; + if (rowsFromTop <= this.loadMoreRowsThreshold && (fromScrollEvent || !hasVerticalOverflow)) { + callback("up"); + } + if (remainingRows <= this.loadMoreRowsThreshold) { + callback("down"); + } + } + getStateAnnouncementText(state) { + if (state === STATE_LOADING) { + return this.loadingLabel; + } + if (state === STATE_NO_RESULTS && this.params.allowNoResultsCopy) { + return this.noMatchesLabel; + } + return void 0; + } + onMouseDown(e) { + e.preventDefault(); + } + onMouseOut(e) { + if (!this.getGui().contains(e.relatedTarget)) { + this.highlightIndex(-1); + } + } + onClick(e) { + const { multiSelect } = this.params; + if (!this.currentList?.length) { + return; + } + const row = this.getRowForMouseEvent(e); + const item = this.currentList[row]; + if (multiSelect) { + this.toggleListItemSelection(item); + } else { + this.selectListItems([item]); + this.dispatchValueSelected(); + } + } + dispatchValueSelected() { + this.dispatchLocalEvent({ + type: "richSelectListRowSelected", + fromEnterKey: false, + value: this.selectedItems + }); + } + destroy() { + super.destroy(); + this.eStateComp = void 0; + } +}; +function getListStateBasedOnResults(valueList) { + if (!valueList) { + return STATE_READY_FOR_INPUT; + } + if (valueList.length) { + return STATE_READY_WITH_RESULTS; + } + return STATE_NO_RESULTS; +} + +// packages/ag-grid-enterprise/src/widgets/agRichSelect.ts +var ON_SEARCH_CALLBACK_DEBOUNCE_DELAY = 300; +var AgRichSelectElement = { + tag: "div", + cls: "ag-picker-field", + role: "presentation", + children: [ + { tag: "div", ref: "eLabel" }, + { + tag: "div", + ref: "eWrapper", + cls: "ag-wrapper ag-picker-field-wrapper ag-rich-select-value ag-picker-collapsed", + children: [ + { tag: "span", ref: "eDisplayField", cls: "ag-picker-field-display" }, + { tag: "ag-input-text-field", ref: "eInput", cls: "ag-rich-select-field-input" }, + { + tag: "span", + ref: "eDeselect", + cls: "ag-rich-select-deselect-button ag-picker-field-icon", + role: "presentation" + }, + { tag: "span", ref: "eIcon", cls: "ag-picker-field-icon", attrs: { "aria-hidden": "true" } } + ] + } + ] +}; +var AgRichSelect = class extends AgPickerField2 { + constructor(config) { + const valueFormatter = resolveRichSelectValueFormatter(config?.valueFormatter); + const resolvedAgComponents = config?.agComponents?.includes(AgInputTextFieldSelector2) ? config.agComponents : [AgInputTextFieldSelector2, ...config?.agComponents ?? []]; + super({ + ...config, + // prevents undefined values from being passed to the picker which can cause + // issues with the list component's value selection and highlighting logic + pickerAriaLabelKey: config?.pickerAriaLabelKey ?? "ariaLabelRichSelectField", + pickerAriaLabelValue: config?.pickerAriaLabelValue ?? "Rich Select Field", + pickerType: config?.pickerType ?? "ag-list", + className: config?.className ?? "ag-rich-select", + pickerIcon: config?.pickerIcon ?? "richSelectOpen", + ariaRole: config?.ariaRole ?? "combobox", + template: config?.template ?? AgRichSelectElement, + agComponents: resolvedAgComponents, + modalPicker: config?.modalPicker ?? false, + valueFormatter, + maxPickerHeight: config?.maxPickerHeight ?? "calc(var(--ag-row-height) * 6.5)" + }); + this.searchString = ""; + this.loadMoreRowsThreshold = 10; + this.hasPagedAsyncSource = false; + this.searchStringCreator = null; + this.eInput = RefPlaceholder13; + this.eDeselect = RefPlaceholder13; + this.skipWrapperAnnouncement = false; + this.onPillHorizontalArrowKeyDown = (e) => { + this.handleHorizontalNavigationKey(e); + }; + this.valueFormatter = valueFormatter; + const { value, valueList, searchStringCreator, onSearch } = config ?? {}; + if (value !== void 0) { + this.value = value; + } + if (searchStringCreator) { + this.searchStringCreator = searchStringCreator; + } + if (valueList != null) { + this.setValueList({ valueList, isInitial: true }); + } + const { searchDebounceDelay = ON_SEARCH_CALLBACK_DEBOUNCE_DELAY } = this.config; + if (onSearch) { + this.onSearchCallbackDebounced = _debounce(this, onSearch, searchDebounceDelay); + } + this.registerCSS(agRichSelect_default); + } + wireBeans(beans) { + this.userCompFactory = beans.userCompFactory; + this.ariaAnnounce = beans.ariaAnnounce; + this.registry = beans.registry; + } + postConstruct() { + this.tooltipFeature = this.createOptionalManagedBean( + this.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.getGui(), + shouldDisplayTooltip: () => this.shouldDisplayTooltip?.() ?? true + }) + ); + super.postConstruct(); + this.createListComponent(); + this.eDeselect.appendChild(_createIconNoSpan3("richSelectRemove", this.beans)); + const { allowTyping, placeholder, multiSelect, suppressDeselectAll, suppressMultiSelectPillRenderer } = this.config; + this.eDeselect.classList.add("ag-hidden"); + if (allowTyping) { + this.eInput.setAutoComplete(false).setInputPlaceholder(placeholder); + if (!multiSelect) { + this.eDisplayField.classList.add("ag-hidden"); + } else { + this.eWrapper.classList.add("ag-rich-select-typing-multi"); + if (!suppressMultiSelectPillRenderer) { + this.eDisplayField.classList.add("ag-rich-select-pill-display"); + } + } + } else { + this.eInput.setDisplayed(false); + } + this.setupAriaProperties(); + const { searchDebounceDelay = 300 } = this.config; + this.clearSearchString = _debounce(this, this.clearSearchString.bind(this), searchDebounceDelay); + this.renderSelectedValue(); + if (allowTyping) { + this.eInput.onValueChange((value) => { + this.openPickerOnTypingIfNeeded(value); + this.updateTypingMultiSelectPlaceholder(value); + this.searchTextFromString(value); + }); + } + this.addManagedElementListeners(this.eWrapper, { focus: this.onWrapperFocus.bind(this) }); + this.addManagedElementListeners(this.eWrapper, { focusout: this.onWrapperFocusOut.bind(this) }); + if (!suppressDeselectAll) { + this.addManagedElementListeners(this.eDeselect, { + mousedown: this.onDeselectAllMouseDown.bind(this), + click: this.onDeselectAllClick.bind(this) + }); + } + } + setupAriaProperties() { + const { eWrapper, gos } = this; + eWrapper.tabIndex = gos.get("tabIndex"); + const translate = this.getLocaleTextFunc(); + this.ariaDeleteSelection = translate("ariaLabelRichSelectDeleteSelection", "Press DELETE to deselect item"); + this.ariaDeselectAllItems = translate( + "ariaLabelRichSelectDeselectAllItems", + "Press DELETE to deselect all items" + ); + this.ariaToggleSelection = translate("ariaLabelRichSelectToggleSelection", "Press SPACE to toggle selection"); + } + createListComponent() { + this.listComponent = this.createBean( + new AgRichSelectList(this.config, this.getFocusableElement(), () => this.searchString) + ); + this.listComponent.setLoadMoreRowsCallback(this.loadMoreRowsCallback, this.loadMoreRowsThreshold); + this.listComponent.setStateAnnouncementCallback((value) => this.announceAriaValue(value)); + this.listComponent.setParentComponent(this); + this.addManagedListeners(this.listComponent, { + richSelectListRowSelected: (e) => { + this.onListValueSelected(e.value, e.fromEnterKey); + } + }); + } + renderSelectedValue(fromPicker) { + const { value, eDisplayField, config, gos } = this; + const { + allowTyping, + cellRenderer, + cellRendererParams, + initialInputValue, + multiSelect, + suppressDeselectAll, + suppressMultiSelectPillRenderer, + onSearch + } = config; + const valueFormatted = this.valueFormatter(value); + const isTypingMultiSelect = !!(allowTyping && multiSelect); + if (allowTyping) { + const inputValue = isTypingMultiSelect ? initialInputValue ?? this.eInput.getValue() ?? "" : initialInputValue ?? (value === "" ? "" : valueFormatted); + this.eInput.setValue(inputValue, !!fromPicker && !!onSearch); + if (!isTypingMultiSelect) { + return; + } + this.updateTypingMultiSelectPlaceholder(inputValue); + } + if (multiSelect && !suppressDeselectAll) { + const isEmpty = value == null || Array.isArray(value) && value.length === 0; + this.eDeselect.classList.toggle("ag-hidden", isEmpty); + } + let userCompDetails; + if (multiSelect && !suppressMultiSelectPillRenderer) { + this.createOrUpdatePillContainer(eDisplayField); + return; + } + if (cellRenderer && !allowTyping) { + userCompDetails = _getEditorRendererDetails2( + this.userCompFactory, + config, + _addGridCommonParams4(this.gos, { + value, + valueFormatted, + cellRendererParams, + getValue: () => this.getValue(), + setValue: (value2) => { + this.setValue(value2, true); + }, + setTooltip: (value2, shouldDisplayTooltip) => { + gos.assertModuleRegistered("Tooltip", 3); + this.shouldDisplayTooltip = shouldDisplayTooltip; + this.tooltipFeature?.setTooltipAndRefresh(value2); + } + }) + ); + } + let userCompDetailsPromise; + if (userCompDetails) { + userCompDetailsPromise = userCompDetails.newAgStackInstance(); + } + if (userCompDetailsPromise) { + _clearElement6(eDisplayField); + _bindCellRendererToHtmlElement(userCompDetailsPromise, eDisplayField); + userCompDetailsPromise.then((renderer) => { + this.addDestroyFunc(() => this.destroyBean(renderer)); + }); + } else { + if (value != null) { + eDisplayField.innerText = valueFormatted; + eDisplayField.classList.remove("ag-display-as-placeholder"); + } else { + const { placeholder } = config; + if (_exists7(placeholder)) { + eDisplayField.textContent = placeholder; + eDisplayField.classList.add("ag-display-as-placeholder"); + } else { + _clearElement6(eDisplayField); + } + } + this.shouldDisplayTooltip = _isElementOverflowingCallback2(() => this.eDisplayField); + this.tooltipFeature?.setTooltipAndRefresh(valueFormatted ?? null); + } + } + createPickerComponent() { + const { values } = this; + if (values) { + this.setValueList({ valueList: values }); + } + return this.listComponent; + } + setSearchStringCreator(searchStringFn) { + this.searchStringCreator = searchStringFn; + } + setAsyncValuesSource(params) { + const { source, thresholdRows, useAsyncSearch, onMisconfiguredSearchSource, onFirstValuesPageLoaded } = params; + this.asyncRequests?.destroy(); + const asyncRequestBindings = createRichSelectAsyncRequestBindings({ + host: { + setValueList: (valueListParams) => this.setValueList(valueListParams), + setIsLoading: () => this.setIsLoading() + }, + source, + useAsyncSearch, + onMisconfiguredSearchSource, + onFirstValuesPageLoaded + }); + this.asyncRequests = asyncRequestBindings.controller; + this.hasPagedAsyncSource = asyncRequestBindings.hasPagedSource; + if (asyncRequestBindings.onSearch) { + const { searchDebounceDelay = ON_SEARCH_CALLBACK_DEBOUNCE_DELAY } = this.config; + this.onSearchCallbackDebounced = _debounce(this, asyncRequestBindings.onSearch, searchDebounceDelay); + } else if (!this.config.onSearch) { + this.onSearchCallbackDebounced = void 0; + } + this.setLoadMoreRowsCallback(asyncRequestBindings.onLoadMoreRows, thresholdRows ?? this.loadMoreRowsThreshold); + } + resetAsyncValues(searchString = "") { + if (!this.hasPagedAsyncSource) { + return; + } + this.asyncRequests?.resetValuesPage(searchString); + } + setLoadMoreRowsCallback(callback, thresholdRows = 10) { + this.loadMoreRowsCallback = callback; + this.loadMoreRowsThreshold = Math.max(thresholdRows, 1); + this.listComponent?.setLoadMoreRowsCallback(this.loadMoreRowsCallback, this.loadMoreRowsThreshold); + } + setIsLoading() { + this.listComponent?.setIsLoading(); + } + setValueListInternal(params) { + const { listComponent, isPickerDisplayed, value } = this; + const { valueList, refresh, isInitial, scrollToCurrentValue = true, prependedRowCount = 0 } = params; + if (isInitial) { + this.setValues(valueList); + } + if (!listComponent) { + return; + } + const previousScrollTop = prependedRowCount > 0 ? listComponent.getScrollTop() : void 0; + if (prependedRowCount > 0) { + listComponent.offsetHoveredIndexOnPrependedRows(prependedRowCount); + } + listComponent.setCurrentList(valueList); + if (!refresh) { + return; + } + if (isPickerDisplayed && previousScrollTop != null && prependedRowCount > 0) { + listComponent.restoreScrollOnPrependedRows?.(previousScrollTop, prependedRowCount); + } + if (this.values) { + listComponent.refresh(true); + const hasCurrentValueInLoadedList = value != null && listComponent.getIndicesForValues(value).length > 0; + if (isPickerDisplayed && hasCurrentValueInLoadedList && scrollToCurrentValue) { + listComponent.selectValue(value); + } + } else if (isPickerDisplayed) { + const hasRefreshed = listComponent.selectValue(value); + if (!hasRefreshed) { + listComponent.refresh(); + } + } + this.alignPickerToComponent(); + } + setValueList(params) { + const { valueList } = params; + if (!valueList || Array.isArray(valueList)) { + this.setValueListInternal(params); + return; + } + this.listComponent?.setIsLoading(); + valueList.then((values) => { + if (values !== void 0) { + this.setValueListInternal({ ...params, valueList: values }); + } + }).catch(() => { + this.setValueListInternal({ ...params, valueList: [], refresh: true }); + }); + } + /** + * This method updates the list of select options + */ + setValues(values) { + this.values = values; + this.searchStrings = this.getSearchStringsFromValues(values || []); + } + showPicker() { + const { listComponent, value } = this; + if (!listComponent) { + return; + } + super.showPicker(); + const valueToUse = value ?? null; + listComponent.selectValue(valueToUse); + const idx = listComponent.getIndicesForValues(valueToUse)[0]; + if (idx != null) { + this.tooltipFeature?.attemptToHideTooltip(); + listComponent.highlightIndex(idx); + } else { + listComponent.refresh(); + } + } + createOrUpdatePillContainer(container) { + if (!this.pillContainer) { + const pillContainer = this.pillContainer = this.createBean(new AgPillContainer()); + this.addDestroyFunc(() => { + this.destroyBean(this.pillContainer); + this.pillContainer = null; + }); + _clearElement6(container); + container.appendChild(pillContainer.getGui()); + const { config, eWrapper, ariaDeleteSelection } = this; + pillContainer.init({ + eWrapper, + valueFormatter: this.valueFormatter, + onPillMouseDown: (e) => { + e.stopImmediatePropagation(); + }, + announceItemFocus: () => { + this.announceAriaValue(ariaDeleteSelection); + }, + focusAfterDelete: config.allowTyping ? () => this.focusTypingInputAtBoundary() : void 0, + focusAfterForwardBoundary: config.allowTyping ? () => this.focusTypingInputAtBoundary() : void 0, + onHorizontalArrowKeyDown: this.onPillHorizontalArrowKeyDown, + getValue: () => this.getValue(), + setValue: (value) => this.setValue(value, true) + }); + } + const previousPillCount = this.pillContainer.getGui().childElementCount; + this.doWhileBlockingAnnouncement(() => this.pillContainer?.refresh()); + this.scrollTypingMultiSelectPillsToEndOnAdd(previousPillCount); + } + scrollTypingMultiSelectPillsToEndOnAdd(previousPillCount) { + const { allowTyping, multiSelect, suppressMultiSelectPillRenderer } = this.config; + if (!allowTyping || !multiSelect || suppressMultiSelectPillRenderer) { + return; + } + const ePillContainer = this.pillContainer?.getGui(); + if (!ePillContainer || ePillContainer.childElementCount <= previousPillCount) { + return; + } + _setScrollLeft(ePillContainer, ePillContainer.scrollWidth, this.isRtl()); + } + doWhileBlockingAnnouncement(func) { + this.skipWrapperAnnouncement = true; + func(); + this.skipWrapperAnnouncement = false; + } + isPreviousHorizontalNavigation(key) { + return key === KeyCode13.LEFT !== this.isRtl(); + } + isRtl() { + return !!this.gos?.get("enableRtl"); + } + isTypingInputAtPillBoundary() { + const inputEl = this.eInput.getInputElement(); + const { selectionStart, selectionEnd, value } = inputEl; + if (selectionStart == null || selectionEnd == null || selectionStart !== selectionEnd) { + return false; + } + const isRtl = this.isRtl(); + return isRtl ? selectionStart === (value ?? "").length : selectionStart === 0; + } + focusTypingInputAtBoundary() { + const inputEl = this.eInput.getInputElement(); + inputEl.focus(); + const caret = this.isRtl() ? inputEl.value.length : 0; + inputEl.setSelectionRange(caret, caret); + } + getActiveElementForKeyboardNavigation() { + if (this.beans?.eRootDiv) { + return _getActiveDomElement5(this.beans); + } + const inputEl = this.getTypingInputElement(); + if (!inputEl) { + return document.activeElement; + } + return inputEl.ownerDocument?.activeElement ?? document.activeElement; + } + onWrapperFocus() { + const { eInput, config } = this; + const { allowTyping, multiSelect, suppressDeselectAll } = config; + if (allowTyping) { + const focusableEl = eInput.getFocusableElement(); + focusableEl.focus(); + focusableEl.select(); + } else if (multiSelect && !suppressDeselectAll && !this.skipWrapperAnnouncement) { + this.announceAriaValue(this.ariaDeselectAllItems); + } + } + onWrapperFocusOut(e) { + if (!this.eWrapper.contains(e.relatedTarget)) { + this.hidePicker(); + } + } + onDeselectAllMouseDown(e) { + e.stopImmediatePropagation(); + } + onDeselectAllClick() { + this.setValue([], true); + } + buildSearchStringFromKeyboardEvent(searchKey) { + let { key } = searchKey; + if (key === KeyCode13.BACKSPACE) { + this.searchString = this.searchString.slice(0, -1); + key = ""; + } else if (!_isEventFromPrintableCharacter(searchKey)) { + return; + } + searchKey.preventDefault(); + this.searchTextFromCharacter(key); + } + searchTextFromCharacter(char) { + this.searchString += char; + this.runSearch(); + this.clearSearchString(); + } + searchTextFromString(str) { + if (str == null) { + str = ""; + } + this.searchString = str; + if (this.onSearchCallbackDebounced) { + this.setValueList({ valueList: void 0, refresh: true }); + } + this.runSearch(); + } + getSearchStringsFromValues(values) { + if (typeof values[0] === "object" && this.searchStringCreator) { + return this.searchStringCreator(values); + } + return values.map((value) => value === "" ? "" : this.valueFormatter(value)); + } + filterListModel(filteredValues) { + const { filterList } = this.config; + if (!filterList) { + return; + } + this.setValueList({ valueList: filteredValues, refresh: true }); + } + runSearch() { + if (!this.listComponent) { + return; + } + if (this.onSearchCallbackDebounced) { + this.onSearchCallbackDebounced(this.searchString); + return; + } + const searchStrings = this.searchStrings; + if (!searchStrings) { + this.listComponent.highlightIndex(-1); + return; + } + const { suggestions, filteredValues } = this.getSuggestionsAndFilteredValues(this.searchString, searchStrings); + const { filterList, highlightMatch, searchType = "fuzzy" } = this.config; + const shouldFilter = !!(filterList && this.searchString !== ""); + this.filterListModel(shouldFilter ? filteredValues : this.values || []); + if (!this.highlightEmptyValue()) { + this.highlightListValue(suggestions, filteredValues, shouldFilter); + } + if (highlightMatch && searchType !== "fuzzy") { + this.listComponent?.highlightFilterMatch(this.searchString); + } + this.listComponent?.toggleVisibility(); + } + highlightEmptyValue() { + if (this.searchString === "") { + const emptyIdx = this.searchStrings?.indexOf(""); + if (emptyIdx !== void 0 && emptyIdx !== -1) { + this.listComponent?.highlightIndex(emptyIdx); + return true; + } + } + return false; + } + highlightListValue(suggestions, filteredValues, shouldFilter) { + if (suggestions.length) { + const topSuggestionIndex = shouldFilter ? 0 : this.searchStrings?.indexOf(suggestions[0]); + if (topSuggestionIndex !== void 0) { + this.listComponent?.highlightIndex(topSuggestionIndex); + } + } else { + this.listComponent?.highlightIndex(-1); + if (!shouldFilter || filteredValues.length) { + this.listComponent?.ensureIndexVisible(0); + } else if (shouldFilter) { + const eAriaEl = this.getFocusableElement(); + _addOrRemoveAttribute2(eAriaEl, "data-active-option", null); + _setAriaActiveDescendant2(eAriaEl, null); + } + } + } + getSuggestionsAndFilteredValues(searchValue, valueList) { + let suggestions = []; + const filteredValues = []; + if (!searchValue.length) { + return { suggestions, filteredValues }; + } + const { searchType = "fuzzy", filterList } = this.config; + const values = this.values || []; + if (searchType === "fuzzy") { + const fuzzySearchResult = _fuzzySuggestions2({ + inputValue: searchValue, + allSuggestions: valueList, + hideIrrelevant: true + }); + suggestions = fuzzySearchResult.values; + const indices = fuzzySearchResult.indices; + if (filterList && indices.length) { + for (let i = 0; i < indices.length; i++) { + filteredValues.push(values[indices[i]]); + } + } + } else { + suggestions = valueList.filter((val, idx) => { + const currentValue = val.toLocaleLowerCase(); + const valueToMatch = this.searchString.toLocaleLowerCase(); + const isMatch = searchType === "match" ? currentValue.startsWith(valueToMatch) : currentValue.includes(valueToMatch); + if (filterList && isMatch) { + filteredValues.push(values[idx]); + } + return isMatch; + }); + } + return { suggestions, filteredValues }; + } + clearSearchString() { + this.searchString = ""; + } + setValue(value, silent, fromPicker, skipRendering) { + if (this.value === value) { + this.updateTypingMultiSelectPlaceholder(); + return this; + } + const isArray = Array.isArray(value); + if (value != null) { + if (!isArray) { + const indices = this.listComponent?.getIndicesForValues(value); + if (!indices?.length) { + return this; + } + } + if (!fromPicker) { + this.listComponent?.selectValue(value); + } + } + super.setValue(value, silent); + if (!skipRendering) { + this.renderSelectedValue(fromPicker); + } else { + this.updateTypingMultiSelectPlaceholder(); + } + return this; + } + onNavigationKeyDown(event, key, announceItem) { + event.preventDefault(); + const isDown = key === KeyCode13.DOWN; + if (!this.isPickerDisplayed && isDown) { + this.showPicker(); + return; + } + this.listComponent?.onNavigationKeyDown(key, announceItem); + } + onEnterKeyDown(e) { + const isTypingMultiSelect = !!(this.config.allowTyping && this.config.multiSelect); + if (!this.isPickerDisplayed) { + if (isTypingMultiSelect) { + e.preventDefault(); + this.dispatchPickerEventAndHidePicker(this.value, true); + } + return; + } + e.preventDefault(); + if (this.listComponent?.getCurrentList()) { + const lastRowHovered = this.listComponent.getLastItemHovered(); + if (isTypingMultiSelect) { + if (lastRowHovered !== void 0) { + const values = this.getCurrentSelectionWithAppendedItem(lastRowHovered); + this.listComponent.selectValue(values); + this.setValue(values, false, true); + this.resetTypingMultiSelectSearchState(); + this.hidePicker(); + } + return; + } + if (this.config.multiSelect || lastRowHovered === void 0) { + this.dispatchPickerEventAndHidePicker(this.value, true); + } else { + this.onListValueSelected(/* @__PURE__ */ new Set([lastRowHovered]), true); + } + } + } + getCurrentSelectionWithAppendedItem(item) { + const value = this.getValue(); + const values = Array.isArray(value) ? [...value] : value != null ? [value] : []; + if (!values.some((selectedValue) => this.areValuesEquivalent(selectedValue, item))) { + values.push(item); + } + return values; + } + areValuesEquivalent(left, right) { + if (left === right) { + return true; + } + if (typeof left === "object" && typeof right === "object" && left != null && right != null) { + return this.valueFormatter(left) === this.valueFormatter(right); + } + return false; + } + resetTypingMultiSelectSearchState() { + this.searchString = ""; + this.eInput.setValue("", true); + if (this.onSearchCallbackDebounced) { + this.setValueList({ valueList: void 0, refresh: true }); + return; + } + if (this.config.filterList && this.values) { + this.setValueList({ valueList: this.values, refresh: true }); + } + } + updateTypingMultiSelectPlaceholder(inputValue) { + const { allowTyping, multiSelect, placeholder } = this.config; + if (!allowTyping || !multiSelect) { + return; + } + const currentInputValue = inputValue ?? this.eInput.getValue() ?? ""; + const hasInputValue = currentInputValue.length > 0; + const value = this.value; + const hasSelectedValues = (Array.isArray(value) ? value.length > 0 : value != null) || (this.listComponent?.getSelectedItems().size ?? 0) > 0; + const nextPlaceholder = !hasInputValue && !hasSelectedValues ? placeholder : ""; + this.eInput.setInputPlaceholder(nextPlaceholder); + this.updateTypingMultiSelectInputSize(currentInputValue, nextPlaceholder); + } + updateTypingMultiSelectInputSize(inputValue, placeholder) { + const inputEl = this.getTypingInputElement(); + if (!inputEl) { + return; + } + const widthSource = inputValue || placeholder || ""; + const nextSize = Math.max(1, Math.min(widthSource.length + 1, 32)); + if (inputEl.size !== nextSize) { + inputEl.size = nextSize; + } + if (inputValue) { + const ePillContainer = this.pillContainer?.getGui(); + if (ePillContainer) { + _setScrollLeft(ePillContainer, ePillContainer.scrollWidth, this.isRtl()); + } + } + } + getTypingInputElement() { + const getInputElement = this.eInput.getInputElement; + if (typeof getInputElement !== "function") { + return; + } + return getInputElement.call(this.eInput); + } + openPickerOnTypingIfNeeded(value) { + const { + isPickerDisplayed, + config: { allowTyping, multiSelect } + } = this; + if (allowTyping && multiSelect && !isPickerDisplayed && !!value) { + this.showPicker(); + } + } + onDeleteKeyDown(e) { + const { eWrapper, beans } = this; + const activeEl = _getActiveDomElement5(beans); + if (activeEl === eWrapper) { + e.preventDefault(); + this.setValue([], true); + } + } + onBackspaceKeyDown(e) { + if (!this.isTypingInputAtPillBoundary()) { + return; + } + const value = this.getValue(); + const selectedValues = Array.isArray(value) ? value : value != null ? [value] : Array.from(this.listComponent?.getSelectedItems() ?? []); + if (!selectedValues.length) { + return; + } + e.preventDefault(); + this.setValue(selectedValues.slice(0, -1), true); + } + onTabKeyDown() { + const { config, isPickerDisplayed, listComponent } = this; + const { multiSelect } = config; + if (!isPickerDisplayed || !listComponent) { + return; + } + if (multiSelect) { + const values = this.getValueFromSet(listComponent.getSelectedItems()); + if (values) { + this.setValue(values, false, true, true); + } + } else { + const lastItemHovered = listComponent.getLastItemHovered(); + if (lastItemHovered !== void 0) { + this.setValue(lastItemHovered, false, true); + } + } + this.hidePicker(); + } + getValueFromSet(valueSet) { + const { multiSelect } = this.config; + if (!multiSelect) { + return valueSet.size ? valueSet.values().next().value : null; + } + const selectedValues = Array.from(valueSet); + return selectedValues.length ? selectedValues : null; + } + onListValueSelected(valueSet, fromEnterKey) { + const newValue = this.getValueFromSet(valueSet); + this.setValue(newValue, false, true); + const { multiSelect, allowTyping } = this.config; + if (multiSelect && allowTyping) { + this.resetTypingMultiSelectSearchState(); + this.hidePicker(); + } else if (!multiSelect) { + this.dispatchPickerEventAndHidePicker(newValue, fromEnterKey); + } + } + dispatchPickerEventAndHidePicker(value, fromEnterKey) { + const event = { + type: "fieldPickerValueSelected", + fromEnterKey, + value + }; + this.dispatchLocalEvent(event); + this.hidePicker(); + } + getFocusableElement() { + const { allowTyping } = this.config; + if (allowTyping) { + return this.eInput.getFocusableElement(); + } + return super.getFocusableElement(); + } + handleHorizontalNavigationKey(e) { + const { allowTyping, multiSelect } = this.config; + if (!allowTyping) { + e.preventDefault(); + this.listComponent?.highlightIndex(-1); + this.pillContainer?.onNavigationKeyDown(e); + return; + } + const pillContainer = this.pillContainer; + if (!pillContainer) { + return; + } + if (!multiSelect) { + return; + } + const activeEl = this.getActiveElementForKeyboardNavigation(); + const isPrevious = this.isPreviousHorizontalNavigation(e.key); + const inputEl = this.eInput.getInputElement(); + if (activeEl === inputEl) { + if (isPrevious && this.isTypingInputAtPillBoundary()) { + this.listComponent?.highlightIndex(-1); + pillContainer.onNavigationKeyDown(e); + } + return; + } + if (pillContainer.getGui().contains(activeEl)) { + this.listComponent?.highlightIndex(-1); + const activeBefore = activeEl; + pillContainer.onNavigationKeyDown(e); + if (!isPrevious && this.getActiveElementForKeyboardNavigation() === activeBefore) { + this.focusTypingInputAtBoundary(); + } + } + } + handlePageNavigationKey(e, key) { + const { allowTyping } = this.config; + if (allowTyping && (key === KeyCode13.PAGE_HOME || key === KeyCode13.PAGE_END)) { + e.preventDefault(); + const inputEl = this.eInput.getInputElement(); + const target = key === KeyCode13.PAGE_HOME ? 0 : inputEl.value.length; + inputEl.setSelectionRange(target, target); + return; + } + e.preventDefault(); + if (this.pickerComponent) { + this.listComponent?.navigateToPage(key); + } + } + handleVerticalNavigationKey(e, key, isComposing) { + if (isComposing) { + return; + } + this.onNavigationKeyDown(e, key, () => { + if (this.config.multiSelect) { + this.doWhileBlockingAnnouncement(() => this.eWrapper.focus()); + this.announceAriaValue(this.ariaToggleSelection); + } + }); + } + handleEscapeKey(e) { + if (!this.isPickerDisplayed) { + return; + } + if (_isVisible4(this.listComponent.getGui())) { + e.preventDefault(); + _stopPropagationForAgGrid(e); + } + this.hidePicker(); + } + handleEnterKey(e, isComposing) { + if (isComposing) { + e.preventDefault(); + return; + } + this.onEnterKeyDown(e); + } + handleSpaceKey(e, isComposing) { + const { allowTyping, multiSelect } = this.config; + const { isPickerDisplayed, listComponent } = this; + const shouldToggleSelectionWithSpace = !isComposing && isPickerDisplayed && multiSelect && !!listComponent && (!allowTyping || (this.eInput.getValue() ?? "") === ""); + if (!allowTyping || isComposing || shouldToggleSelectionWithSpace) { + e.preventDefault(); + } + if (shouldToggleSelectionWithSpace && listComponent) { + const lastItemHovered = listComponent.getLastItemHovered(); + if (lastItemHovered !== void 0) { + listComponent.toggleListItemSelection(lastItemHovered); + } + } + } + handleBackspaceKey(e, isComposing) { + if (!isComposing && this.config.allowTyping && this.config.multiSelect) { + this.onBackspaceKeyDown(e); + } + } + handleDeleteKey(e) { + if (this.config.multiSelect && !this.config.suppressDeselectAll) { + this.onDeleteKeyDown(e); + } + } + handleSearchWithoutTyping(e) { + if (!this.config.allowTyping) { + this.buildSearchStringFromKeyboardEvent(e); + } + } + onKeyDown(e) { + const { key, isComposing } = e; + switch (key) { + case KeyCode13.LEFT: + case KeyCode13.RIGHT: + this.handleHorizontalNavigationKey(e); + break; + case KeyCode13.PAGE_HOME: + case KeyCode13.PAGE_END: + case KeyCode13.PAGE_UP: + case KeyCode13.PAGE_DOWN: + this.handlePageNavigationKey(e, key); + break; + case KeyCode13.DOWN: + case KeyCode13.UP: + this.handleVerticalNavigationKey(e, key, isComposing); + break; + case KeyCode13.ESCAPE: + this.handleEscapeKey(e); + break; + case KeyCode13.ENTER: + this.handleEnterKey(e, isComposing); + break; + case KeyCode13.SPACE: + this.handleSpaceKey(e, isComposing); + break; + case KeyCode13.BACKSPACE: + this.handleBackspaceKey(e, isComposing); + break; + case KeyCode13.TAB: + this.onTabKeyDown(); + break; + case KeyCode13.DELETE: + this.handleDeleteKey(e); + break; + default: + this.handleSearchWithoutTyping(e); + } + } + announceAriaValue(value) { + this.ariaAnnounce?.announceValue(value, "richSelect"); + } + destroy() { + this.asyncRequests?.destroy(); + this.asyncRequests = void 0; + this.hasPagedAsyncSource = false; + if (this.listComponent) { + this.listComponent = this.destroyBean(this.listComponent); + } + this.searchStrings = void 0; + super.destroy(); + } +}; +function _bindCellRendererToHtmlElement(cellRendererPromise, eTarget) { + cellRendererPromise.then((cellRenderer) => { + const gui = cellRenderer.getGui(); + if (gui != null) { + eTarget.appendChild(gui); + } + }); +} +function resolveRichSelectValueFormatter(valueFormatter) { + return (value) => valueFormatter?.(value) ?? String(value ?? ""); +} + +// packages/ag-grid-enterprise/src/advancedFilter/builder/addDropdownComp.ts +var AddDropdownCompElement = { + tag: "div", + cls: "ag-picker-field", + role: "presentation", + children: [ + { tag: "div", ref: "eLabel" }, + { + tag: "div", + ref: "eWrapper", + cls: "ag-wrapper ag-picker-collapsed", + children: [ + { tag: "div", ref: "eDisplayField", cls: "ag-picker-field-display" }, + { tag: "ag-input-text-field", ref: "eInput", cls: "ag-rich-select-field-input" }, + { + tag: "span", + ref: "eDeselect", + cls: "ag-rich-select-deselect-button ag-picker-field-icon", + role: "presentation" + }, + { tag: "div", ref: "eIcon", cls: "ag-picker-field-icon", attrs: { "aria-hidden": "true" } } + ] + } + ] +}; +var AddDropdownComp = class extends AgRichSelect { + constructor(params) { + super({ + ...params, + template: AddDropdownCompElement, + agComponents: [AgInputTextFieldSelector3] + }); + this.params = params; + } + showPicker() { + setTimeout(() => super.showPicker()); + } + hidePicker() { + setTimeout(() => super.hidePicker()); + } + postConstruct() { + super.postConstruct(); + const { wrapperClassName, ariaLabel } = this.params; + _setDisplayed8(this.eDisplayField, false); + if (wrapperClassName) { + this.eWrapper.classList.add(wrapperClassName); + } + _setAriaLabelledBy(this.eWrapper, ""); + _setAriaLabel4(this.eWrapper, ariaLabel); + } + onEnterKeyDown(event) { + _stopPropagationForAgGrid2(event); + if (this.isPickerDisplayed) { + super.onEnterKeyDown(event); + } else { + event.preventDefault(); + this.showPicker(); + } + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderItemNavigationFeature.ts +import { + BeanStub as BeanStub4, + KeyCode as KeyCode14, + _getActiveDomElement as _getActiveDomElement6, + _isStopPropagationForAgGrid, + _stopPropagationForAgGrid as _stopPropagationForAgGrid3 +} from "ag-grid-community"; +var AdvancedFilterBuilderItemNavigationFeature = class extends BeanStub4 { + constructor(eGui, focusWrapper, eFocusableComp) { + super(); + this.eGui = eGui; + this.focusWrapper = focusWrapper; + this.eFocusableComp = eFocusableComp; + } + postConstruct() { + this.addManagedElementListeners(this.eGui, { + keydown: (event) => { + switch (event.key) { + case KeyCode14.TAB: + if (!event.defaultPrevented) { + _stopPropagationForAgGrid3(event); + } + break; + case KeyCode14.UP: + case KeyCode14.DOWN: + _stopPropagationForAgGrid3(event); + break; + case KeyCode14.ESCAPE: + if (_isStopPropagationForAgGrid(event)) { + return; + } + if (this.eGui.contains(_getActiveDomElement6(this.beans))) { + event.preventDefault(); + _stopPropagationForAgGrid3(event); + this.focusWrapper.focus(); + } + break; + } + } + }); + const highlightClass = "ag-advanced-filter-builder-virtual-list-item-highlight"; + this.addManagedListeners(this.focusWrapper, { + keydown: (event) => { + if (event.key === KeyCode14.ENTER) { + if (_isStopPropagationForAgGrid(event)) { + return; + } + if (_getActiveDomElement6(this.beans) === this.focusWrapper) { + event.preventDefault(); + _stopPropagationForAgGrid3(event); + this.eFocusableComp.getFocusableElement().focus(); + } + } + }, + focusin: () => { + this.focusWrapper.classList.add(highlightClass); + }, + focusout: (event) => { + if (!this.focusWrapper.contains(event.relatedTarget)) { + this.focusWrapper.classList.remove(highlightClass); + } + } + }); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderUtils.ts +function getAdvancedFilterBuilderAddButtonParams(translate, maxPickerWidth) { + return { + pickerAriaLabelKey: "ariaLabelAdvancedFilterBuilderAddField", + pickerAriaLabelValue: "Advanced Filter Builder Add Field", + pickerType: "ag-list", + valueList: [ + { + key: "condition", + displayValue: translate("advancedFilterBuilderAddCondition") + }, + { + key: "join", + displayValue: translate("advancedFilterBuilderAddJoin") + } + ], + valueFormatter: (value) => value == null ? "" : value.displayValue ?? value.key, + pickerIcon: "advancedFilterBuilderAdd", + maxPickerWidth: `${maxPickerWidth ?? 120}px`, + wrapperClassName: "ag-advanced-filter-builder-item-button", + ariaLabel: translate("advancedFilterBuilderAddButtonTooltip") + }; +} + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderItemAddComp.ts +var ItemAddElement = { + tag: "div", + cls: "ag-advanced-filter-builder-item-wrapper", + role: "presentation", + children: [ + { + tag: "div", + ref: "eItem", + cls: "ag-advanced-filter-builder-item", + role: "presentation", + children: [ + { + tag: "div", + cls: "ag-advanced-filter-builder-item-tree-lines", + attrs: { "aria-hidden": "true" }, + children: [ + { + tag: "div", + cls: "ag-advanced-filter-builder-item-tree-line ag-advanced-filter-builder-item-tree-line-vertical-top ag-advanced-filter-builder-item-tree-line-horizontal" + } + ] + } + ] + } + ] +}; +var AdvancedFilterBuilderItemAddComp = class extends Component9 { + constructor(item, focusWrapper) { + super(ItemAddElement); + this.item = item; + this.focusWrapper = focusWrapper; + this.eItem = RefPlaceholder14; + } + wireBeans(beans) { + this.advFilterExpSvc = beans.advFilterExpSvc; + this.registry = beans.registry; + } + postConstruct() { + _setAriaLevel(this.focusWrapper, 2); + const addButtonParams = getAdvancedFilterBuilderAddButtonParams( + (key) => this.advFilterExpSvc.translate(key), + this.gos.get("advancedFilterBuilderParams")?.addSelectWidth + ); + const eAddButton = this.createManagedBean(new AddDropdownComp(addButtonParams)); + this.addManagedListeners(eAddButton, { + fieldPickerValueSelected: ({ value }) => { + this.dispatchLocalEvent({ + type: "advancedFilterBuilderAdded", + item: this.item, + isJoin: value.key === "join" + }); + } + }); + this.eItem.appendChild(eAddButton.getGui()); + this.createOptionalManagedBean( + this.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => eAddButton.getGui(), + getLocation: () => "advancedFilter", + getTooltipValue: () => this.advFilterExpSvc.translate("advancedFilterBuilderAddButtonTooltip") + }) + ); + this.createManagedBean( + new AdvancedFilterBuilderItemNavigationFeature(this.getGui(), this.focusWrapper, eAddButton) + ); + _setAriaLabel5( + this.focusWrapper, + this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderItem", [ + this.advFilterExpSvc.translate("advancedFilterBuilderAddButtonTooltip"), + `${this.item.level + 1}` + ]) + ); + } + afterAdd() { + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderItemComp.ts +import { + DragSourceType as DragSourceType2, + KeyCode as KeyCode16, + RefPlaceholder as RefPlaceholder16, + TabGuardComp, + _createElement as _createElement6, + _createIconNoSpan as _createIconNoSpan4, + _removeAriaExpanded, + _setAriaDisabled as _setAriaDisabled2, + _setAriaExpanded as _setAriaExpanded4, + _setAriaLabel as _setAriaLabel8, + _setAriaLevel as _setAriaLevel2, + _setDisplayed as _setDisplayed10, + _setVisible, + _stopPropagationForAgGrid as _stopPropagationForAgGrid6 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/conditionPillWrapperComp.ts +import { Component as Component10, _exists as _exists8, _removeFromParent as _removeFromParent2, _toStringOrNull as _toStringOrNull2 } from "ag-grid-community"; +var ConditionPillWrapperComp = class extends Component10 { + constructor() { + super({ tag: "div", cls: "ag-advanced-filter-builder-item-condition", role: "presentation" }); + this.validationMessage = null; + } + wireBeans(beans) { + this.advFilterExpSvc = beans.advFilterExpSvc; + } + init(params) { + const { item, createPill } = params; + this.item = item; + this.createPill = createPill; + this.filterModel = item.filterModel; + this.setupColumnCondition(this.filterModel); + this.validate(); + this.addDestroyFunc(() => this.destroyBeans([this.eColumnPill, this.eOperatorPill, this.eOperandPill])); + } + getDragName() { + return this.filterModel.colId ? this.advFilterExpSvc.parseColumnFilterModel(this.filterModel) : this.getDefaultColumnDisplayValue(); + } + getAriaLabel() { + return `${this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderFilterItem")} ${this.getDragName()}`; + } + getValidationMessage() { + return this.validationMessage; + } + getFocusableElement() { + return this.eColumnPill.getFocusableElement(); + } + setupColumnCondition(filterModel) { + const columnDetails = this.advFilterExpSvc.getColumnDetails(filterModel.colId); + this.baseCellDataType = columnDetails.baseCellDataType; + this.column = columnDetails.column; + this.numOperands = this.getNumOperands(this.getOperatorKey()); + this.eColumnPill = this.createPill({ + key: this.getColumnKey(), + displayValue: this.getColumnDisplayValue() ?? this.getDefaultColumnDisplayValue(), + cssClass: "ag-advanced-filter-builder-column-pill", + isSelect: true, + getEditorParams: () => ({ values: this.advFilterExpSvc.getColumnAutocompleteEntries() }), + update: (key) => this.setColumnKey(key), + pickerAriaLabelKey: "ariaLabelAdvancedFilterBuilderColumnSelectField", + pickerAriaLabelValue: "Advanced Filter Builder Column Select Field", + ariaLabel: this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderColumn") + }); + this.getGui().appendChild(this.eColumnPill.getGui()); + if (_exists8(this.getColumnKey())) { + this.createOperatorPill(); + if (this.hasOperand()) { + this.createOperandPill(); + } + } + } + createOperatorPill() { + this.eOperatorPill = this.createPill({ + key: this.getOperatorKey(), + displayValue: this.getOperatorDisplayValue() ?? this.getDefaultOptionSelectValue(), + cssClass: "ag-advanced-filter-builder-option-pill", + isSelect: true, + getEditorParams: () => ({ values: this.getOperatorAutocompleteEntries() }), + update: (key) => this.setOperatorKey(key), + pickerAriaLabelKey: "ariaLabelAdvancedFilterBuilderOptionSelectField", + pickerAriaLabelValue: "Advanced Filter Builder Option Select Field", + ariaLabel: this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderOption") + }); + this.eColumnPill.getGui().insertAdjacentElement("afterend", this.eOperatorPill.getGui()); + } + createOperandPill() { + const { filter } = this.filterModel; + const key = (typeof filter === "number" || typeof filter === "bigint" ? _toStringOrNull2(filter) : filter) ?? ""; + this.eOperandPill = this.createPill({ + key, + // Convert from the input format to display format. + // Input format matches model format except for numbers, but these get stringified anyway + valueFormatter: (value) => this.advFilterExpSvc.getOperandDisplayValue({ ...this.filterModel, filter: value }, true), + baseCellDataType: this.baseCellDataType, + cssClass: "ag-advanced-filter-builder-value-pill", + isSelect: false, + update: (key2) => this.setOperand(key2), + ariaLabel: this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderValue") + }); + this.getGui().appendChild(this.eOperandPill.getGui()); + } + getColumnKey() { + return this.filterModel.colId; + } + getColumnDisplayValue() { + return this.advFilterExpSvc.getColumnDisplayValue(this.filterModel); + } + getOperatorKey() { + return this.filterModel.type; + } + getOperatorDisplayValue() { + return this.advFilterExpSvc.getOperatorDisplayValue(this.filterModel); + } + getOperandDisplayValue() { + return this.advFilterExpSvc.getOperandDisplayValue(this.filterModel, true); + } + hasOperand() { + return this.numOperands > 0; + } + getOperatorAutocompleteEntries() { + return this.column ? this.advFilterExpSvc.getOperatorAutocompleteEntries(this.column, this.baseCellDataType) : []; + } + setColumnKey(colId) { + if (!this.eOperatorPill) { + this.createOperatorPill(); + } + const newColumnDetails = this.advFilterExpSvc.getColumnDetails(colId); + this.column = newColumnDetails.column; + const newBaseCellDataType = newColumnDetails.baseCellDataType; + if (this.baseCellDataType !== newBaseCellDataType) { + this.baseCellDataType = newBaseCellDataType; + this.setOperatorKey(void 0); + if (this.eOperatorPill) { + _removeFromParent2(this.eOperatorPill.getGui()); + this.destroyBean(this.eOperatorPill); + this.createOperatorPill(); + } + this.validate(); + } + this.filterModel.colId = colId; + this.filterModel.filterType = this.baseCellDataType; + } + setOperatorKey(operator) { + const newNumOperands = this.getNumOperands(operator); + if (newNumOperands !== this.numOperands) { + this.numOperands = newNumOperands; + if (newNumOperands === 0) { + this.destroyOperandPill(); + } else { + this.createOperandPill(); + if (this.baseCellDataType !== "number") { + this.setOperand(""); + } + } + } + this.filterModel.type = operator; + this.validate(); + } + setOperand(operand) { + let parsedOperand = operand; + if (this.baseCellDataType === "number") { + parsedOperand = _exists8(operand) ? Number(operand) : ""; + } + this.filterModel.filter = parsedOperand; + this.validate(); + } + getNumOperands(operator) { + return this.advFilterExpSvc.getExpressionOperator(this.baseCellDataType, operator)?.numOperands ?? 0; + } + destroyOperandPill() { + delete this.filterModel.filter; + this.eOperandPill?.getGui().remove(); + this.destroyBean(this.eOperandPill); + this.eOperandPill = void 0; + } + validate() { + let validationMessage = null; + if (!_exists8(this.getColumnKey())) { + validationMessage = this.advFilterExpSvc.translate("advancedFilterBuilderValidationSelectColumn"); + } else if (!_exists8(this.getOperatorKey())) { + validationMessage = this.advFilterExpSvc.translate("advancedFilterBuilderValidationSelectOption"); + } else if (this.numOperands > 0 && !_exists8(this.getOperandDisplayValue())) { + validationMessage = this.advFilterExpSvc.translate("advancedFilterBuilderValidationEnterValue"); + } + this.item.valid = !validationMessage; + if (validationMessage !== this.validationMessage) { + this.validationMessage = validationMessage; + this.dispatchLocalEvent({ + type: "advancedFilterBuilderValidChanged" + }); + } + } + getDefaultColumnDisplayValue() { + return this.advFilterExpSvc.translate("advancedFilterBuilderSelectColumn"); + } + getDefaultOptionSelectValue() { + return this.advFilterExpSvc.translate("advancedFilterBuilderSelectOption"); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/inputPillComp.ts +import { + AgInputDateField, + AgInputNumberField, + AgInputTextField as AgInputTextField2, + Component as Component11, + KeyCode as KeyCode15, + RefPlaceholder as RefPlaceholder15, + _exists as _exists9, + _setAriaDescribedBy, + _setAriaLabel as _setAriaLabel6, + _setDisplayed as _setDisplayed9, + _stopPropagationForAgGrid as _stopPropagationForAgGrid4 +} from "ag-grid-community"; +var inputComponentDescriptors = { + number: [AgInputNumberField], + bigint: [AgInputTextField2], + boolean: [AgInputTextField2], + object: [AgInputTextField2], + text: [AgInputTextField2], + date: [AgInputDateField], + dateString: [AgInputDateField], + dateTime: [AgInputDateField, (i) => i.setIncludeTime(true)], + dateTimeString: [AgInputDateField, (i) => i.setIncludeTime(true)] +}; +var InputPillElement = { + tag: "div", + cls: "ag-advanced-filter-builder-pill-wrapper", + role: "presentation", + children: [ + { + tag: "div", + ref: "ePill", + cls: "ag-advanced-filter-builder-pill", + role: "button", + children: [ + { + tag: "span", + ref: "eLabel", + cls: "ag-advanced-filter-builder-pill-display" + } + ] + } + ] +}; +var InputPillComp = class extends Component11 { + constructor(params) { + super(InputPillElement); + this.params = params; + this.ePill = RefPlaceholder15; + this.eLabel = RefPlaceholder15; + const { value, valueFormatter } = params; + this.value = value; + this.displayValue = valueFormatter(value); + } + wireBeans(beans) { + this.advFilterExpSvc = beans.advFilterExpSvc; + } + postConstruct() { + const { cssClass, ariaLabel } = this.params; + this.ePill.classList.add(cssClass); + this.activateTabIndex([this.ePill]); + this.eLabel.id = `${this.getCompId()}`; + _setAriaDescribedBy(this.ePill, this.eLabel.id); + _setAriaLabel6(this.ePill, ariaLabel); + this.renderValue(); + this.addManagedListeners(this.ePill, { + click: (event) => { + event.preventDefault(); + this.showEditor(); + }, + keydown: (event) => { + if (event.key === KeyCode15.ENTER) { + event.preventDefault(); + _stopPropagationForAgGrid4(event); + this.showEditor(); + } + } + }); + this.addDestroyFunc(() => this.destroyBean(this.eEditor)); + } + getFocusableElement() { + return this.ePill; + } + showEditor() { + if (this.eEditor) { + return; + } + _setDisplayed9(this.ePill, false); + this.eEditor = this.createEditorComp(this.params.type); + this.eEditor.setValue(this.value); + const eEditorGui = this.eEditor.getGui(); + this.eEditor.addManagedElementListeners(eEditorGui, { + keydown: (event) => { + switch (event.key) { + case KeyCode15.ENTER: + event.preventDefault(); + _stopPropagationForAgGrid4(event); + this.updateValue(true); + break; + case KeyCode15.ESCAPE: + event.preventDefault(); + _stopPropagationForAgGrid4(event); + this.hideEditor(true); + break; + } + }, + focusout: () => this.updateValue(false) + }); + this.getGui().appendChild(eEditorGui); + this.eEditor.getFocusableElement().focus(); + } + /** + * Responsible for instantiating an InputField and calling some of the setup methods + */ + createEditorComp(type) { + const [Comp, postConstruct] = inputComponentDescriptors[type]; + const instance = this.createBean(new Comp()); + postConstruct?.(instance); + return instance; + } + hideEditor(keepFocus) { + const { eEditor } = this; + if (!eEditor) { + return; + } + this.eEditor = void 0; + eEditor.getGui().remove(); + this.destroyBean(eEditor); + _setDisplayed9(this.ePill, true); + if (keepFocus) { + this.ePill.focus(); + } + } + renderValue() { + let value; + const { displayValue, eLabel, params } = this; + const { type } = params; + const { classList } = eLabel; + classList.remove( + "ag-advanced-filter-builder-value-empty", + "ag-advanced-filter-builder-value-number", + "ag-advanced-filter-builder-value-text" + ); + if (!_exists9(displayValue)) { + value = this.advFilterExpSvc.translate("advancedFilterBuilderEnterValue"); + classList.add("ag-advanced-filter-builder-value-empty"); + } else if (type === "number" || type === "bigint") { + value = displayValue; + classList.add("ag-advanced-filter-builder-value-number"); + } else { + value = `"${displayValue}"`; + classList.add("ag-advanced-filter-builder-value-text"); + } + eLabel.textContent = value; + } + updateValue(keepFocus) { + if (!this.eEditor) { + return; + } + const value = this.eEditor.getValue() ?? ""; + this.dispatchLocalEvent({ + type: "fieldValueChanged", + value + }); + this.value = value; + this.displayValue = this.params.valueFormatter(value); + this.renderValue(); + this.hideEditor(keepFocus); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/joinPillWrapperComp.ts +import { Component as Component12 } from "ag-grid-community"; +var JoinPillWrapperComp = class extends Component12 { + wireBeans(beans) { + this.advFilterExpSvc = beans.advFilterExpSvc; + } + constructor() { + super({ + tag: "div", + cls: "ag-advanced-filter-builder-item-condition", + role: "presentation" + }); + } + init(params) { + const { item, createPill } = params; + const filterModel = item.filterModel; + this.filterModel = filterModel; + this.ePill = createPill({ + key: filterModel.type, + displayValue: this.advFilterExpSvc.parseJoinOperator(filterModel), + cssClass: "ag-advanced-filter-builder-join-pill", + isSelect: true, + getEditorParams: () => ({ + values: this.advFilterExpSvc.getJoinOperatorAutocompleteEntries() + }), + update: (key) => filterModel.type = key, + pickerAriaLabelKey: "ariaLabelAdvancedFilterBuilderJoinSelectField", + pickerAriaLabelValue: "Advanced Filter Builder Join Operator Select Field", + ariaLabel: this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderJoinOperator") + }); + this.getGui().appendChild(this.ePill.getGui()); + this.addDestroyFunc(() => this.destroyBean(this.ePill)); + } + getDragName() { + return this.advFilterExpSvc.parseJoinOperator(this.filterModel); + } + getAriaLabel() { + return `${this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderGroupItem")} ${this.getDragName()}`; + } + getValidationMessage() { + return null; + } + getFocusableElement() { + return this.ePill.getFocusableElement(); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/selectPillComp.ts +import { + AgInputTextFieldSelector as AgInputTextFieldSelector4, + _setAriaLabel as _setAriaLabel7, + _setAriaLabelledBy as _setAriaLabelledBy2, + _stopPropagationForAgGrid as _stopPropagationForAgGrid5 +} from "ag-grid-community"; +var SelectPillElement = { + tag: "div", + cls: "ag-picker-field ag-advanced-filter-builder-pill-wrapper", + role: "presentation", + children: [ + { tag: "div", ref: "eLabel" }, + { + tag: "div", + ref: "eWrapper", + cls: "ag-wrapper ag-advanced-filter-builder-pill ag-picker-collapsed", + children: [ + { + tag: "div", + ref: "eDisplayField", + cls: "ag-picker-field-display ag-advanced-filter-builder-pill-display" + }, + { tag: "ag-input-text-field", ref: "eInput", cls: "ag-rich-select-field-input" }, + { + tag: "span", + ref: "eDeselect", + cls: "ag-rich-select-deselect-button ag-picker-field-icon", + role: "presentation" + }, + { tag: "div", ref: "eIcon", cls: "ag-picker-field-icon", attrs: { "aria-hidden": "true" } } + ] + } + ] +}; +var SelectPillComp = class extends AgRichSelect { + constructor(params) { + super({ + ...params, + template: SelectPillElement, + agComponents: [AgInputTextFieldSelector4] + }); + this.params = params; + } + getFocusableElement() { + return this.eWrapper; + } + showPicker() { + setTimeout(() => super.showPicker()); + } + hidePicker() { + setTimeout(() => super.hidePicker()); + } + postConstruct() { + super.postConstruct(); + const { wrapperClassName, ariaLabel } = this.params; + this.eWrapper.classList.add(wrapperClassName); + _setAriaLabelledBy2(this.eWrapper, ""); + _setAriaLabel7(this.eWrapper, ariaLabel); + } + createPickerComponent() { + if (!this.values) { + const { values } = this.params.getEditorParams(); + this.values = values; + const key = this.value.key; + const value = values.find((value2) => value2.key === key) ?? { + key, + displayValue: this.value.displayValue + }; + this.value = value; + } + return super.createPickerComponent(); + } + onEnterKeyDown(event) { + _stopPropagationForAgGrid5(event); + if (this.isPickerDisplayed) { + super.onEnterKeyDown(event); + } else { + event.preventDefault(); + this.showPicker(); + } + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderItemComp.ts +var AdvancedFilterBuilderItemElement = { + tag: "div", + cls: "ag-advanced-filter-builder-item-wrapper", + role: "presentation", + children: [ + { + tag: "div", + cls: "ag-advanced-filter-builder-item", + role: "presentation", + children: [ + { + tag: "div", + ref: "eTreeLines", + cls: "ag-advanced-filter-builder-item-tree-lines", + attrs: { "aria-hidden": "true" } + }, + { + tag: "span", + ref: "eDragHandle", + cls: "ag-drag-handle", + attrs: { "aria-hidden": "true" } + }, + { + tag: "span", + ref: "eValidation", + cls: "ag-advanced-filter-builder-item-button ag-advanced-filter-builder-invalid", + attrs: { "aria-hidden": "true" } + } + ] + }, + { + tag: "div", + ref: "eButtons", + cls: "ag-advanced-filter-builder-item-buttons", + children: [ + { tag: "span", ref: "eMoveUpButton", cls: "ag-advanced-filter-builder-item-button", role: "button" }, + { tag: "span", ref: "eMoveDownButton", cls: "ag-advanced-filter-builder-item-button", role: "button" }, + { tag: "div", ref: "eAddButton", role: "presentation" }, + { tag: "span", ref: "eRemoveButton", cls: "ag-advanced-filter-builder-item-button", role: "button" } + ] + } + ] +}; +var AdvancedFilterBuilderItemComp = class extends TabGuardComp { + constructor(item, dragFeature, focusWrapper) { + super(AdvancedFilterBuilderItemElement); + this.item = item; + this.dragFeature = dragFeature; + this.focusWrapper = focusWrapper; + this.eTreeLines = RefPlaceholder16; + this.eDragHandle = RefPlaceholder16; + this.eButtons = RefPlaceholder16; + this.eValidation = RefPlaceholder16; + this.eMoveUpButton = RefPlaceholder16; + this.eMoveDownButton = RefPlaceholder16; + this.eAddButton = RefPlaceholder16; + this.eRemoveButton = RefPlaceholder16; + this.moveUpDisabled = false; + this.moveDownDisabled = false; + } + wireBeans(beans) { + this.dragAndDrop = beans.dragAndDrop; + this.advFilterExpSvc = beans.advFilterExpSvc; + this.registry = beans.registry; + } + postConstruct() { + const { filterModel, level, showMove } = this.item; + const isJoin = filterModel.filterType === "join"; + this.ePillWrapper = this.createManagedBean(isJoin ? new JoinPillWrapperComp() : new ConditionPillWrapperComp()); + this.ePillWrapper.init({ item: this.item, createPill: (params) => this.createPill(params) }); + this.eDragHandle.insertAdjacentElement("afterend", this.ePillWrapper.getGui()); + if (level === 0) { + const eTreeLine = _createElement6({ + tag: "div", + cls: "ag-advanced-filter-builder-item-tree-line ag-advanced-filter-builder-item-tree-line-vertical-bottom ag-advanced-filter-builder-item-tree-line-root" + }); + this.eTreeLines.appendChild(eTreeLine); + _setDisplayed10(this.eDragHandle, false); + _setDisplayed10(this.eButtons, false); + _setAriaExpanded4(this.focusWrapper, true); + } else { + this.setupTreeLines(level); + this.eDragHandle.appendChild(_createIconNoSpan4("advancedFilterBuilderDrag", this.beans)); + this.setupValidation(); + this.setupMoveButtons(showMove); + this.setupAddButton(); + this.setupRemoveButton(); + this.setupDragging(); + this.updateAriaExpanded(); + } + _setAriaLevel2(this.focusWrapper, level + 1); + this.initialiseTabGuard({}); + this.createManagedBean( + new AdvancedFilterBuilderItemNavigationFeature(this.getGui(), this.focusWrapper, this.ePillWrapper) + ); + this.updateAriaLabel(); + this.addManagedListeners(this.ePillWrapper, { + advancedFilterBuilderValueChanged: () => this.dispatchLocalEvent({ + type: "advancedFilterBuilderValueChanged" + }), + advancedFilterBuilderValidChanged: () => this.updateValidity() + }); + } + setState(params) { + const { level } = this.item; + if (level === 0) { + return; + } + const { showMove } = this.item; + const { disableMoveUp, disableMoveDown, treeLines, showStartTreeLine } = params; + this.updateTreeLines(treeLines, showStartTreeLine); + this.updateAriaExpanded(); + if (showMove) { + this.moveUpDisabled = !!disableMoveUp; + this.moveDownDisabled = !!disableMoveDown; + this.eMoveUpButton.classList.toggle("ag-advanced-filter-builder-item-button-disabled", disableMoveUp); + this.eMoveDownButton.classList.toggle("ag-advanced-filter-builder-item-button-disabled", disableMoveDown); + _setAriaDisabled2(this.eMoveUpButton, !!disableMoveUp); + _setAriaDisabled2(this.eMoveDownButton, !!disableMoveDown); + this.moveUpTooltipFeature?.refreshTooltip(); + this.moveDownTooltipFeature?.refreshTooltip(); + } + } + focusMoveButton(backwards) { + (backwards ? this.eMoveUpButton : this.eMoveDownButton).focus(); + } + afterAdd() { + this.ePillWrapper.getFocusableElement().focus(); + } + setupTreeLines(level) { + for (let i = 0; i < level; i++) { + this.eTreeLines.appendChild( + _createElement6({ tag: "div", cls: "ag-advanced-filter-builder-item-tree-line" }) + ); + } + } + updateTreeLines(treeLines, showStartTreeLine) { + const lastTreeLineIndex = treeLines.length - 1; + const { children } = this.eTreeLines; + for (let i = 0; i < lastTreeLineIndex; i++) { + const eTreeLine2 = children.item(i); + if (eTreeLine2) { + eTreeLine2.classList.toggle("ag-advanced-filter-builder-item-tree-line-vertical", !treeLines[i]); + } + } + const eTreeLine = children.item(lastTreeLineIndex); + if (eTreeLine) { + eTreeLine.classList.add("ag-advanced-filter-builder-item-tree-line-horizontal"); + const isLastChild = treeLines[lastTreeLineIndex]; + eTreeLine.classList.toggle("ag-advanced-filter-builder-item-tree-line-vertical-top", isLastChild); + eTreeLine.classList.toggle("ag-advanced-filter-builder-item-tree-line-vertical", !isLastChild); + } + this.eDragHandle.classList.toggle( + "ag-advanced-filter-builder-item-tree-line-vertical-bottom", + showStartTreeLine + ); + } + setupValidation() { + this.eValidation.appendChild(_createIconNoSpan4("advancedFilterBuilderInvalid", this.beans)); + this.validationTooltipFeature = this.createOptionalManagedBean( + this.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.eValidation, + getLocation: () => "advancedFilter", + getTooltipValue: () => this.ePillWrapper.getValidationMessage(), + getTooltipShowDelayOverride: () => 1e3 + }) + ); + this.updateValidity(); + } + setupAddButton() { + const addButtonParams = getAdvancedFilterBuilderAddButtonParams( + (key) => this.advFilterExpSvc.translate(key), + this.gos.get("advancedFilterBuilderParams")?.addSelectWidth + ); + const eAddButton = this.createManagedBean(new AddDropdownComp(addButtonParams)); + this.addManagedListeners(eAddButton, { + fieldPickerValueSelected: ({ value }) => this.dispatchLocalEvent({ + type: "advancedFilterBuilderAdded", + item: this.item, + isJoin: value.key === "join" + }) + }); + this.eAddButton.appendChild(eAddButton.getGui()); + this.createOptionalManagedBean( + this.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.eAddButton, + getLocation: () => "advancedFilter", + getTooltipValue: () => this.advFilterExpSvc.translate("advancedFilterBuilderAddButtonTooltip") + }) + ); + } + setupRemoveButton() { + this.eRemoveButton.appendChild(_createIconNoSpan4("advancedFilterBuilderRemove", this.beans)); + this.addManagedListeners(this.eRemoveButton, { + click: () => this.removeItem(), + keydown: (event) => { + if (event.key === KeyCode16.ENTER) { + event.preventDefault(); + _stopPropagationForAgGrid6(event); + this.removeItem(); + } + } + }); + this.createOptionalManagedBean( + this.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.eRemoveButton, + getLocation: () => "advancedFilter", + getTooltipValue: () => this.advFilterExpSvc.translate("advancedFilterBuilderRemoveButtonTooltip") + }) + ); + _setAriaLabel8(this.eRemoveButton, this.advFilterExpSvc.translate("advancedFilterBuilderRemoveButtonTooltip")); + this.activateTabIndex([this.eRemoveButton]); + } + setupMoveButtons(showMove) { + if (showMove) { + this.eMoveUpButton.appendChild(_createIconNoSpan4("advancedFilterBuilderMoveUp", this.beans)); + this.addManagedListeners(this.eMoveUpButton, { + click: () => this.moveItem(true), + keydown: (event) => { + if (event.key === KeyCode16.ENTER) { + event.preventDefault(); + _stopPropagationForAgGrid6(event); + this.moveItem(true); + } + } + }); + this.moveUpTooltipFeature = this.createOptionalManagedBean( + this.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.eMoveUpButton, + getLocation: () => "advancedFilter", + getTooltipValue: () => this.moveUpDisabled ? null : this.advFilterExpSvc.translate("advancedFilterBuilderMoveUpButtonTooltip") + }) + ); + _setAriaLabel8( + this.eMoveUpButton, + this.advFilterExpSvc.translate("advancedFilterBuilderMoveUpButtonTooltip") + ); + this.eMoveDownButton.appendChild(_createIconNoSpan4("advancedFilterBuilderMoveDown", this.beans)); + this.addManagedListeners(this.eMoveDownButton, { + click: () => this.moveItem(false), + keydown: (event) => { + if (event.key === KeyCode16.ENTER) { + event.preventDefault(); + _stopPropagationForAgGrid6(event); + this.moveItem(false); + } + } + }); + this.moveDownTooltipFeature = this.createOptionalManagedBean( + this.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.eMoveDownButton, + getLocation: () => "advancedFilter", + getTooltipValue: () => this.moveDownDisabled ? null : this.advFilterExpSvc.translate("advancedFilterBuilderMoveDownButtonTooltip") + }) + ); + _setAriaLabel8( + this.eMoveDownButton, + this.advFilterExpSvc.translate("advancedFilterBuilderMoveDownButtonTooltip") + ); + this.activateTabIndex([this.eMoveUpButton, this.eMoveDownButton]); + } else { + _setDisplayed10(this.eMoveUpButton, false); + _setDisplayed10(this.eMoveDownButton, false); + } + } + updateValidity() { + _setVisible(this.eValidation, !this.item.valid); + this.validationTooltipFeature?.refreshTooltip(); + this.updateAriaLabel(); + } + createPill(params) { + const { key, cssClass, update, ariaLabel } = params; + const onUpdated = (key2) => { + if (key2 == null) { + return; + } + update(key2); + this.dispatchLocalEvent({ + type: "advancedFilterBuilderValueChanged" + }); + }; + if (params.isSelect) { + const { getEditorParams, pickerAriaLabelKey, pickerAriaLabelValue, displayValue } = params; + const advancedFilterBuilderParams = this.gos.get("advancedFilterBuilderParams"); + const minPickerWidth = `${advancedFilterBuilderParams?.pillSelectMinWidth ?? 140}px`; + const maxPickerWidth = `${advancedFilterBuilderParams?.pillSelectMaxWidth ?? 200}px`; + const comp = this.createBean( + new SelectPillComp({ + pickerAriaLabelKey, + pickerAriaLabelValue, + pickerType: "ag-list", + value: { + key, + displayValue + }, + valueFormatter: (value) => value == null ? "" : value.displayValue ?? value.key, + variableWidth: true, + minPickerWidth, + maxPickerWidth, + getEditorParams, + wrapperClassName: cssClass, + ariaLabel, + pickerIcon: "advancedFilterBuilderSelectOpen" + }) + ); + this.addManagedListeners(comp, { + fieldPickerValueSelected: ({ value }) => onUpdated(value?.key) + }); + return comp; + } else { + const { baseCellDataType, valueFormatter } = params; + const comp = this.createBean( + new InputPillComp({ + value: key, + valueFormatter, + cssClass, + type: baseCellDataType, + ariaLabel + }) + ); + this.addManagedListeners(comp, { fieldValueChanged: ({ value }) => onUpdated(value) }); + return comp; + } + } + setupDragging() { + const dragSource = { + type: DragSourceType2.AdvancedFilterBuilder, + eElement: this.eDragHandle, + dragItemName: () => this.ePillWrapper.getDragName(), + getDefaultIconName: () => "notAllowed", + getDragItem: () => ({}), + onDragStarted: () => this.dragFeature.dispatchLocalEvent({ + type: "advancedFilterBuilderDragStarted", + item: this.item + }), + onDragStopped: () => this.dragFeature.dispatchLocalEvent({ + type: "advancedFilterBuilderDragEnded" + }) + }; + this.dragAndDrop.addDragSource(dragSource, true); + this.addDestroyFunc(() => this.dragAndDrop.removeDragSource(dragSource)); + } + updateAriaLabel() { + const wrapperLabel = this.ePillWrapper.getAriaLabel(); + const level = `${this.item.level + 1}`; + const validationMessage = this.ePillWrapper.getValidationMessage(); + let ariaLabel; + if (validationMessage) { + ariaLabel = this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderItemValidation", [ + wrapperLabel, + level, + validationMessage + ]); + } else { + ariaLabel = this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderItem", [wrapperLabel, level]); + } + _setAriaLabel8(this.focusWrapper, ariaLabel); + } + updateAriaExpanded() { + _removeAriaExpanded(this.focusWrapper); + const { filterModel } = this.item; + if (filterModel?.filterType === "join" && filterModel.conditions.length) { + _setAriaExpanded4(this.focusWrapper, true); + } + } + removeItem() { + this.dispatchLocalEvent({ + type: "advancedFilterBuilderRemoved", + item: this.item + }); + } + moveItem(backwards) { + this.dispatchLocalEvent({ + type: "advancedFilterBuilderMoved", + item: this.item, + backwards + }); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/builder/advancedFilterBuilderComp.ts +var ButtonLocaleMap2 = { + apply: "advancedFilterBuilderApply", + clear: "advancedFilterBuilderClear", + cancel: "advancedFilterBuilderCancel", + reset: "advancedFilterBuilderReset" +}; +var AdvancedFilterBuilderElement = { + tag: "div", + cls: "ag-advanced-filter-builder", + role: "presentation", + attrs: { tabindex: "-1" }, + children: [ + { + tag: "div", + ref: "eList", + cls: "ag-advanced-filter-builder-list", + role: "presentation" + } + ] +}; +var AdvancedFilterBuilderComp = class extends Component13 { + constructor() { + super(AdvancedFilterBuilderElement); + this.eList = RefPlaceholder17; + } + wireBeans(beans) { + this.filterManager = beans.filterManager; + this.advancedFilter = beans.advancedFilter; + this.advFilterExpSvc = beans.advFilterExpSvc; + } + postConstruct() { + const params = this.gos.get("advancedFilterBuilderParams"); + this.params = { buttons: ["apply", "cancel"], ...params }; + this.addManagedPropertyListener("advancedFilterBuilderParams", ({ currentValue }) => { + this.params.showMoveButtons = !!currentValue?.showMoveButtons; + this.params.buttons = currentValue?.buttons ?? ["apply", "cancel"]; + this.refreshList(false); + }); + this.filterModel = this.setupFilterModel(); + this.setupVirtualList(); + this.dragFeature = this.createManagedBean(new AdvancedFilterBuilderDragFeature(this, this.virtualList)); + this.resetButtonsPanel(this.params.buttons); + } + refresh() { + const virtualList = this.virtualList; + let indexToFocus = virtualList.getLastFocusedRow(); + this.setupFilterModel(); + this.validateItems(); + this.refreshList(false); + if (indexToFocus != null) { + if (!virtualList.getComponentAt(indexToFocus)) { + indexToFocus = 0; + } + virtualList.focusRow(indexToFocus); + } + } + getNumItems() { + return this.items.length; + } + moveItem(item, destination) { + if (!destination || !item) { + return; + } + this.moveItemToIndex(item, destination.rowIndex, destination.position); + } + afterGuiAttached() { + this.virtualList.awaitStable(() => this.virtualList.focusRow(0)); + } + setupVirtualList() { + const virtualList = this.virtualList = this.createManagedBean( + new VirtualList({ + cssIdentifier: "advanced-filter-builder", + ariaRole: "tree", + listName: this.advFilterExpSvc.translate("ariaAdvancedFilterBuilderList"), + moveItemCallback: this.virtualListMoveItemCallback.bind(this) + }) + ); + virtualList.setComponentCreator(this.createItemComponent.bind(this)); + virtualList.setComponentUpdater(this.updateItemComponent.bind(this)); + virtualList.setRowHeight(40); + this.eList.appendChild(virtualList.getGui()); + virtualList.setModel({ + getRowCount: () => this.items?.length || 0, + getRow: (index) => this.items[index], + areRowsEqual: (oldRow, newRow) => oldRow === newRow + }); + this.buildList(); + virtualList.refresh(); + } + resetButtonsPanel(actions) { + const hasButtons = actions && actions.length > 0; + let eButtonsPanel = this.eButtons; + if (hasButtons) { + const buttons = actions.map((type) => ({ + type, + label: this.advFilterExpSvc.translate(ButtonLocaleMap2[type]) + })); + if (!eButtonsPanel) { + eButtonsPanel = this.createBean(new FilterButtonComp()); + this.appendChild(eButtonsPanel.getGui()); + const getListener = (action) => ({ event }) => { + this.updateModel(action); + this.afterAction(action, event); + }; + eButtonsPanel.addManagedListeners(eButtonsPanel, { + apply: getListener("apply"), + clear: getListener("clear"), + reset: getListener("reset"), + cancel: getListener("cancel") + }); + this.eButtons = eButtonsPanel; + } + eButtonsPanel.updateButtons(buttons); + const applyButton = eButtonsPanel.getApplyButton(); + if (applyButton) { + const mouseListener = (isEnter) => this.toggleCss("ag-advanced-filter-builder-validation", isEnter); + this.addManagedElementListeners(applyButton, { + mouseenter: () => mouseListener(true), + mouseleave: () => mouseListener(false) + }); + } + } else if (eButtonsPanel) { + _removeFromParent3(eButtonsPanel.getGui()); + this.eButtons = this.destroyBean(eButtonsPanel); + } + } + updateModel(action) { + switch (action) { + case "apply": + this.advancedFilter.setModel(this.filterModel); + this.filterManager?.onFilterChanged({ source: "advancedFilter" }); + break; + case "reset": + this.advancedFilter.setModel(null); + this.filterManager?.onFilterChanged({ source: "advancedFilter" }); + break; + case "cancel": + break; + case "clear": + this.filterModel = this.formatFilterModel(null); + this.refreshList(false); + break; + } + } + afterAction(action, event) { + switch (action) { + case "apply": { + event?.preventDefault(); + this.close(); + break; + } + case "reset": { + this.close(); + break; + } + case "cancel": { + this.close(); + break; + } + } + } + removeItemFromParent(item) { + const sourceParentIndex = item.parent.conditions.indexOf(item.filterModel); + item.parent.conditions.splice(sourceParentIndex, 1); + return sourceParentIndex; + } + moveItemToIndex(item, destinationRowIndex, destinationPosition) { + const destinationItem = this.items[destinationRowIndex]; + const destinationIsParent = destinationItem.filterModel?.filterType === "join" && destinationPosition === "bottom"; + const destinationParent = destinationIsParent ? destinationItem.filterModel : destinationItem.parent; + if (!destinationParent) { + return; + } + if (this.isChildOrSelf(destinationParent, item.filterModel) || destinationItem === item) { + return; + } + this.removeItemFromParent(item); + let destinationParentIndex; + if (destinationIsParent) { + destinationParentIndex = 0; + } else { + destinationParentIndex = destinationParent.conditions.indexOf(destinationItem.filterModel); + if (destinationParentIndex === -1) { + destinationParentIndex = destinationParent.conditions.length; + } else if (destinationPosition === "bottom") { + destinationParentIndex += 1; + } + } + destinationParent.conditions.splice(destinationParentIndex, 0, item.filterModel); + this.refreshList(false); + } + isChildOrSelf(modelToCheck, potentialParentModel) { + return modelToCheck === potentialParentModel || potentialParentModel.filterType === "join" && potentialParentModel.conditions.some((condition) => this.isChildOrSelf(modelToCheck, condition)); + } + setupFilterModel() { + const filterModel = this.formatFilterModel(this.advancedFilter.getModel()); + this.stringifiedModel = JSON.stringify(filterModel); + return filterModel; + } + formatFilterModel(filterModel) { + filterModel = filterModel ?? { + filterType: "join", + type: "AND", + conditions: [] + }; + if (filterModel.filterType !== "join") { + filterModel = { + filterType: "join", + type: "AND", + conditions: [filterModel] + }; + } + return filterModel; + } + buildList() { + const parseFilterModel = (filterModel, items, level, parent) => { + items.push({ filterModel, level, parent, valid: true, showMove: this.params.showMoveButtons }); + if (filterModel.filterType === "join") { + for (const childFilterModel of filterModel.conditions) { + parseFilterModel(childFilterModel, items, level + 1, filterModel); + } + if (level === 0) { + items.push({ filterModel: null, level: level + 1, parent: filterModel, valid: true }); + } + } + }; + this.items = []; + parseFilterModel(this.filterModel, this.items, 0); + } + refreshList(softRefresh) { + if (!softRefresh) { + const invalidModels = []; + for (const item of this.items) { + if (!item.valid) { + invalidModels.push(item.filterModel); + } + } + this.buildList(); + if (invalidModels.length) { + for (const item of this.items) { + if (item.filterModel && invalidModels.includes(item.filterModel)) { + item.valid = false; + } + } + } + } + this.virtualList.refresh(softRefresh); + this.validate(); + } + updateItemComponent(item, comp) { + const index = this.items.indexOf(item); + const populateTreeLines = (filterModel2, treeLines2) => { + const parentItem = this.items.find((itemToCheck) => itemToCheck.filterModel === filterModel2); + const parentFilterModel = parentItem?.parent; + if (parentFilterModel) { + const { conditions } = parentFilterModel; + populateTreeLines(parentFilterModel, treeLines2); + treeLines2.push(conditions[conditions.length - 1] === filterModel2); + } + }; + const treeLines = []; + const { filterModel } = item; + if (filterModel) { + populateTreeLines(filterModel, treeLines); + treeLines[0] = false; + } + const showStartTreeLine = filterModel?.filterType === "join" && !!filterModel.conditions.length; + comp.setState({ + disableMoveUp: index === 1, + disableMoveDown: !this.canMoveDown(item, index), + treeLines, + showStartTreeLine + }); + } + createItemComponent(item, focusWrapper) { + const itemComp = this.createBean( + item.filterModel ? new AdvancedFilterBuilderItemComp(item, this.dragFeature, focusWrapper) : new AdvancedFilterBuilderItemAddComp(item, focusWrapper) + ); + itemComp.addManagedListeners(itemComp, { + advancedFilterBuilderRemoved: ({ item: item2 }) => this.removeItem(item2), + advancedFilterBuilderValueChanged: () => this.validate(), + advancedFilterBuilderAdded: ({ item: item2, isJoin }) => this.addItem(item2, isJoin), + advancedFilterBuilderMoved: ({ item: item2, backwards }) => this.moveItemUpDown(item2, backwards) + }); + if (itemComp instanceof AdvancedFilterBuilderItemComp) { + this.updateItemComponent(item, itemComp); + } + return itemComp; + } + addItem(item, isJoin) { + const { parent: itemParent, level, filterModel: itemFilterModel } = item; + const itemIsJoin = itemFilterModel?.filterType === "join"; + const filterModel = isJoin ? { + filterType: "join", + type: "AND", + conditions: [] + } : {}; + const parent = itemIsJoin ? itemFilterModel : itemParent; + let insertIndex = itemIsJoin ? 0 : parent.conditions.indexOf(itemFilterModel); + if (insertIndex >= 0) { + if (!itemIsJoin) { + insertIndex += 1; + } + parent.conditions.splice(insertIndex, 0, filterModel); + } else { + parent.conditions.push(filterModel); + } + let index = this.items.indexOf(item); + const softRefresh = index >= 0; + if (softRefresh) { + if (item.filterModel) { + index++; + } + const newItems = [ + { + filterModel, + level: itemIsJoin ? level + 1 : level, + parent, + valid: isJoin, + showMove: this.params.showMoveButtons + } + ]; + this.items.splice(index, 0, ...newItems); + } + this.refreshList(softRefresh); + if (softRefresh) { + this.virtualList.getComponentAt(index)?.afterAdd(); + } + } + removeItem(item) { + const parent = item.parent; + const { filterModel } = item; + const parentIndex = parent.conditions.indexOf(filterModel); + parent.conditions.splice(parentIndex, 1); + const isJoin = item.filterModel?.filterType === "join"; + const index = this.items.indexOf(item); + const softRefresh = !isJoin && index >= 0; + if (softRefresh) { + this.items.splice(index, 1); + } + this.refreshList(softRefresh); + if (index >= 0) { + this.virtualList.focusRow(index); + } + } + moveItemUpDown(item, backwards, fromVirtualList) { + const itemIndex = this.items.indexOf(item); + const destinationIndex = backwards ? itemIndex - 1 : itemIndex + 1; + if (destinationIndex === 0 || !backwards && !this.canMoveDown(item, itemIndex)) { + return; + } + const destinationItem = this.items[destinationIndex]; + const indexInParent = this.removeItemFromParent(item); + const { level, filterModel, parent } = item; + const { + level: destinationLevel, + filterModel: destinationFilterModel, + parent: destinationParent + } = destinationItem; + if (backwards) { + if (destinationLevel === level && destinationFilterModel.filterType === "join") { + destinationFilterModel.conditions.push(filterModel); + } else if (destinationLevel <= level) { + const destinationIndex2 = destinationParent.conditions.indexOf(destinationFilterModel); + destinationParent.conditions.splice(destinationIndex2, 0, filterModel); + } else { + const newParentItem = parent.conditions[indexInParent - 1]; + newParentItem.conditions.push(filterModel); + } + } else if (destinationLevel === level) { + if (destinationFilterModel.filterType === "join") { + destinationFilterModel.conditions.splice(0, 0, filterModel); + } else { + const destinationIndex2 = destinationParent.conditions.indexOf(destinationFilterModel); + destinationParent.conditions.splice(destinationIndex2 + 1, 0, filterModel); + } + } else if (indexInParent < parent.conditions.length) { + parent.conditions.splice(indexInParent + 1, 0, filterModel); + } else { + const parentItem = this.items.find((itemToCheck) => itemToCheck.filterModel === parent); + const destinationIndex2 = parentItem.parent.conditions.indexOf(parentItem.filterModel) + 1; + parentItem.parent.conditions.splice(destinationIndex2, 0, filterModel); + } + this.refreshList(false); + const newIndex = this.items.findIndex( + ({ filterModel: filterModelToCheck }) => filterModelToCheck === filterModel + ); + if (newIndex < 0) { + return; + } + const comp = this.virtualList.getComponentAt(newIndex); + if (!(comp instanceof AdvancedFilterBuilderItemComp)) { + return; + } + if (!fromVirtualList) { + comp.focusMoveButton(backwards); + } + } + virtualListMoveItemCallback(itemComp, isUp) { + const item = itemComp.item; + const from = this.items.indexOf(item); + if (from <= 0 || from === this.items.length - 1) { + return; + } + if (isUp && from === 1 || !isUp && !this.canMoveDown(item, from)) { + return; + } + this.moveItemUpDown(item, isUp, true); + this.virtualList.focusRow(from + (isUp ? -1 : 1)); + } + canMoveDown(item, index) { + return !(item.level === 1 && index === this.items.length - 2 || item.level === 1 && item.parent.conditions[item.parent.conditions.length - 1] === item.filterModel); + } + close() { + this.advancedFilter.getCtrl().toggleFilterBuilder({ source: "ui" }); + } + validate() { + let isValid = this.items.every(({ valid }) => valid); + let validationMessage = null; + if (isValid) { + isValid = JSON.stringify(this.filterModel) !== this.stringifiedModel; + if (!isValid) { + validationMessage = this.advFilterExpSvc.translate("advancedFilterBuilderValidationAlreadyApplied"); + } + } else { + validationMessage = this.advFilterExpSvc.translate("advancedFilterBuilderValidationIncomplete"); + } + this.eButtons?.updateValidity(isValid, validationMessage); + } + validateItems() { + const clearOperator = (filterModel) => { + filterModel.type = void 0; + }; + const clearOperand = (filterModel) => { + delete filterModel.filter; + }; + for (const item of this.items) { + if (!item.valid || !item.filterModel || item.filterModel.filterType === "join") { + continue; + } + const { filterModel } = item; + const { colId } = filterModel; + const hasColumn = this.advFilterExpSvc.getColumnAutocompleteEntries().find(({ key }) => key === colId); + const columnDetails = this.advFilterExpSvc.getColumnDetails(filterModel.colId); + if (!hasColumn || !columnDetails.column) { + item.valid = false; + filterModel.colId = void 0; + clearOperator(filterModel); + clearOperand(filterModel); + continue; + } + const operatorForType = this.advFilterExpSvc.getDataTypeExpressionOperator(columnDetails.baseCellDataType); + const operator = operatorForType.operators[filterModel.type]; + if (!operator) { + item.valid = false; + clearOperator(filterModel); + clearOperand(filterModel); + continue; + } + if (operator.numOperands > 0 && !_exists10(filterModel.filter)) { + item.valid = false; + } + } + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterCtrl.ts +var AdvancedFilterCtrl = class extends BeanStub5 { + constructor(enabled) { + super(); + this.enabled = enabled; + } + wireBeans(beans) { + this.ctrlsSvc = beans.ctrlsSvc; + this.popupSvc = beans.popupSvc; + this.advFilterExpSvc = beans.advFilterExpSvc; + this.environment = beans.environment; + } + postConstruct() { + this.hasAdvancedFilterParent = !!this.gos.get("advancedFilterParent"); + this.ctrlsSvc.whenReady(this, () => this.setAdvancedFilterComp()); + this.addManagedEventListeners({ + advancedFilterEnabledChanged: ({ enabled }) => this.onEnabledChanged(enabled) + }); + this.addManagedPropertyListener("advancedFilterParent", () => this.updateComps()); + this.addManagedPropertyListener("advancedFilterBuilderParams", (event) => { + if (event.currentValue?.suppressFullScreenButton !== event.previousValue?.suppressFullScreenButton) { + this.eBuilderDialog?.setMaximizable(event.currentValue?.suppressFullScreenButton ?? true); + } + }); + this.addDestroyFunc(() => { + this.destroyAdvancedFilterComp(); + this.destroyBean(this.eBuilderComp); + if (this.eBuilderDialog?.isAlive()) { + this.destroyBean(this.eBuilderDialog); + } + }); + } + setupHeaderComp(eCompToInsertBefore) { + if (this.eHeaderComp) { + this.eHeaderComp?.getGui().remove(); + this.destroyBean(this.eHeaderComp); + } + this.eHeaderComp = this.createManagedBean( + new AdvancedFilterHeaderComp(this.enabled && !this.hasAdvancedFilterParent) + ); + eCompToInsertBefore.insertAdjacentElement("beforebegin", this.eHeaderComp.getGui()); + } + focusHeaderComp() { + if (this.eHeaderComp) { + this.eHeaderComp.getFocusableElement().focus(); + return true; + } + return false; + } + refreshComp() { + this.eFilterComp?.refresh(); + this.eHeaderComp?.refresh(); + } + refreshBuilderComp() { + this.eBuilderComp?.refresh(); + } + getHeaderHeight() { + return this.eHeaderComp?.getHeight() ?? 0; + } + setInputDisabled(disabled) { + this.eFilterComp?.setInputDisabled(disabled); + this.eHeaderComp?.setInputDisabled(disabled); + } + toggleFilterBuilder(params) { + const { source, force, eventSource } = params; + if (force && this.eBuilderDialog || force === false && !this.eBuilderDialog) { + return; + } + if (this.eBuilderDialog) { + this.builderDestroySource = source; + this.destroyBean(this.eBuilderDialog); + return; + } + this.setInputDisabled(true); + const { width, height, minWidth } = this.getBuilderDialogSize(); + const { suppressFullScreenButton } = { + suppressFullScreenButton: false, + ...this.gos.get("advancedFilterBuilderParams") + }; + this.eBuilderComp = this.createBean(new AdvancedFilterBuilderComp()); + this.eBuilderDialog = this.createBean( + new Dialog({ + title: this.advFilterExpSvc.translate("advancedFilterBuilderTitle"), + component: this.eBuilderComp, + width, + height, + resizable: true, + movable: true, + maximizable: !suppressFullScreenButton, + centered: true, + closable: true, + minWidth, + afterGuiAttached: () => this.eBuilderComp?.afterGuiAttached(), + postProcessPopupParams: { + type: "advancedFilterBuilder", + eventSource + } + }) + ); + this.dispatchFilterBuilderVisibleChangedEvent(source, true); + this.eBuilderDialog.addEventListener("destroyed", () => { + this.destroyBean(this.eBuilderComp); + this.eBuilderComp = void 0; + this.eBuilderDialog = void 0; + this.setInputDisabled(false); + this.dispatchLocalEvent({ + type: "advancedFilterBuilderClosed" + }); + this.dispatchFilterBuilderVisibleChangedEvent(this.builderDestroySource ?? "ui", false); + this.builderDestroySource = void 0; + }); + } + dispatchFilterBuilderVisibleChangedEvent(source, visible) { + this.eventSvc.dispatchEvent({ + type: "advancedFilterBuilderVisibleChanged", + source, + visible + }); + } + getBuilderDialogSize() { + const minWidth = this.gos.get("advancedFilterBuilderParams")?.minWidth ?? 500; + const popupParent = this.popupSvc.getPopupParent(); + const maxWidth = Math.round(_getAbsoluteWidth(popupParent)) - 2; + const maxHeight = Math.round(_getAbsoluteHeight(popupParent) * 0.75) - 2; + const width = Math.min(Math.max(700, minWidth), maxWidth); + const height = Math.min(600, maxHeight); + return { width, height, minWidth }; + } + onEnabledChanged(enabled) { + this.enabled = enabled; + this.updateComps(); + } + updateComps() { + this.setAdvancedFilterComp(); + this.setHeaderCompEnabled(); + this.eventSvc.dispatchEvent({ + type: "headerHeightChanged" + }); + } + setAdvancedFilterComp() { + this.destroyAdvancedFilterComp(); + if (!this.enabled) { + return; + } + const advancedFilterParent = this.gos.get("advancedFilterParent"); + this.hasAdvancedFilterParent = !!advancedFilterParent; + if (advancedFilterParent) { + const eAdvancedFilterComp = this.createBean(new AdvancedFilterComp()); + const eAdvancedFilterCompGui = eAdvancedFilterComp.getGui(); + this.environment.applyThemeClasses(eAdvancedFilterCompGui); + eAdvancedFilterCompGui.classList.add(this.gos.get("enableRtl") ? "ag-rtl" : "ag-ltr"); + advancedFilterParent.appendChild(eAdvancedFilterCompGui); + this.eFilterComp = eAdvancedFilterComp; + } + } + setHeaderCompEnabled() { + this.eHeaderComp?.setEnabled(this.enabled && !this.hasAdvancedFilterParent); + } + destroyAdvancedFilterComp() { + if (this.eFilterComp) { + _removeFromParent4(this.eFilterComp.getGui()); + this.destroyBean(this.eFilterComp); + } + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/joinFilterExpressionParser.ts +var OperatorParser2 = class { + constructor(params) { + this.params = params; + this.operators = []; + this.operatorStartPositions = []; + this.operatorEndPositions = []; + this.activeOperator = 0; + this.validationError = null; + } + parseExpression(i) { + this.operators.push(""); + this.operatorStartPositions.push(i); + this.operatorEndPositions.push(void 0); + const { expression } = this.params; + while (i < expression.length) { + const char = expression[i]; + if (char === " ") { + const isComplete = this.parseOperator(i - 1); + if (isComplete) { + this.activeOperator++; + return i - 1; + } else { + this.operators[this.activeOperator] += char; + } + } else { + this.operators[this.activeOperator] += char; + } + i++; + } + this.parseOperator(i - 1); + return i; + } + isValid() { + return !this.validationError && (!this.operators.length || !!this.parsedOperator); + } + getValidationError() { + return this.validationError; + } + getFunction() { + return this.parsedOperator === "OR" ? "||" : "&&"; + } + getModel() { + return this.parsedOperator === "OR" ? "OR" : "AND"; + } + getAutocompleteListParams(position, operatorIndex) { + let searchString; + if (operatorIndex == null) { + searchString = ""; + } else { + const operator = this.operators[operatorIndex]; + const operatorEndPosition = this.operatorEndPositions[operatorIndex]; + searchString = getSearchString( + operator, + position, + operatorEndPosition == null ? this.params.expression.length : operatorEndPosition + 1 + ); + } + let entries = this.params.advFilterExpSvc.getJoinOperatorAutocompleteEntries(); + if (operatorIndex || operatorIndex == null && this.activeOperator) { + entries = entries.filter(({ key }) => key === this.parsedOperator); + } + return this.params.advFilterExpSvc.generateAutocompleteListParams(entries, "join", searchString); + } + updateExpression(position, updateEntry, operatorIndex) { + let { expression } = this.params; + const updatedValuePart = updateEntry.displayValue ?? updateEntry.key; + if (operatorIndex === 0) { + for (let i = this.operatorEndPositions.length - 1; i > 0; i--) { + const operatorEndPosition = this.operatorEndPositions[i]; + if (operatorEndPosition == null) { + continue; + } + expression = updateExpression( + expression, + this.operatorStartPositions[i], + operatorEndPosition, + updatedValuePart + ).updatedValue; + } + } + const startPosition = this.operatorStartPositions.length > operatorIndex ? this.operatorStartPositions[operatorIndex] : position; + const endPosition = (this.operatorEndPositions.length > operatorIndex ? this.operatorEndPositions[operatorIndex] : void 0) ?? findEndPosition(expression, position, true).endPosition; + return updateExpression(expression, startPosition, endPosition, updatedValuePart, true); + } + getNumOperators() { + return this.operators.length; + } + getLastOperatorEndPosition() { + return this.operatorEndPositions[this.operatorEndPositions.length - 1]; + } + parseOperator(endPosition) { + const operator = this.operators.length > this.activeOperator ? this.operators[this.activeOperator] : ""; + const joinOperators = this.params.advFilterExpSvc.getExpressionJoinOperators(); + const parsedValue = findMatch(operator, joinOperators, (v) => v); + if (parsedValue) { + this.operatorEndPositions[this.activeOperator] = endPosition; + const displayValue = joinOperators[parsedValue]; + if (this.activeOperator) { + if (parsedValue !== this.parsedOperator) { + if (!this.validationError) { + this.validationError = { + message: this.params.advFilterExpSvc.translate( + "advancedFilterValidationJoinOperatorMismatch" + ), + startPosition: endPosition - operator.length + 1, + endPosition + }; + } + return false; + } + } else { + this.parsedOperator = parsedValue; + } + if (operator !== displayValue) { + checkAndUpdateExpression(this.params, operator, displayValue, endPosition); + this.operators[this.activeOperator] = displayValue; + } + return true; + } else if (parsedValue === null) { + return false; + } else { + if (!this.validationError) { + this.validationError = { + message: this.params.advFilterExpSvc.translate("advancedFilterValidationInvalidJoinOperator"), + startPosition: endPosition - operator.length + 1, + endPosition + }; + } + return true; + } + } +}; +var JoinFilterExpressionParser = class _JoinFilterExpressionParser { + constructor(params, startPosition) { + this.params = params; + this.startPosition = startPosition; + this.expectingExpression = true; + this.expectingOperator = false; + this.expressionParsers = []; + this.operatorParser = new OperatorParser2(this.params); + this.missingEndBracket = false; + this.extraEndBracket = false; + } + parseExpression() { + let i = this.startPosition; + const { expression } = this.params; + while (i < expression.length) { + const char = expression[i]; + if (char === "(" && !this.expectingOperator) { + const nestedParser = new _JoinFilterExpressionParser(this.params, i + 1); + i = nestedParser.parseExpression(); + this.expressionParsers.push(nestedParser); + this.expectingExpression = false; + this.expectingOperator = true; + } else if (char === ")") { + this.endPosition = i - 1; + if (this.startPosition === 0) { + this.extraEndBracket = true; + } + return i; + } else if (char === " ") { + } else if (this.expectingExpression) { + const nestedParser = new ColFilterExpressionParser(this.params, i); + i = nestedParser.parseExpression(); + this.expressionParsers.push(nestedParser); + this.expectingExpression = false; + this.expectingOperator = true; + } else if (this.expectingOperator) { + i = this.operatorParser.parseExpression(i); + this.expectingOperator = false; + this.expectingExpression = true; + } + i++; + } + if (this.startPosition > 0) { + this.missingEndBracket = true; + } + return i; + } + isValid() { + return !this.missingEndBracket && !this.extraEndBracket && this.expressionParsers.length === this.operatorParser.getNumOperators() + 1 && this.operatorParser.isValid() && this.expressionParsers.every((expressionParser) => expressionParser.isValid()); + } + getValidationError() { + const operatorError = this.operatorParser.getValidationError(); + for (let i = 0; i < this.expressionParsers.length; i++) { + const expressionError = this.expressionParsers[i].getValidationError(); + if (expressionError) { + return operatorError && operatorError.startPosition < expressionError.startPosition ? operatorError : expressionError; + } + } + if (operatorError) { + return operatorError; + } + if (this.extraEndBracket) { + return { + message: this.params.advFilterExpSvc.translate("advancedFilterValidationExtraEndBracket"), + startPosition: this.endPosition + 1, + endPosition: this.endPosition + 1 + }; + } + let translateKey; + if (this.expressionParsers.length === this.operatorParser.getNumOperators()) { + translateKey = "advancedFilterValidationMissingCondition"; + } else if (this.missingEndBracket) { + translateKey = "advancedFilterValidationMissingEndBracket"; + } + if (translateKey) { + return { + message: this.params.advFilterExpSvc.translate(translateKey), + startPosition: this.params.expression.length, + endPosition: this.params.expression.length + }; + } + return null; + } + getFunction(params) { + const operator = this.operatorParser.getFunction(); + const funcs = this.expressionParsers.map((expressionParser) => expressionParser.getFunction(params)); + const arrayFunc = operator === "&&" ? "every" : "some"; + return (expressionProxy, node, p) => funcs[arrayFunc]((func) => func(expressionProxy, node, p)); + } + getAutocompleteListParams(position) { + if (this.endPosition != null && position > this.endPosition + 1) { + return void 0; + } + if (!this.expressionParsers.length) { + return this.getColumnAutocompleteListParams(); + } + const expressionParserIndex = this.getExpressionParserIndex(position); + if (expressionParserIndex == null) { + if (this.params.expression[position] === "(") { + return { enabled: false }; + } + return this.getColumnAutocompleteListParams(); + } + const expressionParser = this.expressionParsers[expressionParserIndex]; + const autocompleteType = expressionParser.getAutocompleteListParams(position); + if (!autocompleteType) { + if (expressionParserIndex < this.expressionParsers.length - 1) { + return this.operatorParser.getAutocompleteListParams(position, expressionParserIndex); + } + if (this.expressionParsers.length === this.operatorParser.getNumOperators()) { + const operatorEndPosition = this.operatorParser.getLastOperatorEndPosition(); + return operatorEndPosition == null || position <= operatorEndPosition + 1 ? this.operatorParser.getAutocompleteListParams(position, this.operatorParser.getNumOperators() - 1) : this.getColumnAutocompleteListParams(); + } + if (this.params.expression[position - 1] === ")") { + return { enabled: false }; + } + return this.operatorParser.getAutocompleteListParams(position); + } + return autocompleteType; + } + updateExpression(position, updateEntry, type) { + const expression = this.params.expression; + const expressionParserIndex = this.getExpressionParserIndex(position); + if (expressionParserIndex == null) { + const updatedValuePart = type === "column" ? this.params.advFilterExpSvc.getColumnValue(updateEntry) : updateEntry.displayValue ?? updateEntry.key; + return updateExpression(expression, this.startPosition, this.startPosition, updatedValuePart, true); + } + const expressionParser = this.expressionParsers[expressionParserIndex]; + const updatedExpression = expressionParser.updateExpression(position, updateEntry, type); + if (updatedExpression == null) { + if (type === "column") { + return updateExpression( + expression, + position, + expression.length - 1, + this.params.advFilterExpSvc.getColumnValue(updateEntry), + true + ); + } else if (this.endPosition != null && position > this.endPosition + 1) { + return null; + } else { + return this.operatorParser.updateExpression(position, updateEntry, expressionParserIndex); + } + } + return updatedExpression; + } + getModel() { + if (this.expressionParsers.length > 1) { + return { + filterType: "join", + type: this.operatorParser.getModel(), + conditions: this.expressionParsers.map((parser) => parser.getModel()) + }; + } else { + return this.expressionParsers[0].getModel(); + } + } + getColumnAutocompleteListParams() { + return this.params.advFilterExpSvc.generateAutocompleteListParams( + this.params.advFilterExpSvc.getColumnAutocompleteEntries(), + "column", + "" + ); + } + getExpressionParserIndex(position) { + let expressionParserIndex; + for (let i = 0; i < this.expressionParsers.length; i++) { + const expressionParserToCheck = this.expressionParsers[i]; + if (expressionParserToCheck.startPosition > position) { + break; + } + expressionParserIndex = i; + } + return expressionParserIndex; + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/filterExpressionParser.ts +var FilterExpressionParser = class { + constructor(params) { + this.params = params; + this.valid = false; + } + parseExpression() { + this.joinExpressionParser = new JoinFilterExpressionParser(this.params, 0); + const i = this.joinExpressionParser.parseExpression(); + this.valid = i >= this.params.expression.length - 1 && this.joinExpressionParser.isValid(); + return this.params.expression; + } + isValid() { + return this.valid; + } + getValidationMessage() { + const error = this.joinExpressionParser.getValidationError(); + if (!error) { + return null; + } + const { message, startPosition, endPosition } = error; + return startPosition < this.params.expression.length ? this.params.advFilterExpSvc.translate("advancedFilterValidationMessage", [ + message, + this.params.expression.slice(startPosition, endPosition + 1).trim() + ]) : this.params.advFilterExpSvc.translate("advancedFilterValidationMessageAtEnd", [message]); + } + getFunction() { + const params = this.createFunctionParams(); + return { + expressionFunction: this.joinExpressionParser.getFunction(params), + params + }; + } + getAutocompleteListParams(position) { + return this.joinExpressionParser.getAutocompleteListParams(position) ?? { enabled: false }; + } + updateExpression(position, updateEntry, type) { + return this.joinExpressionParser.updateExpression(position, updateEntry, type); + } + getModel() { + return this.isValid() ? this.joinExpressionParser.getModel() : null; + } + createFunctionParams() { + return { + operands: [], + operators: [], + evaluatorParams: [] + }; + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterService.ts +var AdvancedFilterService = class extends BeanStub6 { + constructor() { + super(...arguments); + this.beanName = "advancedFilter"; + this.appliedExpression = null; + /** The value displayed in the input, which may be invalid */ + this.expression = null; + this.isValid = true; + } + wireBeans(beans) { + this.valueSvc = beans.valueSvc; + this.colModel = beans.colModel; + this.dataTypeSvc = beans.dataTypeSvc; + this.advFilterExpSvc = beans.advFilterExpSvc; + this.filterValueSvc = beans.filterValueSvc; + this.filterManager = beans.filterManager; + } + postConstruct() { + this.setEnabled(this.gos.get("enableAdvancedFilter"), true); + this.ctrl = this.createManagedBean(new AdvancedFilterCtrl(this.enabled)); + this.expressionProxy = { + getValue: (colId, node) => { + const column = this.colModel.getColDefCol(colId); + return column ? this.filterValueSvc.getValue(column, node) : void 0; + } + }; + this.addManagedPropertyListener("enableAdvancedFilter", (event) => this.setEnabled(!!event.currentValue)); + this.addManagedEventListeners({ + newColumnsLoaded: (event) => this.onNewColumnsLoaded(event) + }); + this.addManagedPropertyListener("includeHiddenColumnsInAdvancedFilter", () => { + const updatedValidity = this.updateValidity(); + if (updatedValidity) { + this.filterManager?.onFilterChanged({ source: "advancedFilter" }); + } + }); + } + isEnabled() { + return this.enabled; + } + isFilterPresent() { + return !!this.expressionFunction; + } + doesFilterPass(node) { + return this.expressionFunction(this.expressionProxy, node, this.expressionParams); + } + getModel() { + const expressionParser = this.createExpressionParser(this.appliedExpression); + expressionParser?.parseExpression(); + return expressionParser?.getModel() ?? null; + } + setModel(model) { + const parseModel = (model2, isFirstParent) => { + if (model2.filterType === "join") { + const operator = this.advFilterExpSvc.parseJoinOperator(model2); + const expression2 = model2.conditions.map((condition) => parseModel(condition)).filter((condition) => _exists11(condition)).join(` ${operator} `); + return isFirstParent || model2.conditions.length <= 1 ? expression2 : `(${expression2})`; + } else { + return this.advFilterExpSvc.parseColumnFilterModel(model2); + } + }; + const expression = model ? parseModel(model, true) : null; + this.setExpressionDisplayValue(expression); + this.applyExpression(); + this.ctrl.refreshComp(); + this.ctrl.refreshBuilderComp(); + } + getExpressionDisplayValue() { + return this.expression; + } + setExpressionDisplayValue(expression) { + this.expression = expression; + } + isCurrentExpressionApplied() { + return this.appliedExpression === this.expression; + } + createExpressionParser(expression) { + if (!expression) { + return null; + } + return new FilterExpressionParser({ + expression, + colModel: this.colModel, + dataTypeSvc: this.dataTypeSvc, + valueSvc: this.valueSvc, + advFilterExpSvc: this.advFilterExpSvc + }); + } + getDefaultExpression(updateEntry) { + const updatedValue = this.advFilterExpSvc.getColumnValue(updateEntry) + " "; + return { + updatedValue, + updatedPosition: updatedValue.length + }; + } + isHeaderActive() { + return !this.gos.get("advancedFilterParent"); + } + getCtrl() { + return this.ctrl; + } + setEnabled(enabled, silent) { + const previousValue = this.enabled; + const isValidRowModel = _isClientSideRowModel(this.gos) || _isServerSideRowModel(this.gos); + if (enabled && !isValidRowModel) { + _warn4(123); + } + this.enabled = enabled && isValidRowModel; + if (!silent && this.enabled !== previousValue) { + this.eventSvc.dispatchEvent({ + type: "advancedFilterEnabledChanged", + enabled: this.enabled + }); + } + } + applyExpression() { + const expressionParser = this.createExpressionParser(this.expression); + expressionParser?.parseExpression(); + this.applyExpressionFromParser(expressionParser); + } + getAppliedExpressionDisplayValue() { + return this.appliedExpression; + } + applyExpressionFromParser(expressionParser) { + this.isValid = !expressionParser || expressionParser.isValid(); + if (!expressionParser || !this.isValid) { + this.expressionFunction = null; + this.expressionParams = null; + this.appliedExpression = null; + return; + } + const { expressionFunction, params } = expressionParser.getFunction(); + this.expressionFunction = expressionFunction; + this.expressionParams = params; + this.appliedExpression = this.expression; + } + updateValidity() { + this.advFilterExpSvc.resetColumnCaches(); + const expressionParser = this.createExpressionParser(this.expression); + expressionParser?.parseExpression(); + const isValid = !expressionParser || expressionParser.isValid(); + const updatedValidity = isValid !== this.isValid; + this.applyExpressionFromParser(expressionParser); + this.ctrl.refreshComp(); + this.ctrl.refreshBuilderComp(); + return updatedValidity; + } + onNewColumnsLoaded(event) { + if (event.source !== "gridInitializing" || !this.dataTypeSvc?.isPendingInference) { + return; + } + this.ctrl.setInputDisabled(true); + const [destroyFunc] = this.addManagedEventListeners({ + dataTypesInferred: () => { + destroyFunc?.(); + this.ctrl.setInputDisabled(false); + } + }); + } +}; + +// packages/ag-grid-enterprise/src/advancedFilter/advancedFilterModule.ts +var AdvancedFilterModule = { + moduleName: "AdvancedFilter", + version: VERSION, + beans: [AdvancedFilterService, AdvancedFilterExpressionService], + icons: { + // Builder button in Advanced Filter + advancedFilterBuilder: "group", + // drag handle used to pick up Advanced Filter Builder rows + advancedFilterBuilderDrag: "grip", + // Advanced Filter Builder row validation error + advancedFilterBuilderInvalid: "not-allowed", + // shown on Advanced Filter Builder rows to move them up + advancedFilterBuilderMoveUp: "up", + // shown on Advanced Filter Builder rows to move them down + advancedFilterBuilderMoveDown: "down", + // shown on Advanced Filter Builder rows to add new rows + advancedFilterBuilderAdd: "plus", + // shown on Advanced Filter Builder rows to remove row + advancedFilterBuilderRemove: "minus", + // shown on Advanced Filter Builder selection pills + advancedFilterBuilderSelectOpen: "small-down", + // remove for rich select editor pills + richSelectRemove: "cancel", + // loading async values + richSelectLoading: "loading" + }, + apiFunctions: { + getAdvancedFilterModel, + setAdvancedFilterModel, + showAdvancedFilterBuilder, + hideAdvancedFilterBuilder + }, + dependsOn: [ + EnterpriseCoreModule, + _FilterCoreModule, + _SharedDragAndDropModule, + _PopupModule, + _FilterValueModule, + TooltipModule + ], + css: [advanced_filter_default] +}; + +// packages/ag-grid-enterprise/src/aiToolkit/aiToolkitModule.ts +import { ColumnApiModule } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/aiToolkit/structuredSchema.ts +import { STRUCTURED_SCHEMA_FEATURES } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/aiToolkit/schemaBuilder.ts +var BaseSchemaBuilder = class { + constructor(description) { + this._defs = {}; + this._nullable = false; + this.description = description; + } + _collectNestedDefs(schemas) { + const allDefs = { ...this._defs }; + for (const schema of schemas) { + if (schema && typeof schema === "object" && "$defs" in schema) { + Object.assign(allDefs, schema.$defs); + delete schema.$defs; + } + } + return allDefs; + } + _toJSON(additionalProperties = {}) { + const result = { + type: this._nullable ? [this.type, "null"] : this.type, + description: this.description, + ...additionalProperties + }; + if (Object.keys(this._defs).length > 0) { + result.$defs = this._defs; + } + return result; + } + nullable() { + this._nullable = true; + return this; + } + define(id, schema) { + this._defs[id] = schema; + return this; + } +}; +var StringSchemaBuilder = class extends BaseSchemaBuilder { + constructor(descriptionOrOptions) { + super(typeof descriptionOrOptions === "string" ? descriptionOrOptions : descriptionOrOptions?.description); + this.type = "string"; + if (typeof descriptionOrOptions === "object" && descriptionOrOptions) { + this._pattern = descriptionOrOptions.pattern; + this._format = descriptionOrOptions.format; + } + } + pattern(input) { + this._pattern = input; + return this; + } + format(input) { + this._format = input; + return this; + } + toJSON() { + return this._toJSON({ + pattern: this._pattern, + format: this._format + }); + } +}; +var NumberSchemaBuilder = class extends BaseSchemaBuilder { + constructor(descriptionOrOptions) { + super(typeof descriptionOrOptions === "string" ? descriptionOrOptions : descriptionOrOptions?.description); + this.type = "number"; + if (typeof descriptionOrOptions === "object" && descriptionOrOptions) { + this._minimum = descriptionOrOptions.minimum; + this._maximum = descriptionOrOptions.maximum; + this._exclusiveMinimum = descriptionOrOptions.exclusiveMinimum; + this._exclusiveMaximum = descriptionOrOptions.exclusiveMaximum; + this._multipleOf = descriptionOrOptions.multipleOf; + } + } + minimum(value) { + this._minimum = value; + return this; + } + exclusiveMinimum(value) { + this._exclusiveMinimum = value; + return this; + } + maximum(value) { + this._maximum = value; + return this; + } + exclusiveMaximum(value) { + this._exclusiveMaximum = value; + return this; + } + multipleOf(value) { + this._multipleOf = value; + return this; + } + toJSON() { + return this._toJSON({ + minimum: this._minimum, + exclusiveMinimum: this._exclusiveMinimum, + maximum: this._maximum, + exclusiveMaximum: this._exclusiveMaximum, + multipleOf: this._multipleOf + }); + } +}; +var EnumSchemaBuilder = class extends BaseSchemaBuilder { + constructor(_enum, description) { + super(description); + this._enum = _enum; + this.type = "string"; + } + toJSON() { + return this._toJSON({ + enum: this._enum + }); + } +}; +var LiteralSchemaBuilder = class extends EnumSchemaBuilder { + constructor(value, description) { + super([value], description); + } +}; +var BooleanSchemaBuilder = class extends BaseSchemaBuilder { + constructor(description) { + super(description); + this.type = "boolean"; + } + toJSON() { + return this._toJSON(); + } +}; +var ArraySchemaBuilder = class extends BaseSchemaBuilder { + constructor(items, descriptionOrOptions) { + super(typeof descriptionOrOptions === "string" ? descriptionOrOptions : descriptionOrOptions?.description); + this.items = items; + this.type = "array"; + if (typeof descriptionOrOptions === "object" && descriptionOrOptions) { + this._minItems = descriptionOrOptions.minItems; + this._maxItems = descriptionOrOptions.maxItems; + } + } + minItems(value) { + this._minItems = value; + return this; + } + maxItems(value) { + this._maxItems = value; + return this; + } + toJSON() { + const itemsSchema = this.items.toJSON(); + const allDefs = this._collectNestedDefs([itemsSchema]); + this._defs = allDefs; + return this._toJSON({ + items: itemsSchema, + minItems: this._minItems, + maxItems: this._maxItems + }); + } +}; +var ObjectSchemaBuilder = class extends BaseSchemaBuilder { + constructor(properties, description) { + super(description); + this.properties = properties; + this.type = "object"; + } + toJSON() { + const propertySchemas = Object.fromEntries( + Object.keys(this.properties).map((key) => [key, this.properties[key].toJSON()]) + ); + const allDefs = this._collectNestedDefs(Object.values(propertySchemas)); + this._defs = allDefs; + return this._toJSON({ + required: Object.keys(this.properties), + additionalProperties: false, + properties: propertySchemas + }); + } +}; +var UnionSchemaBuilder = class { + constructor(schemas, description) { + this.schemas = schemas; + this._nullable = false; + this._defs = {}; + this.description = description; + } + nullable() { + this._nullable = true; + return this; + } + define(id, schema) { + this._defs[id] = schema; + return this; + } + _collectNestedDefs(schemas) { + const allDefs = this._defs; + for (const schema of schemas) { + if (schema && typeof schema === "object" && "$defs" in schema) { + Object.assign(allDefs, schema.$defs); + delete schema.$defs; + } + } + return allDefs; + } + toJSON() { + const schemaJsons = this.schemas.map((x) => x.toJSON()); + const allDefs = this._collectNestedDefs(schemaJsons); + const result = { + anyOf: this._nullable ? [...schemaJsons, { type: "null" }] : schemaJsons + }; + if (this.description) { + result.description = this.description; + } + if (Object.keys(allDefs).length > 0) { + result.$defs = allDefs; + } + return result; + } +}; +var ReferenceSchemaBuilder = class { + constructor(id) { + this.id = id; + } + nullable() { + return this; + } + toJSON() { + return { + $ref: `#/$defs/${this.id}` + }; + } +}; +var s = { + string: (descriptionOrOptions) => new StringSchemaBuilder(descriptionOrOptions), + number: (descriptionOrOptions) => new NumberSchemaBuilder(descriptionOrOptions), + enum: (values, description) => new EnumSchemaBuilder(values, description), + boolean: (description) => new BooleanSchemaBuilder(description), + array: (items, descriptionOrOptions) => new ArraySchemaBuilder(items, descriptionOrOptions), + object: (properties, description) => new ObjectSchemaBuilder(properties, description), + union: (schemas, description) => new UnionSchemaBuilder(schemas, description), + literal: (value, description) => new LiteralSchemaBuilder(value, description), + ref: (id) => new ReferenceSchemaBuilder(id) +}; + +// packages/ag-grid-enterprise/src/aiToolkit/features/aggregationFeatureSchema.ts +var buildAggregationFeatureSchema = (beans) => { + const { aggFuncSvc } = beans; + if (!aggFuncSvc) { + return; + } + const columns = beans.colModel.getCols(); + const aggregatableColumns = columns.filter((col) => col.isAllowValue() && aggFuncSvc.getFuncNames(col).length > 0); + if (aggregatableColumns.length === 0) { + return; + } + return s.object( + { + aggregationModel: s.array( + s.union( + aggregatableColumns.map( + (col) => s.object({ + colId: s.literal(col.getColId(), "Column identifier"), + aggFunc: s.enum(beans.aggFuncSvc?.getFuncNames(col) || [], "Aggregation function") + }) + ) + ), + "Array of column aggregations" + ) + }, + "Aggregation configuration for the grid" + ).nullable(); +}; + +// packages/ag-grid-enterprise/src/aiToolkit/features/columnSizingFeatureSchema.ts +var buildColumnSizingFeatureSchema = (beans) => { + const columns = beans.colModel.getCols(); + const resizableColumns = columns.filter((col) => col.isResizable()); + if (resizableColumns.length === 0) { + return; + } + const resizableColumnIds = resizableColumns.map((col) => col.getColId()); + return s.object( + { + columnSizingModel: s.array( + s.union([ + s.object({ + colId: s.ref("resizableColumnId"), + width: s.number("Fixed width in pixels").minimum(20) + }), + s.object({ + colId: s.ref("resizableColumnId"), + flex: s.number("Flex sizing ratio").minimum(0) + }) + ]), + "Array of column sizing configurations" + ) + }, + "Column sizing configuration for the grid" + ).define("resizableColumnId", s.enum(resizableColumnIds, "Column ID that supports resizing")); +}; + +// packages/ag-grid-enterprise/src/aiToolkit/features/columnVisibilityFeatureSchema.ts +var buildColumnVisibilityFeatureSchema = () => { + return s.object( + { + hiddenColIds: s.array(s.ref("allColumnIds"), "Array of column IDs to hide") + }, + "Column visibility configuration for the grid" + ).nullable(); +}; + +// packages/ag-grid-enterprise/src/aiToolkit/features/advancedFilterFeatureSchema.ts +var buildAdvancedFilterFeatureSchema = ({ colModel, dataTypeSvc }) => { + if (!dataTypeSvc) { + return; + } + const columns = colModel.getCols(); + const dataTypes = { + boolean: [], + object: [], + date: [], + dateString: [], + dateTime: [], + dateTimeString: [], + number: [], + bigint: [], + text: [] + }; + for (const col of columns) { + const dataType = dataTypeSvc.getBaseDataType(col); + if (dataType) { + dataTypes[dataType].push(col.colId); + } + } + const columnFilterModels = []; + const defs = {}; + for (const key of Object.keys(dataTypes)) { + if (dataTypes[key].length > 0) { + const ref = `${key}AdvancedFilterModel`; + const builder = DataTypeSchemaBuilders[key]; + defs[ref] = builder(dataTypes[key]); + columnFilterModels.push({ $ref: `#/$defs/${ref}` }); + } + } + defs.joinAdvancedFilterModel = s.object({ + filterType: s.literal("join", "Filter type identifier for joining multiple advanced filter conditions"), + type: s.enum(["AND", "OR"], "Logical operator to combine multiple advanced filter conditions"), + conditions: s.array(s.ref("advancedFilterModel"), "Array of advanced filter conditions to be combined") + }); + defs.advancedFilterModel = { + anyOf: [...columnFilterModels, { $ref: "#/$defs/joinAdvancedFilterModel" }] + }; + return s.object( + { + advancedFilterModel: s.ref("advancedFilterModel") + }, + "Advanced filter configuration for the grid" + ).nullable(); +}; +var buildBooleanFilterSchema = (colIds) => { + return s.object({ + filterType: s.literal("boolean", "Filter type identifier for boolean column filters"), + colId: s.enum(colIds, "Column identifier for the boolean column to filter"), + type: s.enum(["true", "false"], "Boolean value to filter by") + }); +}; +var buildObjectFilterSchema = (colIds) => { + return s.object({ + filterType: s.literal("object", "Filter type identifier for object column filters"), + colId: s.enum(colIds, "Column identifier for the object column to filter"), + filter: s.string("Filter value to compare against object column values").nullable(), + type: s.enum( + ["equals", "notEqual", "contains", "notContains", "startsWith", "endsWith", "blank", "notBlank"], + "Object filter operation type" + ) + }); +}; +var buildDateFilterSchema = (colIds) => { + return s.object({ + filterType: s.literal("date", "Filter type identifier for date column filters"), + colId: s.enum(colIds, "Column identifier for the date column to filter"), + filter: s.string({ pattern: "^\\d{4}-\\d{2}-\\d{2}$", description: "Date value in YYYY-MM-DD format" }).nullable(), + type: s.enum( + [ + "equals", + "notEqual", + "lessThan", + "lessThanOrEqual", + "greaterThan", + "greaterThanOrEqual", + "blank", + "notBlank" + ], + "Date filter operation type" + ) + }); +}; +var buildDateStringFilterSchema = (colIds) => { + return s.object({ + filterType: s.literal("date", "Filter type identifier for date string column filters"), + colId: s.enum(colIds, "Column identifier for the date string column to filter"), + filter: s.string({ pattern: "^\\d{4}-\\d{2}-\\d{2}$", description: "Date value in YYYY-MM-DD format" }).nullable(), + type: s.enum( + [ + "equals", + "notEqual", + "lessThan", + "lessThanOrEqual", + "greaterThan", + "greaterThanOrEqual", + "blank", + "notBlank" + ], + "Date string filter operation type" + ) + }); +}; +var buildDateTimeFilterSchema = (colIds) => { + return s.object({ + filterType: s.literal("dateTime", "Filter type identifier for datetime column filters"), + colId: s.enum(colIds, "Column identifier for the datetime column to filter"), + filter: s.string({ + pattern: "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$", + description: "DateTime value in YYYY-MM-DDTHH:mm:ss format" + }).nullable(), + type: s.enum( + [ + "equals", + "notEqual", + "lessThan", + "lessThanOrEqual", + "greaterThan", + "greaterThanOrEqual", + "blank", + "notBlank" + ], + "DateTime filter operation type" + ) + }); +}; +var buildDateTimeStringFilterSchema = (colIds) => { + return s.object({ + filterType: s.literal("dateTimeString", "Filter type identifier for datetime string column filters"), + colId: s.enum(colIds, "Column identifier for the datetime string column to filter"), + filter: s.string({ + pattern: "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$", + description: "DateTime value in YYYY-MM-DD HH:mm:ss format" + }).nullable(), + type: s.enum( + [ + "equals", + "notEqual", + "lessThan", + "lessThanOrEqual", + "greaterThan", + "greaterThanOrEqual", + "blank", + "notBlank" + ], + "DateTime string filter operation type" + ) + }); +}; +var buildNumberFilterSchema = (colIds) => { + return s.object({ + filterType: s.literal("number", "Filter type identifier for number column filters"), + colId: s.enum(colIds, "Column identifier for the number column to filter"), + filter: s.number("Numeric value to filter by").nullable(), + type: s.enum( + [ + "equals", + "notEqual", + "lessThan", + "lessThanOrEqual", + "greaterThan", + "greaterThanOrEqual", + "blank", + "notBlank" + ], + "Number filter operation type" + ) + }); +}; +var buildBigIntFilterSchema = (colIds) => { + return s.object({ + filterType: s.literal("bigint", "Filter type identifier for bigint column filters"), + colId: s.enum(colIds, "Column identifier for the bigint column to filter"), + filter: s.string({ + pattern: "^-?\\d+$", + description: "BigInt value to filter by" + }).nullable(), + type: s.enum( + [ + "equals", + "notEqual", + "lessThan", + "lessThanOrEqual", + "greaterThan", + "greaterThanOrEqual", + "blank", + "notBlank" + ], + "BigInt filter operation type" + ) + }); +}; +var buildTextFilterSchema = (colIds) => { + return s.object({ + filterType: s.literal("text", "Filter type identifier for text column filters"), + colId: s.enum(colIds, "Column identifier for the text column to filter"), + filter: s.string("Text value to filter by").nullable(), + type: s.enum( + ["equals", "notEqual", "contains", "notContains", "startsWith", "endsWith", "blank", "notBlank"], + "Text filter operation type" + ) + }); +}; +var DataTypeSchemaBuilders = { + boolean: buildBooleanFilterSchema, + object: buildObjectFilterSchema, + date: buildDateFilterSchema, + dateString: buildDateStringFilterSchema, + dateTime: buildDateTimeFilterSchema, + dateTimeString: buildDateTimeStringFilterSchema, + number: buildNumberFilterSchema, + bigint: buildBigIntFilterSchema, + text: buildTextFilterSchema +}; + +// packages/ag-grid-enterprise/src/aiToolkit/features/filterFeatureSchema.ts +var TextFilterKey = "agTextColumnFilter"; +var NumberFilterKey = "agNumberColumnFilter"; +var DateFilterKey = "agDateColumnFilter"; +var SetFilterKey = "agSetColumnFilter"; +var MultiFilterKey = "agMultiColumnFilter"; +var SimpleFilterKeys = [TextFilterKey, NumberFilterKey, DateFilterKey]; +var buildFilterFeatureSchema = (beans, params) => { + const { advancedFilter } = beans; + if (advancedFilter?.isEnabled()) { + return buildAdvancedFilterFeatureSchema(beans); + } else { + return buildColumnFilterFeatureSchema(beans, params); + } +}; +var buildColumnFilterFeatureSchema = (beans, params) => { + const { gos, colFilter, colModel } = beans; + if (!colFilter) { + return; + } + const columns = colModel.getCols(); + const filterableColumns = columns.filter((col) => col.isFilterAllowed()); + if (filterableColumns.length === 0) { + return; + } + const filterSchemas = {}; + const enableFilterHandlers = gos.get("enableFilterHandlers"); + for (const column of filterableColumns) { + const columnParams = params?.columns ? params.columns[column.getColId()] : void 0; + const colDef = column.getColDef(); + const defaultFilter = colFilter.getDefaultFilter(column); + const includeSetValues = columnParams?.includeSetValues ?? false; + const filter = buildColumnFilterSchema( + colDef.filter, + colDef.filterParams, + defaultFilter, + (isMulti = false, multiIndex = 0) => { + if (!includeSetValues) { + return []; + } + let handler = void 0; + if (!isMulti) { + handler = colFilter.getHandler(column, true); + } else if (enableFilterHandlers) { + const multiHandler = colFilter.getHandler(column, true); + handler = multiHandler.getHandler(multiIndex); + } + if (!handler) { + return []; + } + return handler.getFilterKeys(); + } + ); + if (filter) { + filterSchemas[column.colId] = filter.nullable(); + } + } + return s.object({ + filterModel: s.object(filterSchemas) + }).nullable(); +}; +function buildColumnFilterSchema(filter, filterParams, defaultFilter, getKeys) { + let filterKey = void 0; + if (typeof filter === "string") { + filterKey = filter; + } else if (typeof filter === "object" && typeof filter.component === "string") { + filterKey = filter.component; + } else if (filter === true || typeof filter === "object" && filter.component === true) { + filterKey = defaultFilter; + } + if (!filterKey) { + return null; + } + if (SimpleFilterKeys.includes(filterKey)) { + const maxConditions = filterParams?.maxNumConditions; + const filterOptions = filterParams?.filterOptions ? filterParams.filterOptions.map((option) => { + if (typeof option === "string") { + return option; + } + if (typeof option === "object" && option.displayKey) { + return option.displayKey; + } + return null; + }).filter(Boolean) : void 0; + const useIsoSeparator = filterParams?.useIsoSeparator || false; + return buildSimpleFilterSchema(filterKey, { maxConditions, filterOptions, useIsoSeparator }); + } else if (filterKey === SetFilterKey) { + return buildSetFilterSchema(getKeys); + } else if (filterKey === MultiFilterKey) { + return buildMultiFilterSchema(filterParams.filters, defaultFilter, getKeys); + } + return null; +} +var buildSimpleFilterSchema = (filterKey, params) => { + if (filterKey === DateFilterKey) { + return buildDateFilterSchema2(params); + } else if (filterKey === NumberFilterKey) { + return buildNumberFilterSchema2(params); + } else { + return buildTextFilterSchema2(params); + } +}; +var buildJoinSchema = (schema, filterType, maxConditions = 2) => { + if (maxConditions === 1) { + return schema; + } + return s.object({ + filterType: s.literal(filterType, `Filter type identifier for ${filterType} filters with multiple conditions`), + operator: s.enum( + ["AND", "OR"], + "Logical operator to combine multiple filter conditions. Must be included even with a single filter to adhere to the API." + ), + conditions: s.array(schema, "Array of filter conditions to be combined").minItems(2).maxItems(maxConditions) + }); +}; +var buildTextFilterSchema2 = (params) => { + const options = params.filterOptions ?? [ + "contains", + "notContains", + "equals", + "notEqual", + "startsWith", + "endsWith", + "blank", + "notBlank" + ]; + const schema = s.object({ + filterType: s.literal("text", "Filter type identifier for text filters"), + type: s.enum(options, "Text filter operation type"), + filter: s.string("Primary filter value").nullable(), + filterTo: s.string("Secondary filter value for range operations").nullable() + }); + return buildJoinSchema(schema, "text", params.maxConditions); +}; +var buildNumberFilterSchema2 = (params) => { + const options = params.filterOptions ?? [ + "equals", + "notEqual", + "greaterThan", + "greaterThanOrEqual", + "lessThan", + "lessThanOrEqual", + "inRange", + "blank", + "notBlank" + ]; + const schema = s.object({ + filterType: s.literal("number", "Filter type identifier for number filters"), + type: s.enum(options, "Number filter operation type"), + filter: s.number("Primary filter value").nullable(), + filterTo: s.number("Secondary filter value for range operations").nullable() + }); + return buildJoinSchema(schema, "number", params.maxConditions); +}; +var buildDateFilterSchema2 = (params) => { + const options = params.filterOptions ?? [ + "equals", + "notEqual", + "lessThan", + "greaterThan", + "inRange", + "blank", + "notBlank" + ]; + const pattern = params.useIsoSeparator ? "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$" : "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"; + const schema = s.object({ + filterType: s.literal("date", "Filter type identifier for date filters"), + type: s.enum(options, "Date filter operation type"), + dateFrom: s.string({ pattern, description: "Primary date filter value in YYYY-MM-DD HH:mm:ss format" }).nullable(), + dateTo: s.string({ + pattern, + description: "Secondary date filter value for range operations in YYYY-MM-DD HH:mm:ss format" + }).nullable() + }); + return buildJoinSchema(schema, "date", params.maxConditions); +}; +var buildSetFilterSchema = (getKeys) => { + const values = getKeys ? getKeys().filter(Boolean) : []; + return s.object({ + filterType: s.literal("set", "Filter type identifier for set filters"), + values: s.array( + values.length > 0 ? s.enum(values, "Available values to filter by") : s.string("Filter values"), + "Array of values to include in the filter" + ) + }); +}; +var buildMultiFilterSchema = (filters, defaultFilter, getKeys = () => []) => { + return s.object({ + filterType: s.literal("multi", "Filter type identifier for multi-condition filters"), + filterModels: s.array( + s.union( + filters.map( + (filter, index) => buildColumnFilterSchema( + filter.filter, + filter.filterParams, + defaultFilter, + () => getKeys(true, index) + ) + ), + "Union of different filter types that can be combined" + ).nullable(), + "Array of filter conditions to be combined with AND/OR logic" + ) + }); +}; + +// packages/ag-grid-enterprise/src/aiToolkit/features/pivotFeatureSchema.ts +var buildPivotFeatureSchema = (beans) => { + const columns = beans.colModel.getCols(); + const pivotableColumnIds = columns.filter((col) => col.isAllowPivot()).map((col) => col.getColId()); + if (pivotableColumnIds.length === 0) { + return; + } + return s.object( + { + pivotMode: s.boolean("Whether pivot mode is enabled"), + pivotColIds: s.array( + s.enum(pivotableColumnIds, "Column ID that supports pivoting"), + "Array of column IDs to use as pivot columns" + ) + }, + "Pivot configuration for the grid" + ).nullable(); +}; + +// packages/ag-grid-enterprise/src/aiToolkit/features/rowGroupFeatureSchema.ts +var buildRowGroupFeatureSchema = (beans) => { + const columns = beans.colModel.getCols(); + const groupableColumns = columns.filter((col) => col.isAllowRowGroup()); + if (groupableColumns.length === 0) { + return; + } + const groupableColumnIds = groupableColumns.map((col) => col.getColId()); + return s.object( + { + groupColIds: s.array( + s.enum(groupableColumnIds, "Column ID that supports row grouping"), + "Array of column IDs to group by" + ) + }, + "Row grouping configuration for the grid" + ); +}; + +// packages/ag-grid-enterprise/src/aiToolkit/features/sortFeatureSchema.ts +var buildSortFeatureSchema = (beans) => { + const { sortSvc } = beans; + if (!sortSvc) { + return; + } + const columns = beans.colModel.getCols(); + const sortableColumns = columns.filter((col) => col.isSortable()); + if (sortableColumns.length === 0) { + return; + } + const sortableColumnIds = sortableColumns.map((col) => col.getColId()); + return s.object( + { + sortModel: s.array( + s.object({ + colId: s.enum(sortableColumnIds, "Column ID that supports sorting"), + sort: s.enum(["asc", "desc"], "Sort direction: ascending or descending"), + type: s.enum(["default", "absolute"], "Sort type: default or absolute values") + }), + "Array of sort configurations" + ) + }, + "Sort configuration for the grid" + ).nullable(); +}; + +// packages/ag-grid-enterprise/src/aiToolkit/structuredSchema.ts +var StructuredSchemaBuilderMap = { + aggregation: buildAggregationFeatureSchema, + filter: buildFilterFeatureSchema, + sort: buildSortFeatureSchema, + pivot: buildPivotFeatureSchema, + columnVisibility: buildColumnVisibilityFeatureSchema, + columnSizing: buildColumnSizingFeatureSchema, + rowGroup: buildRowGroupFeatureSchema +}; +function getStructuredSchema(beans, params) { + const allColumnIds = beans.colModel.getCols().map((col) => col.getColId()); + const features = {}; + for (const feature of STRUCTURED_SCHEMA_FEATURES) { + if (params?.exclude?.includes(feature)) { + continue; + } + const builder = StructuredSchemaBuilderMap[feature]; + const schema2 = builder(beans, params); + if (schema2) { + features[feature] = schema2.nullable(); + } + } + const columnParams = params?.columns ?? {}; + const descriptions = allColumnIds.map((colId) => { + if (columnParams[colId]?.description) { + return `${colId}: ${columnParams[colId].description}`; + } else { + return colId; + } + }).filter(Boolean).join("\n"); + const schema = s.object(features).define("allColumnIds", s.enum(allColumnIds, descriptions)); + return schema.toJSON(); +} + +// packages/ag-grid-enterprise/src/aiToolkit/aiToolkitModule.ts +var AiToolkitModule = { + moduleName: "AiToolkit", + version: VERSION, + beans: [], + dependsOn: [EnterpriseCoreModule, ColumnApiModule], + apiFunctions: { + getStructuredSchema + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/columnsToolPanelModule.ts +import { _ColumnMoveModule, _PopupModule as _PopupModule2, _SharedDragAndDropModule as _SharedDragAndDropModule2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sideBar/sideBarModule.ts +import { _HorizontalResizeModule } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sideBar/sideBarApi.ts +import { _unwrapUserComp } from "ag-grid-community"; +function isSideBarVisible(beans) { + return beans.sideBar?.comp.isDisplayed() ?? false; +} +function setSideBarVisible(beans, show) { + beans.sideBar?.comp.setDisplayed(show); +} +function setSideBarPosition(beans, position) { + beans.sideBar?.comp.setSideBarPosition(position); +} +function openToolPanel(beans, key, parent) { + beans.sideBar?.comp.openToolPanel(key, "api", parent); +} +function closeToolPanel(beans) { + beans.sideBar?.comp.close("api"); +} +function getOpenedToolPanel(beans) { + return beans.sideBar?.comp.openedItem() ?? null; +} +function refreshToolPanel(beans) { + beans.sideBar?.comp.refresh(); +} +function isToolPanelShowing(beans) { + return beans.sideBar?.comp.isToolPanelShowing() ?? false; +} +function getToolPanelInstance(beans, id) { + const comp = beans.sideBar?.comp.getToolPanelInstance(id); + return _unwrapUserComp(comp); +} +function getSideBar(beans) { + return beans.sideBar?.comp.getDef(); +} + +// packages/ag-grid-enterprise/src/sideBar/sideBarService.ts +import { BeanStub as BeanStub7 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sideBar/agSideBar.ts +import { + Component as Component18, + KeyCode as KeyCode18, + ManagedFocusFeature, + RefPlaceholder as RefPlaceholder20, + _addFocusableContainerListener, + _addGridCommonParams as _addGridCommonParams5, + _findNextFocusableElement as _findNextFocusableElement5, + _focusInto as _focusInto4, + _focusNextGridCoreContainer as _focusNextGridCoreContainer3, + _getActiveDomElement as _getActiveDomElement7, + _isVisible as _isVisible5, + _removeFromParent as _removeFromParent5, + _setAriaControlsAndLabel as _setAriaControlsAndLabel2, + _skipFocusableContainerListenerForAgGrid, + _warn as _warn6 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sideBar/agSideBar.css +var agSideBar_default = '.ag-tool-panel-wrapper{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--ag-horizontal-size,var(--ag-side-bar-panel-width))}.ag-tool-panel-content{display:flex;height:100%;overflow:hidden auto}.ag-tool-panel-wrapper.ag-tool-panel-animating{\n /* !important required to override .ag-hidden to tool panel remains visible while animating */display:block!important;transition:width var(--ag-side-bar-panel-animation-duration) ease-in-out}@media (prefers-reduced-motion:reduce){.ag-tool-panel-wrapper.ag-tool-panel-animating{transition:none}}.ag-tool-panel-external{display:flex;flex-direction:row}:where(.ag-tool-panel-external) .ag-tool-panel-wrapper{flex-grow:1}.ag-select-agg-func-item{align-items:center;display:flex;flex:1 1 auto;flex-flow:row nowrap;height:100%;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap}.ag-tool-panel-horizontal-resize{cursor:ew-resize;height:100%;position:absolute;top:0;width:5px;z-index:1}.ag-side-bar{background-color:var(--ag-side-bar-background-color);display:flex;flex-direction:row-reverse;position:relative}:where(.ag-ltr) :where(.ag-side-bar-left) .ag-tool-panel-horizontal-resize{right:-3px}:where(.ag-rtl) :where(.ag-side-bar-left) .ag-tool-panel-horizontal-resize{left:-3px}:where(.ag-ltr) :where(.ag-side-bar-right) .ag-tool-panel-horizontal-resize{left:-3px}:where(.ag-rtl) :where(.ag-side-bar-right) .ag-tool-panel-horizontal-resize{right:-3px}.ag-side-bar-left{flex-direction:row;order:-1}.ag-side-buttons{background-color:var(--ag-side-button-bar-background-color);padding-top:var(--ag-side-button-bar-top-padding);position:relative}.ag-side-button{background-color:var(--ag-side-button-background-color);border-bottom:var(--ag-side-button-border);border-top:var(--ag-side-button-border);color:var(--ag-side-button-text-color);margin-top:-1px;position:relative}.ag-side-button:before{background-color:transparent;bottom:0;content:"";display:block;position:absolute;top:0;transition:background-color var(--ag-side-button-selected-underline-transition-duration);width:var(--ag-side-button-selected-underline-width)}:where(.ag-ltr) .ag-side-button:before{left:0}:where(.ag-rtl) .ag-side-button:before{right:0}.ag-side-button:hover{background-color:var(--ag-side-button-hover-background-color);color:var(--ag-side-button-hover-text-color)}.ag-side-button.ag-selected{background-color:var(--ag-side-button-selected-background-color);border-bottom:var(--ag-side-button-selected-border);border-top:var(--ag-side-button-selected-border);color:var(--ag-side-button-selected-text-color)}.ag-side-button.ag-selected:before{background-color:var(--ag-side-button-selected-underline-color)}.ag-side-button-button{align-items:center;display:flex;flex-direction:column;gap:var(--ag-spacing);position:relative;white-space:nowrap;width:100%;&:focus{box-shadow:none}}:where(.ag-ltr) .ag-side-button-button{padding:var(--ag-side-button-vertical-padding) var(--ag-side-button-right-padding) var(--ag-side-button-vertical-padding) var(--ag-side-button-left-padding)}:where(.ag-rtl) .ag-side-button-button{padding:var(--ag-side-button-vertical-padding) var(--ag-side-button-left-padding) var(--ag-side-button-vertical-padding) var(--ag-side-button-right-padding)}.ag-side-button-button:focus-visible{box-shadow:inset var(--ag-focus-shadow)}.ag-side-button-label{writing-mode:vertical-lr}@media (resolution <= 1.5x){.ag-side-button-label{font-family:"Segoe UI",var(--ag-font-family)}:where(.ag-ltr) .ag-side-button-label{transform:rotate(.05deg)}:where(.ag-rtl) .ag-side-button-label{transform:rotate(-.05deg)}}:where(.ag-ltr) .ag-side-bar-left,:where(.ag-rtl) .ag-side-bar-right{border-right:var(--ag-side-panel-border);:where(.ag-tool-panel-wrapper){border-left:var(--ag-side-panel-border)}}:where(.ag-ltr) .ag-side-bar-right,:where(.ag-rtl) .ag-side-bar-left{border-left:var(--ag-side-panel-border);:where(.ag-tool-panel-wrapper){border-right:var(--ag-side-panel-border)}}'; + +// packages/ag-grid-enterprise/src/sideBar/agSideBarButtons.ts +import { + Component as Component15, + KeyCode as KeyCode17, + _clearElement as _clearElement7, + _focusNextGridCoreContainer as _focusNextGridCoreContainer2, + _stopPropagationForAgGrid as _stopPropagationForAgGrid7 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sideBar/sideBarButtonComp.ts +import { Component as Component14, RefPlaceholder as RefPlaceholder18, _createIconNoSpan as _createIconNoSpan5, _setAriaExpanded as _setAriaExpanded5 } from "ag-grid-community"; +var SideBarButtonElement = { + tag: "div", + cls: "ag-side-button", + role: "presentation", + children: [ + { + tag: "button", + ref: "eToggleButton", + cls: "ag-button ag-side-button-button", + role: "tab", + attrs: { type: "button", tabindex: "-1", "aria-expanded": "false" }, + children: [ + { + tag: "div", + ref: "eIconWrapper", + cls: "ag-side-button-icon-wrapper", + attrs: { "aria-hidden": "true" } + }, + { tag: "span", ref: "eLabel", cls: "ag-side-button-label" } + ] + } + ] +}; +var SideBarButtonComp = class extends Component14 { + constructor(toolPanelDef) { + super(); + this.toolPanelDef = toolPanelDef; + this.eToggleButton = RefPlaceholder18; + this.eIconWrapper = RefPlaceholder18; + this.eLabel = RefPlaceholder18; + } + getToolPanelId() { + return this.toolPanelDef.id; + } + postConstruct() { + this.setTemplate(SideBarButtonElement, []); + this.setLabel(); + this.setIcon(); + this.addManagedElementListeners(this.eToggleButton, { click: this.onButtonPressed.bind(this) }); + this.eToggleButton.setAttribute("id", `ag-${this.getCompId()}-button`); + } + setLabel() { + const def = this.toolPanelDef; + const label = this.getLocaleTextFunc()(def.labelKey, def.labelDefault); + this.eLabel.textContent = label; + } + setIcon() { + this.eIconWrapper.insertAdjacentElement( + "afterbegin", + _createIconNoSpan5(this.toolPanelDef.iconKey, this.beans) + ); + } + onButtonPressed() { + this.dispatchLocalEvent({ type: "toggleButtonClicked" }); + } + setSelected(selected) { + this.toggleCss("ag-selected", selected); + _setAriaExpanded5(this.eToggleButton, selected); + } +}; + +// packages/ag-grid-enterprise/src/sideBar/agSideBarButtons.ts +var SideBarElement = { tag: "div", cls: "ag-side-buttons", role: "tablist" }; +var AgSideBarButtons = class extends Component15 { + constructor() { + super(SideBarElement); + this.buttonComps = []; + } + postConstruct() { + this.addManagedElementListeners(this.getFocusableElement(), { keydown: this.handleKeyDown.bind(this) }); + } + handleKeyDown(e) { + if (e.key !== KeyCode17.TAB || !e.shiftKey) { + return; + } + if (_focusNextGridCoreContainer2(this.beans, true)) { + e.preventDefault(); + return; + } + _stopPropagationForAgGrid7(e); + } + setActiveButton(id) { + for (const comp of this.buttonComps) { + comp.setSelected(id === comp.getToolPanelId()); + } + } + addButtonComp(def) { + const buttonComp = this.createBean(new SideBarButtonComp(def)); + this.buttonComps.push(buttonComp); + this.appendChild(buttonComp); + buttonComp.addEventListener("toggleButtonClicked", () => { + this.dispatchLocalEvent({ + type: "sideBarButtonClicked", + toolPanelId: def.id + }); + }); + return buttonComp; + } + clearButtons() { + this.buttonComps = this.destroyBeans(this.buttonComps); + _clearElement7(this.getGui()); + } + destroy() { + this.clearButtons(); + super.destroy(); + } +}; +var AgSideBarButtonsSelector = { + selector: "AG-SIDE-BAR-BUTTONS", + component: AgSideBarButtons +}; + +// packages/ag-grid-enterprise/src/sideBar/sideBarDefParser.ts +import { _warn as _warn5 } from "ag-grid-community"; +var DEFAULT_COLUMN_COMP = { + id: "columns", + labelDefault: "Columns", + labelKey: "columns", + iconKey: "columnsToolPanel", + toolPanel: "agColumnsToolPanel" +}; +var DEFAULT_FILTER_COMP = { + id: "filters", + labelDefault: "Filters", + labelKey: "filters", + iconKey: "filtersToolPanel", + toolPanel: "agFiltersToolPanel" +}; +var DEFAULT_NEW_FILTER_COMP = { + id: "filters-new", + labelDefault: "Filters", + labelKey: "filters", + iconKey: "filtersToolPanel", + toolPanel: "agNewFiltersToolPanel" +}; +var DEFAULT_BY_KEY = { + columns: DEFAULT_COLUMN_COMP, + filters: DEFAULT_FILTER_COMP, + "filters-new": DEFAULT_NEW_FILTER_COMP +}; +function parseSideBarDef(toParse) { + if (!toParse) { + return void 0; + } + if (toParse === true) { + return { + toolPanels: [DEFAULT_COLUMN_COMP, DEFAULT_FILTER_COMP], + defaultToolPanel: "columns" + }; + } + if (typeof toParse === "string") { + return parseSideBarDef([toParse]); + } + if (Array.isArray(toParse)) { + const comps = []; + for (const key of toParse) { + const lookupResult = DEFAULT_BY_KEY[key]; + if (!lookupResult) { + _warn5(215, { key, defaultByKey: DEFAULT_BY_KEY }); + continue; + } + comps.push(lookupResult); + } + if (comps.length === 0) { + return void 0; + } + return { + toolPanels: comps, + defaultToolPanel: comps[0].id + }; + } + return { + toolPanels: parseComponents(toParse.toolPanels), + defaultToolPanel: toParse.defaultToolPanel, + hiddenByDefault: toParse.hiddenByDefault, + position: toParse.position, + hideButtons: toParse.hideButtons + }; +} +function parseComponents(from) { + const result = []; + if (!from) { + return result; + } + from.forEach((it) => { + const parsed = parseOneComponent(it); + if (!parsed) { + return; + } + result.push(parsed); + }); + return result; +} +function parseOneComponent(it) { + if (typeof it !== "string") { + return it; + } + if (DEFAULT_BY_KEY[it]) { + return DEFAULT_BY_KEY[it]; + } + _warn5(215, { key: it, defaultByKey: DEFAULT_BY_KEY }); + return null; +} + +// packages/ag-grid-enterprise/src/sideBar/toolPanelWrapper.ts +import { Component as Component17, RefPlaceholder as RefPlaceholder19 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sideBar/agHorizontalResize.ts +import { Component as Component16 } from "ag-grid-community"; +var AgHorizontalResize = class extends Component16 { + constructor() { + super({ tag: "div", cls: "ag-tool-panel-horizontal-resize" }); + this.minWidth = 100; + this.maxWidth = null; + } + postConstruct() { + const finishedWithResizeFunc = this.beans.horizontalResizeSvc.addResizeBar({ + eResizeBar: this.getGui(), + dragStartPixels: 1, + onResizeStart: this.onResizeStart.bind(this), + onResizing: this.onResizing.bind(this), + onResizeEnd: this.onResizeEnd.bind(this) + }); + this.addDestroyFunc(finishedWithResizeFunc); + this.inverted = this.gos.get("enableRtl"); + } + dispatchResizeEvent(start, end, width) { + this.eventSvc.dispatchEvent({ + type: "toolPanelSizeChanged", + width, + started: start, + ended: end + }); + } + onResizeStart() { + this.startingWidth = this.elementToResize.offsetWidth; + this.dispatchResizeEvent(true, false, this.startingWidth); + } + onResizeEnd(delta) { + return this.onResizing(delta, true); + } + onResizing(delta, isEnd = false) { + const direction = this.inverted ? -1 : 1; + let newWidth = Math.max(this.minWidth, Math.floor(this.startingWidth - delta * direction)); + if (this.maxWidth != null) { + newWidth = Math.min(this.maxWidth, newWidth); + } + this.elementToResize.style.setProperty("--ag-horizontal-size", `${newWidth}px`); + this.dispatchResizeEvent(false, isEnd, newWidth); + } +}; + +// packages/ag-grid-enterprise/src/sideBar/toolPanelWrapper.ts +function getToolPanelCompDetails(userCompFactory, toolPanelDef, params) { + return userCompFactory.getCompDetails(toolPanelDef, ToolPanelComponent, void 0, params, true); +} +var ToolPanelComponent = { + name: "toolPanel", + optionalMethods: ["refresh", "getState"] +}; +var ToolPanelElement = { + tag: "div", + cls: "ag-tool-panel-wrapper", + role: "tabpanel", + children: [ + { + tag: "div", + cls: "ag-tool-panel-content", + ref: "eContent" + } + ] +}; +var ToolPanelWrapper = class extends Component17 { + constructor() { + super(ToolPanelElement); + this.eContent = RefPlaceholder19; + this.animationId = 0; + this.defParent = null; + } + postConstruct() { + const eGui = this.getGui(); + const resizeBar = this.resizeBar = this.createManagedBean(new AgHorizontalResize()); + eGui.setAttribute("id", `ag-${this.getCompId()}`); + resizeBar.elementToResize = eGui; + this.appendChild(resizeBar); + } + getToolPanelId() { + return this.toolPanelId; + } + getDefParent() { + return this.defParent; + } + setDefParent(parent) { + this.defParent = parent; + } + setToolPanelDef(toolPanelDef, params) { + const { id, minWidth, maxWidth, width, parent } = toolPanelDef; + this.toolPanelId = id; + this.defParent = parent ?? null; + if (width) { + this.getGui().style.setProperty("--ag-side-bar-panel-width", `${width}px`); + } + const compDetails = getToolPanelCompDetails(this.beans.userCompFactory, toolPanelDef, params); + if (compDetails == null) { + return false; + } + const componentPromise = compDetails.newAgStackInstance(); + this.params = compDetails.params; + componentPromise.then(this.setToolPanelComponent.bind(this)); + const resizeBar = this.resizeBar; + if (minWidth != null) { + resizeBar.minWidth = minWidth; + } + if (maxWidth != null) { + resizeBar.maxWidth = maxWidth; + } + return true; + } + setToolPanelComponent(compInstance) { + this.toolPanelCompInstance = compInstance; + const { eContent } = this; + eContent.appendChild(compInstance.getGui()); + this.addDestroyFunc(() => { + this.destroyBean(compInstance); + }); + } + getToolPanelInstance() { + return this.toolPanelCompInstance; + } + setResizerSizerSide(side) { + const isRtl = this.gos.get("enableRtl"); + const isLeft = side === "left"; + const inverted = isRtl ? isLeft : !isLeft; + this.resizeBar.inverted = inverted; + } + refresh() { + this.toolPanelCompInstance?.refresh(this.params); + } + animateDisplayed(displayed) { + if (this.isDisplayed() === displayed) { + return; + } + const id = ++this.animationId; + const { eContent } = this; + const cleanup2 = () => { + if (this.animationId === id) { + eGui.classList.remove("ag-tool-panel-animating"); + eContent.style.width = ""; + eGui.style.width = ""; + } + }; + const eGui = this.getGui(); + const currentWrapperWidth = eGui.offsetWidth; + this.setDisplayed(displayed); + eGui.classList.add("ag-tool-panel-animating"); + const durationStr = getComputedStyle(eGui).transitionDuration; + if (!parseFloat(durationStr)) { + cleanup2(); + return; + } + eGui.style.transition = "none"; + eGui.style.width = ""; + eContent.style.width = `${eContent.offsetWidth}px`; + eGui.style.width = `${currentWrapperWidth}px`; + const _ = eGui.offsetWidth; + eGui.style.transition = ""; + eGui.style.width = displayed ? "" : "0"; + const fallbackTimeout = setTimeout(cleanup2, 100); + eGui.addEventListener("transitionstart", () => clearTimeout(fallbackTimeout), { once: true }); + eGui.addEventListener("transitionend", cleanup2, { once: true }); + } +}; + +// packages/ag-grid-enterprise/src/sideBar/agSideBar.ts +var AgSideBarElement = { + tag: "div", + cls: "ag-side-bar ag-unselectable", + children: [ + { + tag: "ag-side-bar-buttons", + ref: "sideBarButtons" + } + ] +}; +var AgSideBar = class extends Component18 { + constructor() { + super(AgSideBarElement, [AgSideBarButtonsSelector]); + this.sideBarButtons = RefPlaceholder20; + this.toolPanelWrappers = []; + this.registerCSS(agSideBar_default); + } + postConstruct() { + this.sideBarButtons.addEventListener("sideBarButtonClicked", this.onToolPanelButtonClicked.bind(this)); + const { beans, gos } = this; + const { sideBar: sideBarState } = gos.get("initialState") ?? {}; + this.setSideBarDef({ + sideBarDef: parseSideBarDef(gos.get("sideBar")), + sideBarState + }); + this.addManagedPropertyListener("sideBar", () => this.setState()); + beans.sideBar.comp = this; + const eGui = this.getFocusableElement(); + this.createManagedBean( + new ManagedFocusFeature(eGui, { + onTabKeyDown: this.onTabKeyDown.bind(this), + handleKeyDown: this.handleKeyDown.bind(this) + }) + ); + _addFocusableContainerListener(beans, this, eGui); + this.addManagedPropertyListener("enableAdvancedFilter", this.onAdvancedFilterChanged.bind(this)); + } + getFocusableContainerName() { + return "sideBar"; + } + onTabKeyDown(e) { + if (e.defaultPrevented) { + return; + } + const { beans, sideBarButtons } = this; + const eGui = this.getGui(); + const sideBarGui = sideBarButtons.getGui(); + const activeElement = _getActiveDomElement7(beans); + const openPanel = eGui.querySelector(".ag-tool-panel-wrapper:not(.ag-hidden)"); + const target = e.target; + const backwards = e.shiftKey; + if (!openPanel) { + if (_focusNextGridCoreContainer3(beans, backwards, true)) { + e.preventDefault(); + return true; + } + _skipFocusableContainerListenerForAgGrid(e); + return false; + } + if (sideBarGui.contains(activeElement)) { + if (_focusInto4(openPanel, backwards)) { + e.preventDefault(); + } + return; + } + if (!backwards) { + return; + } + let nextEl = null; + if (openPanel.contains(activeElement)) { + nextEl = _findNextFocusableElement5(beans, openPanel, void 0, true); + } else if (isTargetUnderManagedComponent(openPanel, target)) { + nextEl = findFocusableElementBeforeTabGuard(openPanel, target); + } + if (!nextEl) { + nextEl = sideBarGui.querySelector(".ag-selected button"); + nextEl = _isVisible5(nextEl) ? nextEl : null; + } + if (nextEl && nextEl !== e.target) { + e.preventDefault(); + nextEl.focus(); + } + } + handleKeyDown(e) { + const currentButton = _getActiveDomElement7(this.beans); + const sideBarButtons = this.sideBarButtons; + if (!sideBarButtons.getGui().contains(currentButton)) { + return; + } + const sideBarGui = sideBarButtons.getGui(); + const buttons = Array.prototype.slice.call(sideBarGui.querySelectorAll(".ag-side-button")); + const currentPos = buttons.findIndex((button) => button.contains(currentButton)); + let nextPos = null; + switch (e.key) { + case KeyCode18.LEFT: + case KeyCode18.UP: + nextPos = Math.max(0, currentPos - 1); + break; + case KeyCode18.RIGHT: + case KeyCode18.DOWN: + nextPos = Math.min(currentPos + 1, buttons.length - 1); + break; + } + if (nextPos === null) { + return; + } + const innerButton = buttons[nextPos].querySelector("button"); + if (innerButton) { + innerButton.focus(); + e.preventDefault(); + } + } + onToolPanelButtonClicked(event) { + const id = event.toolPanelId; + const openedItem = this.openedItem(); + if (openedItem === id) { + this.openToolPanel(void 0, "sideBarButtonClicked"); + } else { + this.openToolPanel(id, "sideBarButtonClicked"); + } + } + clearDownUi() { + this.sideBarButtons.clearButtons(); + this.destroyToolPanelWrappers(); + } + setSideBarDef({ + sideBarDef, + sideBarState, + existingToolPanelWrappers + }) { + this.setDisplayed(false); + this.sideBar = sideBarDef; + if (sideBarDef) { + this.sideBarButtons.setDisplayed(!sideBarDef.hideButtons); + } + if (sideBarDef?.toolPanels) { + const toolPanelDefs = sideBarDef.toolPanels; + this.createToolPanelsAndSideButtons(toolPanelDefs, sideBarState, existingToolPanelWrappers); + if (!this.toolPanelWrappers.length) { + return; + } + const shouldDisplaySideBar = sideBarState ? sideBarState.visible : !sideBarDef.hiddenByDefault; + this.setDisplayed(shouldDisplaySideBar); + this.setSideBarPosition(sideBarState ? sideBarState.position : sideBarDef.position); + if (shouldDisplaySideBar) { + if (sideBarState) { + const { openToolPanel: openToolPanel2 } = sideBarState; + if (openToolPanel2) { + this.openToolPanel(openToolPanel2, "sideBarInitializing"); + } + } else { + this.openToolPanel(sideBarDef.defaultToolPanel, "sideBarInitializing"); + } + } + } + } + getDef() { + return this.sideBar; + } + setSideBarPosition(position) { + if (!position) { + position = "right"; + } + this.position = position; + const isLeft = position === "left"; + const resizerSide = isLeft ? "right" : "left"; + this.toggleCss("ag-side-bar-left", isLeft); + this.toggleCss("ag-side-bar-right", !isLeft); + for (const wrapper of this.toolPanelWrappers) { + wrapper.setResizerSizerSide(resizerSide); + } + this.dispatchSideBarUpdated(); + return this; + } + setDisplayed(displayed, options) { + super.setDisplayed(displayed, options); + this.dispatchSideBarUpdated(); + } + getState() { + const toolPanels = {}; + for (const wrapper of this.toolPanelWrappers) { + toolPanels[wrapper.getToolPanelId()] = wrapper.getToolPanelInstance()?.getState?.(); + } + return { + visible: this.isDisplayed(), + position: this.position, + openToolPanel: this.openedItem(), + toolPanels + }; + } + createToolPanelsAndSideButtons(defs, sideBarState, existingToolPanelWrappers) { + for (const def of defs) { + this.createToolPanelAndSideButton( + def, + sideBarState?.toolPanels?.[def.id], + existingToolPanelWrappers?.[def.id] + ); + } + } + validateDef(def) { + const { id, toolPanel } = def; + if (id == null) { + _warn6(212); + return false; + } + if (isFilterPanel(toolPanel)) { + if (this.beans.filterManager?.isAdvFilterEnabled()) { + _warn6(213); + return false; + } + } + return true; + } + createToolPanelAndSideButton(def, initialState, existingToolPanelWrapper) { + if (!this.validateDef(def)) { + this.destroyBean(existingToolPanelWrapper); + return; + } + let wrapper; + if (existingToolPanelWrapper) { + wrapper = existingToolPanelWrapper; + wrapper.setDefParent(def.parent ?? null); + } else { + wrapper = this.createBean(new ToolPanelWrapper()); + const created = wrapper.setToolPanelDef( + def, + _addGridCommonParams5(this.gos, { + initialState, + onStateUpdated: () => this.dispatchSideBarUpdated() + }) + ); + if (!created) { + return; + } + } + wrapper.setDisplayed(false); + this.renderToolPanelUnderParent(wrapper, def.parent); + this.toolPanelWrappers.push(wrapper); + const button = this.sideBarButtons.addButtonComp(def); + _setAriaControlsAndLabel2(button.eToggleButton, wrapper.getGui()); + } + refresh() { + for (const wrapper of this.toolPanelWrappers) { + wrapper.refresh(); + } + } + renderToolPanelUnderParent(wrapper, externalParent) { + const wrapperGui = wrapper.getGui(); + if (externalParent) { + this.beans.environment.applyThemeClasses(externalParent, ["ag-external", "ag-tool-panel-external"]); + wrapperGui.classList.add(this.gos.get("enableRtl") ? "ag-rtl" : "ag-ltr"); + } + const correctParent = externalParent ?? wrapper.getDefParent() ?? this.getGui(); + if (wrapperGui.parentElement !== correctParent) { + correctParent.appendChild(wrapperGui); + } + } + getWrapper(key) { + return this.toolPanelWrappers.find((wrapper) => wrapper.getToolPanelId() === key); + } + openToolPanel(key, source = "api", parent) { + const currentlyOpenedKey = this.openedItem(); + const switchingToolPanel = !!key && !!currentlyOpenedKey; + const skipAnimation = switchingToolPanel || source === "sideBarInitializing"; + for (const wrapper of this.toolPanelWrappers) { + const show = key === wrapper.getToolPanelId(); + if (show) { + this.renderToolPanelUnderParent(wrapper, parent ?? null); + } + if (skipAnimation) { + wrapper.setDisplayed(show); + } else { + wrapper.animateDisplayed(show); + } + } + const newlyOpenedKey = this.openedItem(); + const openToolPanelChanged = currentlyOpenedKey !== newlyOpenedKey; + if (openToolPanelChanged) { + this.sideBarButtons.setActiveButton(key); + this.raiseToolPanelVisibleEvent(key, currentlyOpenedKey ?? void 0, source); + } + } + getToolPanelInstance(key) { + const toolPanelWrapper = this.getWrapper(key); + if (!toolPanelWrapper) { + _warn6(214, { key }); + return; + } + return toolPanelWrapper.getToolPanelInstance(); + } + raiseToolPanelVisibleEvent(key, previousKey, source) { + const switchingToolPanel = !!key && !!previousKey; + const eventSvc = this.eventSvc; + if (previousKey) { + eventSvc.dispatchEvent({ + type: "toolPanelVisibleChanged", + source, + key: previousKey, + visible: false, + switchingToolPanel + }); + } + if (key) { + eventSvc.dispatchEvent({ + type: "toolPanelVisibleChanged", + source, + key, + visible: true, + switchingToolPanel + }); + } + } + close(source = "api") { + this.openToolPanel(void 0, source); + } + isToolPanelShowing() { + return !!this.openedItem(); + } + openedItem() { + let activeToolPanel = null; + for (const wrapper of this.toolPanelWrappers) { + if (wrapper.isDisplayed()) { + activeToolPanel = wrapper.getToolPanelId(); + } + } + return activeToolPanel; + } + setState(sideBarState) { + const sideBarDef = parseSideBarDef(this.gos.get("sideBar")); + const existingToolPanelWrappers = {}; + if (sideBarDef && this.sideBar) { + sideBarDef.toolPanels?.forEach((toolPanelDef) => { + const { id } = toolPanelDef; + if (!id) { + return; + } + const existingToolPanelDef = this.sideBar.toolPanels?.find( + (toolPanelDefToCheck) => toolPanelDefToCheck.id === id + ); + if (!existingToolPanelDef || toolPanelDef.toolPanel !== existingToolPanelDef.toolPanel) { + return; + } + const toolPanelWrapper = this.getWrapper(id); + if (!toolPanelWrapper) { + return; + } + const params = _addGridCommonParams5(this.gos, { + ...toolPanelDef.toolPanelParams ?? {}, + initialState: sideBarState?.toolPanels?.[id], + onStateUpdated: () => this.dispatchSideBarUpdated() + }); + const hasRefreshed = toolPanelWrapper.getToolPanelInstance()?.refresh(params); + if (hasRefreshed !== true) { + return; + } + this.toolPanelWrappers = this.toolPanelWrappers.filter((toolPanel) => toolPanel !== toolPanelWrapper); + _removeFromParent5(toolPanelWrapper.getGui()); + existingToolPanelWrappers[id] = toolPanelWrapper; + }); + } + this.clearDownUi(); + this.setSideBarDef({ sideBarDef, sideBarState, existingToolPanelWrappers }); + } + dispatchSideBarUpdated() { + this.eventSvc.dispatchEvent({ type: "sideBarUpdated" }); + } + destroyToolPanelWrappers() { + for (const wrapper of this.toolPanelWrappers) { + _removeFromParent5(wrapper.getGui()); + this.destroyBean(wrapper); + } + this.toolPanelWrappers.length = 0; + } + onAdvancedFilterChanged() { + const needsRefresh = this.sideBar?.toolPanels?.some( + (toolPanel) => isFilterPanel(typeof toolPanel === "string" ? toolPanel : toolPanel.toolPanel) + ); + if (needsRefresh) { + this.setState(); + } + } + destroy() { + this.destroyToolPanelWrappers(); + super.destroy(); + } +}; +function isFilterPanel(toolPanel) { + return toolPanel === "agFiltersToolPanel" || toolPanel === "agNewFiltersToolPanel"; +} +var AgSideBarSelector = { + selector: "AG-SIDE-BAR", + component: AgSideBar +}; + +// packages/ag-grid-enterprise/src/sideBar/sideBarService.ts +var SideBarService = class extends BeanStub7 { + constructor() { + super(...arguments); + this.beanName = "sideBar"; + } + getSelector() { + return AgSideBarSelector; + } +}; + +// packages/ag-grid-enterprise/src/sideBar/sideBarModule.ts +var SideBarModule = { + moduleName: "SideBar", + version: VERSION, + beans: [SideBarService], + apiFunctions: { + isSideBarVisible, + setSideBarVisible, + setSideBarPosition, + openToolPanel, + closeToolPanel, + getOpenedToolPanel, + refreshToolPanel, + isToolPanelShowing, + getToolPanelInstance, + getSideBar + }, + dependsOn: [EnterpriseCoreModule, _HorizontalResizeModule] +}; + +// packages/ag-grid-enterprise/src/widgets/menu.css +var menu_default = '.ag-menu-list{cursor:default;display:table;padding:var(--ag-spacing) 0;width:100%}.ag-menu-option,.ag-menu-separator{display:table-row}.ag-menu-option-part,.ag-menu-separator-part{display:table-cell;vertical-align:middle}.ag-menu-option{cursor:pointer;font-weight:500}:where(.ag-ltr) :where(.ag-menu-option-popup-pointer) .ag-icon{text-align:right}:where(.ag-rtl) :where(.ag-menu-option-popup-pointer) .ag-icon{text-align:left}.ag-menu-option-text{white-space:nowrap}.ag-menu-option-custom{display:contents}.ag-compact-menu-option{display:flex;flex-wrap:nowrap;width:100%}.ag-compact-menu-option-text{flex:1 1 auto;white-space:nowrap}.ag-menu-separator{height:calc(var(--ag-spacing)*2 + 1px)}.ag-menu-separator-part:after{border-top:solid var(--ag-border-width) var(--ag-menu-separator-color);content:"";display:block}.ag-compact-menu-option-active,.ag-menu-option-active{background-color:var(--ag-row-hover-color)}.ag-compact-menu-option-part,.ag-menu-option-part{line-height:var(--ag-icon-size);padding:calc(var(--ag-spacing) + 2px) 0}.ag-compact-menu-option-disabled,.ag-menu-option-disabled{cursor:not-allowed;opacity:.5}.ag-compact-menu-option-icon,.ag-menu-option-icon{width:var(--ag-icon-size)}:where(.ag-ltr) .ag-compact-menu-option-icon,:where(.ag-ltr) .ag-menu-option-icon{padding-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-compact-menu-option-icon,:where(.ag-rtl) .ag-menu-option-icon{padding-right:calc(var(--ag-spacing)*2)}.ag-compact-menu-option-text,.ag-menu-option-text{padding-left:calc(var(--ag-spacing)*2);padding-right:calc(var(--ag-spacing)*2)}:where(.ag-ltr) .ag-compact-menu-option-shortcut,:where(.ag-ltr) .ag-menu-option-shortcut{padding-right:var(--ag-spacing)}:where(.ag-rtl) .ag-compact-menu-option-shortcut,:where(.ag-rtl) .ag-menu-option-shortcut{padding-left:var(--ag-spacing)}:where(.ag-ltr) .ag-compact-menu-option-popup-pointer,:where(.ag-ltr) .ag-menu-option-popup-pointer{padding-right:var(--ag-spacing)}:where(.ag-rtl) .ag-compact-menu-option-popup-pointer,:where(.ag-rtl) .ag-menu-option-popup-pointer{padding-left:var(--ag-spacing)}.ag-menu-column-select-wrapper{height:265px;overflow:auto;:where(.ag-column-select){height:100%}}.ag-menu:where(.ag-tabs){min-width:290px}.ag-context-menu-loading-icon{pointer-events:none;position:absolute}'; + +// packages/ag-grid-enterprise/src/widgets/menuItemRenderer.ts +import { _warn as _warn7 } from "ag-grid-community"; +var MenuItemRenderer = class extends AgMenuItemRenderer { + constructor() { + super({ warnNoIcon: () => _warn7(227) }); + } +}; + +// packages/ag-grid-enterprise/src/widgets/menuItemModule.ts +var MenuItemModule = { + moduleName: "MenuItem", + version: VERSION, + userComponents: { + agMenuItem: MenuItemRenderer + }, + icons: { + // indicates the currently active pin state in the "Pin column" sub-menu of the column menu + check: "tick", + // icon for sub menu item + subMenuOpen: "small-right", + // version of subMenuOpen used in RTL mode + subMenuOpenRtl: "small-left" + }, + css: [menu_default] +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/columnToolPanel.ts +import { + Component as Component25, + FilterButtonComp as FilterButtonComp2, + _addGridCommonParams as _addGridCommonParams7, + _areEqual, + _clearElement as _clearElement8, + _last as _last4, + _warn as _warn12 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/columnToolPanel/agPrimaryCols.ts +import { Component as Component24, PositionableFeature, RefPlaceholder as RefPlaceholder24 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/columnToolPanel/agPrimaryCols.css +var agPrimaryCols_default = ".ag-column-select{display:flex;flex:3 1 0px;flex-direction:column;overflow:hidden;position:relative}.ag-column-select-header{flex:none;height:var(--ag-header-height);padding-left:var(--ag-widget-container-horizontal-padding);padding-right:var(--ag-widget-container-horizontal-padding)}.ag-column-select-column,.ag-column-select-column-group,.ag-column-select-header{align-items:center;display:flex;gap:var(--ag-widget-horizontal-spacing);position:relative}.ag-column-select-column,.ag-column-select-column-group{height:100%}:where(.ag-ltr) .ag-column-select-column,:where(.ag-ltr) .ag-column-select-column-group{padding-left:calc(var(--ag-indentation-level)*var(--ag-column-select-indent-size))}:where(.ag-rtl) .ag-column-select-column,:where(.ag-rtl) .ag-column-select-column-group{padding-right:calc(var(--ag-indentation-level)*var(--ag-column-select-indent-size))}.ag-column-select-column-group:where(:not(:last-child)),.ag-column-select-column:where(:not(:last-child)){margin-bottom:var(--ag-widget-vertical-spacing)}.ag-column-select-header-icon{border-radius:var(--ag-border-radius);cursor:pointer;height:var(--ag-icon-size);position:relative;width:var(--ag-icon-size);&:focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-column-select-header-filter-wrapper{flex:1 1 auto}.ag-column-select-header-filter{width:100%}.ag-column-select-list{flex:1 1 0px;overflow:hidden}:where(.ag-ltr) .ag-column-select-add-group-indent{margin-left:calc(var(--ag-icon-size) + var(--ag-spacing)*1.5)}:where(.ag-rtl) .ag-column-select-add-group-indent{margin-right:calc(var(--ag-icon-size) + var(--ag-spacing)*1.5)}.ag-column-select-column-group-readonly,.ag-column-select-column-readonly{opacity:.5;pointer-events:none;.ag-icon{opacity:.5}&.ag-icon-grip{opacity:.35}}.ag-column-select-column-readonly{&.ag-icon-grip,.ag-icon-grip{opacity:.35}}.ag-column-select-virtual-list-viewport{padding:calc(var(--ag-widget-container-vertical-padding)*.5) 0}.ag-column-select-virtual-list-item{padding:0 var(--ag-widget-container-horizontal-padding)}.ag-column-select-column-label{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-column-select-checkbox{display:flex}"; + +// packages/ag-grid-enterprise/src/columnToolPanel/agPrimaryColsHeader.ts +import { + AgCheckboxSelector as AgCheckboxSelector2, + AgInputTextFieldSelector as AgInputTextFieldSelector5, + Component as Component19, + KeyCode as KeyCode19, + RefPlaceholder as RefPlaceholder21, + _createIconNoSpan as _createIconNoSpan6, + _debounce as _debounce2, + _setDisplayed as _setDisplayed11 +} from "ag-grid-community"; +var DEBOUNCE_DELAY = 300; +var AgPrimaryColsHeaderElement = { + tag: "div", + cls: "ag-column-select-header", + role: "presentation", + children: [ + { tag: "div", ref: "eExpand", cls: "ag-column-select-header-icon" }, + { tag: "ag-checkbox", ref: "eSelect", cls: "ag-column-select-header-checkbox" }, + { tag: "ag-input-text-field", ref: "eFilterTextField", cls: "ag-column-select-header-filter-wrapper" } + ] +}; +var AgPrimaryColsHeader = class extends Component19 { + constructor() { + super(AgPrimaryColsHeaderElement, [AgCheckboxSelector2, AgInputTextFieldSelector5]); + this.eExpand = RefPlaceholder21; + this.eSelect = RefPlaceholder21; + this.eFilterTextField = RefPlaceholder21; + } + postConstruct() { + this.createExpandIcons(); + this.addManagedListeners(this.eExpand, { + click: this.onExpandClicked.bind(this), + keydown: (e) => { + if (e.key === KeyCode19.SPACE) { + e.preventDefault(); + this.onExpandClicked(); + } + } + }); + this.addManagedElementListeners(this.eSelect.getInputElement(), { click: this.onSelectClicked.bind(this) }); + this.addManagedPropertyListener("functionsReadOnly", () => this.onFunctionsReadOnlyPropChanged()); + this.eFilterTextField.setAutoComplete(false).onValueChange(() => this.onFilterTextChanged()); + this.addManagedEventListeners({ newColumnsLoaded: this.showOrHideOptions.bind(this) }); + const translate = this.getLocaleTextFunc(); + this.eSelect.setInputAriaLabel(translate("ariaColumnSelectAll", "Toggle All Columns Visibility")); + this.eFilterTextField.setInputAriaLabel(translate("ariaFilterColumnsInput", "Filter Columns Input")); + this.activateTabIndex([this.eExpand]); + } + onFunctionsReadOnlyPropChanged() { + const readOnly = this.gos.get("functionsReadOnly"); + this.eSelect.setReadOnly(readOnly); + this.eSelect.toggleCss("ag-column-select-column-readonly", readOnly); + } + init(params) { + this.params = params; + const readOnly = this.gos.get("functionsReadOnly"); + this.eSelect.setReadOnly(readOnly); + this.eSelect.toggleCss("ag-column-select-column-readonly", readOnly); + if (this.beans.colModel.ready) { + this.showOrHideOptions(); + } + } + createExpandIcons() { + const beans = this.beans; + this.eExpand.appendChild(this.eExpandChecked = _createIconNoSpan6("columnSelectOpen", beans)); + this.eExpand.appendChild(this.eExpandUnchecked = _createIconNoSpan6("columnSelectClosed", beans)); + this.eExpand.appendChild(this.eExpandIndeterminate = _createIconNoSpan6("columnSelectIndeterminate", beans)); + this.setExpandState(0 /* EXPANDED */); + } + // we only show expand / collapse if we are showing columns + showOrHideOptions() { + const params = this.params; + const showFilter = !params.suppressColumnFilter; + const showSelect = !params.suppressColumnSelectAll; + const showExpand = !params.suppressColumnExpandAll; + const groupsPresent = !!this.beans.colModel.colDefCols?.treeDepth; + const translate = this.getLocaleTextFunc(); + this.eFilterTextField.setInputPlaceholder(translate("searchOoo", "Search...")); + _setDisplayed11(this.eFilterTextField.getGui(), showFilter); + _setDisplayed11(this.eSelect.getGui(), showSelect); + _setDisplayed11(this.eExpand, showExpand && groupsPresent); + } + onFilterTextChanged() { + if (!this.onFilterTextChangedDebounced) { + this.onFilterTextChangedDebounced = _debounce2( + this, + () => { + const filterText = this.eFilterTextField.getValue(); + this.dispatchLocalEvent({ type: "filterChanged", filterText }); + }, + DEBOUNCE_DELAY + ); + } + this.onFilterTextChangedDebounced(); + } + onSelectClicked() { + this.dispatchLocalEvent({ type: this.selectState ? "unselectAll" : "selectAll" }); + } + onExpandClicked() { + this.dispatchLocalEvent({ type: this.expandState === 0 /* EXPANDED */ ? "collapseAll" : "expandAll" }); + } + setExpandState(state) { + this.expandState = state; + _setDisplayed11(this.eExpandChecked, state === 0 /* EXPANDED */); + _setDisplayed11(this.eExpandUnchecked, state === 1 /* COLLAPSED */); + _setDisplayed11(this.eExpandIndeterminate, state === 2 /* INDETERMINATE */); + } + setSelectionState(state) { + this.selectState = state; + this.eSelect.setValue(this.selectState); + } +}; +var AgPrimaryColsHeaderSelector = { + selector: "AG-PRIMARY-COLS-HEADER", + component: AgPrimaryColsHeader +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/agPrimaryColsList.ts +import { + Component as Component23, + DragSourceType as DragSourceType5, + _exists as _exists12, + _setAriaLabel as _setAriaLabel11, + _setAriaLevel as _setAriaLevel3, + _warn as _warn11, + isProvidedColumnGroup as isProvidedColumnGroup4 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sideBar/common/toolPanelColDefService.ts +import { AgProvidedColumnGroup, _warn as _warn8, isProvidedColumnGroup } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sideBar/common/sideBarUtils.ts +import { _last as _last3 } from "ag-grid-community"; +function isColGroupDef(colDef) { + return !!colDef && typeof colDef.children !== "undefined"; +} +function getId(colDef) { + return isColGroupDef(colDef) ? colDef.groupId : colDef.colId; +} +function addChildrenToGroup(tree, groupId, colDef) { + const subGroupIsSplit = (currentSubGroup, currentSubGroupToAdd) => { + const existingChildIds = currentSubGroup.children.map(getId); + const childGroupAlreadyExists = existingChildIds.includes(getId(currentSubGroupToAdd)); + const lastChild = _last3(currentSubGroup.children); + const lastChildIsDifferent = lastChild && getId(lastChild) !== getId(currentSubGroupToAdd); + return childGroupAlreadyExists && lastChildIsDifferent; + }; + if (!isColGroupDef(tree)) { + return true; + } + const currentGroup = tree; + const groupToAdd = colDef; + if (subGroupIsSplit(currentGroup, groupToAdd)) { + currentGroup.children.push(groupToAdd); + return true; + } + if (currentGroup.groupId === groupId) { + const existingChildIds = currentGroup.children.map(getId); + const colDefAlreadyPresent = existingChildIds.includes(getId(groupToAdd)); + if (!colDefAlreadyPresent) { + currentGroup.children.push(groupToAdd); + return true; + } + } + for (let i = currentGroup.children.length - 1; i >= 0; i--) { + if (addChildrenToGroup(currentGroup.children[i], groupId, colDef)) { + break; + } + } + return false; +} +function mergeLeafPathTrees(leafPathTrees) { + const matchingRootGroupIds = (pathA, pathB) => { + const bothPathsAreGroups = isColGroupDef(pathA) && isColGroupDef(pathB); + return bothPathsAreGroups && getId(pathA) === getId(pathB); + }; + const mergeTrees = (treeA, treeB) => { + if (!isColGroupDef(treeB)) { + return treeA; + } + const mergeResult = treeA; + const groupToMerge = treeB; + if (groupToMerge.children && groupToMerge.groupId) { + const added = addChildrenToGroup(mergeResult, groupToMerge.groupId, groupToMerge.children[0]); + if (added) { + return mergeResult; + } + } + for (const child of groupToMerge.children) { + mergeTrees(mergeResult, child); + } + return mergeResult; + }; + const mergeColDefs = []; + for (let i = 1; i <= leafPathTrees.length; i++) { + const first = leafPathTrees[i - 1]; + const second = leafPathTrees[i]; + if (matchingRootGroupIds(first, second)) { + leafPathTrees[i] = mergeTrees(first, second); + } else { + mergeColDefs.push(first); + } + } + return mergeColDefs; +} + +// packages/ag-grid-enterprise/src/sideBar/common/toolPanelColDefService.ts +function toolPanelCreateColumnTree(colModel, colDefs) { + const invalidColIds = []; + const createDummyColGroup = (abstractColDef, depth) => { + if (isColGroupDef(abstractColDef)) { + const groupDef = abstractColDef; + const groupId = typeof groupDef.groupId !== "undefined" ? groupDef.groupId : groupDef.headerName; + const group = new AgProvidedColumnGroup(groupDef, groupId, false, depth); + const children = []; + for (const def of groupDef.children) { + const child = createDummyColGroup(def, depth + 1); + if (child) { + children.push(child); + } + } + group.setChildren(children); + return group; + } else { + const colDef = abstractColDef; + const key = colDef.colId ? colDef.colId : colDef.field; + const column = colModel.getColDefCol(key); + if (!column) { + invalidColIds.push(colDef); + } + return column; + } + }; + const mappedResults = []; + for (const colDef of colDefs) { + const result = createDummyColGroup(colDef, 0); + if (result) { + mappedResults.push(result); + } + } + if (invalidColIds.length > 0) { + _warn8(217, { invalidColIds }); + } + return mappedResults; +} +function syncLayoutWithGrid(colModel, syncLayoutCallback) { + const leafPathTrees = getLeafPathTrees(getGridPrimaryColumns(colModel)); + const mergedColumnTrees = mergeLeafPathTrees(leafPathTrees); + syncLayoutCallback(mergedColumnTrees); +} +function syncLayoutWithColumns(columns, syncLayoutCallback) { + const leafPathTrees = getLeafPathTrees(columns); + const mergedColumnTrees = mergeLeafPathTrees(leafPathTrees); + syncLayoutCallback(mergedColumnTrees); +} +function getLeafPathTrees(columns) { + const getLeafPathTree = (node, childDef) => { + let leafPathTree; + if (isProvidedColumnGroup(node)) { + if (node.isPadding()) { + leafPathTree = childDef; + } else { + const groupDef = Object.assign({}, node.getColGroupDef()); + groupDef.groupId = node.getGroupId(); + groupDef.children = [childDef]; + leafPathTree = groupDef; + } + } else { + const colDef = Object.assign({}, node.getColDef()); + colDef.colId = node.getColId(); + leafPathTree = colDef; + } + const parent = node.getOriginalParent(); + if (parent) { + return getLeafPathTree(parent, leafPathTree); + } else { + return leafPathTree; + } + }; + return columns.map((col) => getLeafPathTree(col, col.getColDef())); +} +function getGridPrimaryColumns(colModel) { + return colModel.getCols().filter((column) => { + const colDef = column.getColDef(); + return column.isPrimary() && !colDef.showRowGroup; + }); +} + +// packages/ag-grid-enterprise/src/columnToolPanel/columnModelItem.ts +import { LocalEventService } from "ag-grid-community"; +var ColumnModelItem = class { + constructor(displayName, columnOrGroup, depth, group = false, expanded) { + this.displayName = displayName; + this.depth = depth; + this.group = group; + this.localEventService = new LocalEventService(); + if (group) { + this.columnGroup = columnOrGroup; + this._expanded = expanded; + this.children = []; + } else { + this.column = columnOrGroup; + } + } + get expanded() { + return !!this._expanded; + } + set expanded(expanded) { + if (expanded === this._expanded) { + return; + } + this._expanded = expanded; + this.localEventService.dispatchEvent({ type: "expandedChanged" }); + } + addEventListener(eventType, listener) { + this.localEventService.addEventListener(eventType, listener); + } + removeEventListener(eventType, listener) { + this.localEventService.removeEventListener(eventType, listener); + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/columnMoveUtils.ts +import { isProvidedColumnGroup as isProvidedColumnGroup3 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/columnToolPanel/toolPanelColumnGroupComp.ts +import { + AgCheckboxSelector as AgCheckboxSelector3, + Component as Component21, + DragSourceType as DragSourceType3, + KeyCode as KeyCode20, + RefPlaceholder as RefPlaceholder22, + TouchListener, + _createIcon, + _createIconNoSpan as _createIconNoSpan8, + _getShouldDisplayTooltip, + _getToolPanelClassesFromColDef, + _setAriaDescribedBy as _setAriaDescribedBy2, + _setAriaExpanded as _setAriaExpanded6, + _setAriaLabel as _setAriaLabel9, + _setDisplayed as _setDisplayed12 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/columnToolPanel/toolPanelDeferredUiUtils.ts +function isDeferredMode(params) { + return !!params?.buttons?.includes("apply"); +} +function refreshDeferredToolPanelUi(beans, params) { + if (!isDeferredMode(params)) { + return; + } + const openedPanelId = beans.sideBar?.comp.openedItem(); + if (!openedPanelId) { + return; + } + const toolPanel = beans.sideBar?.comp.getToolPanelInstance(openedPanelId); + toolPanel?.refreshDeferredUi(); +} + +// packages/ag-grid-enterprise/src/columnToolPanel/modelItemUtils.ts +function selectAllChildren(beans, colTree, selectAllChecked, eventType, params) { + const cols = extractAllLeafColumns(colTree); + setAllColumns(beans, cols, selectAllChecked, eventType, params); +} +function setAllColumns(beans, cols, selectAllChecked, eventType, params) { + const updateStrategy = beans.columnStateUpdateStrategy; + const isPivotMode2 = updateStrategy.getPivotMode(isDeferredMode(params)); + if (isPivotMode2) { + setAllPivot(beans, cols, selectAllChecked, eventType, params); + } else { + setAllVisible(beans, cols, selectAllChecked, eventType, params); + } +} +function extractAllLeafColumns(allItems) { + const res = []; + const recursiveFunc = (items) => { + for (const item of items) { + if (!item.passesFilter) { + continue; + } + if (item.group) { + recursiveFunc(item.children); + } else { + res.push(item.column); + } + } + }; + recursiveFunc(allItems); + return res; +} +function setAllVisible(beans, columns, visible, eventType, params) { + const updateStrategy = beans.columnStateUpdateStrategy; + const colStateItems = []; + for (const col of columns) { + if (col.getColDef().lockVisible) { + continue; + } + if (updateStrategy.isColumnVisibleInToolPanel(isDeferredMode(params), col) !== visible) { + colStateItems.push({ + colId: col.getId(), + hide: !visible + }); + } + } + updateStrategy.applyColumnState(isDeferredMode(params), colStateItems, eventType); + refreshDeferredToolPanelUi(beans, params); +} +function setAllPivot(beans, columns, value, eventType, params) { + setAllPivotActive(beans, columns, value, eventType, params); +} +function setAllPivotActive(beans, columns, value, eventType, params) { + const updateStrategy = beans.columnStateUpdateStrategy; + const colStateItems = []; + const turnOnAction = (col) => { + if (updateStrategy.isColumnSelectedInPivotModeToolPanel(isDeferredMode(params), col)) { + return; + } + if (col.isAllowValue()) { + const aggFunc = typeof col.getAggFunc() === "string" ? col.getAggFunc() : beans.aggFuncSvc?.getDefaultAggFunc(col); + colStateItems.push({ + colId: col.getId(), + aggFunc + }); + } else if (col.isAllowRowGroup()) { + colStateItems.push({ + colId: col.getId(), + rowGroup: true + }); + } else if (col.isAllowPivot()) { + colStateItems.push({ + colId: col.getId(), + pivot: true + }); + } + }; + const turnOffAction = (col) => { + const isActive = updateStrategy.isColumnSelectedInPivotModeToolPanel(isDeferredMode(params), col); + if (isActive) { + colStateItems.push({ + colId: col.getId(), + pivot: false, + rowGroup: false, + aggFunc: null + }); + } + }; + const action = value ? turnOnAction : turnOffAction; + columns.forEach(action); + updateStrategy.applyColumnState(isDeferredMode(params), colStateItems, eventType); + refreshDeferredToolPanelUi(beans, params); +} +function updateColumns(beans, params) { + const { columns, visibleState, pivotState, eventType } = params; + const updateStrategy = beans.columnStateUpdateStrategy; + const isPivotMode2 = updateStrategy.getPivotMode(isDeferredMode(params)); + const state = columns.map((column) => { + const colId = column.getColId(); + if (isPivotMode2) { + const pivotStateForColumn = pivotState?.[colId]; + return { + colId, + pivot: pivotStateForColumn?.pivot, + rowGroup: pivotStateForColumn?.rowGroup, + aggFunc: pivotStateForColumn?.aggFunc + }; + } else { + return { + colId, + hide: !visibleState?.[colId] + }; + } + }); + updateStrategy.applyColumnState(isDeferredMode(params), state, eventType); + refreshDeferredToolPanelUi(beans, params); +} +function createPivotState(column) { + return { + pivot: column.isPivotActive(), + rowGroup: column.isRowGroupActive(), + aggFunc: column.isValueActive() ? column.getAggFunc() : void 0 + }; +} +function createPivotStateForToolPanel(column, updateStrategy, deferApply) { + if (!deferApply) { + return createPivotState(column); + } + const rowGroup = updateStrategy.getRowGroupColumns(deferApply).includes(column); + const pivot = updateStrategy.getPivotColumns(deferApply).includes(column); + const value = updateStrategy.getValueColumns(deferApply).includes(column); + return { + pivot, + rowGroup, + aggFunc: value ? updateStrategy.getColumnAggFunc(deferApply, column) : void 0 + }; +} + +// packages/ag-grid-enterprise/src/columnToolPanel/toolPanelContextMenu.ts +import { Component as Component20, _createIconNoSpan as _createIconNoSpan7, _focusInto as _focusInto5, isColumn, isProvidedColumnGroup as isProvidedColumnGroup2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/aggregation/aggDataUtils.ts +var getNodesFromMappedSet = (mappedSet, keys) => { + if (!keys) { + return []; + } + let mapPointer = mappedSet; + for (let i = 0, len = keys.length; i < len && mapPointer; ++i) { + mapPointer = mapPointer[keys[i]]; + } + return Array.isArray(mapPointer) ? mapPointer : []; +}; +var setAggData = (rowNode, newAggData, colModel) => { + const oldAggData = rowNode.aggData; + if (oldAggData === newAggData) { + return; + } + rowNode.aggData = newAggData; + if (rowNode.__localEventService) { + fireAggDataChangedEvents(rowNode, oldAggData, newAggData, colModel); + } +}; +var setAggDataWithSiblings = (rowNode, newAggData, colModel) => { + setAggData(rowNode, newAggData, colModel); + const pinnedSibling = rowNode.pinnedSibling; + if (pinnedSibling) { + setAggData(pinnedSibling, newAggData, colModel); + } + const sibling = rowNode.sibling; + if (sibling) { + setAggData(sibling, newAggData, colModel); + const siblingPinnedSibling = sibling.pinnedSibling; + if (siblingPinnedSibling) { + setAggData(siblingPinnedSibling, newAggData, colModel); + } + } +}; +var fireAggDataChangedEvents = (rowNode, oldAggData, newAggData, colModel) => { + if (!newAggData) { + if (!oldAggData) { + return; + } + const oldKeys2 = Object.keys(oldAggData); + for (let i = 0, len = oldKeys2.length; i < len; ++i) { + const colId = oldKeys2[i]; + const column = colModel.getColById(colId); + if (column) { + rowNode.dispatchCellChangedEvent(column, void 0, oldAggData[colId]); + } + } + return; + } + const newKeys = Object.keys(newAggData); + for (let i = 0, len = newKeys.length; i < len; ++i) { + const colId = newKeys[i]; + const value = newAggData[colId]; + const oldValue = oldAggData ? oldAggData[colId] : void 0; + if (value === oldValue) { + continue; + } + const column = colModel.getColById(colId); + if (column) { + rowNode.dispatchCellChangedEvent(column, value, oldValue); + } + } + if (!oldAggData) { + return; + } + const oldKeys = Object.keys(oldAggData); + for (let i = 0, len = oldKeys.length; i < len; ++i) { + const colId = oldKeys[i]; + if (colId in newAggData) { + continue; + } + const column = colModel.getColById(colId); + if (column) { + rowNode.dispatchCellChangedEvent(column, void 0, oldAggData[colId]); + } + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/rowGroupingUtils.ts +var setRowNodeGroupValue = (rowNode, colModel, colKey, newValue) => { + const column = colModel.getCol(colKey); + let groupData = rowNode._groupData; + if (!groupData) { + groupData = {}; + rowNode._groupData = groupData; + } + const columnId = column.getColId(); + const oldValue = groupData[columnId]; + if (oldValue === newValue) { + return; + } + groupData[columnId] = newValue; + rowNode.dispatchCellChangedEvent(column, newValue, oldValue); +}; +var doSetRowNodeGroup = (rowNode, beans, group) => { + if (!rowNode) { + return; + } + const oldGroup = rowNode.group; + if (oldGroup === group) { + return; + } + rowNode.group = group; + rowNode.updateHasChildren(); + if (oldGroup && !group) { + setAggData(rowNode, null, beans.colModel); + rowNode.setAllChildrenCount(null); + } + beans.selectionSvc?.updateRowSelectable(rowNode); + rowNode.dispatchRowEvent("groupChanged"); +}; +var setRowNodeGroup = (rowNode, beans, group) => { + doSetRowNodeGroup(rowNode, beans, group); + doSetRowNodeGroup(rowNode.pinnedSibling, beans, group); +}; +var isRowGroupColLocked = (column, beans) => { + const { gos, rowGroupColsSvc } = beans; + if (!rowGroupColsSvc || !column) { + return false; + } + const groupLockGroupColumns = gos.get("groupLockGroupColumns"); + if (!column.isRowGroupActive() || groupLockGroupColumns === 0) { + return false; + } + if (groupLockGroupColumns === -1) { + return true; + } + const colIndex = rowGroupColsSvc.columns.findIndex((groupCol) => groupCol.getColId() === column.getColId()); + return groupLockGroupColumns > colIndex; +}; +var getGroupingLocaleText = (localeTextFunc, key, displayName) => { + const prefix = key === "groupBy" ? "Group by" : "Un-Group by"; + const localStr = localeTextFunc(key, `${prefix} ${displayName}`, [displayName]); + if (localStr.indexOf(displayName) >= 0) { + return localStr; + } else { + return `${localStr} ${displayName}`; + } +}; + +// packages/ag-grid-enterprise/src/widgets/menuItemComponent.ts +import { AgPromise as AgPromise2, _STOP_PROPAGATION_CALLBACKS as _STOP_PROPAGATION_CALLBACKS3, _addGridCommonParams as _addGridCommonParams6, _warn as _warn9 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/misc/enterpriseDomUtils.ts +import { _getRootNode as _getRootNode2, _isBrowserFirefox, _isBrowserSafari } from "ag-grid-community"; +function _getTextSelectionRanges(beans) { + const rootNode = _getRootNode2(beans); + const selection = "getSelection" in rootNode ? rootNode.getSelection() : null; + const ranges = []; + for (let i = 0; i < (selection?.rangeCount ?? 0); i++) { + const range = selection?.getRangeAt(i); + if (range) { + ranges.push(range); + } + } + return { selection, ranges }; +} +function _preserveRangesWhile(beans, fn) { + const enableCellTextSelection = beans.gos.get("enableCellTextSelection"); + if (!enableCellTextSelection) { + return fn(); + } + if (!_isBrowserFirefox() && !_isBrowserSafari()) { + return fn(); + } + const { selection, ranges } = _getTextSelectionRanges(beans); + fn(); + selection?.removeAllRanges(); + for (const range of ranges) { + selection?.addRange(range); + } +} + +// packages/ag-grid-enterprise/src/widgets/menuItemComponent.ts +var MenuItemComponentType = { + name: "menuItem", + optionalMethods: ["setActive", "select", "setExpanded", "configureDefaults"] +}; +var MENU_ITEM_CALLBACKS = { + getMenuItemComp: (beans, def, params) => { + const compDetails = beans.userCompFactory.getCompDetails( + def, + MenuItemComponentType, + "agMenuItem", + _addGridCommonParams6(beans.gos, params), + true + ); + return compDetails?.newAgStackInstance() ?? AgPromise2.resolve(); + }, + getPostProcessPopupParams: ({ column, node }) => ({ + column, + rowNode: node + }), + preserveRangesWhile: _preserveRangesWhile, + stopPropagationCallbacks: _STOP_PROPAGATION_CALLBACKS3, + warnNoItem: (menuItemOrString) => { + _warn9(228, { menuItemOrString }); + } +}; +var MenuItemComponent = class extends AgMenuItemComponent { + constructor() { + super(MENU_ITEM_CALLBACKS); + } +}; + +// packages/ag-grid-enterprise/src/widgets/menuList.ts +var MenuList = class extends AgMenuList { + constructor(level, menuActionParams = { + column: null, + node: null, + value: null + }) { + super(level, menuActionParams, MENU_ITEM_CALLBACKS); + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/toolPanelContextMenu.ts +var ToolPanelContextMenu = class extends Component20 { + constructor(column, mouseEventOrTouch, parentEl, params = {}) { + super({ tag: "div", cls: "ag-menu" }); + this.column = column; + this.mouseEventOrTouch = mouseEventOrTouch; + this.parentEl = parentEl; + this.params = params; + this.displayName = null; + } + postConstruct() { + const { + column, + beans: { colNames } + } = this; + this.initializeProperties(column); + let displayName; + if (isColumn(column)) { + displayName = colNames.getDisplayNameForColumn(column, "columnToolPanel"); + } else { + displayName = colNames.getDisplayNameForProvidedColumnGroup(null, column, "columnToolPanel"); + } + this.displayName = displayName; + this.buildMenuItemMap(); + if (this.isActive()) { + const mouseEventOrTouch = this.mouseEventOrTouch; + if ("preventDefault" in mouseEventOrTouch) { + mouseEventOrTouch.preventDefault(); + } + const menuItemsMapped = this.getMappedMenuItems(); + if (menuItemsMapped.length === 0) { + return; + } + this.displayContextMenu(menuItemsMapped); + } + } + initializeProperties(column) { + const updateStrategy = this.beans.columnStateUpdateStrategy; + let columns; + if (isProvidedColumnGroup2(column)) { + columns = column.getLeafColumns(); + } else { + columns = [column]; + } + this.columns = columns; + const isPivotMode2 = updateStrategy.getPivotMode(isDeferredMode(this.params)); + this.allowScrollIntoView = !isPivotMode2 && columns.some(this.isColumnValidForScrollIntoView); + this.allowGrouping = columns.some((col) => col.isPrimary() && col.isAllowRowGroup()); + this.allowValues = columns.some((col) => col.isPrimary() && col.isAllowValue()); + this.allowPivoting = isPivotMode2 && columns.some((col) => col.isPrimary() && col.isAllowPivot()); + } + buildMenuItemMap() { + const localeTextFunc = this.getLocaleTextFunc(); + const { beans, displayName } = this; + const updateStrategy = this.beans.columnStateUpdateStrategy; + const menuItemMap = /* @__PURE__ */ new Map(); + this.menuItemMap = menuItemMap; + const deferMode = isDeferredMode(this.params); + const isPivotMode2 = updateStrategy.getPivotMode(deferMode); + const rowGroupColIdSet = new Set( + updateStrategy.getRowGroupColumns(deferMode).map((col) => col.getColId()) + ); + const valueColIdSet = new Set(updateStrategy.getValueColumns(deferMode).map((col) => col.getColId())); + const pivotColIdSet = new Set(updateStrategy.getPivotColumns(deferMode).map((col) => col.getColId())); + menuItemMap.set("scrollIntoView", { + allowedFunction: (col) => !col.isPinned() && !isPivotMode2 && this.isColumnValidForScrollIntoView(col), + activeFunction: () => false, + activateLabel: () => localeTextFunc("scrollColumnIntoView", `Scroll ${displayName} into View`, [displayName]), + activateFunction: () => { + const firstVisibleColumn = this.columns.find(this.isColumnValidForScrollIntoView); + if (firstVisibleColumn) { + this.beans.ctrlsSvc.getScrollFeature().ensureColumnVisible(firstVisibleColumn); + } + }, + deActivateFunction: () => { + }, + addIcon: "ensureColumnVisible" + }); + const rowGroupAllowed = (col) => col.isPrimary() && col.isAllowRowGroup() && !isRowGroupColLocked(col, beans); + menuItemMap.set("rowGroup", { + allowedFunction: rowGroupAllowed, + activeFunction: (col) => rowGroupColIdSet.has(col.getColId()), + activateLabel: () => getGroupingLocaleText(localeTextFunc, "groupBy", displayName), + deactivateLabel: () => getGroupingLocaleText(localeTextFunc, "ungroupBy", displayName), + activateFunction: () => { + const columns = this.addColumnsToList(updateStrategy.getRowGroupColumns(deferMode), rowGroupAllowed); + updateStrategy.setRowGroupColumns(deferMode, columns, "toolPanelUi"); + refreshDeferredToolPanelUi(this.beans, this.params); + }, + deActivateFunction: () => { + const columns = this.removeColumnsFromList( + updateStrategy.getRowGroupColumns(deferMode), + rowGroupAllowed + ); + updateStrategy.setRowGroupColumns(deferMode, columns, "toolPanelUi"); + refreshDeferredToolPanelUi(this.beans, this.params); + }, + addIcon: "menuAddRowGroup", + removeIcon: "menuRemoveRowGroup" + }); + const valueAllowed = (col) => col.isPrimary() && col.isAllowValue(); + menuItemMap.set("value", { + allowedFunction: valueAllowed, + activeFunction: (col) => valueColIdSet.has(col.getColId()), + activateLabel: () => localeTextFunc("addToValues", `Add ${displayName} to values`, [displayName]), + deactivateLabel: () => localeTextFunc("removeFromValues", `Remove ${displayName} from values`, [displayName]), + activateFunction: () => { + const columns = this.addColumnsToList(updateStrategy.getValueColumns(deferMode), valueAllowed); + updateStrategy.setValueColumns(deferMode, columns, "toolPanelUi"); + refreshDeferredToolPanelUi(this.beans, this.params); + }, + deActivateFunction: () => { + const columns = this.removeColumnsFromList(updateStrategy.getValueColumns(deferMode), valueAllowed); + updateStrategy.setValueColumns(deferMode, columns, "toolPanelUi"); + refreshDeferredToolPanelUi(this.beans, this.params); + }, + addIcon: "valuePanel", + removeIcon: "valuePanel" + }); + const pivotAllowed = (col) => isPivotMode2 && col.isPrimary() && col.isAllowPivot(); + menuItemMap.set("pivot", { + allowedFunction: pivotAllowed, + activeFunction: (col) => pivotColIdSet.has(col.getColId()), + activateLabel: () => localeTextFunc("addToLabels", `Add ${displayName} to labels`, [displayName]), + deactivateLabel: () => localeTextFunc("removeFromLabels", `Remove ${displayName} from labels`, [displayName]), + activateFunction: () => { + const columns = this.addColumnsToList(updateStrategy.getPivotColumns(deferMode), pivotAllowed); + updateStrategy.setPivotColumns(deferMode, columns, "toolPanelUi"); + refreshDeferredToolPanelUi(this.beans, this.params); + }, + deActivateFunction: () => { + const columns = this.removeColumnsFromList(updateStrategy.getPivotColumns(deferMode), pivotAllowed); + updateStrategy.setPivotColumns(deferMode, columns, "toolPanelUi"); + refreshDeferredToolPanelUi(this.beans, this.params); + }, + addIcon: "pivotPanel", + removeIcon: "pivotPanel" + }); + } + isColumnValidForScrollIntoView(col) { + const isVisible = col.isVisible(); + if (!isVisible) { + return false; + } + const parent = col.getParent(); + if (!parent) { + return true; + } + return parent.getDisplayedChildren()?.includes(col) ?? true; + } + addColumnsToList(columnList, predicate) { + return [...columnList].concat(this.columns.filter((col) => predicate(col) && !columnList.includes(col))); + } + removeColumnsFromList(columnList, predicate) { + return columnList.filter((col) => !predicate(col) || !this.columns.includes(col)); + } + displayContextMenu(menuItemsMapped) { + const eGui = this.getGui(); + const menuList = this.createBean(new MenuList()); + const localeTextFunc = this.getLocaleTextFunc(); + let hideFunc = () => { + }; + eGui.appendChild(menuList.getGui()); + menuList.addMenuItems(menuItemsMapped); + menuList.addManagedListeners(menuList, { + closeMenu: () => { + this.parentEl.focus(); + hideFunc(); + } + }); + const popupSvc = this.beans.popupSvc; + const addPopupRes = popupSvc.addPopup({ + modal: true, + eChild: eGui, + closeOnEsc: true, + afterGuiAttached: () => _focusInto5(menuList.getGui()), + ariaLabel: localeTextFunc("ariaLabelContextMenu", "Context Menu"), + closedCallback: (e) => { + if (e instanceof KeyboardEvent) { + this.parentEl.focus(); + } + this.destroyBean(menuList); + } + }); + if (addPopupRes) { + hideFunc = addPopupRes.hideFunc; + } + popupSvc.positionPopupUnderMouseEvent({ + type: "columnContextMenu", + mouseEvent: this.mouseEventOrTouch, + ePopup: eGui + }); + } + isActive() { + return this.allowScrollIntoView || this.allowGrouping || this.allowValues || this.allowPivoting; + } + getMappedMenuItems() { + const ret = []; + const { menuItemMap, columns, displayName, beans } = this; + for (const val of menuItemMap.values()) { + const isInactive = columns.some((col) => val.allowedFunction(col) && !val.activeFunction(col)); + const isActive = columns.some((col) => val.allowedFunction(col) && val.activeFunction(col)); + if (isInactive) { + ret.push({ + name: val.activateLabel(displayName), + icon: _createIconNoSpan7(val.addIcon, beans, null), + action: () => val.activateFunction() + }); + } + if (isActive && val.removeIcon && val.deactivateLabel) { + ret.push({ + name: val.deactivateLabel(displayName), + icon: _createIconNoSpan7(val.removeIcon, beans, null), + action: () => val.deActivateFunction?.() + }); + } + } + return ret; + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/toolPanelColumnGroupComp.ts +var ToolPanelColumnGroupElement = { + tag: "div", + cls: "ag-column-select-column-group", + children: [ + { + tag: "span", + ref: "eColumnGroupIcons", + cls: "ag-column-group-icons", + children: [ + { tag: "span", ref: "eGroupClosedIcon", cls: "ag-column-group-closed-icon" }, + { tag: "span", ref: "eGroupOpenedIcon", cls: "ag-column-group-opened-icon" } + ] + }, + { tag: "ag-checkbox", ref: "cbSelect", cls: "ag-column-select-checkbox" }, + { tag: "span", ref: "eLabel", cls: "ag-column-select-column-label" } + ] +}; +var ToolPanelColumnGroupComp = class extends Component21 { + constructor(modelItem, allowDragging, eventType, focusWrapper, params) { + super(); + this.modelItem = modelItem; + this.allowDragging = allowDragging; + this.eventType = eventType; + this.focusWrapper = focusWrapper; + this.params = params; + this.cbSelect = RefPlaceholder22; + this.eLabel = RefPlaceholder22; + this.eGroupOpenedIcon = RefPlaceholder22; + this.eGroupClosedIcon = RefPlaceholder22; + this.eColumnGroupIcons = RefPlaceholder22; + this.processingColumnStateChange = false; + const { columnGroup, depth, displayName } = modelItem; + this.columnGroup = columnGroup; + this.columnDepth = depth; + this.displayName = displayName; + } + postConstruct() { + this.setTemplate(ToolPanelColumnGroupElement, [AgCheckboxSelector3]); + const { beans, cbSelect, eLabel, displayName, columnDepth, modelItem, focusWrapper, columnGroup } = this; + const { registry, gos } = beans; + const eDragHandle = _createIconNoSpan8("columnDrag", beans); + this.eDragHandle = eDragHandle; + eDragHandle.classList.add("ag-drag-handle", "ag-column-select-column-group-drag-handle"); + const checkboxGui = cbSelect.getGui(); + const checkboxInput = cbSelect.getInputElement(); + checkboxGui.after(eDragHandle); + checkboxInput.setAttribute("tabindex", "-1"); + eLabel.textContent = displayName ?? ""; + this.setupExpandContract(); + this.addCss("ag-column-select-indent-" + columnDepth); + this.getGui().style.setProperty("--ag-indentation-level", String(columnDepth)); + this.tooltipFeature = this.createOptionalManagedBean( + registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.focusWrapper, + getLocation: () => "columnToolPanelColumnGroup", + shouldDisplayTooltip: _getShouldDisplayTooltip(gos, () => eLabel) + }) + ); + this.addManagedEventListeners({ columnPivotModeChanged: this.onColumnStateChanged.bind(this) }); + this.addManagedElementListeners(eLabel, { click: this.onLabelClicked.bind(this) }); + this.addManagedListeners(cbSelect, { fieldValueChanged: this.onCheckboxChanged.bind(this) }); + this.addManagedListeners(modelItem, { expandedChanged: this.onExpandChanged.bind(this) }); + const touchListener = new TouchListener(this.getGui(), false); + this.addManagedListeners(touchListener, { + longTap: (e) => this.onContextMenu(e.touchStart) + }); + this.addDestroyFunc(touchListener.destroy.bind(touchListener)); + this.addManagedListeners(focusWrapper, { + keydown: this.handleKeyDown.bind(this), + contextmenu: this.onContextMenu.bind(this) + }); + this.setOpenClosedIcons(); + this.setupDragging(); + this.onColumnStateChanged(); + this.addVisibilityListenersToAllChildren(); + this.refreshAriaExpanded(); + this.refreshAriaLabel(); + this.setupTooltip(); + const classes = _getToolPanelClassesFromColDef(columnGroup.getColGroupDef(), gos, null, columnGroup); + for (const c of classes) { + this.toggleCss(c, true); + } + } + getColumns() { + return this.columnGroup.getLeafColumns(); + } + setupTooltip() { + const colGroupDef = this.columnGroup.getColGroupDef(); + if (!colGroupDef) { + return; + } + const refresh = () => this.tooltipFeature?.setTooltipAndRefresh(colGroupDef.headerTooltip); + refresh(); + this.addManagedEventListeners({ newColumnsLoaded: refresh }); + } + handleKeyDown(e) { + switch (e.key) { + case KeyCode20.LEFT: + e.preventDefault(); + this.modelItem.expanded = false; + break; + case KeyCode20.RIGHT: + e.preventDefault(); + this.modelItem.expanded = true; + break; + case KeyCode20.SPACE: + e.preventDefault(); + if (this.isSelectable()) { + this.onSelectAllChanged(!this.isSelected()); + } + break; + } + } + onContextMenu(e) { + const { columnGroup, gos } = this; + if (gos.get("functionsReadOnly")) { + return; + } + const contextMenu = this.createBean(new ToolPanelContextMenu(columnGroup, e, this.focusWrapper, this.params)); + this.addDestroyFunc(() => { + if (contextMenu.isAlive()) { + this.destroyBean(contextMenu); + } + }); + } + addVisibilityListenersToAllChildren() { + const listener = this.onColumnStateChanged.bind(this); + for (const column of this.columnGroup.getLeafColumns()) { + this.addManagedListeners(column, { + visibleChanged: listener, + columnValueChanged: listener, + columnPivotChanged: listener, + columnRowGroupChanged: listener + }); + } + } + setupDragging() { + if (!this.allowDragging) { + _setDisplayed12(this.eDragHandle, false); + return; + } + const beans = this.beans; + const { gos, eventSvc, dragAndDrop } = beans; + let hideColumnOnExit = !gos.get("suppressDragLeaveHidesColumns"); + const dragSource = { + type: DragSourceType3.ToolPanel, + eElement: this.eDragHandle, + dragItemName: this.displayName, + getDefaultIconName: () => hideColumnOnExit ? "hide" : "notAllowed", + getDragItem: () => this.createDragItem(), + onDragStarted: () => { + hideColumnOnExit = !gos.get("suppressDragLeaveHidesColumns"); + eventSvc.dispatchEvent({ + type: "columnPanelItemDragStart", + column: this.columnGroup + }); + }, + onDragStopped: () => { + eventSvc.dispatchEvent({ + type: "columnPanelItemDragEnd" + }); + }, + onGridEnter: (dragItem) => { + if (hideColumnOnExit) { + updateColumns(beans, { + columns: this.columnGroup.getLeafColumns(), + visibleState: dragItem?.visibleState, + pivotState: dragItem?.pivotState, + eventType: this.eventType, + buttons: this.params.buttons + }); + } + }, + onGridExit: () => { + if (hideColumnOnExit) { + this.onChangeCommon(false); + } + } + }; + dragAndDrop.addDragSource(dragSource, true); + this.addDestroyFunc(() => dragAndDrop.removeDragSource(dragSource)); + } + createDragItem() { + const columns = this.columnGroup.getLeafColumns(); + const visibleState = {}; + const pivotState = {}; + const updateStrategy = this.beans.columnStateUpdateStrategy; + const deferApply = isDeferredMode(this.params); + for (const col of columns) { + const colId = col.getId(); + visibleState[colId] = col.isVisible(); + pivotState[colId] = createPivotStateForToolPanel(col, updateStrategy, deferApply); + } + return { + columns, + visibleState, + pivotState + }; + } + setupExpandContract() { + const { beans, eGroupClosedIcon, eGroupOpenedIcon, eColumnGroupIcons } = this; + eGroupClosedIcon.appendChild(_createIcon("columnSelectClosed", beans, null)); + eGroupOpenedIcon.appendChild(_createIcon("columnSelectOpen", beans, null)); + const listener = this.onExpandOrContractClicked.bind(this); + this.addManagedElementListeners(eGroupClosedIcon, { click: listener }); + this.addManagedElementListeners(eGroupOpenedIcon, { click: listener }); + const touchListener = new TouchListener(eColumnGroupIcons, true); + this.addManagedListeners(touchListener, { tap: listener }); + this.addDestroyFunc(touchListener.destroy.bind(touchListener)); + } + onLabelClicked() { + const nextState = !this.cbSelect.getValue(); + this.onChangeCommon(nextState); + } + onCheckboxChanged(event) { + this.onChangeCommon(event.selected); + } + getVisibleLeafColumns() { + const childColumns = []; + const extractCols = (children) => { + for (const child of children) { + if (child.passesFilter) { + if (child.group) { + extractCols(child.children); + } else { + childColumns.push(child.column); + } + } + } + }; + extractCols(this.modelItem.children); + return childColumns; + } + onChangeCommon(nextState) { + this.refreshAriaLabel(); + if (this.processingColumnStateChange) { + return; + } + selectAllChildren(this.beans, this.modelItem.children, nextState, this.eventType, this.params); + } + refreshAriaLabel() { + const { cbSelect, focusWrapper, displayName } = this; + const translate = this.getLocaleTextFunc(); + const columnLabel = translate("ariaColumnGroup", "Column Group"); + const checkboxValue = cbSelect.getValue(); + const state = checkboxValue === void 0 ? translate("ariaIndeterminate", "indeterminate") : checkboxValue ? translate("ariaVisible", "visible") : translate("ariaHidden", "hidden"); + const visibilityLabel = translate("ariaToggleVisibility", "Press SPACE to toggle visibility"); + _setAriaLabel9(focusWrapper, `${displayName} ${columnLabel}`); + cbSelect.setInputAriaLabel(`${visibilityLabel} (${state})`); + _setAriaDescribedBy2(focusWrapper, cbSelect.getInputElement().id); + } + onColumnStateChanged() { + const selectedValue = this.workOutSelectedValue(); + const readOnlyValue = this.workOutReadOnlyValue(); + this.processingColumnStateChange = true; + const cbSelect = this.cbSelect; + cbSelect.setValue(selectedValue); + cbSelect.setReadOnly(readOnlyValue); + this.toggleCss("ag-column-select-column-group-readonly", readOnlyValue); + this.processingColumnStateChange = false; + } + workOutSelectedValue() { + const updateStrategy = this.beans.columnStateUpdateStrategy; + const pivotMode = updateStrategy.getPivotMode(isDeferredMode(this.params)); + const visibleLeafColumns = this.getVisibleLeafColumns(); + let checkedCount = 0; + let uncheckedCount = 0; + for (const column of visibleLeafColumns) { + if (pivotMode || !column.getColDef().lockVisible) { + if (this.isColumnChecked(column)) { + checkedCount++; + } else { + uncheckedCount++; + } + } + } + if (checkedCount > 0 && uncheckedCount > 0) { + return void 0; + } + return checkedCount > 0; + } + workOutReadOnlyValue() { + const pivotMode = this.beans.columnStateUpdateStrategy.getPivotMode(isDeferredMode(this.params)); + let colsThatCanAction = 0; + for (const col of this.columnGroup.getLeafColumns()) { + if (pivotMode) { + if (col.isAnyFunctionAllowed()) { + colsThatCanAction++; + } + } else if (!col.getColDef().lockVisible) { + colsThatCanAction++; + } + } + return colsThatCanAction === 0; + } + isColumnChecked(column) { + const updateStrategy = this.beans.columnStateUpdateStrategy; + if (updateStrategy.getPivotMode(isDeferredMode(this.params))) { + return updateStrategy.isColumnSelectedInPivotModeToolPanel(isDeferredMode(this.params), column); + } + return updateStrategy.isColumnVisibleInToolPanel(isDeferredMode(this.params), column); + } + onExpandOrContractClicked() { + const modelItem = this.modelItem; + const oldState = modelItem.expanded; + modelItem.expanded = !oldState; + } + onExpandChanged() { + this.setOpenClosedIcons(); + this.refreshAriaExpanded(); + } + setOpenClosedIcons() { + const folderOpen = this.modelItem.expanded; + _setDisplayed12(this.eGroupClosedIcon, !folderOpen); + _setDisplayed12(this.eGroupOpenedIcon, folderOpen); + } + refreshAriaExpanded() { + _setAriaExpanded6(this.focusWrapper, this.modelItem.expanded); + } + getDisplayName() { + return this.displayName; + } + onSelectAllChanged(value) { + const cbSelect = this.cbSelect; + const cbValue = cbSelect.getValue(); + const readOnly = cbSelect.isReadOnly(); + if (!readOnly && (value && !cbValue || !value && cbValue)) { + cbSelect.toggle(); + } + } + isSelected() { + return this.cbSelect.getValue(); + } + isSelectable() { + return !this.cbSelect.isReadOnly(); + } + setSelected(selected) { + this.cbSelect.setValue(selected, true); + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/columnMoveUtils.ts +var getCurrentColumnsBeingMoved = (column) => { + if (isProvidedColumnGroup3(column)) { + return column.getLeafColumns(); + } + return column ? [column] : []; +}; +var getMoveTargetIndex = (currentColumns, lastHoveredColumn, isBefore, allColumns) => { + if (!lastHoveredColumn || !currentColumns) { + return null; + } + const targetColumnIndex = allColumns.indexOf(lastHoveredColumn); + const adjustedTarget = isBefore ? targetColumnIndex : targetColumnIndex + 1; + const diff = getMoveDiff(allColumns, currentColumns, adjustedTarget); + return adjustedTarget - diff; +}; +var getMoveDiff = (allColumns, currentColumns, end) => { + if (!currentColumns) { + return 0; + } + const targetColumn = currentColumns[0]; + const span = currentColumns.length; + const currentIndex = allColumns.indexOf(targetColumn); + if (currentIndex < end) { + return span; + } + return 0; +}; +var isMoveBlocked = (gos, beans, currentColumns, params) => { + const deferMode = isDeferredMode(params); + const preventMoving = gos.get("suppressMovableColumns") || beans.columnStateUpdateStrategy.getPivotMode(deferMode); + if (preventMoving) { + return true; + } + const hasNotMovable = currentColumns.find(({ colDef }) => !!colDef.suppressMovable || !!colDef.lockPosition); + return !!hasNotMovable; +}; +var moveItem = (beans, currentColumns, lastHoveredListItem, params) => { + if (!lastHoveredListItem) { + return; + } + const { component } = lastHoveredListItem; + let lastHoveredColumn = null; + let isBefore = lastHoveredListItem.position === "top"; + if (component instanceof ToolPanelColumnGroupComp) { + const columns = component.getColumns(); + lastHoveredColumn = columns[0]; + isBefore = true; + } else if (component) { + lastHoveredColumn = component.column; + } + if (!lastHoveredColumn) { + return; + } + const deferMode = isDeferredMode(params); + const allColumns = deferMode ? beans.columnStateUpdateStrategy.getPrimaryColumns(deferMode) : beans.colModel.getCols(); + const targetIndex = getMoveTargetIndex(currentColumns, lastHoveredColumn, isBefore, allColumns); + if (targetIndex != null) { + beans.columnStateUpdateStrategy.moveColumns(deferMode, currentColumns, targetIndex, "toolPanelUi"); + refreshDeferredToolPanelUi(beans, params); + } +}; +var getCurrentDragValue = (listItemDragStartEvent) => { + return listItemDragStartEvent.column; +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/toolPanelColumnComp.ts +import { + AgCheckboxSelector as AgCheckboxSelector4, + Component as Component22, + DragSourceType as DragSourceType4, + KeyCode as KeyCode21, + RefPlaceholder as RefPlaceholder23, + TouchListener as TouchListener2, + _createIconNoSpan as _createIconNoSpan9, + _getShouldDisplayTooltip as _getShouldDisplayTooltip2, + _getToolPanelClassesFromColDef as _getToolPanelClassesFromColDef2, + _setAriaDescribedBy as _setAriaDescribedBy3, + _setAriaLabel as _setAriaLabel10, + _setDisplayed as _setDisplayed13, + _warn as _warn10 +} from "ag-grid-community"; +var ToolPanelColumnElement = { + tag: "div", + cls: "ag-column-select-column", + children: [ + { tag: "ag-checkbox", ref: "cbSelect", cls: "ag-column-select-checkbox" }, + { tag: "span", ref: "eLabel", cls: "ag-column-select-column-label" } + ] +}; +var ToolPanelColumnComp = class extends Component22 { + constructor(modelItem, allowDragging, groupsExist, focusWrapper, params) { + super(); + this.modelItem = modelItem; + this.allowDragging = allowDragging; + this.groupsExist = groupsExist; + this.focusWrapper = focusWrapper; + this.params = params; + this.eLabel = RefPlaceholder23; + this.cbSelect = RefPlaceholder23; + this.processingColumnStateChange = false; + const { column, depth, displayName } = modelItem; + this.column = column; + this.columnDepth = depth; + this.displayName = displayName; + } + postConstruct() { + this.setTemplate(ToolPanelColumnElement, [AgCheckboxSelector4]); + const { + beans, + cbSelect, + displayName, + eLabel, + columnDepth: indent, + groupsExist, + column, + gos, + focusWrapper + } = this; + const eDragHandle = _createIconNoSpan9("columnDrag", beans); + this.eDragHandle = eDragHandle; + eDragHandle.classList.add("ag-drag-handle", "ag-column-select-column-drag-handle"); + const checkboxGui = cbSelect.getGui(); + const checkboxInput = cbSelect.getInputElement(); + checkboxGui.after(eDragHandle); + checkboxInput.setAttribute("tabindex", "-1"); + eLabel.textContent = displayName; + if (groupsExist) { + this.addCss("ag-column-select-add-group-indent"); + } + this.addCss(`ag-column-select-indent-${indent}`); + this.getGui().style.setProperty("--ag-indentation-level", String(indent)); + this.tooltipFeature = this.createOptionalManagedBean( + beans.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.focusWrapper, + getLocation: () => "columnToolPanelColumn", + shouldDisplayTooltip: _getShouldDisplayTooltip2(gos, () => eLabel), + getAdditionalParams: () => ({ + colDef: column.getColDef() + }) + }) + ); + this.setupDragging(); + const onColStateChanged = this.onColumnStateChanged.bind(this); + this.addManagedEventListeners({ columnPivotModeChanged: onColStateChanged }); + this.addManagedListeners(column, { + columnValueChanged: onColStateChanged, + columnPivotChanged: onColStateChanged, + columnRowGroupChanged: onColStateChanged, + visibleChanged: onColStateChanged + }); + this.addManagedListeners(focusWrapper, { + keydown: this.handleKeyDown.bind(this), + contextmenu: this.onContextMenu.bind(this) + }); + const touchListener = new TouchListener2(focusWrapper); + this.addManagedListeners(touchListener, { + longTap: (e) => this.onContextMenu(e.touchStart) + }); + this.addDestroyFunc(touchListener.destroy.bind(touchListener)); + this.addManagedPropertyListener("functionsReadOnly", this.onColumnStateChanged.bind(this)); + this.addManagedListeners(cbSelect, { fieldValueChanged: this.onCheckboxChanged.bind(this) }); + this.addManagedElementListeners(eLabel, { click: this.onLabelClicked.bind(this) }); + this.onColumnStateChanged(); + this.refreshAriaLabel(); + this.setupTooltip(); + const classes = _getToolPanelClassesFromColDef2(column.getColDef(), gos, column, null); + for (const c of classes) { + this.toggleCss(c, true); + } + } + getColumn() { + return this.column; + } + setupTooltip() { + const refresh = () => this.tooltipFeature?.setTooltipAndRefresh(this.column.getColDef().headerTooltip); + refresh(); + this.addManagedEventListeners({ newColumnsLoaded: refresh }); + } + onContextMenu(e) { + const { column, gos } = this; + if (gos.get("functionsReadOnly")) { + return; + } + const contextMenu = this.createBean(new ToolPanelContextMenu(column, e, this.focusWrapper, this.params)); + this.addDestroyFunc(() => { + if (contextMenu.isAlive()) { + this.destroyBean(contextMenu); + } + }); + } + handleKeyDown(e) { + if (e.key === KeyCode21.SPACE) { + e.preventDefault(); + if (this.isSelectable()) { + this.onSelectAllChanged(!this.isSelected()); + } + } + } + onLabelClicked() { + if (this.gos.get("functionsReadOnly")) { + return; + } + const nextState = !this.cbSelect.getValue(); + this.onChangeCommon(nextState); + } + onCheckboxChanged(event) { + this.onChangeCommon(event.selected); + } + onChangeCommon(nextState) { + if (this.cbSelect.isReadOnly()) { + return; + } + this.refreshAriaLabel(); + if (this.processingColumnStateChange) { + return; + } + setAllColumns(this.beans, [this.column], nextState, "toolPanelUi", this.params); + } + refreshAriaLabel() { + const { cbSelect, focusWrapper, displayName } = this; + const translate = this.getLocaleTextFunc(); + const columnLabel = translate("ariaColumn", "Column"); + const state = cbSelect.getValue() ? translate("ariaVisible", "visible") : translate("ariaHidden", "hidden"); + const visibilityLabel = translate("ariaToggleVisibility", "Press SPACE to toggle visibility"); + _setAriaLabel10(focusWrapper, `${displayName} ${columnLabel}`); + this.cbSelect.setInputAriaLabel(`${visibilityLabel} (${state})`); + _setAriaDescribedBy3(focusWrapper, cbSelect.getInputElement().id); + } + setupDragging() { + const eDragHandle = this.eDragHandle; + if (!this.allowDragging) { + _setDisplayed13(eDragHandle, false); + return; + } + const beans = this.beans; + const { gos, eventSvc, dragAndDrop } = beans; + if (isDeferredMode(this.params)) { + eDragHandle.setAttribute("data-column-tool-panel-deferred", ""); + } + let hideColumnOnExit = !gos.get("suppressDragLeaveHidesColumns"); + const dragSource = { + type: DragSourceType4.ToolPanel, + eElement: eDragHandle, + dragItemName: this.displayName, + getDefaultIconName: () => hideColumnOnExit && !isDeferredMode(this.params) ? "hide" : "notAllowed", + getDragItem: () => this.createDragItem(), + onDragStarted: () => { + hideColumnOnExit = !gos.get("suppressDragLeaveHidesColumns"); + eventSvc.dispatchEvent({ + type: "columnPanelItemDragStart", + column: this.column + }); + }, + onDragStopped: () => { + eventSvc.dispatchEvent({ + type: "columnPanelItemDragEnd" + }); + }, + onGridEnter: (dragItem) => { + if (hideColumnOnExit && !isDeferredMode(this.params)) { + updateColumns(beans, { + columns: [this.column], + visibleState: dragItem?.visibleState, + pivotState: dragItem?.pivotState, + eventType: "toolPanelUi", + buttons: this.params.buttons + }); + } + }, + onGridExit: () => { + if (hideColumnOnExit && !isDeferredMode(this.params)) { + this.onChangeCommon(false); + } + } + }; + dragAndDrop.addDragSource(dragSource, true); + this.addDestroyFunc(() => dragAndDrop.removeDragSource(dragSource)); + } + createDragItem() { + const colId = this.column.getColId(); + const visibleState = { [colId]: this.column.isVisible() }; + const updateStrategy = this.beans.columnStateUpdateStrategy; + const pivotState = { + [colId]: createPivotStateForToolPanel(this.column, updateStrategy, isDeferredMode(this.params)) + }; + return { + columns: [this.column], + visibleState, + pivotState + }; + } + onColumnStateChanged() { + this.processingColumnStateChange = true; + const updateStrategy = this.beans.columnStateUpdateStrategy; + const isPivotMode2 = updateStrategy.getPivotMode(isDeferredMode(this.params)); + if (isPivotMode2) { + const anyFunctionActive = updateStrategy.isColumnSelectedInPivotModeToolPanel( + isDeferredMode(this.params), + this.column + ); + this.cbSelect.setValue(anyFunctionActive); + } else { + this.cbSelect.setValue(updateStrategy.isColumnVisibleInToolPanel(isDeferredMode(this.params), this.column)); + } + let canBeToggled = true; + let canBeDragged = true; + if (isPivotMode2) { + const functionsReadOnly = this.gos.get("functionsReadOnly"); + const noFunctionsAllowed = !this.column.isAnyFunctionAllowed(); + canBeToggled = !functionsReadOnly && !noFunctionsAllowed; + canBeDragged = canBeToggled; + } else { + const { enableRowGroup, enableValue, lockPosition, suppressMovable, lockVisible } = this.column.getColDef(); + const forceDraggable = !!enableRowGroup || !!enableValue; + const disableDraggable = !!lockPosition || !!suppressMovable; + canBeToggled = !lockVisible; + canBeDragged = forceDraggable || !disableDraggable; + } + this.cbSelect.setReadOnly(!canBeToggled); + this.eDragHandle.classList.toggle("ag-column-select-column-readonly", !canBeDragged); + this.toggleCss("ag-column-select-column-readonly", !canBeDragged && !canBeToggled); + this.cbSelect.setPassive(false); + this.processingColumnStateChange = false; + } + getDisplayName() { + return this.displayName; + } + onSelectAllChanged(value) { + const cbSelect = this.cbSelect; + if (value !== cbSelect.getValue()) { + if (!cbSelect.isReadOnly()) { + cbSelect.toggle(); + } + } + } + isSelected() { + return this.cbSelect.getValue(); + } + isSelectable() { + return !this.cbSelect.isReadOnly(); + } + isExpandable() { + return false; + } + setExpanded(_value) { + _warn10(158); + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/agPrimaryColsList.ts +var UIColumnModel = class { + constructor(items) { + this.items = items; + } + getRowCount() { + return this.items.length; + } + getRow(index) { + return this.items[index]; + } +}; +var PRIMARY_COLS_LIST_PANEL_CLASS = "ag-column-select-list"; +var AgPrimaryColsList = class extends Component23 { + constructor() { + super({ tag: "div", cls: PRIMARY_COLS_LIST_PANEL_CLASS, role: "presentation" }); + this.destroyColumnItemFuncs = []; + this.hasLoadedInitialState = false; + this.isInitialState = false; + this.skipRefocus = false; + } + wireBeans(beans) { + this.colModel = beans.colModel; + } + destroy() { + this.destroyColumnTree(); + super.destroy(); + } + destroyColumnTree() { + this.allColsTree = []; + for (const f of this.destroyColumnItemFuncs) { + f(); + } + this.destroyColumnItemFuncs = []; + } + init(params, allowDragging, eventType) { + this.params = params; + const { suppressSyncLayoutWithGrid, contractColumnSelection, suppressColumnMove } = params; + this.allowDragging = allowDragging; + this.eventType = eventType; + if (!suppressSyncLayoutWithGrid) { + this.addManagedEventListeners({ columnMoved: this.onColumnsChanged.bind(this) }); + } + this.addManagedEventListeners({ + newColumnsLoaded: this.onColumnsChanged.bind(this) + }); + const listener = this.fireSelectionChangedEvent.bind(this); + this.addManagedEventListeners({ + columnPivotChanged: listener, + columnPivotModeChanged: listener, + columnRowGroupChanged: listener, + columnValueChanged: listener, + columnVisible: listener, + newColumnsLoaded: listener + }); + this.expandGroupsByDefault = !contractColumnSelection; + const isPreventMove = suppressColumnMove || suppressSyncLayoutWithGrid; + const virtualList = this.createManagedBean( + new VirtualList({ + cssIdentifier: "column-select", + ariaRole: "tree", + moveItemCallback: (item, isUp) => { + if (isPreventMove) { + return; + } + this.moveItems(item, isUp); + } + }) + ); + this.virtualList = virtualList; + this.appendChild(virtualList.getGui()); + virtualList.setComponentCreator((item, listItemElement) => { + _setAriaLevel3(listItemElement, item.depth + 1); + return this.createComponentFromItem(item, listItemElement); + }); + if (this.colModel.ready) { + this.onColumnsChanged(); + } + if (isPreventMove) { + return; + } + this.createItemDragFeature(); + } + createItemDragFeature() { + const { gos, beans, virtualList } = this; + this.createManagedBean( + new VirtualListDragFeature(this, virtualList, { + dragSourceType: DragSourceType5.ToolPanel, + addListeners: (parent, listItemDragStart, listItemDragEnd) => { + parent.addManagedEventListeners({ + columnPanelItemDragStart: listItemDragStart, + columnPanelItemDragEnd: listItemDragEnd + }); + }, + getCurrentDragValue: (listItemDragStartEvent) => getCurrentDragValue(listItemDragStartEvent), + isMoveBlocked: (currentDragValue) => isMoveBlocked(gos, beans, getCurrentColumnsBeingMoved(currentDragValue), this.params), + getNumRows: (comp) => comp.getDisplayedColsList().length, + moveItem: (currentDragValue, lastHoveredListItem) => moveItem(beans, getCurrentColumnsBeingMoved(currentDragValue), lastHoveredListItem, this.params) + }) + ); + } + moveItems(item, isUp) { + const { gos, beans } = this; + const { modelItem } = item; + const { group, columnGroup, column, expanded } = modelItem; + const currentColumns = getCurrentColumnsBeingMoved(group ? columnGroup : column); + if (isMoveBlocked(gos, beans, currentColumns, this.params)) { + return; + } + const currentIndex = this.displayedColsList.indexOf(modelItem); + const diff = isUp ? -1 : 1; + let movePadding = 0; + if (isUp) { + const children = item.columnDepth > 0 ? column.getParent()?.getChildren() : null; + if (children?.length && column === children[0]) { + movePadding = -1; + } + } else if (group) { + movePadding = expanded ? modelItem.children.length : 0; + } + const nextItem = Math.min(Math.max(currentIndex + movePadding + diff, 0), this.displayedColsList.length - 1); + this.skipRefocus = true; + moveItem( + beans, + currentColumns, + { + rowIndex: nextItem, + position: isUp ? "top" : "bottom", + component: this.virtualList.getComponentAt(nextItem) + }, + this.params + ); + this.focusRowIfAlive(nextItem - movePadding).then(() => { + this.skipRefocus = false; + }); + } + createComponentFromItem(item, listItemElement) { + const allowDragging = this.allowDragging; + if (item.group) { + const renderedGroup = new ToolPanelColumnGroupComp( + item, + allowDragging, + this.eventType, + listItemElement, + this.params + ); + this.createBean(renderedGroup); + return renderedGroup; + } + const columnComp = new ToolPanelColumnComp(item, allowDragging, this.groupsExist, listItemElement, this.params); + this.createBean(columnComp); + return columnComp; + } + onColumnsChanged() { + const params = this.params; + if (!this.hasLoadedInitialState) { + this.hasLoadedInitialState = true; + this.isInitialState = !!params.initialState; + } + const expandedStates = this.getExpandedStates(); + const pivotModeActive = this.colModel.isPivotMode(); + const deferApply = isDeferredMode(params); + const hasDeferredColumnOrder = deferApply && this.beans.columnStateUpdateStrategy.hasDeferredColumnOrder(deferApply); + const shouldSyncColumnLayoutWithGrid = (!params.suppressSyncLayoutWithGrid || deferApply) && !pivotModeActive || hasDeferredColumnOrder; + if (shouldSyncColumnLayoutWithGrid) { + this.buildTreeFromWhatGridIsDisplaying(); + } else { + this.buildTreeFromProvidedColumnDefs(); + } + this.setExpandedStates(expandedStates); + this.markFilteredColumns(); + this.flattenAndFilterModel(); + this.isInitialState = false; + } + getDisplayedColsList() { + return this.displayedColsList; + } + getExpandedStates() { + const res = {}; + if (this.isInitialState) { + const { expandedGroupIds } = this.params.initialState; + for (const id of expandedGroupIds) { + res[id] = true; + } + return res; + } + if (!this.allColsTree) { + return {}; + } + this.forEachItem((item) => { + if (!item.group) { + return; + } + const colGroup = item.columnGroup; + if (colGroup) { + res[colGroup.getId()] = item.expanded; + } + }); + return res; + } + setExpandedStates(states) { + if (!this.allColsTree) { + return; + } + const { isInitialState } = this; + this.forEachItem((item) => { + if (!item.group) { + return; + } + const colGroup = item.columnGroup; + if (colGroup) { + const expanded = states[colGroup.getId()]; + const groupExistedLastTime = expanded != null; + if (groupExistedLastTime || isInitialState) { + item.expanded = !!expanded; + } + } + }); + } + buildTreeFromWhatGridIsDisplaying() { + const deferApply = isDeferredMode(this.params); + if (deferApply && this.beans.columnStateUpdateStrategy.hasDeferredColumnOrder(deferApply)) { + const columnOrder = this.beans.columnStateUpdateStrategy.getPrimaryColumns(deferApply); + if (columnOrder.length > 0) { + syncLayoutWithColumns(columnOrder, this.setColumnLayout.bind(this)); + return; + } + } + if (this.params.suppressSyncLayoutWithGrid) { + this.buildTreeFromProvidedColumnDefs(); + return; + } + syncLayoutWithGrid(this.colModel, this.setColumnLayout.bind(this)); + } + setColumnLayout(colDefs) { + const columnTree = toolPanelCreateColumnTree(this.colModel, colDefs); + this.buildListModel(columnTree); + this.groupsExist = colDefs.some((colDef) => { + return colDef && typeof colDef.children !== "undefined"; + }); + this.markFilteredColumns(); + this.flattenAndFilterModel(); + } + buildTreeFromProvidedColumnDefs() { + const colModel = this.colModel; + this.buildListModel(colModel.getColDefColTree()); + this.groupsExist = !!colModel.colDefCols?.treeDepth; + } + buildListModel(columnTree) { + const columnExpandedListener = this.onColumnExpanded.bind(this); + const addListeners = (item) => { + item.addEventListener("expandedChanged", columnExpandedListener); + const removeFunc = item.removeEventListener.bind(item, "expandedChanged", columnExpandedListener); + this.destroyColumnItemFuncs.push(removeFunc); + }; + const colNames = this.beans.colNames; + const recursivelyBuild = (tree, depth, parentList) => { + for (const child of tree) { + if (isProvidedColumnGroup4(child)) { + createGroupItem(child, depth, parentList); + } else { + createColumnItem(child, depth, parentList); + } + } + }; + const createGroupItem = (columnGroup, depth, parentList) => { + const columnGroupDef = columnGroup.getColGroupDef(); + const skipThisGroup = columnGroupDef?.suppressColumnsToolPanel; + if (skipThisGroup) { + return; + } + if (columnGroup.isPadding()) { + recursivelyBuild(columnGroup.getChildren(), depth, parentList); + return; + } + const displayName = colNames.getDisplayNameForProvidedColumnGroup(null, columnGroup, "columnToolPanel"); + const item = new ColumnModelItem( + displayName, + columnGroup, + depth, + true, + this.expandGroupsByDefault + ); + parentList.push(item); + addListeners(item); + recursivelyBuild(columnGroup.getChildren(), depth + 1, item.children); + }; + const createColumnItem = (column, depth, parentList) => { + const skipThisColumn = column.getColDef()?.suppressColumnsToolPanel; + if (skipThisColumn) { + return; + } + const displayName = colNames.getDisplayNameForColumn(column, "columnToolPanel"); + parentList.push(new ColumnModelItem(displayName, column, depth)); + }; + this.destroyColumnTree(); + recursivelyBuild(columnTree, 0, this.allColsTree); + } + onColumnExpanded() { + this.flattenAndFilterModel(); + } + flattenAndFilterModel() { + this.displayedColsList = []; + const recursiveFunc = (item) => { + if (!item.passesFilter) { + return; + } + this.displayedColsList.push(item); + if (item.group && item.expanded) { + item.children.forEach(recursiveFunc); + } + }; + const virtualList = this.virtualList; + this.allColsTree.forEach(recursiveFunc); + virtualList.setModel(new UIColumnModel(this.displayedColsList)); + let focusedRow = null; + if (!this.skipRefocus) { + focusedRow = virtualList.getLastFocusedRow(); + } + virtualList.refresh(); + if (focusedRow != null) { + this.focusRowIfAlive(focusedRow); + } + this.notifyListeners(); + this.refreshAriaLabel(); + } + refreshAriaLabel() { + const translate = this.getLocaleTextFunc(); + const columnListName = translate("ariaColumnPanelList", "Column List"); + const localeColumns = translate("columns", "Columns"); + const items = this.displayedColsList.length; + _setAriaLabel11(this.virtualList.getAriaElement(), `${columnListName} ${items} ${localeColumns}`); + } + focusRowIfAlive(rowIndex) { + if (rowIndex === -1) { + return Promise.resolve(); + } + return new Promise((res) => { + window.setTimeout(() => { + if (this.isAlive()) { + this.virtualList.focusRow(rowIndex); + } + res(); + }, 0); + }); + } + forEachItem(callback) { + const recursiveFunc = (items) => { + for (const item of items) { + callback(item); + if (item.group) { + recursiveFunc(item.children); + } + } + }; + const allColsTree = this.allColsTree; + if (!allColsTree) { + return; + } + recursiveFunc(allColsTree); + } + doSetExpandedAll(value) { + this.forEachItem((item) => { + if (item.group) { + item.expanded = value; + } + }); + } + setGroupsExpanded(expand, groupIds) { + if (!groupIds) { + this.doSetExpandedAll(expand); + return; + } + const expandedGroupIds = []; + this.forEachItem((item) => { + if (!item.group) { + return; + } + const groupId = item.columnGroup.getId(); + if (groupIds.indexOf(groupId) >= 0) { + item.expanded = expand; + expandedGroupIds.push(groupId); + } + }); + const unrecognisedGroupIds = groupIds.filter((groupId) => !expandedGroupIds.includes(groupId)); + if (unrecognisedGroupIds.length > 0) { + _warn11(157, { unrecognisedGroupIds }); + } + } + getExpandState() { + let expandedCount = 0; + let notExpandedCount = 0; + this.forEachItem((item) => { + if (!item.group) { + return; + } + if (item.expanded) { + expandedCount++; + } else { + notExpandedCount++; + } + }); + if (expandedCount > 0 && notExpandedCount > 0) { + return 2 /* INDETERMINATE */; + } + if (notExpandedCount > 0) { + return 1 /* COLLAPSED */; + } + return 0 /* EXPANDED */; + } + doSetSelectedAll(selectAllChecked) { + selectAllChildren(this.beans, this.allColsTree, selectAllChecked, this.eventType, this.params); + this.syncVisibleSelectionState(); + this.fireSelectionChangedEvent(); + } + syncVisibleSelectionState() { + for (let i = 0; i < this.displayedColsList.length; i++) { + const comp = this.virtualList.getComponentAt(i); + comp?.onColumnStateChanged?.(); + } + } + getSelectionState() { + let checkedCount = 0; + let uncheckedCount = 0; + const updateStrategy = this.beans.columnStateUpdateStrategy; + const pivotMode = updateStrategy.getPivotMode(isDeferredMode(this.params)); + this.forEachItem((item) => { + if (item.group) { + return; + } + if (!item.passesFilter) { + return; + } + const column = item.column; + const colDef = column.getColDef(); + let checked; + if (pivotMode) { + const noPivotModeOptionsAllowed = !column.isAllowPivot() && !column.isAllowRowGroup() && !column.isAllowValue(); + if (noPivotModeOptionsAllowed) { + return; + } + checked = updateStrategy.isColumnSelectedInPivotModeToolPanel(isDeferredMode(this.params), column) ?? false; + } else { + if (colDef.lockVisible) { + return; + } + checked = updateStrategy.isColumnVisibleInToolPanel(isDeferredMode(this.params), column) ?? false; + } + if (checked) { + checkedCount++; + } else { + uncheckedCount++; + } + }); + if (checkedCount > 0 && uncheckedCount > 0) { + return void 0; + } + return !(checkedCount === 0 || uncheckedCount > 0); + } + setFilterText(filterText) { + this.filterText = _exists12(filterText) ? filterText.toLowerCase() : null; + this.markFilteredColumns(); + this.flattenAndFilterModel(); + } + markFilteredColumns() { + const passesFilter = (item) => { + if (!_exists12(this.filterText)) { + return true; + } + const displayName = item.displayName; + return displayName == null || displayName.toLowerCase().indexOf(this.filterText) !== -1; + }; + const recursivelyCheckFilter = (item, parentPasses) => { + let atLeastOneChildPassed = false; + if (item.group) { + const groupPasses = passesFilter(item); + for (const child of item.children) { + const childPasses = recursivelyCheckFilter(child, groupPasses || parentPasses); + if (childPasses) { + atLeastOneChildPassed = childPasses; + } + } + } + const filterPasses = parentPasses || atLeastOneChildPassed ? true : passesFilter(item); + item.passesFilter = filterPasses; + return filterPasses; + }; + for (const item of this.allColsTree) { + recursivelyCheckFilter(item, false); + } + } + notifyListeners() { + this.fireGroupExpandedEvent(); + this.fireSelectionChangedEvent(); + } + fireGroupExpandedEvent() { + const expandState = this.getExpandState(); + this.dispatchLocalEvent({ type: "groupExpanded", state: expandState }); + } + fireSelectionChangedEvent() { + if (!this.allColsTree) { + return; + } + const selectionState = this.getSelectionState(); + this.dispatchLocalEvent({ type: "selectionChanged", state: selectionState }); + } + getExpandedGroups() { + const expandedGroupIds = []; + if (!this.allColsTree) { + return expandedGroupIds; + } + this.forEachItem((item) => { + if (item.group && item.expanded) { + expandedGroupIds.push(item.columnGroup.getId()); + } + }); + return expandedGroupIds; + } +}; +var AgPrimaryColsListSelector = { + selector: "AG-PRIMARY-COLS-LIST", + component: AgPrimaryColsList +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/agPrimaryCols.ts +var AgPrimaryColsElement = { + tag: "div", + cls: "ag-column-select", + children: [ + { tag: "ag-primary-cols-header", ref: "primaryColsHeaderPanel" }, + { tag: "ag-primary-cols-list", ref: "primaryColsListPanel" } + ] +}; +var AgPrimaryCols = class extends Component24 { + constructor() { + super(AgPrimaryColsElement, [AgPrimaryColsHeaderSelector, AgPrimaryColsListSelector]); + this.primaryColsHeaderPanel = RefPlaceholder24; + this.primaryColsListPanel = RefPlaceholder24; + this.registerCSS(agPrimaryCols_default); + } + // we allow dragging in the toolPanel, but not when this component appears in the column menu + init(allowDragging, params, eventType) { + const { primaryColsHeaderPanel, primaryColsListPanel } = this; + primaryColsHeaderPanel.init(params); + const hideFilter = params.suppressColumnFilter; + const hideSelect = params.suppressColumnSelectAll; + const hideExpand = params.suppressColumnExpandAll; + if (hideExpand && hideFilter && hideSelect) { + primaryColsHeaderPanel.setDisplayed(false); + } + this.addManagedListeners(primaryColsListPanel, { + groupExpanded: (event) => { + primaryColsHeaderPanel.setExpandState(event.state); + params.onStateUpdated(); + }, + selectionChanged: (event) => primaryColsHeaderPanel.setSelectionState(event.state) + }); + primaryColsListPanel.init(params, allowDragging, eventType); + this.addManagedListeners(primaryColsHeaderPanel, { + expandAll: primaryColsListPanel.doSetExpandedAll.bind(primaryColsListPanel, true), + collapseAll: primaryColsListPanel.doSetExpandedAll.bind(primaryColsListPanel, false), + selectAll: primaryColsListPanel.doSetSelectedAll.bind(primaryColsListPanel, true), + unselectAll: primaryColsListPanel.doSetSelectedAll.bind(primaryColsListPanel, false), + filterChanged: (event) => primaryColsListPanel.setFilterText(event.filterText) + }); + this.positionableFeature = this.createManagedBean(new PositionableFeature(this.getGui(), { minHeight: 100 })); + } + toggleResizable(resizable) { + this.positionableFeature.setResizable(resizable ? { bottom: true } : false); + } + expandGroups(groupIds) { + this.primaryColsListPanel.setGroupsExpanded(true, groupIds); + } + collapseGroups(groupIds) { + this.primaryColsListPanel.setGroupsExpanded(false, groupIds); + } + setColumnLayout(colDefs) { + this.primaryColsListPanel.setColumnLayout(colDefs); + } + syncLayoutWithGrid() { + this.primaryColsListPanel.onColumnsChanged(); + } + getExpandedGroups() { + return this.primaryColsListPanel.getExpandedGroups(); + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/columnToolPanel.css +var columnToolPanel_default = ".ag-column-panel{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.ag-pivot-mode-panel{display:flex;height:var(--ag-header-height)}.ag-pivot-mode-select{align-items:center;display:flex}:where(.ag-ltr) .ag-pivot-mode-select{margin-left:var(--ag-widget-container-horizontal-padding)}:where(.ag-rtl) .ag-pivot-mode-select{margin-right:var(--ag-widget-container-horizontal-padding)}.ag-column-panel-column-select:where(:not(.ag-last-visible-child)){border-bottom:var(--ag-tool-panel-separator-border)}.ag-column-panel-column-select:where(:nth-child(n+2 of :not(.ag-hidden))){border-top:var(--ag-tool-panel-separator-border)}:where(.ag-column-panel) .ag-column-drop-vertical{flex:1 1 0px;min-height:50px}:where(.ag-column-panel) .ag-column-drop-vertical:where(:not(.ag-last-column-drop)){border-bottom:var(--ag-tool-panel-separator-border)}.ag-column-panel-buttons{display:flex;flex-wrap:wrap;gap:var(--ag-widget-vertical-spacing) var(--ag-widget-horizontal-spacing);justify-content:flex-end;overflow:hidden;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding) 0;:where(.ag-standard-button){transition:background-color .25s ease-in-out,color .25s ease-in-out}}.ag-column-panel-buttons:where(:last-child){padding-bottom:var(--ag-widget-container-vertical-padding)}.ag-column-panel-buttons-button{line-height:1.5}:where(.ag-column-panel) .ag-column-panel-buttons-apply-button:not(:disabled){background-color:var(--ag-column-panel-apply-button-background-color);color:var(--ag-column-panel-apply-button-color)}"; + +// packages/ag-grid-enterprise/src/columnToolPanel/columnToolPanel.ts +var DEFERRED_TOOL_PANEL_CLASS = "ag-column-panel-deferred"; +var ColumnToolPanel = class extends Component25 { + constructor() { + super({ tag: "div", cls: "ag-column-panel" }); + this.initialised = false; + this.childDestroyFuncs = []; + this.isDeferModeEnabled = false; + this.isCommitting = false; + this.onDeferredApply = () => { + this.isCommitting = true; + try { + this.beans.columnStateUpdateStrategy.commit(this.isDeferModeEnabled); + } finally { + this.isCommitting = false; + } + this.deferredButtonsComp?.updateValidity(false); + this.lastKnownGridState = this.captureGridState(); + }; + this.onDeferredCancel = () => { + this.beans.columnStateUpdateStrategy.reset(this.isDeferModeEnabled); + this.deferredButtonsComp?.updateValidity(false); + this.refreshToolPanelLayouts(); + this.pivotModePanel?.refreshEditStrategy(); + this.lastKnownGridState = this.captureGridState(); + }; + this.onPivotModePanelValueChanged = () => { + this.refreshToolPanelLayouts(); + this.setLastVisible(); + this.deferredButtonsComp?.updateValidity( + this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled) + ); + }; + /** Handles columnEverythingChanged — only resets staged changes on true no-ops. */ + this.onColumnEverythingChanged = () => { + if (!this.isDeferModeEnabled || this.isCommitting) { + return; + } + const currentState = this.captureGridState(); + if (!this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled)) { + this.lastKnownGridState = currentState; + return; + } + const isNoOp = this.lastKnownGridState && this.isGridStateEqual(this.lastKnownGridState, currentState); + this.lastKnownGridState = currentState; + if (!isNoOp) { + return; + } + this.resetDeferredState(); + }; + this.onExternalGridChange = () => { + if (!this.isDeferModeEnabled || this.isCommitting) { + return; + } + if (!this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled)) { + return; + } + this.resetDeferredState(); + this.lastKnownGridState = this.captureGridState(); + }; + this.registerCSS(columnToolPanel_default); + } + wireBeans(beans) { + this.colToolPanelFactory = beans.colToolPanelFactory; + } + // lazy initialise the panel + setVisible(visible) { + super.setDisplayed(visible); + if (visible && !this.initialised) { + this.init(this.params); + } + } + init(params) { + const defaultParams = _addGridCommonParams7(this.gos, { + suppressColumnMove: false, + suppressColumnSelectAll: false, + suppressColumnFilter: false, + suppressColumnExpandAll: false, + contractColumnSelection: false, + suppressPivotMode: false, + suppressRowGroups: false, + suppressValues: false, + suppressPivots: false, + suppressSyncLayoutWithGrid: false + }); + const mergedParams = { + ...defaultParams, + ...params + }; + this.params = mergedParams; + const { childDestroyFuncs, colToolPanelFactory, gos } = this; + const hasPivotModule = gos.isModuleRegistered("SharedPivot"); + const hasRowGroupingModule = hasPivotModule || gos.isModuleRegistered("SharedRowGrouping"); + this.isDeferModeEnabled = isDeferredMode(mergedParams); + this.toggleCss(DEFERRED_TOOL_PANEL_CLASS, this.isDeferModeEnabled); + if (!mergedParams.suppressPivotMode && colToolPanelFactory && hasPivotModule) { + this.pivotModePanel = colToolPanelFactory.createPivotModePanel( + this, + childDestroyFuncs, + mergedParams, + this.onPivotModePanelValueChanged + ); + } + const primaryColsPanel = this.createBean(new AgPrimaryCols()); + this.primaryColsPanel = primaryColsPanel; + childDestroyFuncs.push(() => this.destroyBean(this.primaryColsPanel)); + primaryColsPanel.init(true, mergedParams, "toolPanelUi"); + primaryColsPanel.addCss("ag-column-panel-column-select"); + this.appendChild(primaryColsPanel); + if (colToolPanelFactory) { + if (!mergedParams.suppressRowGroups && hasRowGroupingModule) { + this.rowGroupDropZonePanel = colToolPanelFactory.createRowGroupPanel( + this, + childDestroyFuncs, + mergedParams + ); + } + if (!mergedParams.suppressValues && hasRowGroupingModule) { + this.valuesDropZonePanel = colToolPanelFactory.createValuesPanel(this, childDestroyFuncs, mergedParams); + } + if (!mergedParams.suppressPivots && hasPivotModule) { + this.pivotDropZonePanel = colToolPanelFactory.createPivotPanel(this, childDestroyFuncs, mergedParams); + } + this.setLastVisible(); + const [pivotModeListener] = this.addManagedEventListeners({ + columnPivotModeChanged: () => { + this.resetChildrenHeight(); + this.setLastVisible(); + } + }); + childDestroyFuncs.push(() => pivotModeListener()); + } + if (this.isDeferModeEnabled) { + const resetListener = this.onExternalGridChange; + childDestroyFuncs.push( + ...this.addManagedEventListeners({ + columnEverythingChanged: this.onColumnEverythingChanged, + sortChanged: resetListener, + columnVisible: resetListener, + columnRowGroupChanged: resetListener, + columnValueChanged: resetListener, + columnPivotChanged: resetListener, + columnPivotModeChanged: resetListener, + newColumnsLoaded: resetListener, + ...mergedParams.suppressSyncLayoutWithGrid ? {} : { columnMoved: resetListener } + }) + ); + } + if (mergedParams.buttons) { + if (!mergedParams.buttons.includes("apply")) { + _warn12(298); + } + if (mergedParams.buttons.length) { + this.initDeferredButtons(mergedParams.buttons); + } + } + this.initialised = true; + } + initDeferredButtons(buttons) { + const buttonComp = this.createBean(new FilterButtonComp2({ className: "ag-column-panel-buttons" })); + this.deferredButtonsComp = buttonComp; + this.childDestroyFuncs.push(() => { + this.deferredButtonsComp = this.destroyBean(this.deferredButtonsComp); + }); + const translate = this.getLocaleTextFunc(); + const buttonDefs = buttons.map((type) => ({ + type, + label: translate( + type === "apply" ? "applyColumnToolPanel" : "cancelColumnToolPanel", + type === "apply" ? "Apply" : "Cancel" + ) + })); + buttonComp.updateButtons(buttonDefs); + buttonComp.updateValidity(false); + buttonComp.addManagedListeners(buttonComp, { + apply: this.onDeferredApply, + cancel: this.onDeferredCancel + }); + this.appendChild(buttonComp); + } + resetDeferredState() { + this.beans.columnStateUpdateStrategy.reset(this.isDeferModeEnabled); + this.deferredButtonsComp?.updateValidity(false); + this.refreshToolPanelLayouts(); + this.pivotModePanel?.refreshEditStrategy(); + } + captureGridState() { + const { beans } = this; + const getColIds = (cols) => (cols ?? []).map((c) => c.getColId()); + return { + rowGroupColIds: getColIds(beans.rowGroupColsSvc?.columns), + valueColIds: getColIds(beans.valueColsSvc?.columns), + pivotColIds: getColIds(beans.pivotColsSvc?.columns), + pivotMode: beans.colModel.isPivotMode(), + columnOrder: beans.colModel.getCols().map((c) => c.getColId()), + visibleColIds: beans.colModel.getCols().filter((c) => c.isVisible()).map((c) => c.getColId()), + sortState: beans.colModel.getCols().filter((c) => c.getSort()).map((c) => `${c.getColId()}:${c.getSort()}:${c.getSortIndex()}`), + aggFuncState: (beans.valueColsSvc?.columns ?? []).map((c) => c.getAggFunc()), + widthState: beans.colModel.getCols().map((c) => `${c.getColId()}:${c.getActualWidth()}`) + }; + } + isGridStateEqual(a, b) { + return _areEqual(a.rowGroupColIds, b.rowGroupColIds) && _areEqual(a.valueColIds, b.valueColIds) && _areEqual(a.pivotColIds, b.pivotColIds) && a.pivotMode === b.pivotMode && _areEqual(a.columnOrder, b.columnOrder) && _areEqual(a.visibleColIds, b.visibleColIds) && _areEqual(a.sortState, b.sortState) && _areEqual(a.aggFuncState, b.aggFuncState) && _areEqual(a.widthState, b.widthState); + } + refreshDeferredUi() { + this.refreshToolPanelLayouts(); + this.setLastVisible(); + this.pivotModePanel?.refreshEditStrategy(); + this.deferredButtonsComp?.updateValidity( + this.beans.columnStateUpdateStrategy.hasPendingChanges(this.isDeferModeEnabled) + ); + } + refreshToolPanelLayouts() { + this.primaryColsPanel.syncLayoutWithGrid(); + this.rowGroupDropZonePanel?.refreshGui(); + this.valuesDropZonePanel?.refreshGui(); + this.pivotDropZonePanel?.refresh(); + } + setPivotModeSectionVisible(visible) { + const colToolPanelFactory = this.colToolPanelFactory; + if (!colToolPanelFactory) { + return; + } + this.pivotModePanel = colToolPanelFactory.setPanelVisible( + this.pivotModePanel, + visible, + colToolPanelFactory.createPivotModePanel.bind( + colToolPanelFactory, + this, + this.childDestroyFuncs, + this.params, + this.onPivotModePanelValueChanged, + true + ) + ); + this.setLastVisible(); + } + setRowGroupsSectionVisible(visible) { + const colToolPanelFactory = this.colToolPanelFactory; + if (!colToolPanelFactory) { + return; + } + this.rowGroupDropZonePanel = colToolPanelFactory.setPanelVisible( + this.rowGroupDropZonePanel, + visible, + colToolPanelFactory.createRowGroupPanel.bind(colToolPanelFactory, this, this.childDestroyFuncs, this.params) + ); + this.setLastVisible(); + } + setValuesSectionVisible(visible) { + const colToolPanelFactory = this.colToolPanelFactory; + if (!colToolPanelFactory) { + return; + } + this.valuesDropZonePanel = colToolPanelFactory.setPanelVisible( + this.valuesDropZonePanel, + visible, + colToolPanelFactory.createValuesPanel.bind(colToolPanelFactory, this, this.childDestroyFuncs, this.params) + ); + this.setLastVisible(); + } + setPivotSectionVisible(visible) { + const colToolPanelFactory = this.colToolPanelFactory; + if (!colToolPanelFactory) { + return; + } + this.pivotDropZonePanel = colToolPanelFactory.setPanelVisible( + this.pivotDropZonePanel, + visible, + colToolPanelFactory.createPivotPanel.bind(colToolPanelFactory, this, this.childDestroyFuncs, this.params) + ); + this.pivotDropZonePanel?.setDisplayed(visible); + this.setLastVisible(); + } + setResizers() { + for (const panel of [ + this.primaryColsPanel, + this.rowGroupDropZonePanel, + this.valuesDropZonePanel, + this.pivotDropZonePanel + ]) { + if (!panel) { + continue; + } + const eGui = panel.getGui(); + panel.toggleResizable( + !eGui.classList.contains("ag-last-column-drop") && !eGui.classList.contains("ag-hidden") && !eGui.classList.contains("ag-last-visible-child") + ); + } + } + setLastVisible() { + const eGui = this.getGui(); + const columnDrops = Array.prototype.slice.call(eGui.querySelectorAll(".ag-column-drop")); + for (const columnDrop of columnDrops) { + columnDrop.classList.remove("ag-last-column-drop"); + } + const columnDropEls = eGui.querySelectorAll(".ag-column-drop:not(.ag-hidden)"); + const lastVisible = _last4(columnDropEls); + if (lastVisible) { + lastVisible.classList.add("ag-last-column-drop"); + } + this.primaryColsPanel.getGui().classList.toggle("ag-last-visible-child", !lastVisible); + this.setResizers(); + } + resetChildrenHeight() { + const eGui = this.getGui(); + const children = eGui.children; + for (let i = 0; i < children.length; i++) { + const { style } = children[i]; + style.removeProperty("height"); + style.removeProperty("flex"); + } + } + expandColumnGroups(groupIds) { + this.primaryColsPanel.expandGroups(groupIds); + } + collapseColumnGroups(groupIds) { + this.primaryColsPanel.collapseGroups(groupIds); + } + setColumnLayout(colDefs) { + this.primaryColsPanel.setColumnLayout(colDefs); + } + syncLayoutWithGrid() { + this.primaryColsPanel.syncLayoutWithGrid(); + } + destroyChildren() { + const childDestroyFuncs = this.childDestroyFuncs; + for (const func of childDestroyFuncs) { + func(); + } + childDestroyFuncs.length = 0; + _clearElement8(this.getGui()); + } + refresh(params) { + this.destroyChildren(); + this.init(params); + return true; + } + getState() { + return { + expandedGroupIds: this.primaryColsPanel.getExpandedGroups() + }; + } + destroy() { + this.destroyChildren(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/columnToolPanelFactory.ts +import { BeanStub as BeanStub8 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowGrouping/columnDropZones/pivotDropZonePanel.ts +import { _addFocusableContainerListener as _addFocusableContainerListener2, _createIconNoSpan as _createIconNoSpan12 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowGrouping/columnDropZones/baseDropZonePanel.ts +import { DragSourceType as DragSourceType7, _shouldUpdateColVisibilityAfterGroup } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/pillDropZonePanel.ts +import { + Component as Component26, + KeyCode as KeyCode22, + ManagedFocusFeature as ManagedFocusFeature2, + PositionableFeature as PositionableFeature2, + _areEqual as _areEqual2, + _clearElement as _clearElement9, + _createElement as _createElement7, + _createIconNoSpan as _createIconNoSpan10, + _findFocusableElements as _findFocusableElements3, + _findNextFocusableElement as _findNextFocusableElement6, + _getActiveDomElement as _getActiveDomElement8, + _isKeyboardMode as _isKeyboardMode2, + _last as _last5, + _setAriaHidden, + _setAriaLabel as _setAriaLabel12, + _setAriaPosInSet as _setAriaPosInSet3, + _setAriaRole as _setAriaRole7, + _setAriaSetSize as _setAriaSetSize3 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/pillDropZonePanel.css +var pillDropZonePanel_default = ".ag-column-drop{align-items:center;display:inline-flex;overflow:auto;position:relative;width:100%}.ag-column-drop-list{align-items:center;display:flex}.ag-column-drop-cell{align-items:center;background-color:var(--ag-column-drop-cell-background-color);border:var(--ag-column-drop-cell-border);border-radius:500px;color:var(--ag-column-drop-cell-text-color);display:flex;padding:calc(var(--ag-spacing)*.25);position:relative;&:focus-visible{box-shadow:var(--ag-focus-shadow)}:where(.ag-drag-handle){color:var(--ag-column-drop-cell-drag-handle-color)}}:where(.ag-ltr) .ag-column-drop-cell{padding-left:calc(var(--ag-spacing)*.75)}:where(.ag-rtl) .ag-column-drop-cell{padding-right:calc(var(--ag-spacing)*.75)}.ag-column-drop-cell-text{flex:1 1 auto;margin:0 var(--ag-spacing);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ag-column-drop-vertical{align-items:stretch;display:flex;flex-direction:column;min-height:75px;overflow:hidden}.ag-column-drop-vertical-title-bar{align-items:center;display:flex;flex:none;padding:var(--ag-widget-container-vertical-padding) calc(var(--ag-spacing)*2) 0}.ag-column-drop-vertical-list{align-items:stretch;flex-direction:column;flex-grow:1;overflow-x:auto;padding-bottom:var(--ag-spacing);padding-left:var(--ag-spacing);padding-right:var(--ag-spacing);position:relative}:where(.ag-column-drop-empty) .ag-column-drop-vertical-list{overflow:hidden}.ag-column-drop-cell-button{cursor:pointer;min-width:0;opacity:.75}:where(.ag-ltr) .ag-column-drop-cell-button{margin-right:calc(var(--ag-spacing)/4)}:where(.ag-rtl) .ag-column-drop-cell-button{margin-left:calc(var(--ag-spacing)/4)}.ag-column-drop-cell-button:hover{opacity:1}:where(.ag-ltr) .ag-column-drop-cell-drag-handle{margin-left:calc(var(--ag-spacing)/4)}:where(.ag-rtl) .ag-column-drop-cell-drag-handle{margin-right:calc(var(--ag-spacing)/4)}.ag-column-drop-wrapper{display:flex}.ag-column-drop-horizontal-half-width{width:50%!important}.ag-column-drop-cell-ghost{opacity:.5}.ag-column-drop-horizontal{background-color:var(--ag-header-background-color);border-bottom:var(--ag-header-row-border);gap:var(--ag-cell-widget-spacing);height:var(--ag-header-height);overflow:hidden;white-space:nowrap}:where(.ag-ltr) .ag-column-drop-horizontal{padding-left:var(--ag-cell-horizontal-padding)}:where(.ag-rtl) .ag-column-drop-horizontal{padding-right:var(--ag-cell-horizontal-padding)}.ag-column-drop-horizontal-list{gap:var(--ag-cell-widget-spacing)}.ag-column-drop-vertical-cell{margin-top:var(--ag-spacing)}:where(.ag-ltr) .ag-column-drop-vertical-icon{margin-right:var(--ag-widget-horizontal-spacing)}:where(.ag-rtl) .ag-column-drop-vertical-icon{margin-left:var(--ag-widget-horizontal-spacing)}.ag-select-agg-func-popup{background:var(--ag-background-color);border:solid var(--ag-border-width) var(--ag-border-color);border-radius:var(--ag-border-radius);box-shadow:var(--ag-dropdown-shadow);height:calc(var(--ag-spacing)*5*3.5);padding:0;position:absolute}.ag-select-agg-func-virtual-list-item{cursor:default}:where(.ag-ltr) .ag-select-agg-func-virtual-list-item{padding-left:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-select-agg-func-virtual-list-item{padding-right:calc(var(--ag-spacing)*2)}.ag-select-agg-func-virtual-list-item:hover{background-color:var(--ag-selected-row-background-color)}:where(.ag-ltr) .ag-column-drop-horizontal-half-width:where(:not(:last-child)){border-right:solid var(--ag-border-width) var(--ag-border-color)}:where(.ag-rtl) .ag-column-drop-horizontal-half-width:where(:not(:last-child)){border-left:solid var(--ag-border-width) var(--ag-border-color)}"; + +// packages/ag-grid-enterprise/src/widgets/pillDropZonePanel.ts +function _insertArrayIntoArray(dest, src, toIndex) { + if (dest == null || src == null) { + return; + } + dest.splice(toIndex, 0, ...src); +} +var PillDropZonePanelElement = { tag: "div", cls: "ag-unselectable", role: "presentation" }; +var PillDropZonePanel = class extends Component26 { + constructor(horizontal) { + super(PillDropZonePanelElement); + this.horizontal = horizontal; + this.state = "notDragging"; + this.guiDestroyFunctions = []; + this.childPillComponents = []; + this.resizeEnabled = false; + this.addElementClasses(this.getGui()); + this.ePillDropList = _createElement7({ tag: "div" }); + this.addElementClasses(this.ePillDropList, "list"); + this.registerCSS(pillDropZonePanel_default); + } + toggleResizable(resizable) { + this.positionableFeature.setResizable(resizable ? { bottom: true } : false); + this.resizeEnabled = resizable; + } + isSourceEventFromTarget(draggingEvent) { + const { dropZoneTarget, dragSource } = draggingEvent; + return dropZoneTarget.contains(dragSource.eElement); + } + destroy() { + this.destroyGui(); + super.destroy(); + } + destroyGui() { + for (const func of this.guiDestroyFunctions) { + func(); + } + this.guiDestroyFunctions.length = 0; + this.childPillComponents.length = 0; + _clearElement9(this.getGui()); + _clearElement9(this.ePillDropList); + } + init(params) { + this.params = params ?? {}; + this.createManagedBean( + new ManagedFocusFeature2(this.getFocusableElement(), { + onTabKeyDown: this.onTabKeyDown.bind(this), + handleKeyDown: this.onKeyDown.bind(this) + }) + ); + this.setupDropTarget(); + this.positionableFeature = new PositionableFeature2(this.getGui()); + this.createManagedBean(this.positionableFeature); + this.refreshGui(); + _setAriaLabel12(this.ePillDropList, this.getAriaLabel()); + } + onTabKeyDown(e) { + const focusableElements = _findFocusableElements3(this.getFocusableElement(), null, true); + const len = focusableElements.length; + if (len === 0) { + return; + } + const { shiftKey } = e; + const activeEl = _getActiveDomElement8(this.beans); + const isFirstFocused = activeEl === focusableElements[0]; + const isLastFocused = activeEl === _last5(focusableElements); + const shouldAllowDefaultTab = len === 1 || isFirstFocused && shiftKey || isLastFocused && !shiftKey; + if (!shouldAllowDefaultTab) { + focusableElements[shiftKey ? 0 : len - 1].focus(); + } + } + onKeyDown(e) { + const { key } = e; + const isVertical = !this.horizontal; + let isNext = key === KeyCode22.DOWN; + let isPrevious = key === KeyCode22.UP; + if (!isVertical) { + const isRtl = this.gos.get("enableRtl"); + isNext = !isRtl && key === KeyCode22.RIGHT || isRtl && key === KeyCode22.LEFT; + isPrevious = !isRtl && key === KeyCode22.LEFT || isRtl && key === KeyCode22.RIGHT; + } + if (!isNext && !isPrevious) { + return; + } + e.preventDefault(); + if (e.shiftKey) { + this.moveFocusedItem(isPrevious); + } else { + const el = _findNextFocusableElement6(this.beans, this.getFocusableElement(), false, isPrevious); + if (el) { + el.focus(); + } + } + } + moveFocusedItem(isPrevious) { + const currentItemIndex = this.getFocusedItem(); + if (currentItemIndex === -1) { + return; + } + const diff = isPrevious ? -1 : 1; + const changed = this.normalizeAndUpdateInsertIndex(currentItemIndex, currentItemIndex + diff); + if (!changed) { + return; + } + const comp = this.childPillComponents[currentItemIndex]; + if (!comp.isMovable()) { + return; + } + const currentItem = comp.getItem(); + this.focusItemAtIndex(this.insertIndex); + this.rearrangeItems([currentItem], true); + } + addElementClasses(el, suffix) { + suffix = suffix ? `-${suffix}` : ""; + const direction = this.horizontal ? "horizontal" : "vertical"; + el.classList.add(`ag-column-drop${suffix}`, `ag-column-drop-${direction}${suffix}`); + } + setupDropTarget() { + this.dropTarget = { + getContainer: this.getGui.bind(this), + getIconName: this.getIconName.bind(this), + onDragging: this.onDragging.bind(this), + onDragEnter: this.onDragEnter.bind(this), + onDragLeave: this.onDragLeave.bind(this), + onDragStop: this.onDragStop.bind(this), + onDragCancel: this.onDragCancel.bind(this), + isInterestedIn: this.isInterestedIn.bind(this) + }; + this.beans.dragAndDrop?.addDropTarget(this.dropTarget); + } + minimumAllowedNewInsertIndex() { + return 0; + } + checkInsertIndex(draggingEvent) { + const newIndex = this.getNewInsertIndex(draggingEvent); + if (newIndex < 0) { + return false; + } + return this.normalizeAndUpdateInsertIndex(this.insertIndex, newIndex); + } + normalizeAndUpdateInsertIndex(currentIndex, index) { + const minimumAllowedIndex = this.minimumAllowedNewInsertIndex(); + const newAdjustedIndex = Math.max(minimumAllowedIndex, index); + const changed = newAdjustedIndex !== currentIndex; + if (changed) { + this.insertIndex = newAdjustedIndex; + } + return changed; + } + getNewInsertIndex(draggingEvent) { + const mouseEvent = draggingEvent.event; + const mouseLocation = this.horizontal ? mouseEvent.clientX : mouseEvent.clientY; + const boundsList = this.childPillComponents.map((comp) => comp.getGui().getBoundingClientRect()); + const hoveredIndex = boundsList.findIndex( + (rect) => this.horizontal ? rect.right > mouseLocation && rect.left < mouseLocation : rect.top < mouseLocation && rect.bottom > mouseLocation + ); + if (hoveredIndex === -1) { + const enableRtl = this.gos.get("enableRtl"); + const isLast = boundsList.every((rect) => mouseLocation > (this.horizontal ? rect.right : rect.bottom)); + if (isLast) { + return enableRtl && this.horizontal ? 0 : this.childPillComponents.length; + } + const isFirst = boundsList.every((rect) => mouseLocation < (this.horizontal ? rect.left : rect.top)); + if (isFirst) { + return enableRtl && this.horizontal ? this.childPillComponents.length : 0; + } + return this.insertIndex; + } + if (this.insertIndex <= hoveredIndex) { + return hoveredIndex + 1; + } + return hoveredIndex; + } + checkDragStartedBySelf(draggingEvent) { + if (this.state !== "notDragging") { + return; + } + this.state = "rearrangeItems"; + this.potentialDndItems = this.getItems(draggingEvent.dragSource.getDragItem()); + this.refreshGui(); + this.checkInsertIndex(draggingEvent); + this.refreshGui(); + } + onDragging(draggingEvent) { + this.checkDragStartedBySelf(draggingEvent); + if (this.checkInsertIndex(draggingEvent)) { + this.refreshGui(); + } + } + handleDragEnterEnd(_) { + } + onDragEnter(draggingEvent) { + const dragItems = this.getItems(draggingEvent.dragSource.getDragItem()); + this.state = "newItemsIn"; + const goodDragItems = dragItems.filter((item) => this.isItemDroppable(item, draggingEvent)); + const alreadyPresent = goodDragItems.every( + (item) => this.childPillComponents.map((cmp) => cmp.getItem()).indexOf(item) !== -1 + ); + if (goodDragItems.length === 0) { + return; + } + this.potentialDndItems = goodDragItems; + if (alreadyPresent) { + this.state = "notDragging"; + return; + } + this.handleDragEnterEnd(draggingEvent); + this.checkInsertIndex(draggingEvent); + this.refreshGui(); + } + isPotentialDndItems() { + return !!this.potentialDndItems?.length; + } + handleDragLeaveEnd(_) { + } + onDragLeave(draggingEvent) { + if (this.state === "rearrangeItems") { + const items = this.getItems(draggingEvent.dragSource.getDragItem()); + this.removeItems(items); + } + if (this.isPotentialDndItems()) { + this.handleDragLeaveEnd(draggingEvent); + this.potentialDndItems = []; + this.refreshGui(); + } + this.state = "notDragging"; + } + onDragCancel(draggingEvent) { + if (this.isPotentialDndItems()) { + if (this.state === "newItemsIn") { + this.handleDragLeaveEnd(draggingEvent); + } + this.potentialDndItems = []; + this.refreshGui(); + } + this.state = "notDragging"; + } + onDragStop() { + if (this.isPotentialDndItems()) { + if (this.state === "newItemsIn") { + this.addItems(this.potentialDndItems); + } else { + this.rearrangeItems(this.potentialDndItems); + } + this.potentialDndItems = []; + this.refreshGui(); + } + this.state = "notDragging"; + } + removeItems(itemsToRemove) { + const newItemList = this.getExistingItems().filter((item) => !itemsToRemove.includes(item)); + this.updateItems(newItemList); + this.refreshGui(); + } + addItems(itemsToAdd) { + if (!itemsToAdd) { + return; + } + const newItemList = this.getExistingItems().slice(); + const itemsToAddNoDuplicates = itemsToAdd.filter((item) => newItemList.indexOf(item) < 0); + _insertArrayIntoArray(newItemList, itemsToAddNoDuplicates, this.insertIndex); + this.updateItems(newItemList); + this.refreshGui(); + } + addItem(item) { + this.insertIndex = this.getExistingItems().length; + this.addItems([item]); + } + rearrangeItems(itemsToAdd, fromKeyboard) { + let newItemList; + if (!fromKeyboard) { + newItemList = this.getNonGhostItems().slice(); + } else { + newItemList = this.getExistingItems().filter((item) => itemsToAdd.indexOf(item) === -1); + } + _insertArrayIntoArray(newItemList, itemsToAdd, this.insertIndex); + if (_areEqual2(newItemList, this.getExistingItems())) { + return false; + } + this.updateItems(newItemList); + this.refreshGui(); + return true; + } + refreshGui() { + let scrollTop = 0; + if (!this.horizontal) { + scrollTop = this.ePillDropList.scrollTop; + } + const resizeEnabled = this.resizeEnabled; + const focusedIndex = this.getFocusedItem(); + const { eGridDiv } = this.beans; + const isKeyboardMode = _isKeyboardMode2(); + let alternateElement = null; + if (isKeyboardMode) { + alternateElement = _findNextFocusableElement6(this.beans, eGridDiv) ?? _findNextFocusableElement6(this.beans, eGridDiv, false, true); + } + this.toggleResizable(false); + this.destroyGui(); + this.addIconAndTitleToGui(); + this.addEmptyMessageToGui(); + this.addItemsToGui(); + if (scrollTop !== 0) { + this.ePillDropList.scrollTop = scrollTop; + } + if (resizeEnabled) { + this.toggleResizable(resizeEnabled); + } + if (isKeyboardMode) { + this.restoreFocus(focusedIndex, alternateElement); + } + } + getFocusedItem() { + const eGui = this.getGui(); + const activeElement = _getActiveDomElement8(this.beans); + if (!eGui.contains(activeElement)) { + return -1; + } + const items = Array.from(eGui.querySelectorAll(".ag-column-drop-cell")); + return items.indexOf(activeElement); + } + focusItemAtIndex(index) { + const eGui = this.getGui(); + const items = Array.from(eGui.querySelectorAll(".ag-column-drop-cell")); + const item = items[index]; + if (!item) { + return; + } + item.focus({ preventScroll: true }); + } + restoreFocus(index, alternateElement) { + const eGui = this.getGui(); + const items = Array.from(eGui.querySelectorAll(".ag-column-drop-cell")); + if (index === -1) { + return; + } + if (items.length === 0) { + alternateElement.focus(); + } + const indexToFocus = Math.min(items.length - 1, index); + const el = items[indexToFocus]; + if (el) { + el.focus(); + } + } + focusList(fromBottom) { + const index = fromBottom ? this.childPillComponents.length - 1 : 0; + this.restoreFocus(index, this.getFocusableElement()); + } + getNonGhostItems() { + const existingItems = this.getExistingItems(); + if (this.isPotentialDndItems()) { + return existingItems.filter((item) => !this.potentialDndItems.includes(item)); + } + return existingItems; + } + addItemsToGui() { + const nonGhostItems = this.getNonGhostItems(); + const itemsToAddToGui = nonGhostItems.map((item) => this.createItemComponent(item, false)); + if (this.isPotentialDndItems()) { + const dndItems = this.potentialDndItems.map((item) => this.createItemComponent(item, true)); + if (this.insertIndex >= itemsToAddToGui.length) { + itemsToAddToGui.push(...dndItems); + } else { + itemsToAddToGui.splice(this.insertIndex, 0, ...dndItems); + } + } + this.appendChild(this.ePillDropList); + itemsToAddToGui.forEach((itemComponent, index) => { + if (index > 0) { + this.addArrow(this.ePillDropList); + } + this.ePillDropList.appendChild(itemComponent.getGui()); + }); + this.addAriaLabelsToComponents(); + } + addAriaLabelsToComponents() { + const { childPillComponents, ePillDropList } = this; + const len = childPillComponents.length; + _setAriaRole7(ePillDropList, len === 0 ? "presentation" : "listbox"); + for (let i = 0; i < len; i++) { + const comp = childPillComponents[i]; + const eGui = comp.getGui(); + _setAriaPosInSet3(eGui, i + 1); + _setAriaSetSize3(eGui, len); + } + } + createItemComponent(item, ghost) { + const itemComponent = this.createPillComponent(item, this.dropTarget, ghost, this.horizontal); + itemComponent.addEventListener("columnRemove", this.removeItems.bind(this, [item])); + this.createBean(itemComponent); + this.guiDestroyFunctions.push(() => this.destroyBean(itemComponent)); + if (!ghost) { + this.childPillComponents.push(itemComponent); + } + return itemComponent; + } + addIconAndTitleToGui() { + const { title, icon: eGroupIcon } = this.params; + if (!title || !eGroupIcon) { + return; + } + const eTitleBar = _createElement7({ tag: "div" }); + _setAriaHidden(eTitleBar, true); + this.addElementClasses(eTitleBar, "title-bar"); + this.addElementClasses(eGroupIcon, "icon"); + this.toggleCss("ag-column-drop-empty", this.isExistingItemsEmpty()); + eTitleBar.appendChild(eGroupIcon); + if (!this.horizontal) { + const eTitle = _createElement7({ tag: "span" }); + this.addElementClasses(eTitle, "title"); + eTitle.textContent = title; + eTitleBar.appendChild(eTitle); + } + this.appendChild(eTitleBar); + } + isExistingItemsEmpty() { + return this.getExistingItems().length === 0; + } + addEmptyMessageToGui() { + const { emptyMessage } = this.params; + if (!emptyMessage || !this.isExistingItemsEmpty() || this.isPotentialDndItems()) { + return; + } + const eMessage = _createElement7({ tag: "span" }); + eMessage.textContent = emptyMessage; + this.addElementClasses(eMessage, "empty-message"); + this.ePillDropList.appendChild(eMessage); + } + addArrow(eParent) { + if (this.horizontal) { + const enableRtl = this.gos.get("enableRtl"); + const icon = _createIconNoSpan10(enableRtl ? "panelDelimiterRtl" : "panelDelimiter", this.beans); + this.addElementClasses(icon, "cell-separator"); + eParent.appendChild(icon); + } + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/columnDropZones/dropZoneColumnComp.ts +import { Component as Component28, DragSourceType as DragSourceType6, KeyCode as KeyCode24, RefPlaceholder as RefPlaceholder26, _createElement as _createElement8 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/pillDragComp.ts +import { + Component as Component27, + KeyCode as KeyCode23, + RefPlaceholder as RefPlaceholder25, + TouchListener as TouchListener3, + _createIconNoSpan as _createIconNoSpan11, + _setAriaLabel as _setAriaLabel13, + _setDisplayed as _setDisplayed14 +} from "ag-grid-community"; +var PillDragCompElement = { + tag: "span", + role: "option", + children: [ + { + tag: "span", + ref: "eDragHandle", + cls: "ag-drag-handle ag-column-drop-cell-drag-handle", + role: "presentation" + }, + { tag: "span", ref: "eText", cls: "ag-column-drop-cell-text", attrs: { "aria-hidden": "true" } }, + { tag: "span", ref: "eButton", cls: "ag-column-drop-cell-button", role: "presentation" } + ] +}; +var PillDragComp = class extends Component27 { + constructor(dragSourceDropTarget, ghost, horizontal, template, agComponents) { + super(); + this.dragSourceDropTarget = dragSourceDropTarget; + this.ghost = ghost; + this.horizontal = horizontal; + this.template = template; + this.agComponents = agComponents; + this.eText = RefPlaceholder25; + this.eDragHandle = RefPlaceholder25; + this.eButton = RefPlaceholder25; + } + postConstruct() { + this.setTemplate(this.template ?? PillDragCompElement, this.agComponents); + const eGui = this.getGui(); + const { beans, eDragHandle, eText, eButton } = this; + this.addElementClasses(eGui); + this.addElementClasses(eDragHandle, "drag-handle"); + this.addElementClasses(eText, "text"); + this.addElementClasses(eButton, "button"); + eDragHandle.appendChild(_createIconNoSpan11("columnDrag", beans)); + eButton.appendChild(_createIconNoSpan11("cancel", beans)); + this.tooltipFeature = this.createOptionalManagedBean( + beans.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.getGui() + }) + ); + this.setupComponents(); + if (!this.ghost && this.isDraggable()) { + this.addDragSource(); + } + this.setupAria(); + this.setupTooltip(); + this.activateTabIndex(); + this.refreshDraggable(); + } + isDraggable() { + return true; + } + refreshDraggable() { + this.eDragHandle.classList.toggle("ag-column-select-column-readonly", !this.isDraggable()); + } + setupAria() { + const translate = this.getLocaleTextFunc(); + const ariaInstructions = [this.getAriaDisplayName()]; + this.addAdditionalAriaInstructions(ariaInstructions, translate); + _setAriaLabel13(this.getGui(), ariaInstructions.join(". ")); + } + addAdditionalAriaInstructions(ariaInstructions, translate) { + if (this.isRemovable()) { + const deleteAria = translate("ariaDropZoneColumnComponentDescription", "Press DELETE to remove"); + ariaInstructions.push(deleteAria); + } + } + setupTooltip() { + const refresh = () => this.tooltipFeature?.setTooltipAndRefresh(this.getTooltip()); + refresh(); + this.addManagedEventListeners({ newColumnsLoaded: refresh }); + } + getDragSourceId() { + return void 0; + } + getDefaultIconName() { + return "notAllowed"; + } + addDragSource() { + const { + beans: { dragAndDrop }, + eDragHandle + } = this; + const getDragItem = this.createGetDragItem(); + const defaultIconName = this.getDefaultIconName(); + const dragSource = { + type: this.getDragSourceType(), + sourceId: this.getDragSourceId(), + eElement: eDragHandle, + getDefaultIconName: () => defaultIconName, + getDragItem, + dragItemName: this.getDisplayName() + }; + dragAndDrop?.addDragSource(dragSource, true); + this.addDestroyFunc(() => dragAndDrop?.removeDragSource(dragSource)); + } + setupComponents() { + this.eText.textContent = this.getDisplayValue(); + this.setupRemove(); + if (this.ghost) { + this.addCss("ag-column-drop-cell-ghost"); + } + } + isRemovable() { + return true; + } + refreshRemove() { + _setDisplayed14(this.eButton, this.isRemovable()); + } + setupRemove() { + this.refreshRemove(); + const agEvent = { type: "columnRemove" }; + this.addGuiEventListener("keydown", (e) => this.onKeyDown(e)); + this.addManagedElementListeners(this.eButton, { + click: (mouseEvent) => { + this.dispatchLocalEvent(agEvent); + mouseEvent.stopPropagation(); + } + }); + const touchListener = new TouchListener3(this.eButton); + this.addManagedListeners(touchListener, { + tap: () => this.dispatchLocalEvent(agEvent) + }); + this.addDestroyFunc(touchListener.destroy.bind(touchListener)); + } + onKeyDown(e) { + const isDelete = e.key === KeyCode23.DELETE; + if (isDelete) { + if (this.isRemovable()) { + e.preventDefault(); + this.dispatchLocalEvent({ type: "columnRemove" }); + } + } + } + getDisplayValue() { + return this.getDisplayName(); + } + addElementClasses(el, suffix) { + suffix = suffix ? `-${suffix}` : ""; + const direction = this.horizontal ? "horizontal" : "vertical"; + el.classList.add(`ag-column-drop-cell${suffix}`, `ag-column-drop-${direction}-cell${suffix}`); + } + destroy() { + super.destroy(); + this.dragSourceDropTarget = null; + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/columnDropZones/dropZoneColumnComp.ts +var DropZoneColumnComp = class extends PillDragComp { + constructor(column, dragSourceDropTarget, ghost, dropZonePurpose, horizontal, updateParams) { + super(dragSourceDropTarget, ghost, horizontal); + this.column = column; + this.dropZonePurpose = dropZonePurpose; + this.updateParams = updateParams; + this.eSortIndicator = RefPlaceholder26; + this.popupShowing = false; + this.deferApply = isDeferredMode(updateParams); + } + postConstruct() { + const { sortSvc, colNames } = this.beans; + this.template = { + tag: "span", + role: "option", + children: [ + { + tag: "span", + ref: "eDragHandle", + cls: "ag-drag-handle ag-column-drop-cell-drag-handle", + role: "presentation" + }, + { tag: "span", ref: "eText", cls: "ag-column-drop-cell-text", attrs: { "aria-hidden": "true" } }, + sortSvc ? { tag: "ag-sort-indicator", ref: "eSortIndicator" } : void 0, + { tag: "span", ref: "eButton", cls: "ag-column-drop-cell-button", role: "presentation" } + ] + }; + if (sortSvc) { + this.agComponents = [sortSvc.getSortIndicatorSelector()]; + } + this.displayName = colNames.getDisplayNameForColumn(this.column, "columnDrop"); + super.postConstruct(); + if (this.deferApply) { + this.eDragHandle.setAttribute("data-column-tool-panel-deferred", ""); + } + if (sortSvc) { + this.setupSort(); + this.addManagedEventListeners({ + sortChanged: () => { + this.setupAria(); + } + }); + } + if (this.isGroupingZone()) { + this.addManagedPropertyListener("groupLockGroupColumns", () => { + this.refreshRemove(); + this.refreshDraggable(); + this.setupAria(); + }); + } + } + getItem() { + return this.column; + } + getDisplayName() { + return this.displayName; + } + getTooltip() { + return this.column.getColDef().headerTooltip; + } + addAdditionalAriaInstructions(ariaInstructions, translate) { + const isSortSuppressed = this.gos.get("rowGroupPanelSuppressSort"); + const isFunctionsReadOnly = this.gos.get("functionsReadOnly"); + if (this.isAggregationZone() && !isFunctionsReadOnly) { + const aggregationMenuAria = translate( + "ariaDropZoneColumnValueItemDescription", + "Press ENTER to change the aggregation type" + ); + ariaInstructions.push(aggregationMenuAria); + } + if (this.isGroupingZone() && this.column.isSortable() && !isSortSuppressed) { + const sortProgressAria = translate("ariaDropZoneColumnGroupItemDescription", "Press ENTER to sort"); + ariaInstructions.push(sortProgressAria); + } + super.addAdditionalAriaInstructions(ariaInstructions, translate); + } + isMovable() { + return this.isDraggable(); + } + isDraggable() { + return this.isReadOnly(); + } + isRemovable() { + return this.isReadOnly(); + } + isReadOnly() { + return !this.isGroupingAndLocked() && !this.gos.get("functionsReadOnly"); + } + getAriaDisplayName() { + const translate = this.getLocaleTextFunc(); + const { name, aggFuncName } = this.getColumnAndAggFuncName(); + const aggSeparator = translate("ariaDropZoneColumnComponentAggFuncSeparator", " of "); + const sortDirection = { + asc: translate("ariaDropZoneColumnComponentSortAscending", "ascending"), + desc: translate("ariaDropZoneColumnComponentSortDescending", "descending") + }; + const columnSort = this.getCurrentSortDirection(this.column); + const isSortSuppressed = this.gos.get("rowGroupPanelSuppressSort"); + return [ + aggFuncName && `${aggFuncName}${aggSeparator}`, + name, + this.isGroupingZone() && !isSortSuppressed && columnSort && `, ${sortDirection[columnSort]}` + ].filter((part) => !!part).join(""); + } + getColumnAndAggFuncName() { + const name = this.displayName; + let aggFuncName = ""; + if (this.isAggregationZone()) { + const aggFunc = this.beans.columnStateUpdateStrategy.getColumnAggFunc(this.deferApply, this.column); + const aggFuncString = typeof aggFunc === "string" ? aggFunc : "agg"; + const localeTextFunc = this.getLocaleTextFunc(); + aggFuncName = localeTextFunc(aggFuncString, aggFuncString); + } + return { name, aggFuncName }; + } + setupSort() { + if (!this.column.isSortable() || !this.isGroupingZone()) { + return; + } + const { gos, column, eSortIndicator } = this; + if (!gos.get("rowGroupPanelSuppressSort")) { + eSortIndicator.setupSort(column, true, this.getSortDefOverride.bind(this)); + const performSort = (event) => { + event.preventDefault(); + this.beans.columnStateUpdateStrategy.progressSortFromEvent(this.deferApply, column, event); + eSortIndicator.refresh(); + this.setupAria(); + refreshDeferredToolPanelUi(this.beans, this.updateParams); + }; + this.addGuiEventListener("click", performSort); + this.addGuiEventListener("keydown", (e) => { + const isEnter = e.key === KeyCode24.ENTER; + if (isEnter && this.isGroupingZone()) { + performSort(e); + } + }); + } + } + getCurrentSortDirection(column) { + return this.beans.columnStateUpdateStrategy.getSortDef(this.deferApply, column)?.direction ?? null; + } + getSortDefOverride() { + if (!this.deferApply) { + return void 0; + } + return this.beans.columnStateUpdateStrategy.getSortDef(this.deferApply, this.column); + } + getDefaultIconName() { + return "hide"; + } + createGetDragItem() { + const { column } = this; + return () => { + const visibleState = {}; + visibleState[column.getId()] = column.isVisible(); + return { + columns: [column], + visibleState + }; + }; + } + setupComponents() { + super.setupComponents(); + if (this.isAggregationZone() && !this.gos.get("functionsReadOnly")) { + this.addGuiEventListener("click", this.onShowAggFuncSelection.bind(this)); + } + } + onKeyDown(e) { + super.onKeyDown(e); + const isEnter = e.key === KeyCode24.ENTER; + if (isEnter && this.isAggregationZone() && !this.gos.get("functionsReadOnly")) { + e.preventDefault(); + this.onShowAggFuncSelection(); + } + } + getDisplayValue() { + const { name, aggFuncName } = this.getColumnAndAggFuncName(); + return this.isAggregationZone() ? `${aggFuncName}(${name})` : name; + } + onShowAggFuncSelection() { + if (this.popupShowing) { + return; + } + this.popupShowing = true; + const { aggFuncSvc, popupSvc } = this.beans; + const virtualList = new VirtualList({ cssIdentifier: "select-agg-func" }); + const rows = aggFuncSvc.getFuncNames(this.column); + const eGui = this.getGui(); + const virtualListGui = virtualList.getGui(); + virtualList.setModel({ + getRow: function(index) { + return rows[index]; + }, + getRowCount: function() { + return rows.length; + } + }); + this.createBean(virtualList); + const ePopup = _createElement8({ tag: "div", cls: "ag-select-agg-func-popup" }); + ePopup.style.top = "0px"; + ePopup.style.left = "0px"; + ePopup.appendChild(virtualListGui); + ePopup.style.width = `${eGui.clientWidth}px`; + const [focusoutListener] = this.addManagedElementListeners(ePopup, { + focusout: (e) => { + if (!ePopup.contains(e.relatedTarget) && addPopupRes) { + addPopupRes.hideFunc(); + } + } + }); + const popupHiddenFunc = (callbackEvent) => { + this.destroyBean(virtualList); + this.popupShowing = false; + if (callbackEvent?.key === "Escape") { + eGui.focus(); + } + if (focusoutListener) { + focusoutListener(); + } + }; + const translate = this.getLocaleTextFunc(); + const addPopupRes = popupSvc.addPopup({ + modal: true, + eChild: ePopup, + closeOnEsc: true, + closedCallback: popupHiddenFunc, + ariaLabel: translate("ariaLabelAggregationFunction", "Aggregation Function") + }); + if (addPopupRes) { + virtualList.setComponentCreator(this.createAggSelect.bind(this, addPopupRes.hideFunc)); + } + virtualList.addGuiEventListener("keydown", (e) => { + if (e.key === KeyCode24.ENTER || e.key === KeyCode24.SPACE) { + const row = virtualList.getLastFocusedRow(); + if (row == null) { + return; + } + const comp = virtualList.getComponentAt(row); + if (comp) { + comp.selectItem(); + } + } + }); + popupSvc.positionPopupByComponent({ + type: "aggFuncSelect", + eventSource: eGui, + ePopup, + keepWithinBounds: true, + additionalParams: { + column: this.column + }, + position: "under" + }); + virtualList.refresh(); + const currentAggFunc = this.beans.columnStateUpdateStrategy.getColumnAggFunc(this.deferApply, this.column); + let rowToFocus = rows.findIndex((r) => r === currentAggFunc); + if (rowToFocus === -1) { + rowToFocus = 0; + } + virtualList.focusRow(rowToFocus); + } + createAggSelect(hidePopup, value) { + const itemSelected = () => { + hidePopup(); + this.getGui().focus(); + this.beans.columnStateUpdateStrategy.setColumnAggFunc( + this.deferApply, + this.column, + value, + "toolPanelDragAndDrop" + ); + if (this.column) { + const eText = this.getGui().querySelector(".ag-column-drop-cell-text"); + if (eText) { + eText.textContent = this.getDisplayValue(); + } + this.setupAria(); + } + refreshDeferredToolPanelUi(this.beans, this.updateParams); + }; + const localeTextFunc = this.getLocaleTextFunc(); + const aggFuncString = (value || "").toString(); + const aggFuncStringTranslated = localeTextFunc(aggFuncString, aggFuncString); + const comp = new AggItemComp(itemSelected, aggFuncStringTranslated); + return comp; + } + isGroupingAndLocked() { + return this.isGroupingZone() && isRowGroupColLocked(this.column, this.beans); + } + isAggregationZone() { + return this.dropZonePurpose === "aggregation"; + } + isGroupingZone() { + return this.dropZonePurpose === "rowGroup"; + } + getDragSourceType() { + return DragSourceType6.ToolPanel; + } + destroy() { + super.destroy(); + this.column = null; + } +}; +var AggItemComp = class extends Component28 { + constructor(itemSelected, value) { + super({ tag: "div", cls: "ag-select-agg-func-item", children: value }); + this.selectItem = itemSelected; + this.addGuiEventListener("click", this.selectItem); + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/columnDropZones/baseDropZonePanel.ts +var BaseDropZonePanel = class extends PillDropZonePanel { + constructor(horizontal, dropZonePurpose, updateParams) { + super(horizontal); + this.dropZonePurpose = dropZonePurpose; + this.updateParams = updateParams; + this.addElementClasses(this.getGui(), this.dropZonePurpose.toLowerCase()); + } + init(params) { + super.init(params); + this.addManagedEventListeners({ newColumnsLoaded: this.refreshGui.bind(this) }); + this.addManagedPropertyListeners( + ["functionsReadOnly", "rowGroupPanelSuppressSort", "groupLockGroupColumns"], + this.refreshGui.bind(this) + ); + } + getItems(dragItem) { + return dragItem.columns ?? []; + } + isInterestedIn(type, sourceElement) { + if (type === DragSourceType7.HeaderCell) { + return true; + } + if (type !== DragSourceType7.ToolPanel) { + return false; + } + if (!this.horizontal) { + return true; + } + return !sourceElement.hasAttribute("data-column-tool-panel-deferred"); + } + minimumAllowedNewInsertIndex() { + const { gos, rowGroupColsSvc } = this.beans; + const numberOfLockedCols = gos.get("groupLockGroupColumns"); + const numberOfGroupCols = rowGroupColsSvc?.columns.length ?? 0; + if (numberOfLockedCols === -1) { + return numberOfGroupCols; + } + return Math.min(numberOfLockedCols, numberOfGroupCols); + } + showOrHideColumnOnExit(draggingEvent) { + return this.isRowGroupPanel() && _shouldUpdateColVisibilityAfterGroup(this.gos, true) && !draggingEvent.fromNudge; + } + handleDragEnterEnd(draggingEvent) { + const hideColumnOnExit = this.showOrHideColumnOnExit(draggingEvent); + if (hideColumnOnExit) { + const dragItem = draggingEvent.dragSource.getDragItem(); + const columns = dragItem.columns; + this.setColumnsVisible(columns, false, "uiColumnDragged"); + } + } + handleDragLeaveEnd(draggingEvent) { + const showColumnOnExit = this.showOrHideColumnOnExit(draggingEvent); + if (showColumnOnExit) { + const dragItem = draggingEvent.dragSource.getDragItem(); + this.setColumnsVisible(dragItem.columns, true, "uiColumnDragged"); + } + } + setColumnsVisible(columns, visible, source) { + if (!columns) { + return; + } + if (isDeferredMode(this.updateParams)) { + return; + } + const allowedCols = columns.filter((c) => !c.getColDef().lockVisible); + this.beans.columnStateUpdateStrategy.setColumnsVisible(false, allowedCols, visible, source); + } + isRowGroupPanel() { + return this.dropZonePurpose === "rowGroup"; + } + createPillComponent(column, dropTarget, ghost, horizontal) { + return new DropZoneColumnComp(column, dropTarget, ghost, this.dropZonePurpose, horizontal, this.updateParams); + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/columnDropZones/pivotDropZonePanel.ts +var PivotDropZonePanel = class extends BaseDropZonePanel { + constructor(horizontal, params) { + super(horizontal, "pivot", params); + } + postConstruct() { + const localeTextFunc = this.getLocaleTextFunc(); + const emptyMessage = localeTextFunc("pivotColumnsEmptyMessage", "Drag here to set column labels"); + const title = localeTextFunc("pivots", "Column Labels"); + super.init({ + icon: _createIconNoSpan12("pivotPanel", this.beans, null), + emptyMessage, + title + }); + if (this.horizontal) { + _addFocusableContainerListener2(this.beans, this, this.getGui()); + } + this.addManagedEventListeners({ + newColumnsLoaded: this.refresh.bind(this), + columnPivotChanged: this.refresh.bind(this), + columnPivotModeChanged: this.checkVisibility.bind(this) + }); + this.refresh(); + } + getAriaLabel() { + const translate = this.getLocaleTextFunc(); + return translate("ariaPivotDropZonePanelLabel", "Column Labels"); + } + refresh() { + this.checkVisibility(); + this.refreshGui(); + } + checkVisibility() { + const colModel = this.beans.colModel; + const pivotMode = colModel.isPivotMode(); + if (this.horizontal) { + switch (this.gos.get("pivotPanelShow")) { + case "always": + this.setDisplayed(pivotMode); + break; + case "onlyWhenPivoting": { + const pivotActive = colModel.isPivotActive(); + this.setDisplayed(pivotMode && pivotActive); + break; + } + default: + this.setDisplayed(false); + break; + } + } else { + this.setDisplayed(this.beans.columnStateUpdateStrategy.getPivotMode(isDeferredMode(this.updateParams))); + } + } + isItemDroppable(column, draggingEvent) { + if (this.gos.get("functionsReadOnly") || !column.isPrimary()) { + return false; + } + const isActive = this.beans.columnStateUpdateStrategy.getPivotColumns(isDeferredMode(this.updateParams)).includes(column); + return column.isAllowPivot() && (!isActive || this.isSourceEventFromTarget(draggingEvent)); + } + updateItems(columns) { + this.beans.columnStateUpdateStrategy.setPivotColumns(isDeferredMode(this.updateParams), columns, "toolPanelUi"); + refreshDeferredToolPanelUi(this.beans, this.updateParams); + } + getIconName() { + return this.isPotentialDndItems() ? "pivot" : "notAllowed"; + } + getExistingItems() { + return this.beans.columnStateUpdateStrategy.getPivotColumns(isDeferredMode(this.updateParams)); + } + getFocusableContainerName() { + return "pivotToolbar"; + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/columnDropZones/rowGroupDropZonePanel.ts +import { _addFocusableContainerListener as _addFocusableContainerListener3, _createIconNoSpan as _createIconNoSpan13 } from "ag-grid-community"; +var RowGroupDropZonePanel = class extends BaseDropZonePanel { + constructor(horizontal, params) { + super(horizontal, "rowGroup", params); + } + postConstruct() { + const localeTextFunc = this.getLocaleTextFunc(); + const emptyMessage = localeTextFunc("rowGroupColumnsEmptyMessage", "Drag here to set row groups"); + const title = localeTextFunc("groups", "Row Groups"); + super.init({ + icon: _createIconNoSpan13("rowGroupPanel", this.beans, null), + emptyMessage, + title + }); + if (this.horizontal) { + _addFocusableContainerListener3(this.beans, this, this.getGui()); + } + this.addManagedEventListeners({ columnRowGroupChanged: this.refreshGui.bind(this) }); + } + getAriaLabel() { + const translate = this.getLocaleTextFunc(); + const label = translate("ariaRowGroupDropZonePanelLabel", "Row Groups"); + return label; + } + isItemDroppable(column, draggingEvent) { + if (this.gos.get("functionsReadOnly") || !column.isPrimary() || column.colDef.showRowGroup) { + return false; + } + const isActive = this.beans.columnStateUpdateStrategy.getRowGroupColumns(isDeferredMode(this.updateParams)).includes(column); + return column.isAllowRowGroup() && (!isActive || this.isSourceEventFromTarget(draggingEvent)); + } + updateItems(columns) { + this.beans.columnStateUpdateStrategy.setRowGroupColumns( + isDeferredMode(this.updateParams), + columns, + "toolPanelUi" + ); + refreshDeferredToolPanelUi(this.beans, this.updateParams); + } + getIconName() { + return this.isPotentialDndItems() ? "group" : "notAllowed"; + } + getExistingItems() { + return this.beans.columnStateUpdateStrategy.getRowGroupColumns(isDeferredMode(this.updateParams)); + } + getFocusableContainerName() { + return "rowGroupToolbar"; + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/columnDropZones/valueDropZonePanel.ts +import { _createIconNoSpan as _createIconNoSpan14 } from "ag-grid-community"; +var ValuesDropZonePanel = class extends BaseDropZonePanel { + constructor(horizontal, params) { + super(horizontal, "aggregation", params); + } + postConstruct() { + const localeTextFunc = this.getLocaleTextFunc(); + const emptyMessage = localeTextFunc("valueColumnsEmptyMessage", "Drag here to aggregate"); + const title = localeTextFunc("values", "Values"); + super.init({ + icon: _createIconNoSpan14("valuePanel", this.beans, null), + emptyMessage, + title + }); + this.addManagedEventListeners({ columnValueChanged: this.refreshGui.bind(this) }); + } + getAriaLabel() { + const translate = this.getLocaleTextFunc(); + const label = translate("ariaValuesDropZonePanelLabel", "Values"); + return label; + } + getIconName() { + return this.isPotentialDndItems() ? "aggregate" : "notAllowed"; + } + isItemDroppable(column, draggingEvent) { + if (this.gos.get("functionsReadOnly") || !column.isPrimary()) { + return false; + } + const isActive = this.beans.columnStateUpdateStrategy.getValueColumns(isDeferredMode(this.updateParams)).includes(column); + return column.isAllowValue() && (!isActive || this.isSourceEventFromTarget(draggingEvent)); + } + updateItems(columns) { + this.beans.columnStateUpdateStrategy.setValueColumns(isDeferredMode(this.updateParams), columns, "toolPanelUi"); + refreshDeferredToolPanelUi(this.beans, this.updateParams); + } + getExistingItems() { + return this.beans.columnStateUpdateStrategy.getValueColumns(isDeferredMode(this.updateParams)); + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/pivotModePanel.ts +import { AgToggleButtonSelector, Component as Component29, RefPlaceholder as RefPlaceholder27 } from "ag-grid-community"; +var PivotModePanelElement = { + tag: "div", + cls: "ag-pivot-mode-panel", + children: [ + { + tag: "ag-toggle-button", + ref: "cbPivotMode", + cls: "ag-pivot-mode-select" + } + ] +}; +var PivotModePanel = class extends Component29 { + constructor(params, onPivotModeValueChanged) { + super(); + this.params = params; + this.onPivotModeValueChanged = onPivotModeValueChanged; + this.cbPivotMode = RefPlaceholder27; + } + getCurrentPivotMode() { + return this.beans.columnStateUpdateStrategy.getPivotMode(isDeferredMode(this.params)); + } + syncFromGrid() { + this.cbPivotMode.setValue(this.getCurrentPivotMode()); + } + refreshEditStrategy() { + this.syncFromGrid(); + } + postConstruct() { + this.setTemplate(PivotModePanelElement, [AgToggleButtonSelector]); + const cbPivotMode = this.cbPivotMode; + cbPivotMode.setValue(this.getCurrentPivotMode()); + const localeTextFunc = this.getLocaleTextFunc(); + cbPivotMode.setLabel(localeTextFunc("pivotMode", "Pivot Mode")); + const onBtPivotMode = () => { + const newValue = !!cbPivotMode.getValue(); + this.beans.columnStateUpdateStrategy.setPivotMode(isDeferredMode(this.params), newValue, "toolPanelUi"); + this.onPivotModeValueChanged?.(); + }; + const onPivotModeChanged = () => { + cbPivotMode.setValue(this.getCurrentPivotMode()); + }; + this.addManagedListeners(cbPivotMode, { fieldValueChanged: onBtPivotMode }); + this.addManagedEventListeners({ + newColumnsLoaded: onPivotModeChanged, + columnPivotModeChanged: onPivotModeChanged + }); + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/columnToolPanelFactory.ts +var ColumnToolPanelFactory = class extends BeanStub8 { + constructor() { + super(...arguments); + this.beanName = "colToolPanelFactory"; + } + setPanelVisible(existingPanel, visible, createFunc) { + if (existingPanel) { + existingPanel.setDisplayed(visible); + } else if (visible) { + existingPanel = createFunc(); + } + return existingPanel; + } + createRowGroupPanel(parent, destroyFuncs, params) { + return this.createPanel(parent, destroyFuncs, new RowGroupDropZonePanel(false, params)); + } + createValuesPanel(parent, destroyFuncs, params) { + return this.createPanel(parent, destroyFuncs, new ValuesDropZonePanel(false, params)); + } + createPivotPanel(parent, destroyFuncs, params) { + return this.createPanel(parent, destroyFuncs, new PivotDropZonePanel(false, params)); + } + createPivotModePanel(parent, destroyFuncs, params, onPivotModeValueChanged, prepend) { + return this.createPanel(parent, destroyFuncs, new PivotModePanel(params, onPivotModeValueChanged), prepend); + } + createPanel(parent, destroyFuncs, panel, prepend) { + panel = parent.createBean(panel); + destroyFuncs.push(() => parent.destroyBean(panel)); + if (prepend) { + parent.prependChild(panel); + } else { + parent.appendChild(panel); + } + return panel; + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/updates/columnStateUpdateStrategy.ts +import { BeanStub as BeanStub10 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/columnToolPanel/updates/columnStateUpdateExecutionStrategy.ts +import { BeanStub as BeanStub9, _applyColumnState, _areEqual as _areEqual3, isColumnGroupAutoCol, isSpecialCol } from "ag-grid-community"; +var noop = () => { +}; +var ColumnStateUpdateExecutionStrategy = class extends BeanStub9 { + constructor() { + super(...arguments); + this.beanName = "columnStateUpdateExecutionStrategy"; + } + applyColumnState(deferMode, state, eventType) { + this.getUpdateStrategy(deferMode).applyColumnState(state, eventType); + } + commit(deferMode) { + this.getUpdateStrategy(deferMode).commit(); + } + hasPendingChanges(deferMode) { + return this.getUpdateStrategy(deferMode).hasPendingChanges(); + } + moveColumns(deferMode, columns, targetIndex, eventType) { + this.getUpdateStrategy(deferMode).moveColumns(columns, targetIndex, eventType); + } + reset(deferMode) { + this.getUpdateStrategy(deferMode).reset(); + } + setColumnsVisible(deferMode, columns, visible, eventType) { + this.getUpdateStrategy(deferMode).setColumnsVisible(columns, visible, eventType); + } + isColumnVisibleInToolPanel(deferMode, column) { + return this.getUpdateStrategy(deferMode).isColumnVisibleInToolPanel(column); + } + setRowGroupColumns(deferMode, columns, eventType) { + this.getUpdateStrategy(deferMode).setRowGroupColumns(columns, eventType); + } + getRowGroupColumns(deferMode) { + return this.getUpdateStrategy(deferMode).getRowGroupColumns(); + } + getPrimaryColumns(deferMode) { + return this.getUpdateStrategy(deferMode).getPrimaryColumns(); + } + hasDeferredColumnOrder(deferMode) { + return this.getUpdateStrategy(deferMode).hasDeferredColumnOrder(); + } + setValueColumns(deferMode, columns, eventType) { + this.getUpdateStrategy(deferMode).setValueColumns(columns, eventType); + } + getValueColumns(deferMode) { + return this.getUpdateStrategy(deferMode).getValueColumns(); + } + setColumnAggFunc(deferMode, column, aggFunc, eventType) { + this.getUpdateStrategy(deferMode).setColumnAggFunc(column, aggFunc, eventType); + } + getColumnAggFunc(deferMode, column) { + return this.getUpdateStrategy(deferMode).getColumnAggFunc(column); + } + setPivotColumns(deferMode, columns, eventType) { + this.getUpdateStrategy(deferMode).setPivotColumns(columns, eventType); + } + getPivotColumns(deferMode) { + return this.getUpdateStrategy(deferMode).getPivotColumns(); + } + setPivotMode(deferMode, pivotMode, eventType) { + this.getUpdateStrategy(deferMode).setPivotMode(pivotMode, eventType); + } + getPivotMode(deferMode) { + return this.getUpdateStrategy(deferMode).getPivotMode(); + } + isColumnSelectedInPivotModeToolPanel(deferMode, column) { + return this.getUpdateStrategy(deferMode).isColumnSelectedInPivotModeToolPanel(column); + } + progressSortFromEvent(deferMode, column, event) { + this.getUpdateStrategy(deferMode).progressSortFromEvent(column, event); + } + getSortDef(deferMode, column) { + return this.getUpdateStrategy(deferMode).getSortDef(column); + } + getUpdateStrategy(deferApply) { + return deferApply ? this.getDeferredUpdateStrategy() : this.getSyncUpdateStrategy(); + } + getSyncUpdateStrategy() { + return this.syncUpdateStrategy ?? (this.syncUpdateStrategy = new SynchronousColumnStateUpdateStrategy(this.beans)); + } + getDeferredUpdateStrategy() { + return this.deferredUpdateStrategy ?? (this.deferredUpdateStrategy = new DeferredColumnStateUpdateStrategy(this.beans)); + } +}; +var SynchronousColumnStateUpdateStrategy = class { + constructor(beans) { + this.beans = beans; + this.lastPivotColIds = []; + this.reset = noop; + this.commit = noop; + this.hasPendingChanges = () => false; + this.hasDeferredColumnOrder = () => false; + } + applyColumnState(state, eventType) { + if (state.length === 0) { + return; + } + _applyColumnState(this.beans, { state }, eventType); + } + moveColumns(columns, targetIndex, eventType) { + this.beans.colMoves?.moveColumns(columns, targetIndex, eventType); + syncPrimaryColDefOrderFromCurrentColumns(this.beans); + } + setColumnsVisible(columns, visible, eventType) { + const allowedCols = columns.filter((column) => !column.getColDef().lockVisible); + this.beans.colModel.setColsVisible(allowedCols, visible, eventType); + } + setRowGroupColumns(columns, eventType) { + this.beans.rowGroupColsSvc?.setColumns(columns, eventType); + } + getRowGroupColumns() { + return this.beans.rowGroupColsSvc?.columns ?? []; + } + getPrimaryColumns() { + return getPrimaryColumns(this.beans); + } + setValueColumns(columns, eventType) { + this.beans.valueColsSvc?.setColumns(columns, eventType); + } + getValueColumns() { + return this.beans.valueColsSvc?.columns ?? []; + } + setColumnAggFunc(column, aggFunc, eventType) { + this.beans.valueColsSvc?.setColumnAggFunc?.(column, aggFunc, eventType); + } + getColumnAggFunc(column) { + return column.getAggFunc(); + } + setPivotColumns(columns, eventType) { + this.lastPivotColIds = columns.map((column) => column.getColId()); + this.beans.pivotColsSvc?.setColumns(columns, eventType); + } + getPivotColumns() { + return this.beans.pivotColsSvc?.columns ?? []; + } + setPivotMode(pivotMode, eventType) { + const { colModel, gos, ctrlsSvc } = this.beans; + if (pivotMode === colModel.isPivotMode()) { + return; + } + const currentPivotColIds = this.beans.pivotColsSvc?.columns.map((col) => col.getColId()) ?? []; + if (currentPivotColIds.length > 0) { + this.lastPivotColIds = currentPivotColIds; + } + if (!pivotMode) { + const cols = this.beans.colModel.getColDefCols() ?? []; + _applyColumnState( + this.beans, + { + state: cols.map((col) => ({ + colId: col.getColId(), + pivot: false, + pivotIndex: null + })) + }, + eventType + ); + } + gos.updateGridOptions({ options: { pivotMode }, source: eventType }); + if (pivotMode && this.lastPivotColIds.length > 0) { + this.beans.pivotColsSvc?.setColumns(this.lastPivotColIds, eventType); + } + for (const c of ctrlsSvc.getHeaderRowContainerCtrls()) { + c.refresh(); + } + } + progressSortFromEvent(column, event) { + this.beans.sortSvc?.progressSortFromEvent(column, event); + } + isColumnVisibleInToolPanel(column) { + return column.isVisible(); + } + isColumnSelectedInPivotModeToolPanel(column) { + return column.isAnyFunctionActive(); + } + getPivotMode() { + return this.beans.colModel.isPivotMode(); + } + getSortDef(column) { + return column.getSortDef(); + } +}; +var DeferredColumnStateUpdateStrategy = class { + constructor(beans) { + this.beans = beans; + this.state = {}; + this.sequence = 0; + this.lastPivotColIds = []; + } + reset() { + this.sequence = 0; + this.state = {}; + } + hasPendingChanges() { + const { state, beans } = this; + const { columnState, columnOrder, rowGroup, aggregation, pivot, pivotMode, sort, aggFuncs } = state; + const getColIds = (cols) => (cols ?? []).map((c) => c.getColId()); + if (columnState) { + for (const [colId, patch] of columnState.patches) { + const column = beans.colModel.getColDefCol(colId); + if (!column) { + continue; + } + if (patch.hide !== void 0 && patch.hide !== !column.isVisible() || patch.rowGroup !== void 0 && !!patch.rowGroup !== column.isRowGroupActive() || patch.pivot !== void 0 && !!patch.pivot !== column.isPivotActive() || patch.aggFunc !== void 0 && (patch.aggFunc ?? null) !== (column.getAggFunc() ?? null)) { + return true; + } + } + } + if (columnOrder && !_areEqual3(columnOrder.colIds, getPrimaryColumnIds(beans))) { + return true; + } + if (rowGroup && !_areEqual3(rowGroup.colIds, getColIds(beans.rowGroupColsSvc?.columns))) { + return true; + } + if (aggregation && !_areEqual3(aggregation.colIds, getColIds(beans.valueColsSvc?.columns))) { + return true; + } + if (pivot && !_areEqual3(pivot.colIds, getColIds(beans.pivotColsSvc?.columns))) { + return true; + } + if (pivotMode && pivotMode.pivotMode !== beans.colModel.isPivotMode()) { + return true; + } + if (sort) { + for (const [colId, sortDef] of sort.sortDefsByColId) { + const column = beans.colModel.getColDefCol(colId); + if (!column) { + continue; + } + if ((sortDef?.direction ?? null) !== (column.getSortDef()?.direction ?? null)) { + return true; + } + } + if (sort.baselineCleared) { + const primaryColumns = getPrimaryColumns(beans); + for (const col of primaryColumns) { + if (!sort.sortDefsByColId.has(col.getColId()) && col.getSortDef() !== null) { + return true; + } + } + } + } + if (aggFuncs) { + for (const [colId, aggFunc] of aggFuncs.values) { + const column = beans.colModel.getColDefCol(colId); + if (!column) { + continue; + } + if (aggFunc !== column.getAggFunc()) { + return true; + } + } + } + return false; + } + commit() { + const { beans, state } = this; + const operations = []; + for (const type of Object.keys(state)) { + const operation = state[type]; + if (operation) { + operations.push({ type, ...operation }); + } + } + const sortedEntries = operations.sort((a, b) => a.seq - b.seq); + for (const operation of sortedEntries) { + switch (operation.type) { + case "columnState": { + _applyColumnState(beans, { state: [...operation.patches.values()] }, operation.eventType); + break; + } + case "columnOrder": { + const orderedColumns = operation.colIds.map((colId) => beans.colModel.getColDefCol(colId)).filter((column) => !!column && isPrimaryColDefColumn(column)); + if (!beans.colModel.isPivotMode()) { + for (let i = 0; i < orderedColumns.length; i++) { + const column = orderedColumns[i]; + const allColumns = beans.colModel.getCols(); + const nonPrimaryPrefix = allColumns.findIndex((col) => isPrimaryColDefColumn(col)); + const targetIndex = (nonPrimaryPrefix >= 0 ? nonPrimaryPrefix : 0) + i; + if (allColumns[targetIndex] !== column) { + beans.colMoves?.moveColumns([column], targetIndex, operation.eventType, true); + } + } + } + syncPrimaryColDefOrder(beans, orderedColumns); + break; + } + case "rowGroup": { + beans.rowGroupColsSvc?.setColumns(operation.colIds, operation.eventType); + break; + } + case "aggregation": { + beans.valueColsSvc?.setColumns(operation.colIds, operation.eventType); + break; + } + case "pivot": { + this.lastPivotColIds = operation.colIds; + beans.pivotColsSvc?.setColumns(operation.colIds, operation.eventType); + break; + } + case "pivotMode": { + const { colModel, ctrlsSvc, gos, stateSvc } = beans; + if (operation.pivotMode !== colModel.isPivotMode()) { + const currentPivotColIds = beans.pivotColsSvc?.columns.map((col) => col.getColId()) ?? []; + if (currentPivotColIds.length > 0) { + this.lastPivotColIds = currentPivotColIds; + } + const previousPivotColIds = stateSvc?.getState().pivot?.pivotColIds ?? currentPivotColIds; + const pivotColIds = operation.pivotMode ? this.state.pivot?.colIds ?? this.lastPivotColIds : previousPivotColIds; + stateSvc?.setState( + { + ...stateSvc.getState(), + pivot: { + pivotMode: operation.pivotMode, + pivotColIds + } + }, + ["pivot"] + ); + if (!operation.pivotMode) { + const cols = beans.colModel.getColDefCols() ?? []; + _applyColumnState( + beans, + { + state: cols.map((col) => ({ + colId: col.getColId(), + pivot: false, + pivotIndex: null + })) + }, + operation.eventType + ); + } + gos.updateGridOptions({ + options: { pivotMode: operation.pivotMode }, + source: operation.eventType + }); + if (operation.pivotMode && pivotColIds.length > 0) { + beans.pivotColsSvc?.setColumns(pivotColIds, operation.eventType); + } + for (const c of ctrlsSvc.getHeaderRowContainerCtrls()) { + c.refresh(); + } + } + break; + } + case "sort": { + const sortState = []; + let sortIndex = 0; + for (const [colId, sortDef] of operation.sortDefsByColId) { + sortState.push({ + colId, + sort: sortDef?.direction ?? null, + sortIndex: sortDef?.direction ? sortIndex++ : null, + sortType: sortDef?.type ?? void 0 + }); + } + _applyColumnState( + beans, + { + state: sortState, + defaultState: operation.baselineCleared ? { sort: null, sortIndex: null, sortType: void 0 } : void 0 + }, + operation.eventType + ); + break; + } + case "aggFuncs": { + for (const [colId, aggFunc] of operation.values) { + const column = beans.colModel.getColDefCol(colId); + if (!column) { + continue; + } + beans.valueColsSvc?.setColumnAggFunc?.(column, aggFunc, operation.eventType); + } + break; + } + } + } + this.reset(); + } + applyColumnState(state, eventType) { + for (const patch of state) { + mergeColumnStatePatch(this.state, patch); + } + const columnState = ensureColumnStateDraft(this.state); + columnState.seq = nextSeq(this.sequence); + this.sequence = columnState.seq; + columnState.eventType = eventType; + } + moveColumns(columns, targetIndex, eventType) { + const movingColIds = new Set(columns.map((column) => column.getColId())); + const orderedColIds = this.state.columnOrder?.colIds ?? getPrimaryColumnIds(this.beans); + const remaining = orderedColIds.filter((colId) => !movingColIds.has(colId)); + const movedIds = columns.map((column) => column.getColId()); + const seq = nextSeq(this.sequence); + this.sequence = seq; + this.state.columnOrder = { + colIds: [...remaining.slice(0, targetIndex), ...movedIds, ...remaining.slice(targetIndex)], + eventType, + seq + }; + } + setColumnsVisible(columns, visible, eventType) { + for (const column of columns) { + if (column.getColDef().lockVisible) { + continue; + } + mergeColumnStatePatch(this.state, { colId: column.getColId(), hide: !visible }); + } + const columnState = ensureColumnStateDraft(this.state); + columnState.seq = nextSeq(this.sequence); + this.sequence = columnState.seq; + columnState.eventType = eventType; + } + setRowGroupColumns(columns, eventType) { + clearDeferredFunctionPatches(this.state, "rowGroup"); + const seq = nextSeq(this.sequence); + this.sequence = seq; + this.state.rowGroup = { + colIds: columns.map((column) => column.getColId()), + eventType, + seq + }; + } + setValueColumns(columns, eventType) { + clearDeferredFunctionPatches(this.state, "aggFunc"); + const liveValueColIds = new Set((this.beans.valueColsSvc?.columns ?? []).map((col) => col.getColId())); + const aggFuncs = ensureAggFuncsDraft(this.state); + for (const col of columns) { + if (!liveValueColIds.has(col.getColId()) && !aggFuncs.values.has(col.getColId())) { + const existingAggFunc = col.getAggFunc(); + const aggFunc = existingAggFunc != null ? existingAggFunc : this.beans.aggFuncSvc?.getDefaultAggFunc(col); + if (aggFunc != null) { + aggFuncs.values.set(col.getColId(), aggFunc); + } + } + } + const seq = nextSeq(this.sequence); + this.sequence = seq; + aggFuncs.seq = seq; + aggFuncs.eventType = eventType; + this.state.aggregation = { + colIds: columns.map((column) => column.getColId()), + eventType, + seq + }; + } + setColumnAggFunc(column, aggFunc, eventType) { + mergeColumnStatePatch(this.state, { colId: column.getColId(), aggFunc }); + const columnState = ensureColumnStateDraft(this.state); + columnState.seq = nextSeq(this.sequence); + this.sequence = columnState.seq; + columnState.eventType = eventType; + const aggFuncs = ensureAggFuncsDraft(this.state); + aggFuncs.seq = columnState.seq; + aggFuncs.eventType = eventType; + aggFuncs.values.set(column.getColId(), aggFunc); + } + getColumnAggFunc(column) { + const colId = column.getColId(); + if (this.state.aggFuncs?.values.has(colId)) { + return this.state.aggFuncs.values.get(colId); + } + return column.getAggFunc(); + } + isColumnVisibleInToolPanel(column) { + const columnState = this.state.columnState?.patches.get(column.getColId()); + if (columnState?.hide !== void 0) { + return !columnState.hide; + } + return column.isVisible(); + } + isColumnSelectedInPivotModeToolPanel(column) { + const colId = column.getColId(); + const columnState = this.state.columnState?.patches.get(colId); + let rowGroupActive; + if (columnState?.rowGroup !== void 0) { + rowGroupActive = !!columnState.rowGroup; + } else if (this.state.rowGroup) { + rowGroupActive = this.state.rowGroup.colIds.includes(colId); + } else { + rowGroupActive = column.isRowGroupActive(); + } + let pivotActive; + if (columnState?.pivot !== void 0) { + pivotActive = !!columnState.pivot; + } else if (this.state.pivot) { + pivotActive = this.state.pivot.colIds.includes(colId); + } else { + pivotActive = column.isPivotActive(); + } + let valueActive; + if (columnState?.aggFunc !== void 0) { + valueActive = columnState.aggFunc != null; + } else if (this.state.aggregation) { + valueActive = this.state.aggregation.colIds.includes(colId); + } else { + valueActive = column.isValueActive(); + } + return rowGroupActive || pivotActive || valueActive; + } + setPivotColumns(columns, eventType) { + clearDeferredFunctionPatches(this.state, "pivot"); + const seq = nextSeq(this.sequence); + this.sequence = seq; + this.state.pivot = { + colIds: columns.map((column) => column.getColId()), + eventType, + seq + }; + } + setPivotMode(pivotMode, eventType) { + const seq = nextSeq(this.sequence); + this.sequence = seq; + this.state.pivotMode = { + pivotMode, + eventType, + seq + }; + } + getRowGroupColumns() { + return getDraftColumns( + this.beans, + getDraftFunctionColumnIds( + this.state.rowGroup?.colIds, + this.beans.rowGroupColsSvc?.columns, + this.state.columnState?.patches, + (patch) => patch.rowGroup == null ? void 0 : !!patch.rowGroup + ) + ); + } + getPrimaryColumns() { + return getDraftColumns(this.beans, this.state.columnOrder?.colIds ?? getPrimaryColumnIds(this.beans)); + } + hasDeferredColumnOrder() { + return !!this.state.columnOrder; + } + getValueColumns() { + return getDraftColumns( + this.beans, + getDraftFunctionColumnIds( + this.state.aggregation?.colIds, + this.beans.valueColsSvc?.columns, + this.state.columnState?.patches, + (patch) => patch.aggFunc === void 0 ? void 0 : patch.aggFunc != null + ) + ); + } + getPivotColumns() { + if (!this.getPivotMode()) { + return []; + } + const livePivotColumns = this.beans.pivotColsSvc?.columns; + const fallbackColumns = livePivotColumns?.length ? livePivotColumns : getDraftColumns(this.beans, this.lastPivotColIds); + return getDraftColumns( + this.beans, + getDraftFunctionColumnIds( + this.state.pivot?.colIds, + fallbackColumns, + this.state.columnState?.patches, + (patch) => patch.pivot == null ? void 0 : !!patch.pivot + ) + ); + } + getPivotMode() { + return this.state.pivotMode?.pivotMode ?? this.beans.colModel.isPivotMode(); + } + getSortDef(column) { + const draftSortState = this.state.sort; + const colId = column.getColId(); + const sortDefsByColId = draftSortState?.sortDefsByColId; + if (sortDefsByColId?.has(colId)) { + return sortDefsByColId.get(colId) ?? null; + } + if (draftSortState?.baselineCleared) { + return null; + } + return column.getSortDef(); + } + progressSortFromEvent(column, event) { + const currentDraft = this.state.sort ?? { + sortDefsByColId: /* @__PURE__ */ new Map(), + baselineCleared: false, + seq: 0, + eventType: "toolPanelUi" + }; + const { sortSvc } = this.beans; + const colId = column.getColId(); + let currentSortDef; + if (currentDraft.sortDefsByColId.has(colId)) { + currentSortDef = currentDraft.sortDefsByColId.get(colId); + } else if (currentDraft.baselineCleared) { + currentSortDef = null; + } else { + currentSortDef = column.getSortDef(); + } + const nextSortDef = sortSvc?.getNextSortDirection(column, currentSortDef); + if (!nextSortDef) { + return; + } + const { gos } = this.beans; + const sortUsingCtrl = gos.get("multiSortKey") === "ctrl"; + const multiSort = sortUsingCtrl ? event.ctrlKey || event.metaKey : event.shiftKey; + const doingMultiSort = (multiSort || gos.get("alwaysMultiSort")) && !gos.get("suppressMultiSort"); + if (!doingMultiSort) { + currentDraft.sortDefsByColId.clear(); + currentDraft.baselineCleared = true; + } + currentDraft.sortDefsByColId.set(colId, nextSortDef.direction ? nextSortDef : null); + currentDraft.seq = nextSeq(this.sequence); + this.sequence = currentDraft.seq; + this.state.sort = currentDraft; + } +}; +function getDraftColumns(beans, colIds) { + if (!colIds) { + return []; + } + return colIds.map((colId) => beans.colModel.getColDefCol(colId)).filter((column) => !!column); +} +function getDraftFunctionColumnIds(draftColIds, liveColumns, columnStatePatches, getPatchState) { + const colIds = [...draftColIds ?? liveColumns?.map((column) => column.getColId()) ?? []]; + if (!columnStatePatches?.size) { + return colIds; + } + const colIdsSet = new Set(colIds); + for (const [colId, patch] of columnStatePatches) { + const nextState = getPatchState(patch); + if (nextState === void 0) { + continue; + } + if (nextState) { + if (!colIdsSet.has(colId)) { + colIds.push(colId); + colIdsSet.add(colId); + } + continue; + } + if (!colIdsSet.has(colId)) { + continue; + } + colIdsSet.delete(colId); + const index = colIds.indexOf(colId); + if (index >= 0) { + colIds.splice(index, 1); + } + } + return colIds; +} +function syncPrimaryColDefOrderFromCurrentColumns(beans) { + const orderedPrimaryColumns = beans.colModel.getCols().filter((column) => isPrimaryColDefColumn(column)).map((column) => beans.colModel.getColDefCol(column.getColId())).filter((column) => !!column); + syncPrimaryColDefOrder(beans, orderedPrimaryColumns); +} +function syncPrimaryColDefOrder(beans, orderedPrimaryColumns) { + const colDefCols = getMutablePrimaryColDefCollection(beans); + if (!colDefCols) { + return; + } + const orderedSet = new Set(orderedPrimaryColumns); + colDefCols.list = [ + ...orderedPrimaryColumns, + ...colDefCols.list.filter((col) => isPrimaryColDefColumn(col) && !orderedSet.has(col)) + ]; +} +function getPrimaryColumnIds(beans) { + return getPrimaryColumns(beans).map((column) => column.getColId()); +} +function getPrimaryColumns(beans) { + return (beans.colModel.getColDefCols() ?? beans.colModel.getCols()).filter( + (column) => isPrimaryColDefColumn(column) + ); +} +function getMutablePrimaryColDefCollection(beans) { + const colDefCols = beans.colModel.colDefCols; + const colDefList = colDefCols?.list; + if (!Array.isArray(colDefList)) { + return void 0; + } + return colDefCols; +} +function isPrimaryColDefColumn(column) { + if (!column.isPrimary()) { + return false; + } + return !isColumnGroupAutoCol(column) && !isSpecialCol(column); +} +function nextSeq(sequence) { + return sequence + 1; +} +function mergeColumnStatePatch(state, patch) { + const columnState = ensureColumnStateDraft(state); + const existing = columnState.patches.get(patch.colId); + columnState.patches.set(patch.colId, existing ? { ...existing, ...patch } : patch); +} +function clearDeferredFunctionPatches(state, patchKey) { + const patches = state.columnState?.patches; + if (!patches?.size) { + return; + } + for (const [colId, patch] of patches) { + if (!(patchKey in patch)) { + continue; + } + const nextPatch = { ...patch }; + delete nextPatch[patchKey]; + if (Object.keys(nextPatch).length === 1) { + patches.delete(colId); + continue; + } + patches.set(colId, nextPatch); + } +} +function ensureColumnStateDraft(state) { + let { columnState } = state; + if (!columnState) { + columnState = { + patches: /* @__PURE__ */ new Map(), + seq: 0, + eventType: "toolPanelUi" + }; + state.columnState = columnState; + } + return columnState; +} +function ensureAggFuncsDraft(state) { + let { aggFuncs } = state; + if (!aggFuncs) { + aggFuncs = { + values: /* @__PURE__ */ new Map(), + seq: 0, + eventType: "toolPanelUi" + }; + state.aggFuncs = aggFuncs; + } + return aggFuncs; +} + +// packages/ag-grid-enterprise/src/columnToolPanel/updates/columnStateUpdateStrategy.ts +var ColumnStateUpdateStrategy = class extends BeanStub10 { + constructor() { + super(...arguments); + this.beanName = "columnStateUpdateStrategy"; + } + applyColumnState(deferMode, state, eventType) { + this.delegate("applyColumnState", deferMode, state, eventType); + } + commit(deferMode) { + this.delegate("commit", deferMode); + } + hasPendingChanges(deferMode) { + return this.delegate("hasPendingChanges", deferMode); + } + moveColumns(deferMode, columns, targetIndex, eventType) { + this.delegate("moveColumns", deferMode, columns, targetIndex, eventType); + } + reset(deferMode) { + this.delegate("reset", deferMode); + } + setColumnsVisible(deferMode, columns, visible, eventType) { + this.delegate("setColumnsVisible", deferMode, columns, visible, eventType); + } + isColumnVisibleInToolPanel(deferMode, column) { + return this.delegate("isColumnVisibleInToolPanel", deferMode, column); + } + setRowGroupColumns(deferMode, columns, eventType) { + this.delegate("setRowGroupColumns", deferMode, columns, eventType); + } + getRowGroupColumns(deferMode) { + return this.delegate("getRowGroupColumns", deferMode); + } + getPrimaryColumns(deferMode) { + return this.delegate("getPrimaryColumns", deferMode); + } + hasDeferredColumnOrder(deferMode) { + return this.delegate("hasDeferredColumnOrder", deferMode); + } + setValueColumns(deferMode, columns, eventType) { + this.delegate("setValueColumns", deferMode, columns, eventType); + } + getValueColumns(deferMode) { + return this.delegate("getValueColumns", deferMode); + } + setColumnAggFunc(deferMode, column, aggFunc, eventType) { + this.delegate("setColumnAggFunc", deferMode, column, aggFunc, eventType); + } + getColumnAggFunc(deferMode, column) { + return this.delegate("getColumnAggFunc", deferMode, column); + } + setPivotColumns(deferMode, columns, eventType) { + this.delegate("setPivotColumns", deferMode, columns, eventType); + } + getPivotColumns(deferMode) { + return this.delegate("getPivotColumns", deferMode); + } + setPivotMode(deferMode, pivotMode, eventType) { + this.delegate("setPivotMode", deferMode, pivotMode, eventType); + } + getPivotMode(deferMode) { + return this.delegate("getPivotMode", deferMode); + } + isColumnSelectedInPivotModeToolPanel(deferMode, column) { + return this.delegate("isColumnSelectedInPivotModeToolPanel", deferMode, column); + } + progressSortFromEvent(deferMode, column, event) { + this.delegate("progressSortFromEvent", deferMode, column, event); + } + getSortDef(deferMode, column) { + return this.delegate("getSortDef", deferMode, column); + } + getUpdateStrategy() { + return this.executionStrategy ?? (this.executionStrategy = this.createManagedBean(new ColumnStateUpdateExecutionStrategy())); + } + delegate(method, ...args) { + const strategy = this.getUpdateStrategy(); + const fn = strategy[method].bind(strategy); + return fn(...args); + } +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/updates/columnStateUpdateStrategyModule.ts +var SharedColumnStateUpdateStrategyModule = { + moduleName: "SharedColumnStateUpdateStrategy", + version: VERSION, + beans: [ColumnStateUpdateStrategy], + dependsOn: [EnterpriseCoreModule] +}; + +// packages/ag-grid-enterprise/src/columnToolPanel/columnsToolPanelModule.ts +var ColumnsToolPanelModule = { + moduleName: "ColumnsToolPanel", + version: VERSION, + beans: [ColumnToolPanelFactory], + userComponents: { agColumnsToolPanel: ColumnToolPanel }, + icons: { + ensureColumnVisible: "column-arrow", + // column tool panel tab + columnsToolPanel: "columns", + // "Group by {column-name}" item in column header menu + menuAddRowGroup: "group", + // "Un-Group by {column-name}" item in column header menu + menuRemoveRowGroup: "group", + // identifies the pivot drop zone + pivotPanel: "pivot", + // "Row groups" drop zone in column tool panel + rowGroupPanel: "group", + // columns tool panel Values drop zone + valuePanel: "aggregation", + // column tool panel column group contracted (click to expand) + columnSelectClosed: "tree-closed", + // column tool panel column group expanded (click to contract) + columnSelectOpen: "tree-open", + // column tool panel header expand/collapse all button, shown when some children are expanded and + // others are collapsed + columnSelectIndeterminate: "tree-indeterminate" + }, + dependsOn: [ + EnterpriseCoreModule, + SharedColumnStateUpdateStrategyModule, + SideBarModule, + _ColumnMoveModule, + _SharedDragAndDropModule2, + _PopupModule2, + MenuItemModule + ] +}; + +// packages/ag-grid-enterprise/src/menu/menuModule.ts +import { _ColumnMoveModule as _ColumnMoveModule2, _PopupModule as _PopupModule3, _SharedDragAndDropModule as _SharedDragAndDropModule3, _SharedMenuModule } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/menu/chartMenuItemMapper.ts +import { BeanStub as BeanStub11, _createIconNoSpan as _createIconNoSpan15, _warn as _warn13 } from "ag-grid-community"; +var ChartMenuItemMapper = class extends BeanStub11 { + constructor() { + super(...arguments); + this.beanName = "chartMenuItemMapper"; + } + getChartItems(key) { + const beans = this.beans; + const chartSvc = beans.chartSvc; + const isPivot = key === "pivotChart"; + if (!chartSvc) { + return null; + } + const getLocaleTextFunc = this.getLocaleTextFunc.bind(this); + const builder = isPivot ? new PivotMenuItemMapper(beans, chartSvc, getLocaleTextFunc) : new RangeMenuItemMapper(beans, chartSvc, getLocaleTextFunc); + const isEnterprise = chartSvc.isEnterprise(); + let topLevelMenuItem = builder.getMenuItem(); + if (topLevelMenuItem?.subMenu && !isEnterprise) { + const filterEnterpriseItems = (m) => ({ + ...m, + subMenu: m.subMenu?.filter((menu) => !menu._enterprise).map((menu) => filterEnterpriseItems(menu)) + }); + topLevelMenuItem = filterEnterpriseItems(topLevelMenuItem); + } + const chartGroupsDef = this.gos.get("chartToolPanelsDef")?.settingsPanel?.chartGroupsDef; + if (chartGroupsDef) { + topLevelMenuItem = this.filterAndOrderChartMenu( + topLevelMenuItem, + chartGroupsDef, + builder.getConfigLookup() + ); + } + return this.cleanInternals(topLevelMenuItem); + } + // Remove our internal _key and _enterprise properties so this does not leak out of the class on the menu items. + cleanInternals(menuItem) { + if (!menuItem) { + return menuItem; + } + const removeKeys = (m) => { + delete m?._key; + delete m?._enterprise; + for (const s2 of m?.subMenu ?? []) { + removeKeys(s2); + } + return m; + }; + return removeKeys(menuItem); + } + buildLookup(menuItem) { + const itemLookup = {}; + const addItem = (item) => { + itemLookup[item._key] = item; + if (item.subMenu) { + for (const s2 of item.subMenu) { + addItem(s2); + } + } + }; + addItem(menuItem); + return itemLookup; + } + /** + * Make the MenuItem match the charts provided and their ordering on the ChartGroupsDef config object as provided by the user. + */ + filterAndOrderChartMenu(topLevelMenuItem, chartGroupsDef, configLookup) { + const menuItemLookup = this.buildLookup(topLevelMenuItem); + const orderedAndFiltered = { ...topLevelMenuItem, subMenu: [] }; + for (const group of Object.keys(chartGroupsDef)) { + const chartTypes = chartGroupsDef[group]; + const chartConfigGroup = configLookup[group]; + if (chartConfigGroup === null) { + continue; + } + if (chartConfigGroup == void 0) { + _warn13(173, { group }); + continue; + } + const menuItem = menuItemLookup[chartConfigGroup._key]; + if (menuItem) { + if (menuItem.subMenu) { + const subMenus = chartTypes.map((chartType) => { + const itemKey = chartConfigGroup[chartType]; + if (itemKey == void 0) { + _warn13(174, { group, chartType }); + return void 0; + } + return menuItemLookup[itemKey]; + }).filter((s2) => s2 !== void 0); + if (subMenus.length > 0) { + menuItem.subMenu = subMenus; + orderedAndFiltered.subMenu?.push(menuItem); + } + } else { + orderedAndFiltered.subMenu?.push(menuItem); + } + } + } + if (orderedAndFiltered.subMenu?.length == 0) { + return null; + } + return orderedAndFiltered; + } +}; +var PivotMenuItemMapper = class { + constructor(beans, chartSvc, getLocaleTextFunc) { + this.beans = beans; + this.chartSvc = chartSvc; + this.getLocaleTextFunc = getLocaleTextFunc; + } + getMenuItem() { + const localeTextFunc = this.getLocaleTextFunc(); + const getMenuItem = (localeKey, defaultText, chartType, key, enterprise = false) => { + return { + // will have a LRM character appended to ensure correct display in RTL languages + name: localeTextFunc(localeKey, defaultText + "\u200E"), + action: () => this.chartSvc.createPivotChart({ chartType }), + _key: key, + _enterprise: enterprise + }; + }; + return { + name: localeTextFunc("pivotChart", "Pivot Chart"), + _key: "pivotChart", + subMenu: [ + { + _key: "pivotColumnChart", + name: localeTextFunc("columnChart", "Column"), + subMenu: [ + getMenuItem("groupedColumn", "Grouped", "groupedColumn", "pivotGroupedColumn"), + getMenuItem("stackedColumn", "Stacked", "stackedColumn", "pivotStackedColumn"), + getMenuItem("normalizedColumn", "100% Stacked", "normalizedColumn", "pivotNormalizedColumn") + ] + }, + { + _key: "pivotBarChart", + name: localeTextFunc("barChart", "Bar"), + subMenu: [ + getMenuItem("groupedBar", "Grouped", "groupedBar", "pivotGroupedBar"), + getMenuItem("stackedBar", "Stacked", "stackedBar", "pivotStackedBar"), + getMenuItem("normalizedBar", "100% Stacked", "normalizedBar", "pivotNormalizedBar") + ] + }, + { + _key: "pivotPieChart", + name: localeTextFunc("pieChart", "Pie"), + subMenu: [ + getMenuItem("pie", "Pie", "pie", "pivotPie"), + getMenuItem("donut", "Donut", "donut", "pivotDonut") + ] + }, + { + _key: "pivotLineChart", + name: localeTextFunc("lineChart", "Line"), + subMenu: [ + getMenuItem("lineChart", "Line", "line", "pivotLineChart"), + getMenuItem("stackedLine", "Stacked", "stackedLine", "pivotStackedLine"), + getMenuItem("normalizedLine", "100% Stacked", "normalizedLine", "pivotNormalizedLine") + ] + }, + { + _key: "pivotAreaChart", + name: localeTextFunc("areaChart", "Area"), + subMenu: [ + getMenuItem("areaChart", "Area", "area", "pivotArea"), + getMenuItem("stackedArea", "Stacked", "stackedArea", "pivotStackedArea"), + getMenuItem("normalizedArea", "100% Stacked", "normalizedArea", "pivotNormalizedArea") + ] + }, + { + _key: "pivotXYChart", + name: localeTextFunc("xyChart", "X Y (Scatter)"), + subMenu: [ + getMenuItem("scatter", "Scatter", "scatter", "pivotScatter"), + getMenuItem("bubble", "Bubble", "bubble", "pivotBubble") + ] + }, + { + _key: "pivotStatisticalChart", + _enterprise: false, + // histogram chart is available in both community and enterprise distributions + name: localeTextFunc("statisticalChart", "Statistical"), + subMenu: [getMenuItem("histogramChart", "Histogram", "histogram", "pivotHistogram", false)] + }, + { + _key: "pivotHierarchicalChart", + _enterprise: true, + name: localeTextFunc("hierarchicalChart", "Hierarchical"), + subMenu: [ + getMenuItem("treemapChart", "Treemap", "treemap", "pivotTreemap", true), + getMenuItem("sunburstChart", "Sunburst", "sunburst", "pivotSunburst", true) + ] + }, + { + _key: "pivotFunnel", + name: localeTextFunc("funnel", "Funnel"), + subMenu: [ + getMenuItem("funnel", "Funnel", "funnel", "pivotFunnel"), + getMenuItem("coneFunnel", "Cone Funnel", "coneFunnel", "pivotConeFunnel"), + getMenuItem("pyramid", "Pyramid", "pyramid", "pivotPyramid") + ] + }, + { + _key: "pivotCombinationChart", + name: localeTextFunc("combinationChart", "Combination"), + subMenu: [ + getMenuItem("columnLineCombo", "Column & Line", "columnLineCombo", "pivotColumnLineCombo"), + getMenuItem("AreaColumnCombo", "Area & Column", "areaColumnCombo", "pivotAreaColumnCombo") + ] + } + ], + icon: _createIconNoSpan15("chart", this.beans, void 0) + }; + } + getConfigLookup() { + return { + columnGroup: { + _key: "pivotColumnChart", + column: "pivotGroupedColumn", + stackedColumn: "pivotStackedColumn", + normalizedColumn: "pivotNormalizedColumn" + }, + barGroup: { + _key: "pivotBarChart", + bar: "pivotGroupedBar", + stackedBar: "pivotStackedBar", + normalizedBar: "pivotNormalizedBar" + }, + pieGroup: { + _key: "pivotPieChart", + pie: "pivotPie", + donut: "pivotDonut", + doughnut: "pivotDonut" + }, + lineGroup: { + _key: "pivotLineChart", + line: "pivotLineChart", + stackedLine: "pivotStackedLine", + normalizedLine: "pivotNormalizedLine" + }, + areaGroup: { + _key: "pivotAreaChart", + area: "pivotArea", + stackedArea: "pivotStackedArea", + normalizedArea: "pivotNormalizedArea" + }, + scatterGroup: { + _key: "pivotXYChart", + bubble: "pivotBubble", + scatter: "pivotScatter" + }, + combinationGroup: { + _key: "pivotCombinationChart", + columnLineCombo: "pivotColumnLineCombo", + areaColumnCombo: "pivotAreaColumnCombo", + customCombo: null + // Not currently supported + }, + hierarchicalGroup: { + _key: "pivotHierarchicalChart", + treemap: "pivotTreemap", + sunburst: "pivotSunburst" + }, + statisticalGroup: { + _key: "pivotStatisticalChart", + histogram: "pivotHistogram", + // Some statistical charts do not currently support pivot mode + rangeBar: null, + rangeArea: null, + boxPlot: null + }, + funnelGroup: { + _key: "pivotFunnel", + funnel: "pivotFunnel", + coneFunnel: "pivotConeFunnel", + pyramid: "pivotPyramid" + }, + // Polar charts do not support pivot mode + polarGroup: null, + // Specialized charts do not currently support pivot mode + specializedGroup: null + }; + } +}; +var RangeMenuItemMapper = class { + constructor(beans, chartSvc, getLocaleTextFunc) { + this.beans = beans; + this.chartSvc = chartSvc; + this.getLocaleTextFunc = getLocaleTextFunc; + } + getMenuItem() { + const localeTextFunc = this.getLocaleTextFunc(); + const getMenuItem = (localeKey, defaultText, chartType, key, enterprise = false) => { + return { + name: localeTextFunc(localeKey, defaultText), + action: () => this.chartSvc.createChartFromCurrentRange(chartType), + _key: key, + _enterprise: enterprise + }; + }; + return { + name: localeTextFunc("chartRange", "Chart Range"), + _key: "chartRange", + subMenu: [ + { + name: localeTextFunc("columnChart", "Column"), + subMenu: [ + getMenuItem("groupedColumn", "Grouped", "groupedColumn", "rangeGroupedColumn"), + getMenuItem("stackedColumn", "Stacked", "stackedColumn", "rangeStackedColumn"), + getMenuItem("normalizedColumn", "100% Stacked", "normalizedColumn", "rangeNormalizedColumn") + ], + _key: "rangeColumnChart" + }, + { + name: localeTextFunc("barChart", "Bar"), + subMenu: [ + getMenuItem("groupedBar", "Grouped", "groupedBar", "rangeGroupedBar"), + getMenuItem("stackedBar", "Stacked", "stackedBar", "rangeStackedBar"), + getMenuItem("normalizedBar", "100% Stacked", "normalizedBar", "rangeNormalizedBar") + ], + _key: "rangeBarChart" + }, + { + name: localeTextFunc("pieChart", "Pie"), + subMenu: [ + getMenuItem("pie", "Pie", "pie", "rangePie"), + getMenuItem("donut", "Donut", "donut", "rangeDonut") + ], + _key: "rangePieChart" + }, + { + name: localeTextFunc("lineChart", "Line"), + subMenu: [ + getMenuItem("lineChart", "Line", "line", "rangeLineChart"), + getMenuItem("stackedLine", "Stacked", "stackedLine", "rangeStackedLine"), + getMenuItem("normalizedLine", "100% Stacked", "normalizedLine", "rangeNormalizedLine") + ], + _key: "rangeLineChart" + }, + { + name: localeTextFunc("areaChart", "Area"), + subMenu: [ + getMenuItem("areaChart", "Area", "area", "rangeArea"), + getMenuItem("stackedArea", "Stacked", "stackedArea", "rangeStackedArea"), + getMenuItem("normalizedArea", "100% Stacked", "normalizedArea", "rangeNormalizedArea") + ], + _key: "rangeAreaChart" + }, + { + name: localeTextFunc("xyChart", "X Y (Scatter)"), + subMenu: [ + getMenuItem("scatter", "Scatter", "scatter", "rangeScatter"), + getMenuItem("bubble", "Bubble", "bubble", "rangeBubble") + ], + _key: "rangeXYChart" + }, + { + name: localeTextFunc("polarChart", "Polar"), + subMenu: [ + getMenuItem("radarLine", "Radar Line", "radarLine", "rangeRadarLine"), + getMenuItem("radarArea", "Radar Area", "radarArea", "rangeRadarArea"), + getMenuItem("nightingale", "Nightingale", "nightingale", "rangeNightingale"), + getMenuItem("radialColumn", "Radial Column", "radialColumn", "rangeRadialColumn"), + getMenuItem("radialBar", "Radial Bar", "radialBar", "rangeRadialBar") + ], + _key: "rangePolarChart", + _enterprise: true + }, + { + name: localeTextFunc("statisticalChart", "Statistical"), + subMenu: [ + getMenuItem("boxPlot", "Box Plot", "boxPlot", "rangeBoxPlot", true), + getMenuItem("histogramChart", "Histogram", "histogram", "rangeHistogram", false), + getMenuItem("rangeBar", "Range Bar", "rangeBar", "rangeRangeBar", true), + getMenuItem("rangeArea", "Range Area", "rangeArea", "rangeRangeArea", true) + ], + _key: "rangeStatisticalChart", + _enterprise: false + // histogram chart is available in both community and enterprise distributions + }, + { + name: localeTextFunc("hierarchicalChart", "Hierarchical"), + subMenu: [ + getMenuItem("treemap", "Treemap", "treemap", "rangeTreemap"), + getMenuItem("sunburst", "Sunburst", "sunburst", "rangeSunburst") + ], + _key: "rangeHierarchicalChart", + _enterprise: true + }, + { + name: localeTextFunc("specializedChart", "Specialized"), + subMenu: [ + getMenuItem("heatmap", "Heatmap", "heatmap", "rangeHeatmap"), + getMenuItem("waterfall", "Waterfall", "waterfall", "rangeWaterfall") + ], + _key: "rangeSpecializedChart", + _enterprise: true + }, + { + name: localeTextFunc("funnel", "Funnel"), + subMenu: [ + getMenuItem("funnel", "Funnel", "funnel", "rangeFunnel"), + getMenuItem("coneFunnel", "Cone Funnel", "coneFunnel", "rangeConeFunnel"), + getMenuItem("pyramid", "Pyramid", "pyramid", "rangePyramid") + ], + _key: "rangeFunnel", + _enterprise: true + }, + { + name: localeTextFunc("combinationChart", "Combination"), + subMenu: [ + getMenuItem("columnLineCombo", "Column & Line", "columnLineCombo", "rangeColumnLineCombo"), + getMenuItem("AreaColumnCombo", "Area & Column", "areaColumnCombo", "rangeAreaColumnCombo") + ], + _key: "rangeCombinationChart" + } + ], + icon: _createIconNoSpan15("chart", this.beans, void 0) + }; + } + getConfigLookup() { + return { + columnGroup: { + _key: "rangeColumnChart", + column: "rangeGroupedColumn", + stackedColumn: "rangeStackedColumn", + normalizedColumn: "rangeNormalizedColumn" + }, + barGroup: { + _key: "rangeBarChart", + bar: "rangeGroupedBar", + stackedBar: "rangeStackedBar", + normalizedBar: "rangeNormalizedBar" + }, + pieGroup: { + _key: "rangePieChart", + pie: "rangePie", + donut: "rangeDonut", + doughnut: "rangeDonut" + }, + lineGroup: { + _key: "rangeLineChart", + line: "rangeLineChart", + stackedLine: "rangeStackedLine", + normalizedLine: "rangeNormalizedLine" + }, + areaGroup: { + _key: "rangeAreaChart", + area: "rangeArea", + stackedArea: "rangeStackedArea", + normalizedArea: "rangeNormalizedArea" + }, + scatterGroup: { + _key: "rangeXYChart", + bubble: "rangeBubble", + scatter: "rangeScatter" + }, + polarGroup: { + _key: "rangePolarChart", + radarLine: "rangeRadarLine", + radarArea: "rangeRadarArea", + nightingale: "rangeNightingale", + radialColumn: "rangeRadialColumn", + radialBar: "rangeRadialBar" + }, + statisticalGroup: { + _key: "rangeStatisticalChart", + boxPlot: "rangeBoxPlot", + histogram: "rangeHistogram", + rangeBar: "rangeRangeBar", + rangeArea: "rangeRangeArea" + }, + hierarchicalGroup: { + _key: "rangeHierarchicalChart", + treemap: "rangeTreemap", + sunburst: "rangeSunburst" + }, + specializedGroup: { + _key: "rangeSpecializedChart", + heatmap: "rangeHeatmap", + waterfall: "rangeWaterfall" + }, + funnelGroup: { + _key: "rangeFunnel", + funnel: "rangeFunnel", + coneFunnel: "rangeConeFunnel", + pyramid: "rangePyramid" + }, + combinationGroup: { + _key: "rangeCombinationChart", + columnLineCombo: "rangeColumnLineCombo", + areaColumnCombo: "rangeAreaColumnCombo", + customCombo: null + // Not currently supported + } + }; + } +}; + +// packages/ag-grid-enterprise/src/menu/columnChooserFactory.ts +import { BeanStub as BeanStub12, _addGridCommonParams as _addGridCommonParams8, _findNextFocusableElement as _findNextFocusableElement7 } from "ag-grid-community"; +var ColumnChooserFactory = class extends BeanStub12 { + constructor() { + super(...arguments); + this.beanName = "colChooserFactory"; + } + createColumnSelectPanel(parent, column, draggable, params) { + const columnSelectPanel = parent.createManagedBean(new AgPrimaryCols()); + const columnChooserParams = params ?? column?.getColDef().columnChooserParams ?? {}; + const { + contractColumnSelection, + suppressColumnExpandAll, + suppressColumnFilter, + suppressColumnSelectAll, + suppressSyncLayoutWithGrid, + columnLayout + } = columnChooserParams; + columnSelectPanel.init( + !!draggable, + _addGridCommonParams8(this.gos, { + suppressColumnMove: false, + suppressValues: false, + suppressPivots: false, + suppressRowGroups: false, + suppressPivotMode: false, + contractColumnSelection: !!contractColumnSelection, + suppressColumnExpandAll: !!suppressColumnExpandAll, + suppressColumnFilter: !!suppressColumnFilter, + suppressColumnSelectAll: !!suppressColumnSelectAll, + suppressSyncLayoutWithGrid: !!columnLayout || !!suppressSyncLayoutWithGrid, + onStateUpdated: () => { + } + }), + "columnMenu" + ); + if (columnLayout) { + columnSelectPanel.setColumnLayout(columnLayout); + } + return columnSelectPanel; + } + showColumnChooser({ + column, + chooserParams, + eventSource, + headerPosition: providedHeaderPosition + }) { + this.hideActiveColumnChooser(); + const columnSelectPanel = this.createColumnSelectPanel(this, column, true, chooserParams); + const translate = this.getLocaleTextFunc(); + const beans = this.beans; + const { visibleCols, focusSvc, menuUtils } = beans; + const columnIndex = visibleCols.allCols.indexOf(column); + const headerPosition = column ? focusSvc.focusedHeader ?? providedHeaderPosition ?? null : null; + this.activeColumnChooserDialog = this.createBean( + new Dialog({ + title: translate("chooseColumns", "Choose Columns"), + component: columnSelectPanel, + width: 300, + height: 300, + resizable: true, + movable: true, + centered: true, + closable: true, + afterGuiAttached: () => { + _findNextFocusableElement7(beans, columnSelectPanel.getGui())?.focus({ + preventScroll: true + }); + this.dispatchVisibleChangedEvent(true, column); + }, + closedCallback: (event) => { + const eComp = this.activeColumnChooser.getGui(); + this.destroyBean(this.activeColumnChooser); + this.activeColumnChooser = void 0; + this.activeColumnChooserDialog = void 0; + this.dispatchVisibleChangedEvent(false, column); + if (column) { + menuUtils.restoreFocusOnClose( + { column, headerPosition, columnIndex, eventSource }, + eComp, + event, + true + ); + } + }, + postProcessPopupParams: { + type: "columnChooser", + column, + eventSource + } + }) + ); + this.activeColumnChooser = columnSelectPanel; + } + hideActiveColumnChooser() { + this.destroyBean(this.activeColumnChooserDialog); + } + dispatchVisibleChangedEvent(visible, column) { + this.eventSvc.dispatchEvent({ + type: "columnMenuVisibleChanged", + visible, + switchingTab: false, + key: "columnChooser", + column: column ?? null + }); + } +}; + +// packages/ag-grid-enterprise/src/menu/columnMenuFactory.ts +import { + BeanStub as BeanStub14, + _addGridCommonParams as _addGridCommonParams9, + _getDisplaySortForColumn, + _getGrandTotalRow, + _isClientSideRowModel as _isClientSideRowModel2, + _isLegacyMenuEnabled +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/menu/menuItemMapper.ts +import { + BeanStub as BeanStub13, + _createIconNoSpan as _createIconNoSpan16, + _exists as _exists13, + _getRowNode, + _normalizeSortType, + _resetColumnState, + _warn as _warn14 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/menu/menuItemValidations.ts +var MENU_ITEM_MODULES = { + pinSubMenu: "PinnedColumn", + pinLeft: "PinnedColumn", + pinRight: "PinnedColumn", + clearPinned: "PinnedColumn", + pinRowSubMenu: "PinnedRow", + pinBottom: "PinnedRow", + pinTop: "PinnedRow", + unpinRow: "PinnedRow", + valueAggSubMenu: "SharedAggregation", + autoSizeThis: "ColumnAutoSize", + autoSizeAll: "ColumnAutoSize", + rowGroup: "SharedRowGrouping", + rowUnGroup: "SharedRowGrouping", + resetColumns: "CommunityCore", + expandAll: ["ClientSideRowModelHierarchy", "ServerSideRowModel"], + contractAll: ["ClientSideRowModelHierarchy", "ServerSideRowModel"], + copy: "Clipboard", + copyWithHeaders: "Clipboard", + copyWithGroupHeaders: "Clipboard", + cut: "Clipboard", + paste: "Clipboard", + export: ["CsvExport", "ExcelExport"], + csvExport: "CsvExport", + excelExport: "ExcelExport", + separator: "CommunityCore", + pivotChart: "IntegratedCharts", + chartRange: "IntegratedCharts", + columnFilter: "ColumnFilter", + columnChooser: "ColumnMenu", + sortAscending: "Sort", + sortDescending: "Sort", + sortAbsoluteAscending: "Sort", + sortAbsoluteDescending: "Sort", + sortUnSort: "Sort" +}; +function validateMenuItem(gos, key) { + const moduleName4 = MENU_ITEM_MODULES[key]; + if (moduleName4) { + gos.assertModuleRegistered(moduleName4, `menu item '${key}'`); + } +} + +// packages/ag-grid-enterprise/src/menu/menuItemMapper.ts +var MENU_ITEM_SEPARATOR = "separator"; +function _removeRepeatsFromArray(array, object) { + if (!array) { + return; + } + for (let index = array.length - 2; index >= 0; index--) { + const thisOneMatches = array[index] === object; + const nextOneMatches = array[index + 1] === object; + if (thisOneMatches && nextOneMatches) { + array.splice(index + 1, 1); + } + } +} +var SORT_MENU_ITEM_TO_MENU_ACTION_PARAMS = { + sortAscending: { fallback: "Sort Ascending", getSortDef: () => ({ type: "default", direction: "asc" }) }, + sortDescending: { + fallback: "Sort Descending", + getSortDef: () => ({ type: "default", direction: "desc" }) + }, + sortAbsoluteAscending: { + fallback: "Sort Absolute Ascending", + getSortDef: () => ({ type: "absolute", direction: "asc" }) + }, + sortAbsoluteDescending: { + fallback: "Sort Absolute Descending", + getSortDef: () => ({ type: "absolute", direction: "desc" }) + }, + sortUnSort: { + fallback: "Clear Sort", + getSortDef: (column) => ({ type: _normalizeSortType(column.getSortDef()?.type), direction: null }) + } +}; +var MenuItemMapper = class extends BeanStub13 { + constructor() { + super(...arguments); + this.beanName = "menuItemMapper"; + } + mapWithStockItems(originalList, column, node, sourceElement, source) { + if (!originalList) { + return []; + } + const resultList = []; + const localeTextFunc = this.getLocaleTextFunc(); + const { beans, gos } = this; + const { + pinnedCols, + colAutosize, + aggFuncSvc, + rowGroupColsSvc, + colNames, + colModel, + clipboardSvc, + expansionSvc, + focusSvc, + csvCreator, + excelCreator, + menuSvc, + colChooserFactory, + sortSvc, + chartMenuItemMapper, + valueColsSvc, + pinnedRowModel + } = beans; + const getStockMenuItem = (key, column2, sourceElement2, source2) => { + validateMenuItem(gos, key); + switch (key) { + case "pinSubMenu": + return pinnedCols && column2 ? { + name: localeTextFunc("pinColumn", "Pin Column"), + icon: _createIconNoSpan16("menuPin", beans, null), + subMenu: ["clearPinned", "pinLeft", "pinRight"] + } : null; + case "pinLeft": + return pinnedCols && column2 ? { + name: localeTextFunc("pinLeft", "Pin Left"), + action: () => pinnedCols.setColsPinned([column2], "left", source2), + checked: !!column2 && column2.isPinnedLeft() + } : null; + case "pinRight": + return pinnedCols && column2 ? { + name: localeTextFunc("pinRight", "Pin Right"), + action: () => pinnedCols.setColsPinned([column2], "right", source2), + checked: !!column2 && column2.isPinnedRight() + } : null; + case "clearPinned": + return pinnedCols && column2 ? { + name: localeTextFunc("noPin", "No Pin"), + action: () => pinnedCols.setColsPinned([column2], null, source2), + checked: !!column2 && !column2.isPinned() + } : null; + case "pinRowSubMenu": { + const enableRowPinning = gos.get("enableRowPinning"); + const subMenu = []; + const pinned = node?.rowPinned ?? node?.pinnedSibling?.rowPinned; + if (pinned) { + subMenu.push("unpinRow"); + } + if (enableRowPinning && enableRowPinning !== "bottom" && pinned != "top") { + subMenu.push("pinTop"); + } + if (enableRowPinning && enableRowPinning !== "top" && pinned != "bottom") { + subMenu.push("pinBottom"); + } + return pinnedRowModel?.isManual() ? { + name: localeTextFunc("pinRow", "Pin Row"), + icon: _createIconNoSpan16("rowPin", beans, column2), + subMenu + } : null; + } + case "pinTop": + return pinnedRowModel?.isManual() ? { + name: localeTextFunc("pinTop", "Pin to Top"), + icon: _createIconNoSpan16("rowPinTop", beans, column2), + action: ({ node: node2, column: column3 }) => node2 && pinnedRowModel.pinRow(node2, "top", column3) + } : null; + case "pinBottom": + return pinnedRowModel?.isManual() ? { + name: localeTextFunc("pinBottom", "Pin to Bottom"), + icon: _createIconNoSpan16("rowPinBottom", beans, column2), + action: ({ node: node2, column: column3 }) => node2 && pinnedRowModel.pinRow(node2, "bottom", column3) + } : null; + case "unpinRow": + return pinnedRowModel?.isManual() ? { + name: localeTextFunc("unpinRow", "Unpin Row"), + icon: _createIconNoSpan16("rowUnpin", beans, column2), + action: ({ node: node2, column: column3 }) => node2 && pinnedRowModel.pinRow(node2, null, column3) + } : null; + case "valueAggSubMenu": + if (aggFuncSvc && valueColsSvc && (column2?.isPrimary() || column2?.getColDef().pivotValueColumn)) { + return { + name: localeTextFunc("valueAggregation", "Value Aggregation"), + icon: _createIconNoSpan16("menuValue", beans, null), + subMenu: createAggregationSubMenu(column2, aggFuncSvc, valueColsSvc, localeTextFunc), + disabled: gos.get("functionsReadOnly") + }; + } else { + return null; + } + case "autoSizeThis": + return colAutosize ? { + name: localeTextFunc("autosizeThisColumn", "Autosize This Column"), + action: () => column2 && colAutosize.autoSizeColumn(column2, source2, gos.get("skipHeaderOnAutoSize")) + } : null; + case "autoSizeAll": + return colAutosize ? { + name: localeTextFunc("autosizeAllColumns", "Autosize All Columns"), + action: () => colAutosize.autoSizeAllColumns({ + source: source2, + skipHeader: gos.get("skipHeaderOnAutoSize") + }) + } : null; + case "rowGroup": + return rowGroupColsSvc ? { + name: getGroupingLocaleText( + localeTextFunc, + "groupBy", + colNames.getDisplayNameForColumn(column2, "header") + ), + disabled: gos.get("functionsReadOnly") || column2?.isRowGroupActive() || !column2?.getColDef().enableRowGroup, + action: () => rowGroupColsSvc.addColumns([column2], source2), + icon: _createIconNoSpan16("menuAddRowGroup", beans, null) + } : null; + case "rowUnGroup": { + if (rowGroupColsSvc && gos.isModuleRegistered("SharedRowGrouping")) { + const showRowGroup = column2?.getColDef().showRowGroup; + const lockedGroups = gos.get("groupLockGroupColumns"); + let name; + let disabled; + let action; + if (showRowGroup === true) { + name = localeTextFunc("ungroupAll", "Un-Group All"); + disabled = gos.get("functionsReadOnly") || lockedGroups === -1 || lockedGroups >= (rowGroupColsSvc.columns.length ?? 0); + action = () => rowGroupColsSvc.setColumns(rowGroupColsSvc.columns.slice(0, lockedGroups), source2); + } else if (typeof showRowGroup === "string") { + const underlyingColumn = colModel.getColDefCol(showRowGroup); + const ungroupByName = underlyingColumn != null ? colNames.getDisplayNameForColumn(underlyingColumn, "header") : showRowGroup; + name = getGroupingLocaleText(localeTextFunc, "ungroupBy", ungroupByName); + disabled = gos.get("functionsReadOnly") || isRowGroupColLocked(underlyingColumn, beans); + action = () => { + rowGroupColsSvc.removeColumns([showRowGroup], source2); + }; + } else { + name = getGroupingLocaleText( + localeTextFunc, + "ungroupBy", + colNames.getDisplayNameForColumn(column2, "header") + ); + disabled = gos.get("functionsReadOnly") || !column2?.isRowGroupActive() || !column2?.getColDef().enableRowGroup || isRowGroupColLocked(column2, beans); + action = () => rowGroupColsSvc.removeColumns([column2], source2); + } + return { + name, + disabled, + action, + icon: _createIconNoSpan16("menuRemoveRowGroup", beans, null) + }; + } else { + return null; + } + } + case "resetColumns": + return { + name: localeTextFunc("resetColumns", "Reset Columns"), + action: () => _resetColumnState(beans, source2) + }; + case "expandAll": + return expansionSvc ? { + name: localeTextFunc("expandAll", "Expand All Row Groups"), + action: () => expansionSvc.expandAll(true) + } : null; + case "contractAll": + return expansionSvc ? { + name: localeTextFunc("collapseAll", "Collapse All Row Groups"), + action: () => expansionSvc.expandAll(false) + } : null; + case "copy": + return clipboardSvc ? { + name: localeTextFunc("copy", "Copy"), + shortcut: localeTextFunc("ctrlC", "Ctrl+C"), + icon: _createIconNoSpan16("clipboardCopy", beans, null), + action: () => clipboardSvc.copyToClipboard() + } : null; + case "copyWithHeaders": + return clipboardSvc ? { + name: localeTextFunc("copyWithHeaders", "Copy with Headers"), + // shortcut: localeTextFunc('ctrlC','Ctrl+C'), + icon: _createIconNoSpan16("clipboardCopy", beans, null), + action: () => clipboardSvc.copyToClipboard({ includeHeaders: true }) + } : null; + case "copyWithGroupHeaders": + return clipboardSvc ? { + name: localeTextFunc("copyWithGroupHeaders", "Copy with Group Headers"), + // shortcut: localeTextFunc('ctrlC','Ctrl+C'), + icon: _createIconNoSpan16("clipboardCopy", beans, null), + action: () => clipboardSvc.copyToClipboard({ includeHeaders: true, includeGroupHeaders: true }) + } : null; + case "cut": + if (clipboardSvc) { + const focusedCell = focusSvc.getFocusedCell(); + const rowNode = focusedCell ? _getRowNode(beans, focusedCell) : null; + const isEditable = rowNode ? focusedCell?.column.isCellEditable(rowNode) : false; + return { + name: localeTextFunc("cut", "Cut"), + shortcut: localeTextFunc("ctrlX", "Ctrl+X"), + icon: _createIconNoSpan16("clipboardCut", beans, null), + disabled: !isEditable || gos.get("suppressCutToClipboard"), + action: () => clipboardSvc.cutToClipboard(void 0, "contextMenu") + }; + } else { + return null; + } + case "paste": + if (clipboardSvc) { + const isPasteBlocked = gos.get("suppressClipboardApi") || gos.get("suppressClipboardPaste") || !column2 || !node || !column2.isCellEditable(node) || column2.isSuppressPaste(node); + return { + name: localeTextFunc("paste", "Paste"), + shortcut: localeTextFunc("ctrlV", "Ctrl+V"), + icon: _createIconNoSpan16("clipboardPaste", beans, null), + disabled: isPasteBlocked, + action: () => clipboardSvc.pasteFromClipboard() + }; + } else { + return null; + } + case "export": { + const exportSubMenuItems = []; + if (!gos.get("suppressCsvExport") && csvCreator) { + exportSubMenuItems.push("csvExport"); + } + if (!gos.get("suppressExcelExport") && excelCreator) { + exportSubMenuItems.push("excelExport"); + } + return exportSubMenuItems.length ? { + name: localeTextFunc("export", "Export"), + subMenu: exportSubMenuItems, + icon: _createIconNoSpan16("save", beans, null) + } : null; + } + case "csvExport": + return csvCreator ? { + name: localeTextFunc("csvExport", "CSV Export"), + icon: _createIconNoSpan16("csvExport", beans, null), + action: () => csvCreator.exportDataAsCsv() + } : null; + case "excelExport": + return excelCreator ? { + name: localeTextFunc("excelExport", "Excel Export"), + icon: _createIconNoSpan16("excelExport", beans, null), + action: () => excelCreator.exportDataAsExcel() + } : null; + case "separator": + return key; + case "pivotChart": + case "chartRange": + return chartMenuItemMapper.getChartItems(key); + case "columnFilter": + return menuSvc && column2 ? { + name: localeTextFunc("columnFilter", "Column Filter"), + icon: _createIconNoSpan16("filter", beans, null), + action: () => menuSvc.showFilterMenu({ + column: column2, + buttonElement: sourceElement2(), + containerType: "columnFilter", + positionBy: "button" + }) + } : null; + case "columnChooser": { + const headerPosition = focusSvc.focusedHeader; + return colChooserFactory ? { + name: localeTextFunc("columnChooser", "Choose Columns"), + icon: _createIconNoSpan16("columns", beans, null), + action: () => colChooserFactory.showColumnChooser({ + column: column2, + eventSource: sourceElement2(), + headerPosition + }) + } : null; + } + case "sortUnSort": + case "sortAscending": + case "sortDescending": + case "sortAbsoluteAscending": + case "sortAbsoluteDescending": { + if (!sortSvc || !column2) { + return null; + } + const { fallback, getSortDef } = SORT_MENU_ITEM_TO_MENU_ACTION_PARAMS[key]; + return { + name: localeTextFunc(key, fallback), + icon: _createIconNoSpan16(key, beans, null), + action: () => sortSvc.setSortForColumn(column2, getSortDef(column2), false, source2) + }; + } + default: { + _warn14(176, { key }); + return null; + } + } + }; + for (const menuItemOrString of originalList) { + let result; + if (typeof menuItemOrString === "string") { + result = getStockMenuItem(menuItemOrString, column, sourceElement, source); + } else { + result = { ...menuItemOrString }; + } + if (!result) { + continue; + } + const resultDef = result; + const { subMenu } = resultDef; + if (subMenu && subMenu instanceof Array) { + resultDef.subMenu = this.mapWithStockItems( + subMenu, + column, + node, + sourceElement, + source + ); + } + if (result != null) { + resultList.push(result); + } + } + _removeRepeatsFromArray(resultList, MENU_ITEM_SEPARATOR); + return resultList; + } +}; +function createAggregationSubMenu(column, aggFuncSvc, valueColsSvc, localeTextFunc) { + let columnToUse; + if (column.isPrimary()) { + columnToUse = column; + } else { + const pivotValueColumn = column.getColDef().pivotValueColumn; + columnToUse = _exists13(pivotValueColumn) ? pivotValueColumn : void 0; + } + const result = []; + if (columnToUse) { + const columnIsAlreadyAggValue = columnToUse.isValueActive(); + const funcNames = aggFuncSvc.getFuncNames(columnToUse); + result.push({ + name: localeTextFunc("noAggregation", "None"), + action: () => { + valueColsSvc.removeColumns([columnToUse], "contextMenu"); + valueColsSvc.setColumnAggFunc(columnToUse, void 0, "contextMenu"); + }, + checked: !columnIsAlreadyAggValue + }); + for (const funcName of funcNames) { + result.push({ + name: localeTextFunc(funcName, aggFuncSvc.getDefaultFuncLabel(funcName)), + action: () => { + valueColsSvc.setColumnAggFunc(columnToUse, funcName, "contextMenu"); + valueColsSvc.addColumns([columnToUse], "contextMenu"); + }, + checked: columnIsAlreadyAggValue && columnToUse.getAggFunc() === funcName + }); + } + } + return result; +} + +// packages/ag-grid-enterprise/src/menu/columnMenuFactory.ts +var ColumnMenuFactory = class extends BeanStub14 { + constructor() { + super(...arguments); + this.beanName = "colMenuFactory"; + } + createMenu(parent, menuItems, column, sourceElement) { + const menuList = parent.createManagedBean( + new MenuList(0, { + column: column ?? null, + node: null, + value: null + }) + ); + const menuItemsMapped = this.beans.menuItemMapper.mapWithStockItems( + menuItems, + column ?? null, + null, + sourceElement, + "columnMenu" + ); + menuList.addMenuItems(menuItemsMapped); + return menuList; + } + getMenuItems(column = null, columnGroup = null) { + const defaultItems = this.getDefaultMenuOptions(column); + let result; + const columnMainMenuItems = (column?.getColDef() ?? columnGroup?.getColGroupDef())?.mainMenuItems; + if (Array.isArray(columnMainMenuItems)) { + result = columnMainMenuItems; + } else if (typeof columnMainMenuItems === "function") { + result = columnMainMenuItems( + _addGridCommonParams9(this.gos, { + column, + columnGroup, + defaultItems + }) + ); + } else { + const userFunc = this.gos.getCallback("getMainMenuItems"); + if (userFunc) { + result = userFunc({ + column, + columnGroup, + defaultItems + }); + } else { + result = defaultItems; + } + } + _removeRepeatsFromArray(result, MENU_ITEM_SEPARATOR); + return result; + } + getDefaultMenuOptions(column) { + const result = []; + const { beans, gos } = this; + const { + colChooserFactory, + rowGroupColsSvc, + colModel, + expansionSvc, + sortSvc, + menuSvc, + pinnedCols, + aggFuncSvc, + colAutosize + } = beans; + const isLegacyMenuEnabled = _isLegacyMenuEnabled(gos); + const addColumnItems = () => { + if (!isLegacyMenuEnabled && colChooserFactory) { + result.push("columnChooser"); + } + result.push("resetColumns"); + }; + if (!column) { + addColumnItems(); + return result; + } + const { colDef } = column; + const allowPinning = pinnedCols && !colDef.lockPinned; + const rowGroupCount = rowGroupColsSvc?.columns.length ?? 0; + const doingGrouping = rowGroupCount > 0; + const grandTotalRow = _getGrandTotalRow(gos); + const treeData = gos.get("treeData"); + const isPrimary = column.isPrimary(); + const allowValueAgg = !isPrimary || aggFuncSvc && column.isAllowValue() && (doingGrouping || grandTotalRow || treeData); + if (sortSvc && !isLegacyMenuEnabled && column.isSortable()) { + const { + isDefaultSortAllowed, + isAbsoluteSortAllowed, + isAbsoluteSort, + isDefaultSort, + isAscending, + isDescending, + direction + } = _getDisplaySortForColumn(column, beans); + if (isDefaultSortAllowed && !(isAscending && isDefaultSort)) { + result.push("sortAscending"); + } + if (isDefaultSortAllowed && !(isDescending && isDefaultSort)) { + result.push("sortDescending"); + } + if (isAbsoluteSortAllowed && !(isAscending && isAbsoluteSort)) { + result.push("sortAbsoluteAscending"); + } + if (isAbsoluteSortAllowed && !(isDescending && isAbsoluteSort)) { + result.push("sortAbsoluteDescending"); + } + if (direction) { + result.push("sortUnSort"); + } + result.push(MENU_ITEM_SEPARATOR); + } + if (menuSvc?.isFilterMenuItemEnabled(column)) { + result.push("columnFilter"); + result.push(MENU_ITEM_SEPARATOR); + } + if (allowPinning) { + result.push("pinSubMenu"); + } + if (allowValueAgg) { + result.push("valueAggSubMenu"); + } + if (allowPinning || allowValueAgg) { + result.push(MENU_ITEM_SEPARATOR); + } + if (colAutosize) { + if (!colDef.suppressAutoSize) { + result.push("autoSizeThis"); + } + result.push("autoSizeAll"); + result.push(MENU_ITEM_SEPARATOR); + } + if (rowGroupColsSvc && gos.isModuleRegistered("SharedRowGrouping")) { + const numItems = result.length; + const showRowGroup = colDef.showRowGroup; + if (showRowGroup) { + result.push("rowUnGroup"); + } else if (column.isAllowRowGroup() && isPrimary) { + if (column.isRowGroupActive()) { + const groupLocked = isRowGroupColLocked(column, beans); + if (!groupLocked) { + result.push("rowUnGroup"); + } + } else { + result.push("rowGroup"); + } + } + if (result.length > numItems) { + result.push(MENU_ITEM_SEPARATOR); + } + } + addColumnItems(); + if (expansionSvc && (_isClientSideRowModel2(gos) || gos.get("ssrmExpandAllAffectsAllRows")) && (treeData || rowGroupCount > (colModel.isPivotMode() ? 1 : 0))) { + result.push("expandAll"); + result.push("contractAll"); + } + return result; + } +}; + +// packages/ag-grid-enterprise/src/menu/contextMenu.ts +import { + BeanStub as BeanStub15, + _addGridCommonParams as _addGridCommonParams10, + _attemptToRestoreCellFocus, + _exists as _exists14, + _getGrandTotalRow as _getGrandTotalRow2, + _isIOSUserAgent +} from "ag-grid-community"; +var CSS_CONTEXT_MENU_OPEN = "ag-context-menu-open"; +var ContextMenuService = class extends BeanStub15 { + constructor() { + super(...arguments); + this.beanName = "contextMenuSvc"; + this.focusedCell = null; + } + postConstruct() { + this.menu = this.createManagedBean( + new AgContextMenuService({ + menuItemCallbacks: MENU_ITEM_CALLBACKS, + getMenuItems: this.getMenuItems.bind(this), + mapMenuItems: this.mapWithStockItems.bind(this), + beforeMenuOpen: this.beforeMenuOpen.bind(this), + onMenuOpen: this.onMenuOpen.bind(this), + onMenuClose: this.onMenuClose.bind(this), + afterMenuDestroyed: this.afterMenuDestroyed.bind(this), + onVisibleChanged: this.dispatchVisibleChangedEvent.bind(this), + // overlay was displayed + shouldBlockMenuOpen: () => !!this.beans.overlays?.exclusive + }) + ); + } + hideActiveMenu() { + this.menu.hideActiveMenu(); + } + getMenuItems(menuActionParams, mouseEvent) { + const { column, node, value } = menuActionParams; + const defaultMenuOptions = []; + const { clipboardSvc, chartSvc, csvCreator, excelCreator, colModel, rangeSvc, gos } = this.beans; + if (_exists14(node) && clipboardSvc) { + if (column) { + if (!gos.get("suppressCutToClipboard")) { + defaultMenuOptions.push("cut"); + } + defaultMenuOptions.push("copy", "copyWithHeaders", "copyWithGroupHeaders", "paste", "separator"); + } + } + if (gos.get("enableCharts") && chartSvc) { + if (colModel.isPivotMode()) { + defaultMenuOptions.push("pivotChart"); + } + if (rangeSvc && !rangeSvc.isEmpty()) { + defaultMenuOptions.push("chartRange"); + } + } + if (_exists14(node)) { + const enableRowPinning = gos.get("enableRowPinning"); + const isRowPinnable = gos.get("isRowPinnable"); + if (enableRowPinning) { + const isGroupTotalRow = node.level > -1 && node.footer; + const isGrandTotalRow = node.level === -1 && node.footer; + const grandTotalRow = _getGrandTotalRow2(gos); + const isGrandTotalRowFixed = grandTotalRow === "pinnedBottom" || grandTotalRow === "pinnedTop"; + if (isGrandTotalRow && !isGrandTotalRowFixed || !isGrandTotalRow && !isGroupTotalRow) { + const pinnable = isRowPinnable?.(node) ?? true; + if (pinnable) { + defaultMenuOptions.push("pinRowSubMenu"); + } + } + } + const suppressExcel = gos.get("suppressExcelExport") || !excelCreator; + const suppressCsv = gos.get("suppressCsvExport") || !csvCreator; + const onIPad = _isIOSUserAgent(); + const anyExport = !onIPad && (!suppressExcel || !suppressCsv); + if (anyExport) { + defaultMenuOptions.push("export"); + } + } + const defaultItems = defaultMenuOptions.length ? defaultMenuOptions : void 0; + const columnContextMenuItems = column?.getColDef().contextMenuItems; + if (Array.isArray(columnContextMenuItems)) { + return columnContextMenuItems; + } + if (typeof columnContextMenuItems === "function") { + return columnContextMenuItems( + _addGridCommonParams10(gos, { + column, + node, + value, + defaultItems, + event: mouseEvent + }) + ); + } + const userFunc = gos.getCallback("getContextMenuItems"); + return userFunc?.({ column, node, value, defaultItems, event: mouseEvent }) ?? defaultMenuOptions; + } + getContextMenuPosition(rowNode, column) { + const rowCtrl = this.getRowCtrl(rowNode); + const eGui = this.getCellGui(rowCtrl, column); + if (!eGui) { + return { x: 0, y: rowCtrl?.getRowYPosition() ?? 0 }; + } + const rect = eGui.getBoundingClientRect(); + return { + x: rect.x + rect.width / 2, + y: rect.y + rect.height / 2 + }; + } + showContextMenu(params) { + const rowNode = params.rowNode ?? null; + const column = params.column ?? null; + let { anchorToElement, value, source } = params; + if (rowNode && column && value == null) { + value = this.beans.valueSvc.getValueForDisplay({ column, node: rowNode, from: "edit" }).value; + } + if (anchorToElement == null) { + anchorToElement = this.getContextMenuAnchorElement(rowNode, column); + } + this.beans.menuUtils.onContextMenu({ + mouseEvent: params.mouseEvent ?? null, + touchEvent: params.touchEvent ?? null, + showMenuCallback: (eventOrTouch) => this.menu.showMenu({ node: rowNode, column, value }, eventOrTouch, anchorToElement), + source + }); + } + handleContextMenuMouseEvent(mouseEvent, touchEvent, rowCtrl, cellCtrl) { + const rowNode = cellCtrl?.rowNode ?? rowCtrl?.rowNode ?? null; + const column = cellCtrl?.column ?? rowCtrl?.findFullWidthInfoForEvent(mouseEvent || touchEvent)?.column ?? null; + const { valueSvc, ctrlsSvc } = this.beans; + const value = column ? valueSvc.getValue(column, rowNode, "edit") : null; + const gridBodyCon = ctrlsSvc.getGridBodyCtrl(); + const anchorToElement = cellCtrl ? cellCtrl.eGui : gridBodyCon.eGridBody; + this.showContextMenu({ + mouseEvent, + touchEvent, + rowNode, + column, + value, + anchorToElement, + source: "ui" + }); + } + beforeMenuOpen(menuActionParams) { + if (!menuActionParams.column) { + this.beans.focusSvc.clearFocusedCell(); + } + } + onMenuOpen() { + const { ctrlsSvc, focusSvc } = this.beans; + ctrlsSvc.getGridBodyCtrl().eGridBody.classList.add(CSS_CONTEXT_MENU_OPEN); + this.focusedCell = focusSvc.getFocusedCell(); + } + onMenuClose() { + this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody.classList.remove(CSS_CONTEXT_MENU_OPEN); + } + afterMenuDestroyed() { + const { beans, focusedCell } = this; + _attemptToRestoreCellFocus(beans, focusedCell); + } + dispatchVisibleChangedEvent(visible, source) { + this.eventSvc.dispatchEvent({ + type: "contextMenuVisibleChanged", + visible, + source + }); + } + getRowCtrl(rowNode) { + const { rowIndex, rowPinned } = rowNode || {}; + if (rowIndex == null) { + return; + } + return this.beans.rowRenderer.getRowByPosition({ rowIndex, rowPinned }) || void 0; + } + getCellGui(rowCtrl, column) { + if (!rowCtrl || !column) { + return; + } + const cellCtrl = rowCtrl.getCellCtrl(column); + return cellCtrl?.eGui || void 0; + } + getContextMenuAnchorElement(rowNode, column) { + const gridBodyEl = this.beans.ctrlsSvc.getGridBodyCtrl().eGridBody; + const rowCtrl = this.getRowCtrl(rowNode); + if (!rowCtrl) { + return gridBodyEl; + } + const cellGui = this.getCellGui(rowCtrl, column); + if (cellGui) { + return cellGui; + } + if (rowCtrl.isFullWidth()) { + return rowCtrl.getFullWidthElement(); + } + return gridBodyEl; + } + mapWithStockItems(menuItems, menuActionParams, getGui) { + const { column, node } = menuActionParams; + return this.beans.menuItemMapper.mapWithStockItems( + menuItems, + column, + node, + getGui, + "contextMenu" + ); + } +}; + +// packages/ag-grid-enterprise/src/menu/enterpriseMenu.ts +import { + AgPromise as AgPromise3, + BeanStub as BeanStub16, + Component as Component30, + FilterComp, + RefPlaceholder as RefPlaceholder28, + _createElement as _createElement9, + _createIconNoSpan as _createIconNoSpan17, + _error, + _focusInto as _focusInto6, + _isColumnMenuAnchoringEnabled, + _isLegacyMenuEnabled as _isLegacyMenuEnabled2, + _setColMenuVisible, + _warn as _warn15, + isColumn as isColumn2 +} from "ag-grid-community"; +var TAB_FILTER = "filterMenuTab"; +var TAB_GENERAL = "generalMenuTab"; +var TAB_COLUMNS = "columnsMenuTab"; +var TABS_DEFAULT = [TAB_GENERAL, TAB_FILTER, TAB_COLUMNS]; +var EnterpriseMenuFactory = class extends BeanStub16 { + constructor() { + super(...arguments); + this.beanName = "enterpriseMenuFactory"; + } + hideActiveMenu() { + this.destroyBean(this.activeMenu); + } + showMenuAfterMouseEvent(columnOrGroup, mouseEvent, containerType, onClosedCallback, filtersOnly) { + const { column, columnGroup } = this.splitColumnOrGroup(columnOrGroup); + const defaultTab = filtersOnly ? "filterMenuTab" : void 0; + this.showMenu( + column, + columnGroup, + (menu) => { + const ePopup = menu.getGui(); + this.beans.popupSvc.positionPopupUnderMouseEvent({ + type: containerType, + additionalParams: { + column + }, + mouseEvent, + ePopup + }); + if (defaultTab) { + menu.showTab?.(defaultTab); + } + this.dispatchVisibleChangedEvent(true, false, column, columnGroup, defaultTab); + }, + containerType, + defaultTab, + void 0, + mouseEvent.target, + onClosedCallback + ); + } + splitColumnOrGroup(columnOrGroup) { + const colIsColumn = columnOrGroup && isColumn2(columnOrGroup); + const column = colIsColumn ? columnOrGroup : void 0; + const columnGroup = colIsColumn ? void 0 : columnOrGroup; + return { column, columnGroup }; + } + showMenuAfterButtonClick(columnOrGroup, eventSource, containerType, onClosedCallback, filtersOnly) { + let multiplier = -1; + let alignSide = "left"; + if (this.gos.get("enableRtl")) { + multiplier = 1; + alignSide = "right"; + } + const defaultTab = filtersOnly ? "filterMenuTab" : void 0; + const restrictToTabs = defaultTab ? [defaultTab] : void 0; + const isLegacyMenuEnabled = _isLegacyMenuEnabled2(this.gos); + const nudgeX = (isLegacyMenuEnabled ? 9 : 4) * multiplier; + const nudgeY = isLegacyMenuEnabled ? -23 : 4; + const { column, columnGroup } = this.splitColumnOrGroup(columnOrGroup); + this.showMenu( + column, + columnGroup, + (menu) => { + const ePopup = menu.getGui(); + this.beans.popupSvc.positionPopupByComponent({ + type: containerType, + additionalParams: { + column + }, + eventSource, + ePopup, + alignSide, + nudgeX, + nudgeY, + position: "under", + keepWithinBounds: true + }); + if (defaultTab) { + menu.showTab?.(defaultTab); + } + this.dispatchVisibleChangedEvent(true, false, column, columnGroup, defaultTab); + }, + containerType, + defaultTab, + restrictToTabs, + eventSource, + onClosedCallback + ); + } + showMenu(column, columnGroup, positionCallback, containerType, defaultTab, restrictToTabs, eventSource, onClosedCallback) { + const menuParams = this.getMenuParams(column, columnGroup, restrictToTabs, eventSource); + if (!menuParams) { + return; + } + const { menu, eMenuGui, anchorToElement, restoreFocusParams } = menuParams; + const closedFuncs = []; + const { menuUtils, popupSvc } = this.beans; + closedFuncs.push((e) => { + const eComp = menu.getGui(); + this.destroyBean(menu); + if (column) { + _setColMenuVisible(column, false, "contextMenu"); + menuUtils.restoreFocusOnClose(restoreFocusParams, eComp, e); + } + onClosedCallback?.(); + }); + const translate = this.getLocaleTextFunc(); + popupSvc.addPopup({ + modal: true, + eChild: eMenuGui, + closeOnEsc: true, + closedCallback: (e) => { + for (const f of closedFuncs) { + f(e); + } + this.dispatchVisibleChangedEvent(false, false, column, columnGroup, defaultTab); + }, + afterGuiAttached: (params) => menu.afterGuiAttached(Object.assign({}, { container: containerType }, params)), + // if defaultTab is not present, positionCallback will be called + // after `showTabBasedOnPreviousSelection` is called. + positionCallback: defaultTab ? () => positionCallback(menu) : void 0, + ariaLabel: translate("ariaLabelColumnMenu", "Column Menu") + }); + if (!defaultTab) { + menu.showTabBasedOnPreviousSelection?.(); + positionCallback(menu); + } + if (_isColumnMenuAnchoringEnabled(this.gos)) { + const stopAnchoringPromise = popupSvc.setPopupPositionRelatedToElement(eMenuGui, anchorToElement); + if (stopAnchoringPromise && column) { + this.addStopAnchoring(stopAnchoringPromise, column, closedFuncs); + } + } + menu.addEventListener("tabSelected", (event) => { + this.dispatchVisibleChangedEvent(false, true, column); + this.lastSelectedTab = event.key; + this.dispatchVisibleChangedEvent(true, true, column); + }); + if (column) { + _setColMenuVisible(column, true, "contextMenu"); + } + this.activeMenu = menu; + menu.addEventListener("destroyed", () => { + if (this.activeMenu === menu) { + this.activeMenu = null; + } + }); + } + addStopAnchoring(stopAnchoringPromise, column, closedFuncsArr) { + stopAnchoringPromise.then((stopAnchoringFunc) => { + column.__addEventListener("leftChanged", stopAnchoringFunc); + column.__addEventListener("visibleChanged", stopAnchoringFunc); + closedFuncsArr.push(() => { + column.__removeEventListener("leftChanged", stopAnchoringFunc); + column.__removeEventListener("visibleChanged", stopAnchoringFunc); + }); + }); + } + getMenuParams(column, columnGroup, restrictToTabs, eventSource) { + const { focusSvc, visibleCols, ctrlsSvc } = this.beans; + const restoreFocusParams = { + column, + headerPosition: focusSvc.focusedHeader, + columnIndex: visibleCols.allCols.indexOf(column), + eventSource + }; + const menu = this.createMenu(column, columnGroup, restoreFocusParams, restrictToTabs, eventSource); + return menu ? { + menu, + eMenuGui: menu.getGui(), + anchorToElement: eventSource || ctrlsSvc.getGridBodyCtrl().eGridBody, + restoreFocusParams + } : void 0; + } + createMenu(column, columnGroup, restoreFocusParams, restrictToTabs, eventSource) { + if (_isLegacyMenuEnabled2(this.gos)) { + return this.createBean( + new TabbedColumnMenu(column, restoreFocusParams, this.lastSelectedTab, restrictToTabs, eventSource) + ); + } else { + const menuItems = this.beans.colMenuFactory.getMenuItems(column, columnGroup); + return menuItems.length ? this.createBean(new ColumnContextMenu(menuItems, column, restoreFocusParams, eventSource)) : void 0; + } + } + dispatchVisibleChangedEvent(visible, switchingTab, column, columnGroup, defaultTab) { + this.eventSvc.dispatchEvent({ + type: "columnMenuVisibleChanged", + visible, + switchingTab, + key: this.lastSelectedTab ?? defaultTab ?? (_isLegacyMenuEnabled2(this.gos) ? TAB_GENERAL : "columnMenu"), + column: column ?? null, + columnGroup: columnGroup ?? null + }); + } + isMenuEnabled(column) { + if (!_isLegacyMenuEnabled2(this.gos)) { + return true; + } + const isFilterDisabled = !this.beans.filterManager?.isFilterAllowed(column); + const tabs = column.getColDef().menuTabs ?? TABS_DEFAULT; + const numActiveTabs = isFilterDisabled && tabs.includes(TAB_FILTER) ? tabs.length - 1 : tabs.length; + return numActiveTabs > 0; + } + showMenuAfterContextMenuEvent(column, mouseEvent, touchEvent) { + this.beans.menuUtils.onContextMenu({ + mouseEvent, + touchEvent, + source: "ui", + showMenuCallback: (eventOrTouch) => { + this.showMenuAfterMouseEvent(column, eventOrTouch, "columnMenu"); + return true; + } + }); + } +}; +var TabbedColumnMenu = class extends BeanStub16 { + constructor(column, restoreFocusParams, initialSelection, restrictTo, sourceElement) { + super(); + this.column = column; + this.restoreFocusParams = restoreFocusParams; + this.initialSelection = initialSelection; + this.restrictTo = restrictTo; + this.sourceElement = sourceElement; + this.tabFactories = {}; + this.includeChecks = {}; + const { tabFactories, includeChecks } = this; + tabFactories[TAB_GENERAL] = this.createMainPanel.bind(this); + tabFactories[TAB_FILTER] = this.createFilterPanel.bind(this); + tabFactories[TAB_COLUMNS] = this.createColumnsPanel.bind(this); + includeChecks[TAB_GENERAL] = () => true; + includeChecks[TAB_FILTER] = () => column ? !!this.beans.filterManager?.isFilterAllowed(column) : false; + includeChecks[TAB_COLUMNS] = () => true; + } + postConstruct() { + const tabs = this.getTabsToCreate().map((name) => this.createTab(name)); + const tabbedLayout = new AgTabbedLayout({ + items: tabs, + cssClass: "ag-menu", + onActiveItemClicked: this.onHidePopup.bind(this), + onItemClicked: this.onTabItemClicked.bind(this) + }); + this.tabbedLayout = this.createBean(tabbedLayout); + this.mainMenuList?.setParentComponent(tabbedLayout); + this.addDestroyFunc(() => this.destroyBean(tabbedLayout)); + } + getTabsToCreate() { + if (this.restrictTo) { + return this.restrictTo; + } + return (this.column?.getColDef().menuTabs ?? TABS_DEFAULT).filter( + (tabName) => this.isValidMenuTabItem(tabName) && this.isNotSuppressed(tabName) + ); + } + isValidMenuTabItem(menuTabName) { + let isValid = true; + let itemsToConsider = TABS_DEFAULT; + if (this.restrictTo != null) { + isValid = this.restrictTo.indexOf(menuTabName) > -1; + itemsToConsider = this.restrictTo; + } + isValid = isValid && TABS_DEFAULT.indexOf(menuTabName) > -1; + if (!isValid) { + _warn15(175, { menuTabName, itemsToConsider }); + } + return isValid; + } + isNotSuppressed(menuTabName) { + return this.includeChecks[menuTabName](); + } + createTab(name) { + return this.tabFactories[name](); + } + showTabBasedOnPreviousSelection() { + this.showTab(this.initialSelection); + } + showTab(toShow) { + const { tabItemColumns, tabbedLayout, tabItemFilter, tabItemGeneral } = this; + if (tabItemColumns && toShow === TAB_COLUMNS) { + tabbedLayout.showItem(tabItemColumns); + } else if (tabItemFilter && toShow === TAB_FILTER) { + tabbedLayout.showItem(tabItemFilter); + } else if (tabItemGeneral && toShow === TAB_GENERAL) { + tabbedLayout.showItem(tabItemGeneral); + } else { + tabbedLayout.showFirstItem(); + } + } + onTabItemClicked(event) { + let key = null; + switch (event.item) { + case this.tabItemColumns: + key = TAB_COLUMNS; + break; + case this.tabItemFilter: + key = TAB_FILTER; + break; + case this.tabItemGeneral: + key = TAB_GENERAL; + break; + } + if (key) { + this.activateTab(key); + } + } + activateTab(tab) { + const ev = { + type: "tabSelected", + key: tab + }; + this.dispatchLocalEvent(ev); + } + createMainPanel() { + const { beans, column } = this; + const colMenuFactory = beans.colMenuFactory; + const mainMenuList = colMenuFactory.createMenu( + this, + colMenuFactory.getMenuItems(column), + this.column, + () => this.sourceElement ?? this.getGui() + ); + this.mainMenuList = mainMenuList; + mainMenuList.addEventListener("closeMenu", this.onHidePopup.bind(this)); + const tabItemGeneral = { + title: _createIconNoSpan17("legacyMenu", beans, column), + titleLabel: TAB_GENERAL.replace("MenuTab", ""), + bodyPromise: AgPromise3.resolve(mainMenuList.getGui()), + name: TAB_GENERAL + }; + this.tabItemGeneral = tabItemGeneral; + return tabItemGeneral; + } + onHidePopup(event) { + this.beans.menuUtils.closePopupAndRestoreFocusOnSelect( + this.hidePopupFunc, + this.restoreFocusParams, + event + ); + } + createFilterPanel() { + const comp = this.column ? this.createBean(new FilterComp(this.column, "COLUMN_MENU")) : null; + this.filterComp = comp; + if (!comp?.hasFilter()) { + _error(119); + } + const afterAttachedCallback = (params) => comp?.afterGuiAttached(params); + const afterDetachedCallback = () => comp?.afterGuiDetached(); + this.tabItemFilter = { + title: _createIconNoSpan17("filterTab", this.beans, this.column), + titleLabel: TAB_FILTER.replace("MenuTab", ""), + bodyPromise: AgPromise3.resolve(comp?.getGui()), + afterAttachedCallback, + afterDetachedCallback, + name: TAB_FILTER + }; + return this.tabItemFilter; + } + createColumnsPanel() { + const eWrapperDiv = _createElement9({ tag: "div", cls: "ag-menu-column-select-wrapper" }); + const { beans, column } = this; + const columnSelectPanel = beans.colChooserFactory.createColumnSelectPanel( + this, + column + ); + const columnSelectPanelGui = columnSelectPanel.getGui(); + columnSelectPanelGui.classList.add("ag-menu-column-select"); + eWrapperDiv.appendChild(columnSelectPanelGui); + const tabItemColumns = { + title: _createIconNoSpan17("columns", beans, column), + //createColumnsIcon(), + titleLabel: TAB_COLUMNS.replace("MenuTab", ""), + bodyPromise: AgPromise3.resolve(eWrapperDiv), + name: TAB_COLUMNS + }; + this.tabItemColumns = tabItemColumns; + return tabItemColumns; + } + afterGuiAttached(params) { + const { container, hidePopup } = params; + this.tabbedLayout.setAfterAttachedParams({ container, hidePopup }); + if (hidePopup) { + this.hidePopupFunc = hidePopup; + this.addDestroyFunc(hidePopup); + } + } + getGui() { + return this.tabbedLayout.getGui(); + } + destroy() { + super.destroy(); + this.destroyBean(this.filterComp); + } +}; +var ColumnContextMenu = class extends Component30 { + constructor(menuItems, column, restoreFocusParams, sourceElement) { + super({ tag: "div", ref: "eColumnMenu", cls: "ag-menu ag-column-menu", role: "presentation" }); + this.menuItems = menuItems; + this.column = column; + this.restoreFocusParams = restoreFocusParams; + this.sourceElement = sourceElement; + this.eColumnMenu = RefPlaceholder28; + } + postConstruct() { + const mainMenuList = this.beans.colMenuFactory.createMenu( + this, + this.menuItems, + this.column, + () => this.sourceElement ?? this.getGui() + ); + this.mainMenuList = mainMenuList; + mainMenuList.addEventListener("closeMenu", this.onHidePopup.bind(this)); + this.eColumnMenu.appendChild(mainMenuList.getGui()); + } + // eslint-disable-next-line sonarjs/no-identical-functions + onHidePopup(event) { + this.beans.menuUtils.closePopupAndRestoreFocusOnSelect( + this.hidePopupFunc, + this.restoreFocusParams, + event + ); + } + afterGuiAttached({ hidePopup }) { + if (hidePopup) { + this.hidePopupFunc = hidePopup; + this.addDestroyFunc(hidePopup); + } + _focusInto6(this.mainMenuList.getGui()); + } +}; + +// packages/ag-grid-enterprise/src/menu/menuApi.ts +function showContextMenu(beans, params) { + const { contextMenuSvc } = beans; + if (!contextMenuSvc) { + return; + } + const { rowNode, column, value, x, y } = params || {}; + let { x: clientX, y: clientY } = contextMenuSvc.getContextMenuPosition(rowNode, column); + if (x != null) { + clientX = x; + } + if (y != null) { + clientY = y; + } + contextMenuSvc.showContextMenu({ + mouseEvent: new MouseEvent("mousedown", { clientX, clientY }), + rowNode, + column, + value, + source: "api" + }); +} +function showColumnChooser(beans, params) { + beans.colChooserFactory?.showColumnChooser({ chooserParams: params }); +} +function hideColumnChooser(beans) { + beans.colChooserFactory?.hideActiveColumnChooser(); +} + +// packages/ag-grid-enterprise/src/menu/menuUtils.ts +import { + BeanStub as BeanStub17, + _findTabbableParent, + _getActiveDomElement as _getActiveDomElement9, + _isNothingFocused as _isNothingFocused2, + _isVisible as _isVisible6, + _last as _last6 +} from "ag-grid-community"; +var MenuUtils = class extends BeanStub17 { + constructor() { + super(...arguments); + this.beanName = "menuUtils"; + } + restoreFocusOnClose(restoreFocusParams, eComp, e, restoreIfMouseEvent) { + const { eventSource } = restoreFocusParams; + const isKeyboardEvent = e instanceof KeyboardEvent; + if (!restoreIfMouseEvent && !isKeyboardEvent || !eventSource) { + return; + } + const activeEl = _getActiveDomElement9(this.beans); + if ( + // focus is outside of comp + !eComp.contains(activeEl) && // something else has focus + !_isNothingFocused2(this.beans) + ) { + return; + } + this.focusHeaderCell(restoreFocusParams); + } + closePopupAndRestoreFocusOnSelect(hidePopupFunc, restoreFocusParams, event) { + let keyboardEvent; + if (event?.keyboardEvent) { + keyboardEvent = event.keyboardEvent; + } + hidePopupFunc(keyboardEvent && { keyboardEvent }); + const beans = this.beans; + const focusSvc = beans.focusSvc; + const focusedCell = focusSvc.getFocusedCell(); + if (_isNothingFocused2(beans)) { + if (focusedCell) { + const { rowIndex, rowPinned, column } = focusedCell; + focusSvc.setFocusedCell({ + rowIndex, + column, + rowPinned, + forceBrowserFocus: true, + preventScrollOnBrowserFocus: true + }); + } else { + this.focusHeaderCell(restoreFocusParams); + } + } + } + onContextMenu(params) { + const { mouseEvent, touchEvent, showMenuCallback, source } = params; + if (!this.gos.get("allowContextMenuWithControlKey")) { + if (mouseEvent && (mouseEvent.ctrlKey || mouseEvent.metaKey)) { + return; + } + } + if (mouseEvent) { + this.blockMiddleClickScrollsIfNeeded(mouseEvent); + } + if (source === "ui" && this.gos.get("suppressContextMenu")) { + return; + } + const eventOrTouch = mouseEvent ?? touchEvent.touches[0]; + if (showMenuCallback(eventOrTouch)) { + const event = mouseEvent ?? touchEvent; + if (event?.cancelable) { + event.preventDefault(); + } + } + } + // make this async for react + async focusHeaderCell(restoreFocusParams) { + const { column, columnIndex, headerPosition, eventSource } = restoreFocusParams; + const { visibleCols, headerNavigation, focusSvc } = this.beans; + const isColumnStillVisible = await visibleCols.allCols.some((col) => col === column); + if (!this.isAlive()) { + return; + } + if (column?.isAlive() && isColumnStillVisible && eventSource && _isVisible6(eventSource)) { + const focusableEl = _findTabbableParent(eventSource); + if (focusableEl) { + headerNavigation?.scrollToColumn(column); + focusableEl.focus(); + } + } else if (headerPosition && columnIndex !== -1) { + const allColumns = visibleCols.allCols; + const columnToFocus = allColumns[columnIndex] || _last6(allColumns); + if (columnToFocus) { + focusSvc.focusHeaderPosition({ + headerPosition: { + headerRowIndex: headerPosition.headerRowIndex, + column: columnToFocus + } + }); + } + } + } + blockMiddleClickScrollsIfNeeded(mouseEvent) { + if (this.gos.get("suppressMiddleClickScrolls") && mouseEvent.which === 2) { + mouseEvent.preventDefault(); + } + } +}; + +// packages/ag-grid-enterprise/src/menu/menuModule.ts +var MenuCoreModule = { + moduleName: "MenuCore", + version: VERSION, + beans: [MenuItemMapper, ChartMenuItemMapper, MenuUtils], + icons: { + // context menu chart item + chart: "chart", + // columns in menu (column chooser / columns tab) + columns: "columns", + // loading async menu items + loadingMenuItems: "loading", + // "Pin column" item in column header menu + menuPin: "pin", + // "Value aggregation" column menu item (shown on numeric columns when grouping is active)" + menuValue: "aggregation", + // "Group by {column-name}" item in column header menu + menuAddRowGroup: "group", + // "Un-Group by {column-name}" item in column header menu + menuRemoveRowGroup: "group", + // context menu copy item + clipboardCopy: "copy", + // context menu cut item + clipboardCut: "cut", + // context menu paste item + clipboardPaste: "paste", + // context menu export item + save: "save", + // csv export + csvExport: "csv", + // excel export, + excelExport: "excel", + // show on column header when column is sorted ascending + sortAscending: "asc", + // show on column header when column is sorted descending + sortDescending: "desc", + // show on column header when column is sorted absolute ascending + sortAbsoluteAscending: "aasc", + // show on column header when column is sorted absolute descending + sortAbsoluteDescending: "adesc", + // show on column header when column has no sort, only when enabled with colDef.unSortIcon=true + sortUnSort: "none" + }, + dependsOn: [EnterpriseCoreModule, _PopupModule3, _SharedMenuModule, MenuItemModule] +}; +var ColumnMenuModule = { + moduleName: "ColumnMenu", + version: VERSION, + beans: [EnterpriseMenuFactory, ColumnMenuFactory, ColumnChooserFactory], + icons: { + ensureColumnVisible: "column-arrow", + // menu tab icon in legacy tabbed enterprise column menu + legacyMenu: "menu", + // filter tab icon in legacy tabbed enterprise column menu + filterTab: "filter", + // column tool panel column group contracted (click to expand) + columnSelectClosed: "tree-closed", + // column tool panel column group expanded (click to contract) + columnSelectOpen: "tree-open", + // column tool panel header expand/collapse all button, shown when some children are expanded and + // others are collapsed + columnSelectIndeterminate: "tree-indeterminate" + }, + apiFunctions: { + showColumnChooser, + hideColumnChooser + }, + dependsOn: [MenuCoreModule, _SharedDragAndDropModule3, _ColumnMoveModule2] +}; +var ContextMenuModule = { + moduleName: "ContextMenu", + version: VERSION, + beans: [ContextMenuService], + apiFunctions: { + showContextMenu + }, + dependsOn: [MenuCoreModule] +}; +var MenuModule = { + moduleName: "Menu", + version: VERSION, + dependsOn: [ColumnMenuModule, ContextMenuModule] +}; + +// packages/ag-grid-enterprise/src/richSelect/richSelectModule.ts +import { _EditCoreModule } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/richSelect/richSelectCellEditor.ts +import { AgAbstractCellEditor, KeyCode as KeyCode25, _addGridCommonParams as _addGridCommonParams11, _consoleError as _consoleError2, _missing, _warn as _warn16 } from "ag-grid-community"; +var DEFAULT_VALUES_PAGE_LOAD_THRESHOLD = 10; +var RichSelectCellEditor = class extends AgAbstractCellEditor { + constructor() { + super({ tag: "div", cls: "ag-cell-edit-wrapper" }); + this.pendingInitialEventKey = null; + this.initialEventKeyProcessed = false; + } + initialiseEditor(_params) { + const { cellStartedEdit, values, valuesPage, eventKey } = this.params; + this.pendingInitialEventKey = null; + this.initialEventKeyProcessed = false; + if (_missing(values) && _missing(valuesPage)) { + _warn16(180); + } + const asyncMode = this.resolveAsyncMode(); + const { params: richSelectParams, valueList } = this.buildRichSelectParams(asyncMode); + const richSelect = this.createManagedBean(new AgRichSelect(richSelectParams)); + this.eEditor = richSelect; + richSelect.addCss("ag-cell-editor"); + this.appendChild(richSelect); + const asyncValuesSource = this.getAsyncValuesSource(asyncMode); + if (asyncValuesSource) { + richSelect.setAsyncValuesSource({ + source: asyncValuesSource, + thresholdRows: this.params.valuesPageLoadThreshold ?? DEFAULT_VALUES_PAGE_LOAD_THRESHOLD, + useAsyncSearch: asyncMode.isFullAsync, + onMisconfiguredSearchSource: asyncMode.isFullAsync ? () => _warn16(294) : void 0, + onFirstValuesPageLoaded: () => { + if (this.pendingInitialEventKey != null) { + this.consumeInitialEventKey(this.pendingInitialEventKey); + this.pendingInitialEventKey = null; + } + } + }); + } + this.eEditor.setValueList({ valueList, refresh: true, isInitial: true }); + if (asyncMode.isValuesPaged) { + this.eEditor.resetAsyncValues(""); + if (asyncMode.isFullAsync) { + this.consumeInitialEventKey(eventKey); + } else { + this.pendingInitialEventKey = eventKey; + } + } else if (valueList && !Array.isArray(valueList)) { + valueList.then((values2) => { + const searchStringCallback = this.getSearchStringCallback(values2); + if (searchStringCallback) { + richSelect.setSearchStringCreator(searchStringCallback); + } + this.consumeInitialEventKey(eventKey); + }).catch((error) => { + _consoleError2("Rich Select", error); + this.consumeInitialEventKey(eventKey); + }); + } + this.addManagedListeners(richSelect, { + fieldPickerValueSelected: this.onEditorPickerValueSelected.bind(this) + }); + this.focusAfterAttached = cellStartedEdit; + } + onEditorPickerValueSelected(e) { + if (this.gos.get("editType") !== "fullRow") { + setTimeout(() => this.params.stopEditing(!e.fromEnterKey)); + } + } + getPlaceholderText(isFullAsync = this.isFullAsync()) { + const { valuePlaceholder } = this.params; + if (valuePlaceholder !== void 0) { + return valuePlaceholder; + } + const translate = this.getLocaleTextFunc(); + return isFullAsync ? translate("typeToSearchOoo", "Type to search...") : translate("advancedFilterBuilderSelectOption", "Select an option..."); + } + isFullAsync() { + const { allowTyping, filterListAsync, values, valuesPage } = this.params; + const hasAsyncValueSource = typeof values === "function" || typeof valuesPage === "function"; + if (filterListAsync && !allowTyping) { + _warn16(294); + return false; + } + if (!hasAsyncValueSource && filterListAsync) { + _warn16(294); + return false; + } + return !!(allowTyping && filterListAsync && hasAsyncValueSource); + } + isValuesPaged() { + return typeof this.params.valuesPage === "function"; + } + resolveAsyncMode() { + return { + isValuesPaged: this.isValuesPaged(), + isFullAsync: this.isFullAsync() + }; + } + getInitialValueList(asyncMode = this.resolveAsyncMode()) { + const params = this.params; + const { values } = params; + if (asyncMode.isValuesPaged) { + return; + } + if (!values) { + return []; + } + if (Array.isArray(values)) { + return values; + } + if (typeof values !== "function") { + return []; + } + if (asyncMode.isFullAsync) { + return; + } + return values({ ...params }); + } + buildRichSelectParams(asyncMode = this.resolveAsyncMode()) { + const params = this.params; + const { + cellRenderer, + cellRendererParams, + cellHeight, + value, + values, + formatValue, + searchDebounceDelay, + valueListGap, + valueListMaxHeight, + valueListMaxWidth, + allowTyping, + filterList, + searchType, + highlightMatch, + eventKey, + multiSelect, + suppressDeselectAll, + suppressMultiSelectPillRenderer + } = params; + const { isValuesPaged, isFullAsync } = asyncMode; + const formatValueFn = formatValue ?? ((value2) => String(value2 ?? "")); + const valueFormatter = (value2) => { + if (Array.isArray(value2)) { + return value2.map((currentValue) => formatValueFn(currentValue)).join(", "); + } + return formatValueFn(value2); + }; + const ret = { + value, + cellRenderer, + cellRendererParams, + cellRowHeight: cellHeight, + searchDebounceDelay, + valueFormatter, + pickerAriaLabelKey: "ariaLabelRichSelectField", + pickerAriaLabelValue: "Rich Select Field", + pickerType: "virtual-list", + pickerGap: valueListGap, + allowTyping, + filterList, + searchType, + highlightMatch, + maxPickerHeight: valueListMaxHeight, + maxPickerWidth: valueListMaxWidth, + placeholder: this.getPlaceholderText(isFullAsync), + initialInputValue: eventKey?.length === 1 ? eventKey : eventKey === KeyCode25.BACKSPACE ? "" : void 0, + multiSelect, + suppressDeselectAll, + suppressMultiSelectPillRenderer + }; + const valueList = this.getInitialValueList(asyncMode); + const isSync = Array.isArray(values); + const isValuesCallback = typeof values === "function"; + if (isValuesPaged) { + if (valueList) { + ret.valueList = valueList; + } + if (isFullAsync) { + ret.allowNoResultsCopy = true; + ret.filterList = true; + } + } else if (isSync) { + ret.valueList = valueList; + ret.searchStringCreator = this.getSearchStringCallback(valueList); + } else if (isValuesCallback && isFullAsync) { + ret.allowNoResultsCopy = true; + ret.filterList = true; + } + return { params: ret, valueList }; + } + getAsyncValuesSource(asyncMode = this.resolveAsyncMode()) { + const { isFullAsync, isValuesPaged } = asyncMode; + if (!isFullAsync && !isValuesPaged) { + return; + } + return { + searchValues: isFullAsync ? (searchString) => this.getAsyncSearchValues(searchString) : void 0, + loadValuesPage: isValuesPaged ? (request) => this.getAsyncValuesPage(request) : void 0, + valuesPageInitialStartRow: isValuesPaged ? (searchString) => this.resolveValuesPageInitialStartRow(searchString) : void 0, + valuesPageSize: isValuesPaged ? this.params.valuesPageSize : void 0 + }; + } + getAsyncSearchValues(searchString) { + const { values } = this.params; + if (typeof values !== "function") { + return []; + } + return values({ + ...this.params, + search: searchString + }); + } + getAsyncValuesPage(request) { + const { valuesPage } = this.params; + if (typeof valuesPage !== "function") { + return { values: [] }; + } + return valuesPage({ + ...this.params, + search: request.search, + startRow: request.startRow, + endRow: request.endRow, + cursor: request.cursor + }); + } + resolveValuesPageInitialStartRow(searchString) { + if (searchString) { + return 0; + } + const { valuesPageInitialStartRow, value } = this.params; + const startRow = typeof valuesPageInitialStartRow === "function" ? valuesPageInitialStartRow(value) : valuesPageInitialStartRow; + return Math.max(Math.floor(startRow ?? 0), 0); + } + getSearchStringCallback(values) { + if (typeof values[0] !== "object") { + return; + } + const params = this.params; + const { colDef, formatValue } = params; + const formatValueFn = formatValue ?? ((value) => String(value ?? "")); + if (colDef.cellEditorParams?.formatValue) { + return (values2) => values2.map(formatValueFn); + } + const { keyCreator } = colDef; + if (keyCreator) { + _warn16(266); + const { column, node, data } = params; + return (values2) => values2.map((value) => { + const keyParams = _addGridCommonParams11(this.gos, { + value, + colDef, + column, + node, + data + }); + return keyCreator(keyParams); + }); + } + return (values2) => values2.map(formatValueFn); + } + // we need to have the gui attached before we can draw the virtual rows, as the + // virtual row logic needs info about the gui state. + afterGuiAttached() { + const { focusAfterAttached, params } = this; + setTimeout(() => { + if (!this.isAlive()) { + return; + } + const richSelect = this.eEditor; + const { allowTyping, eventKey, cellStartedEdit } = params; + if (focusAfterAttached) { + const focusableEl = richSelect.getFocusableElement(); + focusableEl.focus(); + if (allowTyping && (!eventKey || eventKey.length !== 1)) { + focusableEl.select(); + } + } + if (cellStartedEdit) { + richSelect.showPicker(); + } + if (this.pendingInitialEventKey == null) { + this.consumeInitialEventKey(eventKey); + } + }); + } + consumeInitialEventKey(eventKey) { + if (!eventKey || this.initialEventKeyProcessed) { + return; + } + this.initialEventKeyProcessed = true; + this.processEventKey(eventKey); + } + processEventKey(eventKey) { + if (!eventKey) { + return; + } + if (eventKey === KeyCode25.BACKSPACE) { + this.eEditor.searchTextFromString(null); + } else if (eventKey?.length === 1) { + this.eEditor.searchTextFromString(eventKey); + } + } + focusIn() { + this.eEditor.getFocusableElement().focus(); + } + agSetEditValue(value) { + this.params.value = value; + this.eEditor.setValue(value ?? null, true); + } + getValue() { + const { params } = this; + const value = this.eEditor.getValue(); + return params.parseValue?.(value) ?? value; + } + isPopup() { + return false; + } + getValidationElement() { + return this.eEditor.getAriaElement(); + } + getValidationErrors() { + const { params } = this; + const { getValidationErrors } = params; + if (!getValidationErrors) { + return null; + } + return getValidationErrors({ + value: this.getValue(), + internalErrors: null, + cellEditorParams: params + }); + } +}; + +// packages/ag-grid-enterprise/src/richSelect/richSelectModule.ts +var RichSelectModule = { + moduleName: "RichSelect", + version: VERSION, + beans: [], + userComponents: { agRichSelect: RichSelectCellEditor, agRichSelectCellEditor: RichSelectCellEditor }, + icons: { + // open icon for rich select editor + richSelectOpen: "small-down", + // remove for rich select editor pills + richSelectRemove: "cancel", + // loading async values + richSelectLoading: "loading" + }, + dependsOn: [EnterpriseCoreModule, _EditCoreModule] +}; + +// packages/ag-grid-enterprise/src/setFilter/setFilterModule.ts +import { _ColumnFilterModule } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/setFilter/setFilter.ts +import { + AgInputTextFieldSelector as AgInputTextFieldSelector6, + KeyCode as KeyCode26, + ProvidedFilter, + RefPlaceholder as RefPlaceholder30, + _areEqual as _areEqual4, + _createIconNoSpan as _createIconNoSpan18, + _exists as _exists15, + _getActiveDomElement as _getActiveDomElement10, + _makeNull as _makeNull4, + _setDisplayed as _setDisplayed16, + _warn as _warn20 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/setFilter/iSetDisplayValueModel.ts +var SET_FILTER_SELECT_ALL = "__AG_SELECT_ALL__"; +var SET_FILTER_ADD_SELECTION_TO_FILTER = "__AG_ADD_SELECTION_TO_FILTER__"; + +// packages/ag-grid-enterprise/src/setFilter/flatSetDisplayValueModel.ts +var FlatSetDisplayValueModel = class { + constructor(valueSvc, getValueFormatter, formatter, column) { + this.valueSvc = valueSvc; + this.getValueFormatter = getValueFormatter; + this.formatter = formatter; + this.column = column; + /** All keys that are currently displayed, after the mini-filter has been applied. */ + this.displayedKeys = []; + } + updateDisplayedValuesToAllAvailable(_getValue, _allKeys, availableKeys) { + this.displayedKeys = Array.from(availableKeys); + } + updateDisplayedValuesToMatchMiniFilter(getValue, _allKeys, availableKeys, matchesFilter, nullMatchesFilter) { + this.displayedKeys = []; + const valueFormatter = this.getValueFormatter(); + for (const key of availableKeys) { + if (key == null) { + if (nullMatchesFilter) { + this.displayedKeys.push(key); + } + } else { + const value = getValue(key); + const valueFormatterValue = this.valueSvc.formatValue(this.column, null, value, valueFormatter, false); + const textFormatterValue = this.formatter(valueFormatterValue); + if (matchesFilter(textFormatterValue)) { + this.displayedKeys.push(key); + } + } + } + } + getDisplayedValueCount() { + return this.displayedKeys.length; + } + getDisplayedItem(index) { + return this.displayedKeys[index]; + } + getSelectAllItem() { + return SET_FILTER_SELECT_ALL; + } + getAddSelectionToFilterItem() { + return SET_FILTER_ADD_SELECTION_TO_FILTER; + } + getDisplayedKeys() { + return this.displayedKeys; + } + forEachDisplayedKey(func) { + this.displayedKeys.forEach(func); + } + someDisplayedKey(func) { + return this.displayedKeys.some(func); + } + hasGroups() { + return false; + } + refresh() { + } +}; + +// packages/ag-grid-enterprise/src/setFilter/setFilterListItem.ts +import { + AgCheckboxSelector as AgCheckboxSelector5, + Component as Component31, + RefPlaceholder as RefPlaceholder29, + _addGridCommonParams as _addGridCommonParams12, + _createIcon as _createIcon2, + _getCellRendererDetails, + _getShouldDisplayTooltip as _getShouldDisplayTooltip3, + _isShowTooltipWhenTruncated, + _setAriaChecked as _setAriaChecked2, + _setAriaDescribedBy as _setAriaDescribedBy4, + _setAriaExpanded as _setAriaExpanded7, + _setAriaLabel as _setAriaLabel14, + _setAriaLabelledBy as _setAriaLabelledBy3, + _setAriaLevel as _setAriaLevel4, + _setDisplayed as _setDisplayed15, + _toStringOrNull as _toStringOrNull3, + _warn as _warn17 +} from "ag-grid-community"; +var SetFilterGroupElement = { + tag: "div", + cls: "ag-set-filter-item", + attrs: { "aria-hidden": "true" }, + children: [ + { + tag: "span", + cls: "ag-set-filter-group-icons", + children: [ + { tag: "span", ref: "eGroupClosedIcon", cls: "ag-set-filter-group-closed-icon" }, + { tag: "span", ref: "eGroupOpenedIcon", cls: "ag-set-filter-group-opened-icon" }, + { tag: "span", ref: "eGroupIndeterminateIcon", cls: "ag-set-filter-group-indeterminate-icon" } + ] + }, + { tag: "ag-checkbox", ref: "eCheckbox", cls: "ag-set-filter-item-checkbox" } + ] +}; +var SetFilterElement = { + tag: "div", + cls: "ag-set-filter-item", + children: [{ tag: "ag-checkbox", ref: "eCheckbox", cls: "ag-set-filter-item-checkbox" }] +}; +var SetFilterListItem = class extends Component31 { + constructor(params) { + super(params.isGroup ? SetFilterGroupElement : SetFilterElement, [AgCheckboxSelector5]); + this.eCheckbox = RefPlaceholder29; + this.eGroupOpenedIcon = RefPlaceholder29; + this.eGroupClosedIcon = RefPlaceholder29; + this.eGroupIndeterminateIcon = RefPlaceholder29; + this.formattedValue = null; + this.focusWrapper = params.focusWrapper; + this.value = params.value; + this.params = params.params; + this.translate = params.translate; + this.valueFormatter = params.valueFormatter; + this.item = params.item; + this.isSelected = params.isSelected; + this.isTree = params.isTree; + this.depth = params.depth ?? 0; + this.isGroup = params.isGroup; + this.groupsExist = params.groupsExist; + this.isExpanded = params.isExpanded; + this.hasIndeterminateExpandState = params.hasIndeterminateExpandState; + } + postConstruct() { + this.tooltipFeature = this.createOptionalManagedBean( + this.beans.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.focusWrapper, + getLocation: () => "setFilterValue", + shouldDisplayTooltip: () => this.shouldDisplayTooltip?.() ?? true, + getAdditionalParams: () => { + const { colDef, column } = this.params; + const additionalParams = { + colDef, + column, + valueFormatted: this.formattedValue ?? void 0 + }; + if (this.isTree) { + additionalParams.level = this.depth; + } + return additionalParams; + } + }) + ); + this.addDestroyFunc(() => this.destroyCellRendererComponent?.()); + this.render(); + this.eCheckbox.setLabelEllipsis(true).setValue(this.isSelected, true).setDisabled(!!this.params.readOnly).getInputElement().setAttribute("tabindex", "-1"); + this.refreshVariableAriaLabels(); + if (this.isTree) { + if (this.depth > 0) { + this.addCss("ag-set-filter-indent-" + this.depth); + this.getGui().style.setProperty("--ag-indentation-level", String(this.depth)); + } + if (this.isGroup) { + this.setupExpansion(); + } else if (this.groupsExist) { + this.addCss("ag-set-filter-add-group-indent"); + } + _setAriaLevel4(this.getAriaElement(), this.depth + 1); + } + this.refreshAriaChecked(); + if (this.params.readOnly) { + return; + } + this.eCheckbox.onValueChange((value) => this.onCheckboxChanged(!!value)); + } + getFocusableElement() { + return this.focusWrapper; + } + setupExpansion() { + const { eGroupClosedIcon, eGroupOpenedIcon, eGroupIndeterminateIcon, hasIndeterminateExpandState, beans } = this; + eGroupClosedIcon.appendChild(_createIcon2("setFilterGroupClosed", beans, null)); + eGroupOpenedIcon.appendChild(_createIcon2("setFilterGroupOpen", beans, null)); + const listener = this.onExpandOrContractClicked.bind(this); + this.addManagedElementListeners(eGroupClosedIcon, { click: listener }); + this.addManagedElementListeners(eGroupOpenedIcon, { click: listener }); + if (hasIndeterminateExpandState) { + eGroupIndeterminateIcon.appendChild(_createIcon2("setFilterGroupIndeterminate", beans, null)); + this.addManagedElementListeners(eGroupIndeterminateIcon, { + click: listener + }); + } + this.setExpandedIcons(); + this.refreshAriaExpanded(); + } + onExpandOrContractClicked() { + this.setExpanded(!this.isExpanded); + } + setExpanded(isExpanded, silent) { + if (this.isGroup && isExpanded !== this.isExpanded) { + this.isExpanded = isExpanded; + const event = { + type: "expandedChanged", + isExpanded: !!isExpanded, + item: this.item + }; + if (!silent) { + this.dispatchLocalEvent(event); + } + this.setExpandedIcons(); + this.refreshAriaExpanded(); + } + } + setExpandedIcons() { + const { isExpanded, hasIndeterminateExpandState, eGroupClosedIcon, eGroupOpenedIcon, eGroupIndeterminateIcon } = this; + _setDisplayed15(eGroupClosedIcon, hasIndeterminateExpandState ? isExpanded === false : !isExpanded); + _setDisplayed15(eGroupOpenedIcon, isExpanded === true); + if (hasIndeterminateExpandState) { + _setDisplayed15(eGroupIndeterminateIcon, isExpanded === void 0); + } + } + onCheckboxChanged(isSelected) { + this.isSelected = isSelected; + const event = { + type: "selectionChanged", + isSelected, + item: this.item + }; + this.dispatchLocalEvent(event); + this.refreshVariableAriaLabels(); + this.refreshAriaChecked(); + } + toggleSelected() { + if (this.params.readOnly) { + return; + } + this.setSelected(!this.isSelected); + } + setSelected(isSelected, silent) { + this.isSelected = isSelected; + this.eCheckbox.setValue(isSelected, silent); + this.refreshAriaChecked(); + } + refreshVariableAriaLabels() { + if (!this.isTree) { + return; + } + const translate = this.getLocaleTextFunc(); + const checkboxValue = this.eCheckbox.getValue(); + const state = checkboxValue === void 0 ? translate("ariaIndeterminate", "indeterminate") : checkboxValue ? translate("ariaVisible", "visible") : translate("ariaHidden", "hidden"); + const visibilityLabel = translate("ariaToggleVisibility", "Press SPACE to toggle visibility"); + _setAriaLabelledBy3(this.eCheckbox.getInputElement(), void 0); + this.eCheckbox.setInputAriaLabel(`${visibilityLabel} (${state})`); + } + setupFixedAriaLabels(value) { + if (!this.isTree) { + return; + } + const translate = this.getLocaleTextFunc(); + const itemLabel = translate("ariaFilterValue", "Filter Value"); + const ariaEl = this.getAriaElement(); + _setAriaLabel14(ariaEl, `${value} ${itemLabel}`); + _setAriaDescribedBy4(ariaEl, this.eCheckbox.getInputElement().id); + } + refreshAriaChecked() { + const ariaEl = this.getAriaElement(); + _setAriaChecked2(ariaEl, this.eCheckbox.getValue()); + } + refreshAriaExpanded() { + _setAriaExpanded7(this.getAriaElement(), !!this.isExpanded); + } + refresh(item, isSelected, isExpanded) { + this.item = item; + if (isSelected !== this.isSelected) { + this.setSelected(isSelected, true); + } + this.setExpanded(isExpanded, true); + const { cellRendererComponent, cellRendererParams, beans, params } = this; + if (this.valueFunction) { + const value = this.valueFunction(); + this.setTooltipAndCellRendererParams(value, value); + if (!cellRendererComponent) { + this.renderCellWithoutCellRenderer(); + } + } + if (cellRendererComponent) { + const compDetails = _getCellRendererDetails(beans.userCompFactory, params, cellRendererParams); + const success = cellRendererComponent.refresh?.(compDetails?.params ?? cellRendererParams); + if (!success) { + const oldComponent = cellRendererComponent; + this.renderCell(); + this.destroyBean(oldComponent); + } + } + } + render() { + const { + params: { column } + } = this; + let { value } = this; + let formattedValue = null; + if (typeof value === "function") { + this.valueFunction = value; + formattedValue = this.valueFunction(); + value = formattedValue; + } else if (this.isTree) { + formattedValue = _toStringOrNull3(value); + } else { + formattedValue = this.getFormattedValue(column, value); + } + this.formattedValue = formattedValue; + this.setTooltipAndCellRendererParams(value, formattedValue); + this.renderCell(); + } + setTooltipAndCellRendererParams(value, formattedValue) { + const gos = this.gos; + if (this.params.showTooltips && (!_isShowTooltipWhenTruncated(gos) || !this.params.cellRenderer)) { + const newTooltipText = formattedValue != null ? formattedValue : _toStringOrNull3(value); + this.shouldDisplayTooltip = _getShouldDisplayTooltip3( + gos, + () => this.eCheckbox.getGui().querySelector(".ag-label") + ); + this.tooltipFeature?.setTooltipAndRefresh(newTooltipText); + } + this.cellRendererParams = _addGridCommonParams12(gos, { + value, + valueFormatted: formattedValue, + colDef: this.params.colDef, + column: this.params.column, + setTooltip: (value2, shouldDisplayTooltip) => { + gos.assertModuleRegistered("Tooltip", 3); + this.shouldDisplayTooltip = shouldDisplayTooltip; + this.tooltipFeature?.setTooltipAndRefresh(value2); + } + }); + } + getFormattedValue(column, value) { + return this.beans.valueSvc.formatValue(column, null, value, this.valueFormatter, false); + } + renderCell() { + const compDetails = _getCellRendererDetails(this.beans.userCompFactory, this.params, this.cellRendererParams); + const cellRendererPromise = compDetails?.newAgStackInstance(); + if (cellRendererPromise == null) { + this.renderCellWithoutCellRenderer(); + return; + } + cellRendererPromise.then((component) => { + if (component) { + this.cellRendererComponent = component; + this.eCheckbox.setLabel(component.getGui()); + this.destroyCellRendererComponent = () => this.destroyBean(component); + } + }); + } + renderCellWithoutCellRenderer() { + const { valueFormatted, value } = this.cellRendererParams; + let valueToRender = (valueFormatted == null ? value : valueFormatted) ?? this.translate("blanks"); + if (typeof valueToRender !== "string") { + _warn17(208); + valueToRender = ""; + } + this.eCheckbox.setLabel(valueToRender); + this.setupFixedAriaLabels(valueToRender); + } + getComponentHolder() { + return this.params.column.getColDef(); + } +}; + +// packages/ag-grid-enterprise/src/setFilter/setFilterUtils.ts +import { _defaultComparator, _last as _last7, _makeNull as _makeNull3, _toStringOrNull as _toStringOrNull4, _translate, _warn as _warn18 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/setFilter/localeText.ts +var DEFAULT_LOCALE_TEXT = { + loadingOoo: "Loading...", + blanks: "(Blanks)", + searchOoo: "Search...", + selectAll: "(Select All)", + selectAllSearchResults: "(Select All Search Results)", + addCurrentSelectionToFilter: "Add current selection to filter", + noMatches: "No matches.", + ariaSearchFilterValues: "Search filter values", + ariaFilterList: "Filter List", + filterSummaryListInactive: "is (All)", + filterSummaryListSeparator: ", ", + filterSummaryListShort: (variableValues) => `is (${variableValues[0]})`, + filterSummaryListLong: (variableValues) => `is (${variableValues[0]}) and ${variableValues[1]} more` +}; + +// packages/ag-grid-enterprise/src/setFilter/setFilterUtils.ts +function processDataPath(dataPath, treeData, groupAllowUnbalanced) { + let processedDataPath = dataPath; + if (!processedDataPath) { + return null; + } + processedDataPath = processedDataPath.map((treeKey) => _toStringOrNull4(_makeNull3(treeKey))); + if (!treeData && groupAllowUnbalanced && processedDataPath.some((treeKey) => treeKey == null)) { + if (_last7(processedDataPath) == null) { + return null; + } + return processedDataPath.filter((treeKey) => treeKey != null); + } + return processedDataPath; +} +function translateForSetFilter(bean, key, variableValues) { + return _translate(bean, DEFAULT_LOCALE_TEXT, key, variableValues); +} +function applyExcelModeOptions(params) { + if (params.excelMode === "windows") { + if (!params.buttons) { + params.buttons = ["apply", "cancel"]; + } + if (params.closeOnApply == null) { + params.closeOnApply = true; + } + } else if (params.excelMode === "mac") { + if (!params.buttons) { + params.buttons = ["reset"]; + } + if (params.applyMiniFilterWhileTyping == null) { + params.applyMiniFilterWhileTyping = true; + } + if (params.debounceMs == null) { + params.debounceMs = 500; + } + } + if (params.excelMode && params.defaultToNothingSelected) { + params.defaultToNothingSelected = false; + _warn18(207); + } +} +function createTreeDataOrGroupingComparator() { + return ([_aKey, aValue], [_bKey, bValue]) => { + if (aValue == null) { + return bValue == null ? 0 : -1; + } else if (bValue == null) { + return 1; + } + for (let i = 0; i < aValue.length; i++) { + if (i >= bValue.length) { + return 1; + } + const diff = _defaultComparator(aValue[i], bValue[i]); + if (diff !== 0) { + return diff; + } + } + return 0; + }; +} + +// packages/ag-grid-enterprise/src/setFilter/treeSetDisplayValueModel.ts +import { _getDateParts, _warn as _warn19 } from "ag-grid-community"; +var TreeSetDisplayValueModel = class { + constructor(formatter, treeListPathGetter, treeListFormatter, treeDataOrGrouping) { + this.formatter = formatter; + this.treeListPathGetter = treeListPathGetter; + this.treeListFormatter = treeListFormatter; + this.treeDataOrGrouping = treeDataOrGrouping; + /** all displayed items in a tree structure */ + this.allDisplayedItemsTree = /* @__PURE__ */ new Map(); + /** all displayed items flattened and filtered */ + this.activeDisplayedItemsFlat = []; + this.selectAllItem = { + depth: 0, + filterPasses: true, + available: true, + treeKey: SET_FILTER_SELECT_ALL, + children: this.allDisplayedItemsTree, + expanded: true, + key: SET_FILTER_SELECT_ALL, + parentTreeKeys: [] + }; + this.addSelectionToFilterItem = { + depth: 0, + filterPasses: true, + available: true, + treeKey: SET_FILTER_ADD_SELECTION_TO_FILTER, + expanded: true, + key: SET_FILTER_ADD_SELECTION_TO_FILTER, + parentTreeKeys: [] + }; + } + updateParams(treeListPathGetter, treeListFormatter) { + this.treeListPathGetter = treeListPathGetter; + this.treeListFormatter = treeListFormatter; + } + updateDisplayedValuesToAllAvailable(getValue, allKeys, availableKeys, source) { + if (source === "reload") { + this.generateItemTree(getValue, allKeys, availableKeys); + } else if (source === "otherFilter") { + this.updateAvailable(availableKeys); + this.updateExpandAll(); + } else if (source === "miniFilter") { + this.resetFilter(); + this.updateExpandAll(); + } + this.flattenItems(); + } + updateDisplayedValuesToMatchMiniFilter(getValue, allKeys, availableKeys, matchesFilter, nullMatchesFilter, source) { + if (source === "reload") { + this.generateItemTree(getValue, allKeys, availableKeys); + } else if (source === "otherFilter") { + this.updateAvailable(availableKeys); + } + this.updateFilter(matchesFilter, nullMatchesFilter); + this.updateExpandAll(); + this.flattenItems(); + } + generateItemTree(getValue, allKeys, availableKeys) { + const allDisplayedItemsTree = /* @__PURE__ */ new Map(); + this.allDisplayedItemsTree = allDisplayedItemsTree; + let groupsExist = false; + const treeListPathGetter = this.getTreeListPathGetter(getValue, availableKeys); + for (const key of allKeys) { + const value = getValue(key); + const dataPath = treeListPathGetter(value) ?? [null]; + const dataPathLength = dataPath.length; + if (dataPathLength > 1) { + groupsExist = true; + } + const available = availableKeys.has(key); + let children = allDisplayedItemsTree; + let item; + let parentTreeKeys = []; + for (let depth = 0; depth < dataPathLength; depth++) { + const treeKey = dataPath[depth]; + if (!children) { + children = /* @__PURE__ */ new Map(); + item.children = children; + } + const treeKeyUpper = treeKey?.toUpperCase() ?? null; + item = children.get(treeKeyUpper); + if (!item) { + item = { + treeKey, + depth, + filterPasses: true, + expanded: false, + available, + parentTreeKeys + }; + if (depth === dataPath.length - 1) { + item.key = key; + } + children.set(treeKeyUpper, item); + } + children = item.children; + parentTreeKeys = [...parentTreeKeys, treeKey]; + } + } + this.groupsExist = groupsExist; + this.updateAvailable(availableKeys); + this.selectAllItem.children = allDisplayedItemsTree; + this.selectAllItem.expanded = false; + } + getTreeListPathGetter(getValue, availableKeys) { + if (this.treeListPathGetter) { + return this.treeListPathGetter; + } + if (this.treeDataOrGrouping) { + return (value) => value; + } + let isDate = false; + for (const availableKey of availableKeys) { + const value = getValue(availableKey); + if (value instanceof Date) { + isDate = true; + break; + } else if (value != null) { + break; + } + } + if (isDate) { + return (value) => _getDateParts(value, false); + } + _warn19(211); + return (value) => [String(value)]; + } + flattenItems() { + this.activeDisplayedItemsFlat = []; + const recursivelyFlattenDisplayedItems = (items) => { + for (const item of items.values()) { + if (!item.filterPasses || !item.available) { + continue; + } + this.activeDisplayedItemsFlat.push(item); + if (item.children && item.expanded) { + recursivelyFlattenDisplayedItems(item.children); + } + } + }; + recursivelyFlattenDisplayedItems(this.allDisplayedItemsTree); + } + resetFilter() { + const recursiveFilterReset = (item) => { + const children = item.children; + if (children) { + for (const child of children.values()) { + recursiveFilterReset(child); + } + } + item.filterPasses = true; + }; + for (const item of this.allDisplayedItemsTree.values()) { + recursiveFilterReset(item); + } + } + updateFilter(matchesFilter, nullMatchesFilter) { + const passesFilter = (item) => { + if (!item.available) { + return false; + } + if (item.treeKey == null) { + return nullMatchesFilter; + } + return matchesFilter( + this.formatter( + this.treeListFormatter ? this.treeListFormatter(item.treeKey, item.depth, item.parentTreeKeys) : item.treeKey + ) + ); + }; + for (const item of this.allDisplayedItemsTree.values()) { + this.recursiveItemCheck(item, false, passesFilter, "filterPasses"); + } + } + getDisplayedValueCount() { + return this.activeDisplayedItemsFlat.length; + } + getDisplayedItem(index) { + return this.activeDisplayedItemsFlat[index]; + } + getSelectAllItem() { + return this.selectAllItem; + } + getAddSelectionToFilterItem() { + return this.addSelectionToFilterItem; + } + getDisplayedKeys() { + const displayedKeys = []; + this.forEachDisplayedKey((key) => displayedKeys.push(key)); + return displayedKeys; + } + forEachDisplayedKey(func) { + const recursiveForEachItem = (item, topParentExpanded) => { + const children = item.children; + if (children) { + if (!item.expanded || !topParentExpanded) { + for (const child of children.values()) { + if (child.filterPasses) { + recursiveForEachItem(child, false); + } + } + } + } else { + func(item.key); + } + }; + for (const item of this.activeDisplayedItemsFlat) { + recursiveForEachItem(item, true); + } + } + someDisplayedKey(func) { + const recursiveSomeItem = (item, topParentExpanded) => { + const children = item.children; + if (children) { + if (!item.expanded || !topParentExpanded) { + for (const child of children.values()) { + if (child.filterPasses && recursiveSomeItem(child, false)) { + return true; + } + } + return false; + } + } else { + return func(item.key); + } + return false; + }; + return this.activeDisplayedItemsFlat.some((item) => recursiveSomeItem(item, true)); + } + hasGroups() { + return this.groupsExist; + } + refresh() { + this.updateExpandAll(); + this.flattenItems(); + } + updateExpandAll() { + const recursiveExpansionCheck = (items, someTrue, someFalse) => { + for (const item2 of items.values()) { + if (!item2.filterPasses || !item2.available || !item2.children) { + continue; + } + someTrue = someTrue || !!item2.expanded; + someFalse = someFalse || !item2.expanded; + if (someTrue && someFalse) { + return void 0; + } + const childExpanded = recursiveExpansionCheck(item2.children, someTrue, someFalse); + if (childExpanded === void 0) { + return void 0; + } else if (childExpanded) { + someTrue = true; + } else { + someFalse = true; + } + } + return someTrue && someFalse ? void 0 : someTrue; + }; + const item = this.getSelectAllItem(); + item.expanded = recursiveExpansionCheck(item.children, false, false); + } + recursiveItemCheck(item, parentPasses, checkFunction, itemProp) { + let atLeastOneChildPassed = false; + const children = item.children; + if (children) { + for (const child of children.values()) { + const childPasses = this.recursiveItemCheck( + child, + parentPasses || checkFunction(item), + checkFunction, + itemProp + ); + atLeastOneChildPassed = atLeastOneChildPassed || childPasses; + } + } + const itemPasses = parentPasses || atLeastOneChildPassed || checkFunction(item); + item[itemProp] = itemPasses; + return itemPasses; + } + updateAvailable(availableKeys) { + const isAvailable = (item) => availableKeys.has(item.key); + for (const item of this.allDisplayedItemsTree.values()) { + this.recursiveItemCheck(item, false, isAvailable, "available"); + } + } +}; + +// packages/ag-grid-enterprise/src/setFilter/setFilter.ts +var SetFilter = class extends ProvidedFilter { + constructor() { + super("setFilter", "set-filter"); + this.filterType = "set"; + this.eMiniFilter = RefPlaceholder30; + this.eFilterLoading = RefPlaceholder30; + this.eFilterLoadingIcon = RefPlaceholder30; + this.eSetFilterList = RefPlaceholder30; + this.eFilterNoMatches = RefPlaceholder30; + this.hardRefreshVirtualList = false; + this.miniFilterText = null; + /** When true, in excelMode = 'windows', it adds previously selected filter items to newly checked filter selection */ + this.addCurrentSelectionToFilter = false; + /** Keys that have been selected for this filter. */ + this.selectedKeys = /* @__PURE__ */ new Set(); + } + setParams(params) { + super.setParams(params); + const handler = this.updateHandler(params.getHandler()); + const { column, textFormatter, treeList, treeListPathGetter, treeListFormatter } = params; + this.formatter = textFormatter ?? ((value) => value ?? null); + this.displayValueModel = treeList ? new TreeSetDisplayValueModel( + this.formatter, + treeListPathGetter, + treeListFormatter, + handler.isTreeDataOrGrouping() + ) : new FlatSetDisplayValueModel( + this.beans.valueSvc, + () => this.handler.valueFormatter, + this.formatter, + column + ); + handler.valueModel.allKeys.then((values) => { + if (!this.isAlive()) { + return; + } + this.updateDisplayedValues("reload", values ?? []); + this.resetSelectionState(values ?? []); + }); + if (handler.valueModel.isLoading()) { + this.setIsLoading(true); + } + this.initialiseFilterBodyUi(); + } + refresh(legacyNewParams) { + if (this.params.treeList !== legacyNewParams.treeList) { + return false; + } + this.updateHandler( + legacyNewParams.getHandler() + ); + return super.refresh(legacyNewParams); + } + updateParams(newParams, oldParams) { + super.updateParams(newParams, oldParams); + this.updateMiniFilter(); + if (newParams.suppressSelectAll !== oldParams.suppressSelectAll) { + this.createVirtualListModel(newParams); + } + const { textFormatter, treeListPathGetter, treeListFormatter } = newParams; + this.formatter = textFormatter ?? ((value) => value ?? null); + if (this.displayValueModel instanceof TreeSetDisplayValueModel) { + this.displayValueModel.updateParams(treeListPathGetter, treeListFormatter); + } + this.handler.refreshFilterValues(true); + } + updateHandler(handler) { + const oldHandler = this.handler; + if (oldHandler !== handler) { + for (const func of this.handlerDestroyFuncs ?? []) { + func(); + } + this.handlerDestroyFuncs = [ + ...this.addManagedListeners(handler, { + anyFilterChanged: (event) => { + handler.valueModel.allKeys.then((values) => { + if (this.isAlive()) { + this.updateDisplayedValues("otherFilter", values ?? []); + if (event.updated) { + this.checkAndRefreshVirtualList(); + this.showOrHideResults(); + } + } + }); + }, + dataChanged: ({ hardRefresh }) => { + handler.valueModel.allKeys.then((values) => { + if (this.isAlive()) { + this.updateDisplayedValues("reload", values ?? []); + this.setSelectedModel(this.state.model?.values ?? null); + if (hardRefresh) { + this.hardRefreshVirtualList = true; + } + this.checkAndRefreshVirtualList(); + } + }); + } + }), + ...this.addManagedListeners(handler.valueModel, { + loadingStart: () => this.setIsLoading(true), + loadingEnd: () => this.setIsLoading(false) + }) + ]; + this.handler = handler; + } + return handler; + } + updateUiVisibility() { + } + createBodyTemplate() { + return { + tag: "div", + cls: "ag-set-filter", + children: [ + { + tag: "div", + ref: "eFilterLoading", + cls: "ag-filter-loading ag-loading ag-hidden", + children: [ + { tag: "span", ref: "eFilterLoadingIcon", cls: "ag-loading-icon" }, + { tag: "span", cls: "ag-loading-text", children: translateForSetFilter(this, "loadingOoo") } + ] + }, + { tag: "ag-input-text-field", ref: "eMiniFilter", cls: "ag-mini-filter" }, + { + tag: "div", + ref: "eFilterNoMatches", + cls: "ag-filter-no-matches ag-hidden", + children: translateForSetFilter(this, "noMatches") + }, + { tag: "div", ref: "eSetFilterList", cls: "ag-set-filter-list", role: "presentation" } + ] + }; + } + getAgComponents() { + return [AgInputTextFieldSelector6]; + } + handleKeyDown(e) { + super.handleKeyDown(e); + if (e.defaultPrevented) { + return; + } + const getComponentForKeyEvent = () => { + if (!this.eSetFilterList.contains(_getActiveDomElement10(this.beans))) { + return; + } + const currentItem = this.virtualList.getLastFocusedRow(); + if (currentItem == null) { + return; + } + const component = this.virtualList.getComponentAt(currentItem); + if (component == null) { + return; + } + e.preventDefault(); + const { readOnly } = this.params; + if (readOnly) { + return; + } + return component; + }; + switch (e.key) { + case KeyCode26.SPACE: + getComponentForKeyEvent()?.toggleSelected(); + break; + case KeyCode26.ENTER: + this.handleKeyEnter(e); + break; + case KeyCode26.LEFT: + getComponentForKeyEvent()?.setExpanded(false); + break; + case KeyCode26.RIGHT: + getComponentForKeyEvent()?.setExpanded(true); + break; + } + } + handleKeyEnter(e) { + e.preventDefault(); + const { excelMode, readOnly } = this.params; + if (!excelMode || !!readOnly) { + return; + } + this.params.onAction("apply", void 0, e); + if (this.params.excelMode === "mac") { + this.eMiniFilter.getInputElement().select(); + } + } + setModelAndRefresh(values) { + return this.setSelectedModel(values).then(() => { + if (this.isAlive()) { + this.checkAndRefreshVirtualList(); + } + }); + } + setModelIntoUi(model) { + this.setMiniFilter(this.params.state.state?.miniFilterValue ?? null, true); + const values = model == null ? null : model.values; + return this.setModelAndRefresh(values); + } + getModelFromUi() { + const values = this.getSelectedModel(); + if (!values) { + return null; + } + return { values, filterType: this.filterType }; + } + areNonNullModelsEqual(a, b) { + return _areEqual4(a.values, b.values); + } + setIsLoading(isLoading) { + _setDisplayed16(this.eFilterLoading, isLoading); + if (!isLoading) { + this.hardRefreshVirtualList = true; + } + } + initialiseFilterBodyUi() { + this.initVirtualList(); + this.initMiniFilter(); + this.initLoading(); + } + initLoading() { + const loadingIcon = _createIconNoSpan18("setFilterLoading", this.beans, this.params.column); + if (loadingIcon) { + this.eFilterLoadingIcon.appendChild(loadingIcon); + } + } + initVirtualList() { + const filterListName = translateForSetFilter(this, "ariaFilterList"); + const isTree = !!this.params.treeList; + const virtualList = this.virtualList = this.createBean( + new VirtualList({ + cssIdentifier: "filter", + ariaRole: isTree ? "tree" : "listbox", + listName: filterListName + }) + ); + const eSetFilterList = this.eSetFilterList; + if (isTree) { + eSetFilterList.classList.add("ag-set-filter-tree-list"); + } + eSetFilterList.appendChild(virtualList.getGui()); + const { cellHeight } = this.params; + if (cellHeight != null) { + virtualList.setRowHeight(cellHeight); + } + const componentCreator = (item, listItemElement) => this.createSetListItem(item, isTree, listItemElement); + virtualList.setComponentCreator(componentCreator); + const componentUpdater = (item, component) => this.updateSetListItem(item, component); + virtualList.setComponentUpdater(componentUpdater); + this.createVirtualListModel(this.params); + } + createVirtualListModel(params) { + let model; + if (params.suppressSelectAll) { + model = new ModelWrapper(this.displayValueModel); + } else { + model = new ModelWrapperWithSelectAll( + this.displayValueModel, + this.showAddCurrentSelectionToFilter.bind(this) + ); + } + if (params.treeList) { + model = new TreeModelWrapper(model); + } + this.virtualList.setModel(model); + } + getSelectAllLabel() { + const key = this.miniFilterText == null || !this.params.excelMode ? "selectAll" : "selectAllSearchResults"; + return translateForSetFilter(this, key); + } + getAddSelectionToFilterLabel() { + return translateForSetFilter(this, "addCurrentSelectionToFilter"); + } + createSetListItem(item, isTree, focusWrapper) { + const groupsExist = this.displayValueModel.hasGroups(); + const { isSelected, isExpanded } = this.isSelectedExpanded(item); + const { value, depth, isGroup, hasIndeterminateExpandState, selectedListener, expandedListener } = this.newSetListItemAttributes(item); + const itemParams = { + focusWrapper, + value, + params: this.params, + translate: (translateKey) => translateForSetFilter(this, translateKey), + valueFormatter: this.handler.valueFormatter, + item, + isSelected, + isTree, + depth, + groupsExist, + isGroup, + isExpanded, + hasIndeterminateExpandState + }; + const listItem = this.createBean(new SetFilterListItem(itemParams)); + listItem.addEventListener("selectionChanged", selectedListener); + if (expandedListener) { + listItem.addEventListener("expandedChanged", expandedListener); + } + return listItem; + } + newSetTreeItemAttributes(item) { + const groupsExist = this.displayValueModel.hasGroups(); + if (item.key === SET_FILTER_SELECT_ALL) { + return { + value: () => this.getSelectAllLabel(), + isGroup: groupsExist, + depth: item.depth, + hasIndeterminateExpandState: true, + selectedListener: (e) => this.onSelectAll(e.isSelected), + expandedListener: (e) => this.onExpandAll(e.item, e.isExpanded) + }; + } + if (item.key === SET_FILTER_ADD_SELECTION_TO_FILTER) { + return { + value: () => this.getAddSelectionToFilterLabel(), + depth: item.depth, + isGroup: false, + hasIndeterminateExpandState: false, + selectedListener: (e) => { + this.addCurrentSelectionToFilter = e.isSelected; + this.refreshAfterSelection(); + } + }; + } + if (item.children) { + return { + value: this.params.treeListFormatter?.(item.treeKey, item.depth, item.parentTreeKeys) ?? item.treeKey, + depth: item.depth, + isGroup: true, + selectedListener: (e) => this.onGroupItemSelected(e.item, e.isSelected), + expandedListener: (e) => this.onExpandedChanged(e.item, e.isExpanded) + }; + } + return { + value: this.params.treeListFormatter?.(item.treeKey, item.depth, item.parentTreeKeys) ?? item.treeKey, + depth: item.depth, + selectedListener: (e) => this.onItemSelected(e.item.key, e.isSelected) + }; + } + newSetListItemAttributes(item) { + if (this.isSetFilterModelTreeItem(item)) { + return this.newSetTreeItemAttributes(item); + } + if (item === SET_FILTER_SELECT_ALL) { + return { + value: () => this.getSelectAllLabel(), + selectedListener: (e) => this.onSelectAll(e.isSelected) + }; + } + if (item === SET_FILTER_ADD_SELECTION_TO_FILTER) { + return { + value: () => this.getAddSelectionToFilterLabel(), + selectedListener: (e) => { + this.addCurrentSelectionToFilter = e.isSelected; + this.refreshAfterSelection(); + } + }; + } + return { + value: this.handler.valueModel.allValues.get(item) ?? null, + selectedListener: (e) => this.onItemSelected(e.item, e.isSelected) + }; + } + updateSetListItem(item, component) { + const { isSelected, isExpanded } = this.isSelectedExpanded(item); + component.refresh(item, isSelected, isExpanded); + } + isSelectedExpanded(item) { + let isSelected; + let isExpanded; + if (this.isSetFilterModelTreeItem(item)) { + isExpanded = item.expanded; + if (item.key === SET_FILTER_SELECT_ALL) { + isSelected = this.isSelectAllSelected(); + } else if (item.key === SET_FILTER_ADD_SELECTION_TO_FILTER) { + isSelected = this.isAddCurrentSelectionToFilterChecked(); + } else if (item.children) { + isSelected = this.areAllChildrenSelected(item); + } else { + isSelected = this.selectedKeys.has(item.key); + } + } else if (item === SET_FILTER_SELECT_ALL) { + isSelected = this.isSelectAllSelected(); + } else if (item === SET_FILTER_ADD_SELECTION_TO_FILTER) { + isSelected = this.isAddCurrentSelectionToFilterChecked(); + } else { + isSelected = this.selectedKeys.has(item); + } + return { isSelected, isExpanded }; + } + isSetFilterModelTreeItem(item) { + return item?.treeKey !== void 0; + } + initMiniFilter() { + const { eMiniFilter } = this; + this.updateMiniFilter(); + eMiniFilter.onValueChange(() => this.onMiniFilterInput()); + eMiniFilter.setInputAriaLabel(translateForSetFilter(this, "ariaSearchFilterValues")); + this.addManagedElementListeners(eMiniFilter.getInputElement(), { + keydown: (e) => this.onMiniFilterKeyDown(e) + }); + } + updateMiniFilter() { + const { eMiniFilter, miniFilterText, params } = this; + eMiniFilter.setDisplayed(!params.suppressMiniFilter); + eMiniFilter.setValue(miniFilterText); + } + // we need to have the GUI attached before we can draw the virtual rows, as the + // virtual row logic needs info about the GUI state + afterGuiAttached(params) { + super.afterGuiAttached(params); + this.resetExpansion(); + this.refreshVirtualList(); + const { eMiniFilter } = this; + eMiniFilter.setInputPlaceholder(translateForSetFilter(this, "searchOoo")); + if (!params?.suppressFocus) { + if (eMiniFilter.isDisplayed()) { + eMiniFilter.getFocusableElement().focus(); + } else { + this.virtualList.awaitStable(() => this.virtualList.focusRow(0)); + } + } + } + afterGuiDetached() { + super.afterGuiDetached(); + const { column, excelMode, model, onStateChange } = this.params; + if (this.beans.colFilter?.shouldKeepStateOnDetach(column)) { + return; + } + if (excelMode) { + this.resetMiniFilter(); + } + if (excelMode || model !== this.state.model) { + onStateChange({ + model, + state: this.getState() + }); + this.showOrHideResults(); + } + } + canApply(model) { + return this.params.excelMode ? model == null || model.values.length > 0 : true; + } + /** + * @deprecated v34 Internal method - should only be called by the grid. + */ + onNewRowsLoaded() { + } + /** + * @deprecated v34 Use the same method on the filter handler (`api.getColumnFilterHandler()`) instead. + */ + setFilterValues(values) { + _warn20(283); + this.handler.setFilterValues(values); + } + /** + * @deprecated v34 Use the same method on the filter handler (`api.getColumnFilterHandler()`) instead. + */ + resetFilterValues() { + _warn20(283); + this.handler.resetFilterValues(); + } + /** + * @deprecated v34 Use the same method on the filter handler (`api.getColumnFilterHandler()`) instead. + */ + refreshFilterValues() { + _warn20(283); + this.doRefreshFilterValues(); + } + doRefreshFilterValues() { + this.handler.refreshFilterValues(); + } + /** + * @deprecated v34 Internal method - should only be called by the grid. + */ + onAnyFilterChanged() { + } + onMiniFilterInput(silent) { + if (!this.doSetMiniFilter(this.eMiniFilter.getValue())) { + return; + } + if (silent) { + this.showOrHideResults(); + return; + } + const { applyMiniFilterWhileTyping, readOnly, excelMode } = this.params; + const updateSelections = !readOnly && (applyMiniFilterWhileTyping || !!excelMode); + const apply = applyMiniFilterWhileTyping && !readOnly ? "debounce" : void 0; + this.updateUiAfterMiniFilterChange(updateSelections, apply); + } + updateUiAfterMiniFilterChange(updateSelections, apply) { + if (updateSelections) { + const { excelMode, readOnly, model } = this.params; + if (excelMode && !readOnly && this.miniFilterText == null) { + this.setModelAndRefresh(model?.values ?? null); + } else { + this.selectAllMatchingMiniFilter(true); + } + } + this.checkAndRefreshVirtualList(); + this.onUiChanged(updateSelections ? apply : "prevent"); + this.showOrHideResults(); + } + showOrHideResults() { + const hideResults = this.miniFilterText != null && this.displayValueModel.getDisplayedValueCount() < 1; + _setDisplayed16(this.eFilterNoMatches, hideResults); + _setDisplayed16(this.eSetFilterList, !hideResults); + } + resetMiniFilter() { + this.eMiniFilter.setValue(null, true); + this.doSetMiniFilter(null); + } + onMiniFilterKeyDown(e) { + const { excelMode, readOnly } = this.params; + if (e.key === KeyCode26.ENTER && !excelMode && !readOnly) { + this.updateUiAfterMiniFilterChange(true, "immediately"); + } + } + focusRowIfAlive(rowIndex) { + if (rowIndex == null) { + return Promise.resolve(); + } + return new Promise((res) => { + window.setTimeout(() => { + if (this.isAlive()) { + this.virtualList.focusRow(rowIndex); + } + res(); + }, 0); + }); + } + onSelectAll(isSelected) { + if (isSelected) { + this.selectAllMatchingMiniFilter(); + } else { + this.deselectAllMatchingMiniFilter(); + } + this.refreshAfterSelection(); + } + onGroupItemSelected(item, isSelected) { + const recursiveGroupSelection = (i) => { + if (!i.filterPasses) { + return; + } + const children = i.children; + if (children) { + for (const childItem of children.values()) { + recursiveGroupSelection(childItem); + } + } else { + this.setKeySelected(i.key, isSelected); + } + }; + recursiveGroupSelection(item); + this.refreshAfterSelection(); + } + onItemSelected(key, isSelected) { + this.setKeySelected(key, isSelected); + this.refreshAfterSelection(); + } + onExpandAll(item, isExpanded) { + const recursiveExpansion = (i) => { + if (i.filterPasses && i.available && i.children) { + for (const childItem of i.children.values()) { + recursiveExpansion(childItem); + } + i.expanded = isExpanded; + } + }; + recursiveExpansion(item); + this.refreshAfterExpansion(); + } + onExpandedChanged(item, isExpanded) { + item.expanded = isExpanded; + this.refreshAfterExpansion(); + } + refreshAfterExpansion() { + const focusedRow = this.virtualList.getLastFocusedRow(); + this.updateDisplayedValues("expansion"); + this.checkAndRefreshVirtualList(); + this.focusRowIfAlive(focusedRow); + } + refreshAfterSelection() { + const focusedRow = this.virtualList.getLastFocusedRow(); + this.checkAndRefreshVirtualList(); + this.onUiChanged(); + this.focusRowIfAlive(focusedRow); + } + setMiniFilter(newMiniFilter, silent) { + this.eMiniFilter.setValue(newMiniFilter, silent); + this.onMiniFilterInput(silent); + } + /** Sets mini filter value. Returns true if it changed from last value, otherwise false. */ + doSetMiniFilter(value) { + value = _makeNull4(value); + if (this.miniFilterText === value) { + return false; + } + if (value === null) { + this.addCurrentSelectionToFilter = false; + } + this.miniFilterText = value; + this.updateDisplayedValues("miniFilter"); + return true; + } + getMiniFilter() { + return this.miniFilterText; + } + getUiChangeEventParams() { + return { + miniFilterValue: this.miniFilterText + }; + } + getState() { + const miniFilterValue = this.miniFilterText; + return miniFilterValue ? { miniFilterValue } : void 0; + } + checkAndRefreshVirtualList() { + this.virtualList.refresh(!this.hardRefreshVirtualList); + if (this.hardRefreshVirtualList) { + this.hardRefreshVirtualList = false; + } + } + /** + * @deprecated v34 Use the same method on the filter handler (`api.getColumnFilterHandler()`) instead. + */ + getFilterKeys() { + _warn20(283); + return this.handler.getFilterKeys(); + } + /** + * @deprecated v34 Use the same method on the filter handler (`api.getColumnFilterHandler()`) instead. + */ + getFilterValues() { + _warn20(283); + return this.handler.getFilterValues(); + } + refreshVirtualList() { + if (this.params.refreshValuesOnOpen) { + this.doRefreshFilterValues(); + } else { + this.checkAndRefreshVirtualList(); + } + } + isSelectAllSelected() { + if (!this.params.defaultToNothingSelected) { + if (this.hasSelections() && this.isNothingVisibleSelected()) { + return false; + } + if (this.isEverythingVisibleSelected()) { + return true; + } + } else { + if (this.hasSelections() && this.isEverythingVisibleSelected()) { + return true; + } + if (this.isNothingVisibleSelected()) { + return false; + } + } + return void 0; + } + areAllChildrenSelected(item) { + const recursiveChildSelectionCheck = (i) => { + if (i.children) { + let someTrue = false; + let someFalse = false; + for (const child of i.children.values()) { + if (!child.filterPasses || !child.available) { + continue; + } + const childSelected = recursiveChildSelectionCheck(child); + if (childSelected === void 0) { + return void 0; + } + if (childSelected) { + someTrue = true; + } else { + someFalse = true; + } + if (someTrue && someFalse) { + return void 0; + } + } + return someTrue; + } else { + return this.selectedKeys.has(i.key); + } + }; + if (!this.params.defaultToNothingSelected) { + return recursiveChildSelectionCheck(item); + } else { + return this.hasSelections() && recursiveChildSelectionCheck(item); + } + } + resetExpansion() { + if (!this.params.treeList) { + return; + } + const selectAllItem = this.displayValueModel.getSelectAllItem(); + if (this.isSetFilterModelTreeItem(selectAllItem)) { + const recursiveCollapse = (i) => { + const children = i.children; + if (children) { + for (const childItem of children.values()) { + recursiveCollapse(childItem); + } + i.expanded = false; + } + }; + recursiveCollapse(selectAllItem); + this.updateDisplayedValues("expansion"); + } + } + getModelAsString(model) { + return this.handler.getModelAsString(model); + } + getPositionableElement() { + return this.eSetFilterList; + } + updateDisplayedValues(source, allKeys) { + if (source === "expansion") { + this.displayValueModel.refresh(); + return; + } + const handler = this.handler; + const valueModel = handler.valueModel; + if (this.miniFilterText == null) { + this.displayValueModel.updateDisplayedValuesToAllAvailable( + (key) => valueModel.allValues.get(key) ?? null, + allKeys, + valueModel.availableKeys, + source + ); + return; + } + const formattedFilterText = handler.caseFormat(this.formatter(this.miniFilterText) || ""); + const matchesFilter = (valueToCheck) => valueToCheck != null && handler.caseFormat(valueToCheck).includes(formattedFilterText); + const nullMatchesFilter = !!this.params.excelMode && matchesFilter(translateForSetFilter(this, "blanks")); + this.displayValueModel.updateDisplayedValuesToMatchMiniFilter( + (key) => valueModel.allValues.get(key) ?? null, + allKeys, + valueModel.availableKeys, + matchesFilter, + nullMatchesFilter, + source + ); + } + hasSelections() { + return this.params.defaultToNothingSelected ? this.selectedKeys.size > 0 : this.handler.valueModel.allValues.size !== this.selectedKeys.size; + } + isInWindowsExcelMode() { + return this.params.excelMode === "windows"; + } + isAddCurrentSelectionToFilterChecked() { + return this.isInWindowsExcelMode() && this.addCurrentSelectionToFilter; + } + showAddCurrentSelectionToFilter() { + return this.isInWindowsExcelMode() && _exists15(this.miniFilterText) && this.miniFilterText.length > 0; + } + selectAllMatchingMiniFilter(clearExistingSelection = false) { + if (this.miniFilterText == null) { + this.selectedKeys = new Set(this.handler.valueModel.allValues.keys()); + } else { + if (clearExistingSelection) { + this.selectedKeys.clear(); + } + this.displayValueModel.forEachDisplayedKey((key) => this.selectedKeys.add(key)); + } + } + deselectAllMatchingMiniFilter() { + if (this.miniFilterText == null) { + this.selectedKeys.clear(); + } else { + this.displayValueModel.forEachDisplayedKey((key) => this.selectedKeys.delete(key)); + } + } + setKeySelected(key, selected) { + if (selected) { + this.selectedKeys.add(key); + } else { + if (this.params.excelMode && this.isEverythingVisibleSelected()) { + this.resetSelectionState(this.displayValueModel.getDisplayedKeys()); + } + this.selectedKeys.delete(key); + } + } + isEverythingVisibleSelected() { + return !this.displayValueModel.someDisplayedKey((it) => !this.selectedKeys.has(it)); + } + isNothingVisibleSelected() { + return !this.displayValueModel.someDisplayedKey((it) => this.selectedKeys.has(it)); + } + getSelectedModel() { + if (!this.hasSelections()) { + return null; + } + const filteringKeys = this.isAddCurrentSelectionToFilterChecked() ? this.params.model?.values : void 0; + if (filteringKeys?.length) { + if (this.selectedKeys) { + const modelKeys = /* @__PURE__ */ new Set([...filteringKeys, ...this.selectedKeys]); + return Array.from(modelKeys); + } + return Array.from(filteringKeys); + } + return Array.from(this.selectedKeys); + } + setSelectedModel(model) { + const handler = this.handler; + const valueModel = handler.valueModel; + return valueModel.allKeys.then((keys) => { + if (model == null) { + this.resetSelectionState(keys ?? []); + } else { + this.selectedKeys.clear(); + const existingFormattedKeys = /* @__PURE__ */ new Map(); + valueModel.allValues.forEach((_value, key) => { + existingFormattedKeys.set(handler.caseFormat(key), key); + }); + model.forEach((unformattedKey) => { + const formattedKey = handler.caseFormat(_makeNull4(unformattedKey)); + const existingUnformattedKey = existingFormattedKeys.get(formattedKey); + if (existingUnformattedKey !== void 0) { + this.selectedKeys.add(existingUnformattedKey); + } + }); + } + }); + } + resetSelectionState(keys) { + if (this.params.defaultToNothingSelected) { + this.selectedKeys.clear(); + } else { + this.selectedKeys = new Set(keys); + } + } + getFilterHandler() { + return this.handler; + } + destroy() { + this.virtualList = this.destroyBean(this.virtualList); + for (const func of this.handlerDestroyFuncs ?? []) { + func(); + } + this.handler = void 0; + this.displayValueModel = void 0; + this.selectedKeys.clear(); + super.destroy(); + } +}; +var ModelWrapper = class { + constructor(model) { + this.model = model; + } + getRowCount() { + return this.model.getDisplayedValueCount(); + } + getRow(index) { + return this.model.getDisplayedItem(index); + } + areRowsEqual(oldRow, newRow) { + return oldRow === newRow; + } +}; +var ModelWrapperWithSelectAll = class { + constructor(model, showAddCurrentSelectionToFilter) { + this.model = model; + this.showAddCurrentSelectionToFilter = showAddCurrentSelectionToFilter; + } + getRowCount() { + const showAddCurrentSelectionToFilter = this.showAddCurrentSelectionToFilter(); + const outboundItems = showAddCurrentSelectionToFilter ? 2 : 1; + return this.model.getDisplayedValueCount() + outboundItems; + } + getRow(index) { + if (index === 0) { + return this.model.getSelectAllItem(); + } + const showAddCurrentSelectionToFilter = this.showAddCurrentSelectionToFilter(); + const outboundItems = showAddCurrentSelectionToFilter ? 2 : 1; + if (index === 1 && showAddCurrentSelectionToFilter) { + return this.model.getAddSelectionToFilterItem(); + } + return this.model.getDisplayedItem(index - outboundItems); + } + areRowsEqual(oldRow, newRow) { + return oldRow === newRow; + } +}; +var TreeModelWrapper = class { + constructor(model) { + this.model = model; + } + getRowCount() { + return this.model.getRowCount(); + } + getRow(index) { + return this.model.getRow(index); + } + areRowsEqual(oldRow, newRow) { + if (oldRow == null && newRow == null) { + return true; + } + return oldRow != null && newRow != null && oldRow.treeKey === newRow.treeKey && oldRow.depth === newRow.depth; + } +}; + +// packages/ag-grid-enterprise/src/setFilter/setFilterHandler.ts +import { + BeanStub as BeanStub20, + _addGridCommonParams as _addGridCommonParams14, + _debounce as _debounce3, + _error as _error3, + _isClientSideRowModel as _isClientSideRowModel3, + _last as _last8, + _makeNull as _makeNull7, + _toStringOrNull as _toStringOrNull5 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/setFilter/clientSideValueExtractor.ts +import { AgPromise as AgPromise4, BeanStub as BeanStub18, _makeNull as _makeNull5 } from "ag-grid-community"; +var ClientSideValuesExtractor = class extends BeanStub18 { + constructor(createKey, caseFormat, getValue, isTreeDataOrGrouping, isTreeData) { + super(); + this.createKey = createKey; + this.caseFormat = caseFormat; + this.getValue = getValue; + this.isTreeDataOrGrouping = isTreeDataOrGrouping; + this.isTreeData = isTreeData; + } + extractUniqueValuesAsync(predicate, existingValues) { + return new AgPromise4((resolve) => { + if (this.beans.rowModel.rowCountReady) { + resolve(this.extractUniqueValues(predicate, existingValues)); + } else { + const [destroyFunc] = this.addManagedEventListeners({ + rowCountReady: () => { + destroyFunc?.(); + resolve(this.extractUniqueValues(predicate, existingValues)); + } + }); + } + }); + } + extractUniqueValues(predicate, existingValues) { + const values = /* @__PURE__ */ new Map(); + const existingFormattedKeys = this.extractExistingFormattedKeys(existingValues); + const formattedKeys = /* @__PURE__ */ new Set(); + const treeData = this.isTreeData(); + const treeDataOrGrouping = this.isTreeDataOrGrouping(); + const groupedCols = this.beans.rowGroupColsSvc?.columns; + const groupAllowUnbalanced = this.gos.get("groupAllowUnbalanced"); + const addValue = (unformattedKey, value) => { + const formattedKey = this.caseFormat(unformattedKey); + if (!formattedKeys.has(formattedKey)) { + formattedKeys.add(formattedKey); + let keyToAdd = unformattedKey; + let valueToAdd = _makeNull5(value); + const existingUnformattedKey = existingFormattedKeys?.get(formattedKey); + if (existingUnformattedKey != null) { + keyToAdd = existingUnformattedKey; + valueToAdd = existingValues.get(existingUnformattedKey); + } + values.set(keyToAdd, valueToAdd); + } + }; + this.beans.rowModel.forEachLeafNode((node) => { + if (!node.data || !predicate(node)) { + return; + } + if (treeDataOrGrouping) { + this.addValueForTreeDataOrGrouping(node, treeData, groupedCols, addValue, groupAllowUnbalanced); + return; + } + const value = this.getValue(node); + if (value != null && Array.isArray(value)) { + for (const x of value) { + addValue(this.createKey(x, node), x); + } + if (value.length === 0) { + addValue(null, null); + } + } else { + addValue(this.createKey(value, node), value); + } + }); + return values; + } + addValueForTreeDataOrGrouping(node, treeData, groupedCols = [], addValue, groupAllowUnbalanced) { + let dataPath; + if (treeData) { + if (node.childrenAfterGroup?.length) { + return; + } + dataPath = node.getRoute() ?? [node.key ?? node.id]; + } else { + dataPath = groupedCols.map((groupCol) => this.beans.valueSvc.getKeyForNode(groupCol, node)); + dataPath.push(this.getValue(node)); + } + const processedDataPath = processDataPath(dataPath, treeData, groupAllowUnbalanced); + addValue(this.createKey(processedDataPath), processedDataPath); + } + extractExistingFormattedKeys(existingValues) { + if (!existingValues) { + return null; + } + const existingFormattedKeys = /* @__PURE__ */ new Map(); + existingValues.forEach((_value, key) => { + existingFormattedKeys.set(this.caseFormat(key), key); + }); + return existingFormattedKeys; + } +}; + +// packages/ag-grid-enterprise/src/setFilter/setFilterAppliedModel.ts +var SetFilterAppliedModel = class { + constructor(caseFormat) { + this.caseFormat = caseFormat; + // This attribute contains keys that are actually used for filtering. + // These keys take into account case sensitivity: + // - When filtering is case-insensitive, all filtering keys are converted to upper case and stored here. + this.keys = null; + } + /** No model applied */ + isNull() { + return this.keys == null; + } + /** Nothing selected */ + isEmpty() { + return !this.keys?.size; + } + update(appliedModel) { + const keys = /* @__PURE__ */ new Set(); + this.keys = keys; + const values = appliedModel?.values; + if (values) { + const caseFormat = this.caseFormat; + for (let i = 0, len = values.length; i < len; i++) { + keys.add(caseFormat(values[i])); + } + } + } + has(key) { + return !!this.keys?.has(this.caseFormat(key)); + } + destroy() { + this.keys = null; + } +}; + +// packages/ag-grid-enterprise/src/setFilter/setValueModel.ts +import { + AgPromise as AgPromise5, + BeanStub as BeanStub19, + _addGridCommonParams as _addGridCommonParams13, + _defaultComparator as _defaultComparator2, + _error as _error2, + _makeNull as _makeNull6, + _warn as _warn21 +} from "ag-grid-community"; +var SetFilterModelValuesType = /* @__PURE__ */ ((SetFilterModelValuesType2) => { + SetFilterModelValuesType2[SetFilterModelValuesType2["PROVIDED_LIST"] = 0] = "PROVIDED_LIST"; + SetFilterModelValuesType2[SetFilterModelValuesType2["PROVIDED_CALLBACK"] = 1] = "PROVIDED_CALLBACK"; + SetFilterModelValuesType2[SetFilterModelValuesType2["TAKEN_FROM_GRID_VALUES"] = 2] = "TAKEN_FROM_GRID_VALUES"; + return SetFilterModelValuesType2; +})(SetFilterModelValuesType || {}); +var setValueModel_default = SetFilterModelValuesType; +var SetValueModel = class extends BeanStub19 { + constructor(clientSideValuesExtractor, caseFormat, createKey, isTreeDataOrGrouping, params) { + super(); + this.clientSideValuesExtractor = clientSideValuesExtractor; + this.caseFormat = caseFormat; + this.createKey = createKey; + this.isTreeDataOrGrouping = isTreeDataOrGrouping; + this.params = params; + /** All possible values for the filter, sorted if required. */ + this.allValues = /* @__PURE__ */ new Map(); + /** Remaining keys when filters from other columns have been applied. */ + this.availableKeys = /* @__PURE__ */ new Set(); + this.providedValues = null; + this.initialised = false; + } + postConstruct() { + const params = this.params; + const values = params.handlerParams.filterParams.values; + this.updateParams(params); + if (values == null) { + this.valuesType = 2 /* TAKEN_FROM_GRID_VALUES */; + } else { + this.valuesType = Array.isArray(values) ? 0 /* PROVIDED_LIST */ : 1 /* PROVIDED_CALLBACK */; + this.providedValues = values; + } + this.updateAllValues(); + } + refresh(params) { + const handlerParams = params.handlerParams; + if (handlerParams.source !== "colDef") { + return; + } + const { values, suppressSorting } = handlerParams.filterParams; + const currentProvidedValues = this.providedValues; + const currentSuppressSorting = this.params.handlerParams.filterParams.suppressSorting; + this.params = params; + this.updateParams(params); + this.providedValues = values ?? null; + if (this.providedValues !== currentProvidedValues || suppressSorting !== currentSuppressSorting) { + if (!values || values.length === 0) { + this.valuesType = 2 /* TAKEN_FROM_GRID_VALUES */; + this.providedValues = null; + } else { + this.valuesType = Array.isArray(values) ? 0 /* PROVIDED_LIST */ : 1 /* PROVIDED_CALLBACK */; + } + this.updateAllValues(); + } + } + updateParams(params) { + const { + handlerParams: { + colDef, + filterParams: { comparator, treeList, treeListPathGetter } + }, + usingComplexObjects + } = params; + const keyComparator = comparator ?? colDef.comparator; + const treeDataOrGrouping = this.isTreeDataOrGrouping(); + let entryComparator; + if (treeDataOrGrouping && !keyComparator) { + entryComparator = createTreeDataOrGroupingComparator(); + } else if (treeList && !treeListPathGetter && !keyComparator) { + entryComparator = ([_aKey, aValue], [_bKey, bValue]) => _defaultComparator2(aValue, bValue); + } else { + entryComparator = ([_aKey, aValue], [_bKey, bValue]) => keyComparator(aValue, bValue); + } + this.entryComparator = entryComparator; + this.keyComparator = keyComparator ?? _defaultComparator2; + this.compareByValue = !!(usingComplexObjects && keyComparator || treeDataOrGrouping || treeList && !treeListPathGetter); + } + updateAllValues() { + this.allKeys = new AgPromise5((resolve) => { + switch (this.valuesType) { + case 2 /* TAKEN_FROM_GRID_VALUES */: + this.getValuesFromRowsAsync().then((values) => resolve(this.processAllValues(values))); + break; + case 0 /* PROVIDED_LIST */: { + resolve( + this.processAllValues( + this.uniqueValues(this.validateProvidedValues(this.providedValues)) + ) + ); + break; + } + case 1 /* PROVIDED_CALLBACK */: { + this.dispatchLocalEvent({ type: "loadingStart" }); + const callback = this.providedValues; + const { column, colDef } = this.params.handlerParams; + const params = _addGridCommonParams13(this.gos, { + success: (values) => { + this.dispatchLocalEvent({ type: "loadingEnd" }); + resolve(this.processAllValues(this.uniqueValues(this.validateProvidedValues(values)))); + }, + colDef, + column + }); + window.setTimeout(() => callback(params), 0); + break; + } + } + }); + this.allKeys.then((values) => { + this.updateAvailableKeys(values ?? []); + this.initialised = true; + }); + return this.allKeys; + } + getAvailableValues(predicate) { + return this.sortKeys(this.getValuesFromRows(predicate)); + } + overrideValues(valuesToUse) { + return this.allKeys.then(() => { + this.valuesType = 0 /* PROVIDED_LIST */; + this.providedValues = valuesToUse; + }); + } + refreshAvailable() { + return new AgPromise5((resolve) => { + if (this.showAvailableOnly()) { + this.allKeys.then((keys) => { + const updatedKeys = keys ?? []; + this.updateAvailableKeys(updatedKeys); + resolve(true); + }); + return; + } + resolve(false); + }); + } + refreshAll() { + return new AgPromise5((resolve) => { + this.allKeys.then(() => { + this.updateAllValues().then(() => { + resolve(); + }); + }); + }); + } + isLoading() { + return !this.initialised && this.valuesType === 1 /* PROVIDED_CALLBACK */; + } + isInitialised() { + return this.initialised; + } + getValueForFormatter(key) { + return this.initialised ? this.allValues.get(key) : key; + } + getAvailableKeys(values) { + return this.initialised ? values.filter((v) => this.availableKeys.has(v)) : values; + } + getParamsForValuesFromRows(removeUnavailableValues) { + if (!this.clientSideValuesExtractor) { + _error2(113); + return void 0; + } + const existingValues = removeUnavailableValues && !this.params.handlerParams.filterParams.caseSensitive ? this.allValues : void 0; + return existingValues; + } + getValuesFromRows(predicate) { + const existingValues = this.getParamsForValuesFromRows(true); + return this.clientSideValuesExtractor?.extractUniqueValues(predicate, existingValues) ?? null; + } + getValuesFromRowsAsync() { + const existingValues = this.getParamsForValuesFromRows(false); + return this.clientSideValuesExtractor?.extractUniqueValuesAsync(() => true, existingValues) ?? AgPromise5.resolve(null); + } + processAllValues(values) { + const sortedKeys = this.sortKeys(values); + this.allValues = values ?? /* @__PURE__ */ new Map(); + return sortedKeys; + } + uniqueValues(values) { + const uniqueValues = /* @__PURE__ */ new Map(); + const formattedKeys = /* @__PURE__ */ new Set(); + const { caseFormat, createKey } = this; + for (const value of values ?? []) { + const valueToUse = _makeNull6(value); + const unformattedKey = createKey(valueToUse); + const formattedKey = caseFormat(unformattedKey); + if (!formattedKeys.has(formattedKey)) { + formattedKeys.add(formattedKey); + uniqueValues.set(unformattedKey, valueToUse); + } + } + return uniqueValues; + } + validateProvidedValues(values) { + if (this.params.usingComplexObjects && values?.length) { + const firstValue = values[0]; + if (firstValue && typeof firstValue !== "object" && typeof firstValue !== "function") { + const firstKey = this.createKey(firstValue); + if (firstKey == null) { + _warn21(209); + } else { + _warn21(210); + } + } + } + return values; + } + sortKeys(nullableValues) { + const values = nullableValues ?? /* @__PURE__ */ new Map(); + const filterParams = this.params.handlerParams.filterParams; + if (filterParams.suppressSorting) { + return Array.from(values.keys()); + } + let sortedKeys; + if (this.compareByValue) { + sortedKeys = Array.from(values.entries()).sort(this.entryComparator).map(([key]) => key); + } else { + sortedKeys = Array.from(values.keys()).sort(this.keyComparator); + } + if (filterParams.excelMode && values.has(null)) { + sortedKeys = sortedKeys.filter((v) => v != null); + sortedKeys.push(null); + } + return sortedKeys; + } + showAvailableOnly() { + return this.valuesType === 2 /* TAKEN_FROM_GRID_VALUES */; + } + updateAvailableKeys(allKeys) { + const availableKeys = this.showAvailableOnly() ? this.getAvailableValues((node) => this.params.handlerParams.doesRowPassOtherFilter(node)) : allKeys; + this.availableKeys = new Set(availableKeys); + window.setTimeout(() => { + if (this.isAlive()) { + this.dispatchLocalEvent({ type: "availableValuesChanged" }); + } + }); + } +}; + +// packages/ag-grid-enterprise/src/setFilter/setFilterHandler.ts +var SetFilterHandler = class extends BeanStub20 { + constructor() { + super(...arguments); + /** Used to get the filter type for filter models. */ + this.filterType = "set"; + this.treeDataTreeList = false; + this.groupingTreeList = false; + this.caseSensitive = false; + this.noValueFormatterSupplied = false; + } + init(params) { + this.updateParams(params); + const isTreeDataOrGrouping = this.isTreeDataOrGrouping.bind(this); + const isTreeData = () => this.treeDataTreeList; + const createKey = this.createKey; + const caseFormat = this.caseFormat.bind(this); + const { gos, beans } = this; + const clientSideValuesExtractor = _isClientSideRowModel3(gos, beans.rowModel) ? this.createManagedBean( + new ClientSideValuesExtractor( + createKey, + caseFormat, + params.getValue, + isTreeDataOrGrouping, + isTreeData + ) + ) : void 0; + const valueModel = this.createManagedBean( + new SetValueModel(clientSideValuesExtractor, caseFormat, createKey, isTreeDataOrGrouping, { + handlerParams: params, + usingComplexObjects: !!(params.filterParams.keyCreator ?? params.colDef.keyCreator) + }) + ); + this.addManagedListeners(valueModel, { + availableValuesChanged: params.onModelAsStringChange + }); + this.valueModel = valueModel; + this.appliedModel = new SetFilterAppliedModel(this.caseFormat.bind(this)); + this.appliedModel.update(params.model); + this.validateModel(params); + this.addEventListenersForDataChanges(); + } + refresh(params) { + this.updateParams(params); + this.valueModel.refresh({ + handlerParams: params, + usingComplexObjects: !!(params.filterParams.keyCreator ?? params.colDef.keyCreator) + }); + this.appliedModel.update(params.model); + this.validateModel(params); + } + updateParams(params) { + this.params = params; + const { + colDef, + filterParams: { caseSensitive, treeList, keyCreator, valueFormatter } + } = params; + this.caseSensitive = !!caseSensitive; + const isGroupCol = !!colDef.showRowGroup; + this.treeDataTreeList = this.gos.get("treeData") && !!treeList && isGroupCol; + this.groupingTreeList = !!this.beans.rowGroupColsSvc?.columns.length && !!treeList && isGroupCol; + const resolvedKeyCreator = keyCreator ?? colDef.keyCreator; + this.createKey = this.generateCreateKey(resolvedKeyCreator, this.isTreeDataOrGrouping()); + this.setValueFormatter(valueFormatter, resolvedKeyCreator, !!treeList, !!colDef.refData); + } + doesFilterPass(params) { + const { appliedModel, treeDataTreeList, groupingTreeList } = this; + if (appliedModel.isNull()) { + return true; + } + if (appliedModel.isEmpty()) { + return false; + } + const { node } = params; + if (treeDataTreeList) { + return this.doesFilterPassForTreeData(node); + } + if (groupingTreeList) { + return this.doesFilterPassForGrouping(node); + } + const value = this.params.getValue(node); + if (value != null && Array.isArray(value)) { + if (value.length === 0) { + return appliedModel.has(null); + } + return value.some((v) => appliedModel.has(this.createKey(v, node))); + } + return appliedModel.has(this.createKey(value, node)); + } + getFormattedValue(key) { + let value = this.valueModel.getValueForFormatter(key); + if (this.noValueFormatterSupplied && this.isTreeDataOrGrouping() && Array.isArray(value)) { + value = _last8(value); + } + const formattedValue = this.beans.valueSvc.formatValue( + this.params.column, + null, + value, + this.valueFormatter, + false + ); + return (formattedValue == null ? _toStringOrNull5(value) : formattedValue) ?? translateForSetFilter(this, "blanks"); + } + getModelAsString(model, source) { + const { values } = model ?? {}; + const forToolPanel = source === "filterToolPanel"; + if (values == null) { + return forToolPanel ? translateForSetFilter(this, "filterSummaryListInactive") : ""; + } + const availableKeys = this.valueModel.getAvailableKeys(values); + const numValues = availableKeys.length; + const numToDisplay = forToolPanel ? 3 : 10; + const formattedValues = availableKeys.slice(0, numToDisplay).map((key) => this.getFormattedValue(key)); + if (forToolPanel) { + const valueList = formattedValues.join(translateForSetFilter(this, "filterSummaryListSeparator")); + if (numValues > 3) { + return translateForSetFilter(this, "filterSummaryListLong", [valueList, String(numValues - 3)]); + } else { + return translateForSetFilter(this, "filterSummaryListShort", [valueList]); + } + } + return `(${numValues}) ${formattedValues.join(",")}${numValues > 10 ? ",..." : ""}`; + } + onAnyFilterChanged() { + window.setTimeout(() => { + if (!this.isAlive()) { + return; + } + this.valueModel.refreshAvailable().then((updated) => { + this.dispatchLocalEvent({ type: "anyFilterChanged", updated: !!updated }); + }); + }); + } + onNewRowsLoaded() { + this.syncAfterDataChange(); + } + setFilterValues(values) { + this.valueModel.overrideValues(values).then(() => { + this.refreshFilterValues(); + }); + } + resetFilterValues() { + this.valueModel.valuesType = setValueModel_default.TAKEN_FROM_GRID_VALUES; + this.syncAfterDataChange(); + } + /** + * @param suppressAvailableValuesCheck when refreshing values via the API, the model will be reset if all available values are selected. + * When refreshing due to internal changes, set this to `true` to do the reset check based on all values instead. + */ + refreshFilterValues(suppressAvailableValuesCheck) { + if (!this.valueModel.isInitialised()) { + return; + } + this.valueModel.refreshAll().then(() => { + this.dispatchLocalEvent({ type: "dataChanged", hardRefresh: true }); + this.validateModel(this.params, void 0, !suppressAvailableValuesCheck); + }); + } + getFilterKeys() { + return Array.from(this.valueModel.allValues.keys()); + } + getFilterValues() { + return Array.from(this.valueModel.allValues.values()); + } + isTreeDataOrGrouping() { + return this.treeDataTreeList || this.groupingTreeList; + } + caseFormat(valueToFormat) { + if (valueToFormat == null || typeof valueToFormat !== "string") { + return valueToFormat; + } + return this.caseSensitive ? valueToFormat : valueToFormat.toUpperCase(); + } + addEventListenersForDataChanges() { + this.addManagedPropertyListeners(["groupAllowUnbalanced"], () => this.syncAfterDataChange()); + const syncAfterDataChangeDebounced = _debounce3(this, this.syncAfterDataChange.bind(this), 0); + this.addManagedEventListeners({ + cellValueChanged: (event) => { + if (event.column === this.params.column) { + syncAfterDataChangeDebounced(); + } + } + }); + } + syncAfterDataChange() { + if (!this.isValuesTakenFromGrid()) { + return; + } + this.valueModel.refreshAll().then(() => { + this.dispatchLocalEvent({ type: "dataChanged" }); + this.validateModel(this.params, { afterDataChange: true }); + }); + } + validateModel(params, additionalEventAttributes, restrictToAvailableValues) { + const valueModel = this.valueModel; + valueModel.allKeys.then(() => { + const model = params.model; + if (model == null) { + return; + } + const existingFormattedKeys = /* @__PURE__ */ new Map(); + const addKey = (key) => existingFormattedKeys.set(this.caseFormat(key), key); + if (restrictToAvailableValues) { + for (const key of valueModel.availableKeys) { + addKey(key); + } + } else { + valueModel.allValues.forEach((_value, key) => addKey(key)); + } + const newValues = []; + let updated = false; + for (const unformattedKey of model.values) { + const formattedKey = this.caseFormat(_makeNull7(unformattedKey)); + const existingUnformattedKey = existingFormattedKeys.get(formattedKey); + if (existingUnformattedKey !== void 0) { + newValues.push(existingUnformattedKey); + if (existingUnformattedKey !== unformattedKey) { + updated = true; + } + } else { + updated = true; + } + } + const numNewValues = newValues.length; + const filterParams = params.filterParams; + if (numNewValues === 0 && filterParams.excelMode) { + params.onModelChange(null, additionalEventAttributes); + return; + } + const clearOnAllSelected = !filterParams.defaultToNothingSelected && (this.valueModel.valuesType === setValueModel_default.TAKEN_FROM_GRID_VALUES || !filterParams.suppressClearModelOnRefreshValues); + const allSelected = clearOnAllSelected && numNewValues === existingFormattedKeys.size; + if (updated || !model.filterType || allSelected) { + const newModel = allSelected ? null : { filterType: this.filterType, values: newValues }; + params.onModelChange(newModel, additionalEventAttributes); + } + }); + } + isValuesTakenFromGrid() { + return this.valueModel.valuesType === setValueModel_default.TAKEN_FROM_GRID_VALUES; + } + doesFilterPassForTreeData(node) { + if (node.childrenAfterGroup?.length) { + return false; + } + const { gos, appliedModel } = this; + return appliedModel.has( + this.createKey( + processDataPath( + node.getRoute() ?? [node.key ?? node.id], + true, + gos.get("groupAllowUnbalanced") + ) + ) + ); + } + doesFilterPassForGrouping(node) { + const { + appliedModel, + params, + gos, + beans: { rowGroupColsSvc, valueSvc } + } = this; + const dataPath = (rowGroupColsSvc?.columns ?? []).map((groupCol) => valueSvc.getKeyForNode(groupCol, node)); + dataPath.push(params.getValue(node)); + return appliedModel.has( + this.createKey(processDataPath(dataPath, false, gos.get("groupAllowUnbalanced"))) + ); + } + generateCreateKey(keyCreator, treeDataOrGrouping) { + if (treeDataOrGrouping && !keyCreator) { + _error3(250); + return () => null; + } + if (keyCreator) { + return (value, node = null) => { + const params = this.getKeyCreatorParams(value, node); + return _makeNull7(keyCreator(params)); + }; + } + return (value) => _makeNull7(_toStringOrNull5(value)); + } + getKeyCreatorParams(value, node = null) { + const { colDef, column } = this.params; + return _addGridCommonParams14(this.gos, { + value, + colDef, + column, + node, + data: node?.data + }); + } + setValueFormatter(providedValueFormatter, keyCreator, treeList, isRefData) { + let valueFormatter = providedValueFormatter; + if (!valueFormatter) { + if (keyCreator && !treeList) { + _error3(249); + return; + } + this.noValueFormatterSupplied = true; + if (!isRefData) { + valueFormatter = (params) => _toStringOrNull5(params.value); + } + } + this.valueFormatter = valueFormatter; + } + getCrossFilterModel(callback) { + const { createKey, valueModel, params } = this; + return callback(createKey, valueModel.availableKeys, params.model?.values); + } + destroy() { + this.appliedModel.destroy(); + super.destroy(); + this.valueModel = void 0; + } +}; + +// packages/ag-grid-enterprise/src/setFilter/setFloatingFilter.ts +import { AgInputTextFieldSelector as AgInputTextFieldSelector7, Component as Component32, RefPlaceholder as RefPlaceholder31, _error as _error4 } from "ag-grid-community"; +var SetFloatingFilterElement = { + tag: "div", + cls: "ag-floating-filter-input ag-set-floating-filter-input", + role: "presentation", + children: [ + { + tag: "ag-input-text-field", + ref: "eFloatingFilterText" + } + ] +}; +var SetFloatingFilterComp = class extends Component32 { + constructor() { + super(SetFloatingFilterElement, [AgInputTextFieldSelector7]); + this.eFloatingFilterText = RefPlaceholder31; + } + init(params) { + this.params = params; + this.eFloatingFilterText.setDisabled(true).addGuiEventListener("click", () => this.params.showParentFilter()); + this.setParams(params); + } + setParams(params) { + const displayName = this.beans.colNames.getDisplayNameForColumn(params.column, "header", true); + const translate = this.getLocaleTextFunc(); + this.eFloatingFilterText.setInputAriaLabel(`${displayName} ${translate("ariaFilterInput", "Filter Input")}`); + if (this.gos.get("enableFilterHandlers")) { + const reactiveParams = params; + this.updateFloatingFilterText(reactiveParams.model); + } + } + refresh(params) { + this.params = params; + this.setParams(params); + } + onParentModelChanged(parentModel) { + this.updateFloatingFilterText(parentModel); + } + parentSetFilterInstance(cb) { + this.params.parentFilterInstance((filter) => { + if (!(filter instanceof SetFilter)) { + _error4(248); + return; + } + cb(filter); + }); + } + updateFloatingFilterText(parentModel) { + if (parentModel == null) { + this.eFloatingFilterText.setValue(""); + } else if (this.gos.get("enableFilterHandlers")) { + this.eFloatingFilterText.setValue( + this.params.getHandler().getModelAsString?.(parentModel) ?? "" + ); + } else { + this.parentSetFilterInstance((setFilter) => { + this.eFloatingFilterText.setValue(setFilter.getModelAsString(parentModel)); + }); + } + } +}; + +// packages/ag-grid-enterprise/src/setFilter/setFilterModule.ts +var SetFilterModule = { + moduleName: "SetFilter", + version: VERSION, + userComponents: { + agSetColumnFilter: { + classImp: SetFilter, + params: { + useForm: true + }, + processParams: (params) => { + applyExcelModeOptions(params); + return params; + } + }, + agSetColumnFloatingFilter: SetFloatingFilterComp + }, + dynamicBeans: { + agSetColumnFilterHandler: SetFilterHandler + }, + icons: { + // set filter tree list group contracted (click to expand) + setFilterGroupClosed: "tree-closed", + // set filter tree list group expanded (click to contract) + setFilterGroupOpen: "tree-open", + // set filter tree list expand/collapse all button, shown when some children are expanded and + // others are collapsed + setFilterGroupIndeterminate: "tree-indeterminate", + // set filter async values loading + setFilterLoading: "loading" + }, + dependsOn: [EnterpriseCoreModule, _ColumnFilterModule] +}; + +// packages/ag-grid-enterprise/src/statusBar/statusBarModule.ts +import { _KeyboardNavigationModule } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/statusBar/agStatusBar.ts +import { + AgPromise as AgPromise6, + Component as Component33, + RefPlaceholder as RefPlaceholder32, + _addFocusableContainerListener as _addFocusableContainerListener4, + _addGridCommonParams as _addGridCommonParams15, + _clearElement as _clearElement10, + _removeFromParent as _removeFromParent6, + _warn as _warn22 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/statusBar/agStatusBar.css +var agStatusBar_default = ".ag-status-bar{border-top:var(--ag-footer-row-border);display:flex;justify-content:space-between;line-height:1.5;overflow:hidden;padding-left:calc(var(--ag-spacing)*4);padding-right:calc(var(--ag-spacing)*4)}.ag-status-panel,:where(.ag-status-panel.ag-status-panel-aggregations .ag-status-name-value){display:inline-flex}.ag-status-name-value{color:var(--ag-status-bar-label-color);font-weight:var(--ag-status-bar-label-font-weight);margin-left:var(--ag-spacing);margin-right:var(--ag-spacing);padding-bottom:var(--ag-widget-container-vertical-padding);padding-top:var(--ag-widget-container-vertical-padding);white-space:nowrap}.ag-status-name-value-value{color:var(--ag-status-bar-value-color);font-weight:var(--ag-status-bar-value-font-weight)}.ag-status-bar-left{display:inline-flex}.ag-status-bar-center{display:inline-flex;text-align:center}.ag-status-bar-right{display:inline-flex}"; + +// packages/ag-grid-enterprise/src/statusBar/agStatusBar.ts +function getStatusPanelCompDetails(userCompFactory, def, params) { + return userCompFactory.getCompDetails(def, StatusPanelComponent, void 0, params, true); +} +var StatusPanelComponent = { + name: "statusPanel", + optionalMethods: ["refresh"] +}; +var AgStatusBarValidationMap = { + agAggregationComponent: { rowModels: ["clientSide", "serverSide"], warnArgs: [221] }, + agFilteredRowCountComponent: { rowModels: ["clientSide"], warnArgs: [222] }, + agSelectedRowCountComponent: { rowModels: ["clientSide", "serverSide"], warnArgs: [223] }, + agTotalAndFilteredRowCountComponent: { rowModels: ["clientSide"], warnArgs: [224] }, + agTotalRowCountComponent: { rowModels: ["clientSide"], warnArgs: [225] } +}; +var AgStatusBarElement = { + tag: "div", + cls: "ag-status-bar", + children: [ + { + tag: "div", + ref: "eStatusBarLeft", + cls: "ag-status-bar-left", + role: "status" + }, + { + tag: "div", + ref: "eStatusBarCenter", + cls: "ag-status-bar-center", + role: "status" + }, + { + tag: "div", + ref: "eStatusBarRight", + cls: "ag-status-bar-right", + role: "status" + } + ] +}; +var AgStatusBar = class extends Component33 { + constructor() { + super(AgStatusBarElement); + this.updateQueued = false; + this.panelsPromise = AgPromise6.resolve(); + this.eStatusBarLeft = RefPlaceholder32; + this.eStatusBarCenter = RefPlaceholder32; + this.eStatusBarRight = RefPlaceholder32; + this.compDestroyFunctions = {}; + this.registerCSS(agStatusBar_default); + } + wireBeans(beans) { + this.userCompFactory = beans.userCompFactory; + this.statusBarSvc = beans.statusBarSvc; + } + postConstruct() { + this.processStatusPanels(/* @__PURE__ */ new Map()); + this.addManagedPropertyListeners(["statusBar"], this.handleStatusBarChanged.bind(this)); + _addFocusableContainerListener4(this.beans, this, this.getGui()); + } + getFocusableContainerName() { + return "statusBar"; + } + getValidPanels() { + const gos = this.gos; + const statusPanels = gos.get("statusBar")?.statusPanels; + if (!statusPanels) { + return statusPanels; + } + return statusPanels.filter((panel) => { + const { rowModels, warnArgs } = AgStatusBarValidationMap[panel.statusPanel] ?? {}; + if (!rowModels) { + return true; + } + if (rowModels.includes(gos.get("rowModelType"))) { + return true; + } + _warn22(...warnArgs); + return false; + }); + } + processStatusPanels(existingStatusPanelsToReuse) { + const statusPanels = this.getValidPanels(); + if (statusPanels) { + const leftStatusPanelComponents = statusPanels.filter( + (componentConfig) => componentConfig.align === "left" + ); + const centerStatusPanelComponents = statusPanels.filter( + (componentConfig) => componentConfig.align === "center" + ); + const rightStatusPanelComponents = statusPanels.filter( + (componentConfig) => !componentConfig.align || componentConfig.align === "right" + ); + this.panelsPromise = AgPromise6.all([ + this.createAndRenderComponents( + leftStatusPanelComponents, + this.eStatusBarLeft, + existingStatusPanelsToReuse + ), + this.createAndRenderComponents( + centerStatusPanelComponents, + this.eStatusBarCenter, + existingStatusPanelsToReuse + ), + this.createAndRenderComponents( + rightStatusPanelComponents, + this.eStatusBarRight, + existingStatusPanelsToReuse + ) + ]); + } else { + this.setDisplayed(false); + } + } + handleStatusBarChanged() { + if (this.updateQueued) { + return; + } + this.updateQueued = true; + this.panelsPromise.then(() => { + this.updateStatusBar(); + this.updateQueued = false; + }); + } + updateStatusBar() { + const statusPanels = this.getValidPanels(); + const validStatusBarPanelsProvided = Array.isArray(statusPanels) && statusPanels.length > 0; + this.setDisplayed(validStatusBarPanelsProvided); + const existingStatusPanelsToReuse = /* @__PURE__ */ new Map(); + if (validStatusBarPanelsProvided) { + for (const statusPanelConfig of statusPanels) { + const key = statusPanelConfig.key ?? statusPanelConfig.statusPanel; + const existingStatusPanel = this.statusBarSvc.getStatusPanel(key); + if (existingStatusPanel?.refresh) { + const newParams = _addGridCommonParams15(this.gos, { + ...statusPanelConfig.statusPanelParams ?? {}, + key + }); + const hasRefreshed = existingStatusPanel.refresh(newParams); + if (hasRefreshed) { + existingStatusPanelsToReuse.set(key, existingStatusPanel); + delete this.compDestroyFunctions[key]; + _removeFromParent6(existingStatusPanel.getGui()); + } + } + } + } + this.resetStatusBar(); + if (validStatusBarPanelsProvided) { + this.processStatusPanels(existingStatusPanelsToReuse); + } + } + resetStatusBar() { + _clearElement10(this.eStatusBarLeft); + _clearElement10(this.eStatusBarCenter); + _clearElement10(this.eStatusBarRight); + this.destroyComponents(); + this.statusBarSvc.unregisterAllComponents(); + } + destroy() { + this.destroyComponents(); + super.destroy(); + } + destroyComponents() { + for (const func of Object.values(this.compDestroyFunctions)) { + func(); + } + this.compDestroyFunctions = {}; + } + createAndRenderComponents(statusBarComponents, ePanelComponent, existingStatusPanelsToReuse) { + const componentDetails = []; + for (const componentConfig of statusBarComponents) { + const key = componentConfig.key || componentConfig.statusPanel; + const existingStatusPanel = existingStatusPanelsToReuse.get(key); + let promise; + if (existingStatusPanel) { + promise = AgPromise6.resolve(existingStatusPanel); + } else { + const compDetails = getStatusPanelCompDetails( + this.userCompFactory, + componentConfig, + _addGridCommonParams15(this.gos, { key }) + ); + if (compDetails == null) { + continue; + } + promise = compDetails.newAgStackInstance(); + } + componentDetails.push({ + key, + promise + }); + } + return AgPromise6.all(componentDetails.map((details) => details.promise)).then(() => { + for (const componentDetail of componentDetails) { + componentDetail.promise.then((component) => { + const destroyFunc = () => { + this.destroyBean(component); + }; + if (this.isAlive()) { + this.statusBarSvc.registerStatusPanel(componentDetail.key, component); + ePanelComponent.appendChild(component.getGui()); + this.compDestroyFunctions[componentDetail.key] = destroyFunc; + } else { + destroyFunc(); + } + }); + } + }); + } +}; +var AgStatusBarSelector = { + selector: "AG-STATUS-BAR", + component: AgStatusBar +}; + +// packages/ag-grid-enterprise/src/statusBar/providedPanels/aggregationComp.ts +import { + Component as Component35, + RefPlaceholder as RefPlaceholder34, + _createCellId, + _exists as _exists16, + _formatNumberCommas, + _getRowBelow, + _getRowNode as _getRowNode2, + _isRowBefore, + _missing as _missing2, + _parseBigIntOrNull as _parseBigIntOrNull2 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/statusBar/providedPanels/agNameValue.ts +import { Component as Component34, RefPlaceholder as RefPlaceholder33, _addGridCommonParams as _addGridCommonParams16 } from "ag-grid-community"; +var AgNameValueElement = { + tag: "div", + cls: "ag-status-name-value", + children: [ + { tag: "span", ref: "eLabel" }, + ":\xA0", + { tag: "span", ref: "eValue", cls: "ag-status-name-value-value" } + ] +}; +var MIN_SAFE_BIGINT = BigInt(Number.MIN_SAFE_INTEGER); +var MAX_SAFE_BIGINT = BigInt(Number.MAX_SAFE_INTEGER); +var AgNameValue = class extends Component34 { + constructor() { + super(AgNameValueElement); + this.eLabel = RefPlaceholder33; + this.eValue = RefPlaceholder33; + } + setLabel(key, defaultValue) { + this.setDisplayed(false); + this.eLabel.textContent = this.getLocaleTextFunc()(key, defaultValue); + } + setValue(value, totalRows) { + let numericValue = null; + let bigintValue; + if (typeof value === "bigint") { + bigintValue = value; + if (value >= MIN_SAFE_BIGINT && value <= MAX_SAFE_BIGINT) { + numericValue = Number(value); + } + } else { + numericValue = value; + } + this.eValue.textContent = this.valueFormatter( + _addGridCommonParams16(this.gos, { + value: numericValue, + bigintValue, + totalRows, + key: this.key + }) + ); + } +}; +var AgNameValueSelector = { + selector: "AG-NAME-VALUE", + component: AgNameValue +}; + +// packages/ag-grid-enterprise/src/statusBar/providedPanels/utils.ts +var _getFilteredRowCount = (rowModel) => { + let filteredRowCount = 0; + rowModel.forEachNodeAfterFilter((node) => { + if (node.data) { + filteredRowCount++; + } + }); + return filteredRowCount; +}; +var _getTotalRowCount = (rowModel) => { + let totalRowCount = 0; + rowModel.forEachNode((node) => { + if (node.data) { + totalRowCount++; + } + }); + return totalRowCount; +}; + +// packages/ag-grid-enterprise/src/statusBar/providedPanels/aggregationComp.ts +function _formatNumberTwoDecimalPlacesAndCommas(value, getLocaleTextFunc) { + if (typeof value !== "number") { + return ""; + } + return _formatNumberCommas(Math.round(value * 100) / 100, getLocaleTextFunc); +} +var AggregationCompElement = { + tag: "div", + cls: "ag-status-panel ag-status-panel-aggregations", + children: [ + { + tag: "ag-name-value", + ref: "avgAggregationComp" + }, + { + tag: "ag-name-value", + ref: "countAggregationComp" + }, + { + tag: "ag-name-value", + ref: "minAggregationComp" + }, + { + tag: "ag-name-value", + ref: "maxAggregationComp" + }, + { + tag: "ag-name-value", + ref: "sumAggregationComp" + } + ] +}; +var AggregationComp = class extends Component35 { + constructor() { + super(AggregationCompElement, [AgNameValueSelector]); + this.sumAggregationComp = RefPlaceholder34; + this.countAggregationComp = RefPlaceholder34; + this.minAggregationComp = RefPlaceholder34; + this.maxAggregationComp = RefPlaceholder34; + this.avgAggregationComp = RefPlaceholder34; + } + postConstruct() { + this.avgAggregationComp.setLabel("avg", "Average"); + this.countAggregationComp.setLabel("count", "Count"); + this.minAggregationComp.setLabel("min", "Min"); + this.maxAggregationComp.setLabel("max", "Max"); + this.sumAggregationComp.setLabel("sum", "Sum"); + this.addManagedEventListeners({ + cellSelectionChanged: this.onCellSelectionChanged.bind(this), + modelUpdated: this.onCellSelectionChanged.bind(this) + }); + } + init(params) { + this.refresh(params); + } + refresh(params) { + this.params = params; + const valueFormatter = params.valueFormatter ?? ((params2) => { + const { value, bigintValue } = params2; + if (bigintValue != null) { + return bigintValue.toString(); + } + return _formatNumberTwoDecimalPlacesAndCommas(value, this.getLocaleTextFunc.bind(this)); + }); + const aggFuncNames = ["avg", "count", "min", "max", "sum"]; + for (const key of aggFuncNames) { + const comp = this.getAllowedAggregationValueComponent(key); + if (comp) { + comp.key = key; + comp.valueFormatter = valueFormatter.bind(this); + } + } + this.onCellSelectionChanged(); + return true; + } + setAggregationComponentValue(aggFuncName, value, visible) { + const statusBarValueComponent = this.getAllowedAggregationValueComponent(aggFuncName); + const totalRow = _getTotalRowCount(this.beans.rowModel); + if (_exists16(statusBarValueComponent) && statusBarValueComponent) { + statusBarValueComponent.setValue(value, totalRow); + statusBarValueComponent.setDisplayed(visible); + } else { + this.getAggregationValueComponent(aggFuncName)?.setDisplayed(false); + } + } + getAllowedAggregationValueComponent(aggFuncName) { + const { aggFuncs } = this.params; + if (!aggFuncs || aggFuncs.includes(aggFuncName)) { + return this.getAggregationValueComponent(aggFuncName); + } + return null; + } + getAggregationValueComponent(aggFuncName) { + const refComponentName = `${aggFuncName}AggregationComp`; + return this[refComponentName]; + } + /** + * Aggregation notes: + * - Uses bigint aggregation when bigint values are present and all numeric values are safe integers. + * - Non-integer or unsafe integer numbers fall back to number aggregation to avoid precision loss. + * - Avg uses integer division when bigint aggregation is active, discarding the fractional part. + * - String values are trimmed; finite numeric strings are aggregated as numbers, while integer strings beyond the + * safe integer range are parsed as bigint. + */ + onCellSelectionChanged() { + const beans = this.beans; + const { rangeSvc, valueSvc } = beans; + const cellRanges = rangeSvc?.getCellRanges(); + let sum = 0; + let sumBigint = 0n; + let hasBigInt = false; + let seenNonInteger = false; + let count = 0; + let numericCount = 0; + let min = null; + let max = null; + let minBigint = null; + let maxBigint = null; + const addValue = (value) => { + if (typeof value === "number") { + sum += value; + if (min === null || value < min) { + min = value; + } + if (max === null || value > max) { + max = value; + } + if (!Number.isInteger(value) || !Number.isSafeInteger(value)) { + seenNonInteger = true; + } else { + const bigintValue = BigInt(value); + sumBigint += bigintValue; + if (minBigint === null || bigintValue < minBigint) { + minBigint = bigintValue; + } + if (maxBigint === null || bigintValue > maxBigint) { + maxBigint = bigintValue; + } + } + } else { + hasBigInt = true; + sumBigint += value; + if (minBigint === null || value < minBigint) { + minBigint = value; + } + if (maxBigint === null || value > maxBigint) { + maxBigint = value; + } + const numberValue = Number(value); + sum += numberValue; + if (min === null || numberValue < min) { + min = numberValue; + } + if (max === null || numberValue > max) { + max = numberValue; + } + } + numericCount++; + }; + const cellsSoFar = {}; + if (cellRanges?.length && rangeSvc) { + for (let i = 0; i < cellRanges.length; i++) { + const cellRange = cellRanges[i]; + let currentRow = rangeSvc.getRangeStartRow(cellRange); + const lastRow = rangeSvc.getRangeEndRow(cellRange); + while (true) { + const finishedAllRows = _missing2(currentRow) || !currentRow || _isRowBefore(lastRow, currentRow); + if (finishedAllRows || !currentRow || !cellRange.columns) { + break; + } + cellRange.columns.forEach((col) => { + if (currentRow === null) { + return; + } + const cellId = _createCellId({ + rowPinned: currentRow.rowPinned, + column: col, + rowIndex: currentRow.rowIndex + }); + if (cellsSoFar[cellId]) { + return; + } + cellsSoFar[cellId] = true; + const rowNode = _getRowNode2(beans, currentRow); + if (_missing2(rowNode)) { + return; + } + let value = valueSvc.getValue(col, rowNode, "data"); + if (_missing2(value) || value === "") { + return; + } + count++; + if (typeof value === "object" && "value" in value) { + value = value.value; + if (value === "") { + return; + } + } + if (typeof value === "string") { + const trimmedValue = value.trim(); + if (trimmedValue === "") { + return; + } + const asNumber = Number(trimmedValue); + if (!Number.isFinite(asNumber)) { + return; + } + if (sum + asNumber >= Number.MAX_SAFE_INTEGER || sum + asNumber <= Number.MIN_SAFE_INTEGER || asNumber >= Number.MAX_SAFE_INTEGER || asNumber <= Number.MIN_SAFE_INTEGER) { + value = _parseBigIntOrNull2(trimmedValue); + if (value === null) { + value = asNumber; + } + } else { + value = asNumber; + } + } + if (typeof value === "number" && !isNaN(value) || typeof value === "bigint") { + addValue(value); + } + }); + currentRow = _getRowBelow(beans, currentRow); + } + } + } + const moreThanOneValue = count > 1; + const moreThanOneNum = numericCount > 1; + const useBigintAggregation = hasBigInt && !seenNonInteger; + let avg; + if (useBigintAggregation) { + avg = sumBigint / BigInt(numericCount); + } else { + avg = sum / numericCount; + } + const sumValue = moreThanOneNum ? useBigintAggregation ? sumBigint : sum : null; + const minValue = moreThanOneNum ? useBigintAggregation ? minBigint : min : null; + const maxValue = moreThanOneNum ? useBigintAggregation ? maxBigint : max : null; + const avgValue = moreThanOneNum ? avg : null; + const showAvg = moreThanOneNum; + this.setAggregationComponentValue("count", count, moreThanOneValue); + this.setAggregationComponentValue("sum", sumValue, moreThanOneNum); + this.setAggregationComponentValue("min", minValue, moreThanOneNum); + this.setAggregationComponentValue("max", maxValue, moreThanOneNum); + this.setAggregationComponentValue("avg", avgValue, showAvg); + } +}; + +// packages/ag-grid-enterprise/src/statusBar/providedPanels/filteredRowsComp.ts +import { _formatNumberCommas as _formatNumberCommas2 } from "ag-grid-community"; +var FilteredRowsComp = class extends AgNameValue { + postConstruct() { + this.setLabel("filteredRows", "Filtered"); + this.addCss("ag-status-panel"); + this.addCss("ag-status-panel-filtered-row-count"); + this.setDisplayed(true); + const listener = this.onDataChanged.bind(this); + this.addManagedEventListeners({ modelUpdated: listener }); + } + onDataChanged() { + const { rowModel } = this.beans; + const totalRowCountValue = _getTotalRowCount(rowModel); + const filteredRowCountValue = _getFilteredRowCount(rowModel); + this.setValue(filteredRowCountValue, totalRowCountValue); + this.setDisplayed(totalRowCountValue !== filteredRowCountValue); + } + init(params) { + this.refresh(params); + this.onDataChanged(); + } + updateValueFormatter(valueFormatter) { + this.valueFormatter = valueFormatter ?? (({ value }) => _formatNumberCommas2(value, this.getLocaleTextFunc.bind(this))); + } + refresh(params) { + const { key, valueFormatter } = params; + this.key = key; + this.updateValueFormatter(valueFormatter); + return true; + } +}; + +// packages/ag-grid-enterprise/src/statusBar/providedPanels/selectedRowsComp.ts +import { _formatNumberCommas as _formatNumberCommas3 } from "ag-grid-community"; +var SelectedRowsComp = class extends AgNameValue { + postConstruct() { + this.setLabel("selectedRows", "Selected"); + this.addCss("ag-status-panel"); + this.addCss("ag-status-panel-selected-row-count"); + const eventListener = this.onRowSelectionChanged.bind(this); + this.addManagedEventListeners({ modelUpdated: eventListener, selectionChanged: eventListener }); + } + onRowSelectionChanged() { + const { selectionSvc, rowModel } = this.beans; + const selectedRowCount = selectionSvc?.getSelectionCount() ?? 0; + const totalRowCount = _getTotalRowCount(rowModel); + this.setValue(selectedRowCount, totalRowCount); + if (selectedRowCount < 0) { + this.setDisplayed(true); + return; + } + this.setDisplayed(selectedRowCount > 0); + } + init(params) { + this.refresh(params); + this.onRowSelectionChanged(); + } + updateValueFormatter(valueFormatter) { + this.valueFormatter = valueFormatter ?? (({ value }) => { + if (value == null || value >= 0) { + return _formatNumberCommas3(value, this.getLocaleTextFunc.bind(this)); + } + return this.getLocaleTextFunc()("statusBarLastRowUnknown", "?"); + }); + } + refresh(params) { + const { key, valueFormatter } = params; + this.key = key; + this.updateValueFormatter(valueFormatter); + return true; + } +}; + +// packages/ag-grid-enterprise/src/statusBar/providedPanels/totalAndFilteredRowsComp.ts +import { _formatNumberCommas as _formatNumberCommas4 } from "ag-grid-community"; +var TotalAndFilteredRowsComp = class extends AgNameValue { + postConstruct() { + this.setLabel("totalAndFilteredRows", "Rows"); + this.addCss("ag-status-panel"); + this.addCss("ag-status-panel-total-and-filtered-row-count"); + this.setDisplayed(true); + this.addManagedEventListeners({ modelUpdated: this.onDataChanged.bind(this) }); + } + onDataChanged() { + const { rowModel } = this.beans; + const rowCount = _getFilteredRowCount(rowModel); + const totalRowCount = _getTotalRowCount(rowModel); + this.setValue(rowCount, totalRowCount); + } + init(params) { + this.refresh(params); + this.onDataChanged(); + } + updateValueFormatter(valueFormatter) { + this.valueFormatter = valueFormatter ?? (({ value, totalRows }) => { + const getLocaleTextFunc = this.getLocaleTextFunc.bind(this); + const rowCount = _formatNumberCommas4(value, getLocaleTextFunc); + const totalRowCount = _formatNumberCommas4(totalRows ?? value, getLocaleTextFunc); + if (value === totalRows) { + return rowCount; + } + const localeTextFunc = getLocaleTextFunc(); + return `${rowCount} ${localeTextFunc("of", "of")} ${totalRowCount}`; + }); + } + refresh(params) { + const { key, valueFormatter } = params; + this.key = key; + this.updateValueFormatter(valueFormatter); + return true; + } +}; + +// packages/ag-grid-enterprise/src/statusBar/providedPanels/totalRowsComp.ts +import { _formatNumberCommas as _formatNumberCommas5 } from "ag-grid-community"; +var TotalRowsComp = class extends AgNameValue { + postConstruct() { + this.setLabel("totalRows", "Total Rows"); + this.addCss("ag-status-panel"); + this.addCss("ag-status-panel-total-row-count"); + this.setDisplayed(true); + this.addManagedEventListeners({ modelUpdated: this.onDataChanged.bind(this) }); + } + onDataChanged() { + const totalRow = _getTotalRowCount(this.beans.rowModel); + this.setValue(totalRow, totalRow); + } + init(params) { + this.refresh(params); + this.onDataChanged(); + } + updateValueFormatter(valueFormatter) { + this.valueFormatter = valueFormatter ?? (({ value }) => _formatNumberCommas5(value, this.getLocaleTextFunc.bind(this))); + } + refresh(params) { + const { key, valueFormatter } = params; + this.key = key; + this.updateValueFormatter(valueFormatter); + return true; + } +}; + +// packages/ag-grid-enterprise/src/statusBar/statusBarApi.ts +import { _unwrapUserComp as _unwrapUserComp2 } from "ag-grid-community"; +function getStatusPanel(beans, key) { + const comp = beans.statusBarSvc?.getStatusPanel(key); + return _unwrapUserComp2(comp); +} + +// packages/ag-grid-enterprise/src/statusBar/statusBarService.ts +import { BeanStub as BeanStub21 } from "ag-grid-community"; +var StatusBarService = class extends BeanStub21 { + // tslint:disable-next-line + constructor() { + super(); + this.beanName = "statusBarSvc"; + this.comps = /* @__PURE__ */ new Map(); + } + registerStatusPanel(key, component) { + this.comps.set(key, component); + } + unregisterStatusPanel(key) { + this.comps.delete(key); + } + unregisterAllComponents() { + this.comps.clear(); + } + getStatusPanel(key) { + return this.comps.get(key); + } + destroy() { + this.unregisterAllComponents(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/statusBar/statusBarModule.ts +var StatusBarModule = { + moduleName: "StatusBar", + version: VERSION, + beans: [StatusBarService], + userComponents: { + agAggregationComponent: AggregationComp, + agTotalRowCountComponent: TotalRowsComp, + agFilteredRowCountComponent: FilteredRowsComp, + agTotalAndFilteredRowCountComponent: TotalAndFilteredRowsComp, + agSelectedRowCountComponent: SelectedRowsComp + }, + selectors: [AgStatusBarSelector], + apiFunctions: { + getStatusPanel + }, + dependsOn: [EnterpriseCoreModule, _KeyboardNavigationModule] +}; + +// packages/ag-grid-enterprise/src/excelExport/excelExportModule.ts +import { _SharedExportModule } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/excelExport/excelExportApi.ts +import { _warn as _warn23 } from "ag-grid-community"; +function assertNotExcelMultiSheet(beans) { + if (beans.excelCreator?.getFactoryMode() === "MULTI_SHEET") { + _warn23(161); + return false; + } + return true; +} +function getDataAsExcel(beans, params) { + if (assertNotExcelMultiSheet(beans)) { + return beans.excelCreator?.getDataAsExcel(params); + } + return void 0; +} +function exportDataAsExcel(beans, params) { + if (assertNotExcelMultiSheet(beans)) { + beans.excelCreator?.exportDataAsExcel(params); + } +} +function getSheetDataForExcel(beans, params) { + beans.excelCreator?.setFactoryMode("MULTI_SHEET"); + return beans.excelCreator?.getSheetDataForExcel(params); +} +function getMultipleSheetsAsExcel2(beans, params) { + return beans.excelCreator?.getMultipleSheetsAsExcel(params); +} +function exportMultipleSheetsAsExcel2(beans, params) { + beans.excelCreator?.exportMultipleSheetsAsExcel(params); +} + +// packages/ag-grid-enterprise/src/excelExport/excelExportModule.ts +var ExcelExportModule = { + moduleName: "ExcelExport", + version: VERSION, + beans: [ExcelCreator], + apiFunctions: { + getDataAsExcel, + exportDataAsExcel, + getSheetDataForExcel, + getMultipleSheetsAsExcel: getMultipleSheetsAsExcel2, + exportMultipleSheetsAsExcel: exportMultipleSheetsAsExcel2 + }, + dependsOn: [_SharedExportModule, EnterpriseCoreModule] +}; + +// packages/ag-grid-enterprise/src/multiFilter/multiFilterModule.ts +import { _ColumnFilterModule as _ColumnFilterModule2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/multiFilter/multiFilter.ts +import { + AgPromise as AgPromise8, + FilterWrapperComp, + LocalEventService as LocalEventService2, + ProvidedFilter as ProvidedFilter3, + _getFilterModel, + _refreshFilterUi, + _refreshHandlerAndUi, + _removeFromArray, + _updateFilterModel +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/multiFilter/baseMultiFilter.ts +import { + AgPromise as AgPromise7, + KeyCode as KeyCode27, + TabGuardComp as TabGuardComp2, + _createElement as _createElement10, + _focusInto as _focusInto7, + _getActiveDomElement as _getActiveDomElement11, + _isNothingFocused as _isNothingFocused3, + _setAriaRole as _setAriaRole8 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/multiFilter/multiFilterUtil.ts +import { ProvidedFilter as ProvidedFilter2 } from "ag-grid-community"; +function getMultiFilterDefs(params) { + const { filters } = params; + return filters && filters.length > 0 ? filters : [{ filter: "agTextColumnFilter" }, { filter: "agSetColumnFilter" }]; +} +function forEachReverse(list, action) { + if (list == null) { + return; + } + for (let i = list.length - 1; i >= 0; i--) { + action(list[i], i); + } +} +function getFilterTitle(filter, filterDef) { + if (filterDef.title != null) { + return filterDef.title; + } + return filter instanceof ProvidedFilter2 ? filter.getFilterTitle() : "Filter"; +} +function getUpdatedMultiFilterModel(existingModel, numFilters, newModel, index) { + const filterModels = []; + const existingFilterModels = existingModel?.filterModels; + for (let i = 0; i < numFilters; i++) { + filterModels[i] = (i === index ? newModel : existingFilterModels?.[i]) ?? null; + } + return filterModels.every((childModel) => childModel == null) ? null : { + filterType: "multi", + filterModels + }; +} +function getFilterModelForIndex(model, index) { + return model?.filterModels?.[index] ?? null; +} +function updateGetValue(beans, column, filterDef, existingGetValue) { + const filterValueGetter = filterDef.filterValueGetter; + return filterValueGetter ? beans.colFilter.createGetValue(column, filterValueGetter) : existingGetValue; +} + +// packages/ag-grid-enterprise/src/multiFilter/baseMultiFilter.ts +var BaseMultiFilter = class extends TabGuardComp2 { + constructor() { + super({ tag: "div", cls: "ag-multi-filter ag-menu-list-compact" }); + this.filterDefs = []; + this.guiDestroyFuncs = []; + // this could be the accordion/sub menu element depending on the display type + this.filterGuis = []; + this.lastActivatedMenuItem = null; + } + postConstruct() { + this.initialiseTabGuard({ + onFocusIn: (e) => this.onFocusIn(e) + }); + } + refreshGui(container) { + if (container === this.lastOpenedInContainer) { + return AgPromise7.resolve(); + } + this.tabGuardFeature.removeAllChildrenExceptTabGuards(); + this.destroyChildren(); + return AgPromise7.all( + this.getFilterWrappers().map((wrapper, index) => { + if (!wrapper) { + return AgPromise7.resolve(null); + } + const filter = this.getFilterFromWrapper(wrapper); + const comp = this.getCompFromWrapper(wrapper); + const filterDef = this.filterDefs[index]; + const filterTitle = getFilterTitle(filter, filterDef); + let filterGuiPromise; + if (filterDef.display === "subMenu" && container !== "toolPanel") { + filterGuiPromise = this.insertFilterMenu(comp, filter, filterTitle).then( + (menuItem) => menuItem.getGui() + ); + } else if (filterDef.display === "subMenu" || filterDef.display === "accordion") { + const group = this.insertFilterGroup(filter, comp, filterTitle); + filterGuiPromise = AgPromise7.resolve(group.getGui()); + } else { + filterGuiPromise = AgPromise7.resolve(comp.getGui()); + } + return filterGuiPromise; + }) + ).then((filterGuis) => { + filterGuis.forEach((filterGui, index) => { + if (!filterGui) { + return; + } + if (index > 0) { + this.appendChild(_createElement10({ tag: "div", cls: "ag-filter-separator" })); + } + this.appendChild(filterGui); + }); + this.filterGuis = filterGuis; + this.lastOpenedInContainer = container; + }); + } + destroyChildren() { + for (const func of this.guiDestroyFuncs) { + func(); + } + this.guiDestroyFuncs.length = 0; + this.filterGuis.length = 0; + } + insertFilterMenu(comp, filter, name) { + const eGui = comp.getGui(); + _setAriaRole8(eGui, "dialog"); + const menuItem = this.createBean(new MenuItemComponent()); + const childComponent = { + getGui: () => comp.getGui(), + afterGuiAttached: (params) => { + comp.afterGuiAttached?.(params); + if (comp !== filter) { + filter.afterGuiAttached?.(params); + } + } + }; + return menuItem.init({ + menuItemDef: { + name, + subMenu: [], + subMenuRole: "dialog", + cssClasses: ["ag-multi-filter-menu-item"], + menuItem: MenuItemRenderer, + menuItemParams: { + cssClassPrefix: "ag-compact-menu-option", + isCompact: true + } + }, + level: 0, + isAnotherSubMenuOpen: () => false, + childComponent, + contextParams: { + column: null, + node: null, + value: null + } + }).then(() => { + menuItem.setParentComponent(this); + this.guiDestroyFuncs.push(() => this.destroyBean(menuItem)); + this.addManagedListeners(menuItem, { + menuItemActivated: (event) => { + if (this.lastActivatedMenuItem && this.lastActivatedMenuItem !== event.menuItem) { + this.lastActivatedMenuItem.deactivate(); + } + this.lastActivatedMenuItem = event.menuItem; + } + }); + const menuItemGui = menuItem.getGui(); + menuItem.addManagedElementListeners(menuItemGui, { + // `AgMenuList` normally handles keyboard navigation, so need to do here + keydown: (e) => { + const { key } = e; + switch (key) { + case KeyCode27.UP: + case KeyCode27.RIGHT: + case KeyCode27.DOWN: + case KeyCode27.LEFT: + e.preventDefault(); + if (key === KeyCode27.RIGHT) { + menuItem.openSubMenu(true); + } + break; + } + }, + focusin: () => menuItem.activate(), + focusout: () => { + if (!menuItem.isSubMenuOpen() && !menuItem.isSubMenuOpening()) { + menuItem.deactivate(); + } + } + }); + return menuItem; + }); + } + insertFilterGroup(filter, comp, title) { + const group = this.createBean( + new AgGroupComponent({ + title, + cssIdentifier: "multi-filter" + }) + ); + this.guiDestroyFuncs.push(() => this.destroyBean(group)); + group.addItem(comp.getGui()); + group.toggleGroupExpand(false); + if (filter.afterGuiAttached) { + group.addManagedListeners(group, { + expanded: () => filter.afterGuiAttached({ + container: this.lastOpenedInContainer, + suppressFocus: true, + hidePopup: this.hidePopup + }) + }); + } + return group; + } + afterGuiAttached(params) { + let refreshPromise; + if (params) { + this.hidePopup = params.hidePopup; + refreshPromise = this.refreshGui(params.container); + } else { + this.hidePopup = void 0; + refreshPromise = AgPromise7.resolve(); + } + const suppressFocus = params?.suppressFocus; + refreshPromise.then(() => { + const { filterDefs, filterGuis, beans } = this; + const wrappers = this.getFilterWrappers(); + let hasFocused = !!suppressFocus; + if (filterDefs) { + forEachReverse(filterDefs, (filterDef, index) => { + const isFirst = index === 0; + const notInlineDisplayType = filterDef.display && filterDef.display !== "inline"; + const suppressFocusForFilter = suppressFocus || !isFirst || notInlineDisplayType; + const afterGuiAttachedParams = { ...params ?? {}, suppressFocus: suppressFocusForFilter }; + const wrapper = wrappers[index]; + const filter = wrapper ? this.getFilterFromWrapper(wrapper) : void 0; + if (wrapper) { + const comp = this.getCompFromWrapper(wrapper); + if (comp !== filter) { + comp.afterGuiAttached(afterGuiAttachedParams); + } + } + if (filter) { + this.executeFunctionIfExistsOnFilter(filter, "afterGuiAttached", afterGuiAttachedParams); + if (isFirst && !suppressFocusForFilter) { + hasFocused = true; + } + } + if (!suppressFocus && isFirst && notInlineDisplayType) { + const filterGui = filterGuis[index]; + if (filterGui) { + if (!_focusInto7(filterGui)) { + filterGui.focus({ preventScroll: true }); + } + hasFocused = true; + } + } + }); + } + const activeEl = _getActiveDomElement11(beans); + if (!hasFocused && (_isNothingFocused3(beans) || this.getGui().contains(activeEl))) { + this.forceFocusOutOfContainer(true); + } + }); + } + afterGuiDetached() { + this.executeFunctionIfExists("afterGuiDetached"); + } + onAnyFilterChanged() { + this.executeFunctionIfExists( + "onAnyFilterChanged", + (wrapper) => this.executeOnWrapper(wrapper, "onAnyFilterChanged") + ); + } + onNewRowsLoaded() { + this.executeFunctionIfExists("onNewRowsLoaded", (wrapper) => this.executeOnWrapper(wrapper, "onNewRowsLoaded")); + } + destroy() { + this.destroyChildren(); + this.hidePopup = void 0; + super.destroy(); + } + executeOnWrapper(_wrapper, _name) { + } + executeFunctionIfExists(name, executeOnHandler) { + forEachReverse(this.getFilterWrappers(), (wrapper) => { + if (wrapper) { + executeOnHandler?.(wrapper); + this.executeFunctionIfExistsOnFilter(this.getFilterFromWrapper(wrapper), name); + } + }); + } + executeFunctionIfExistsOnFilter(filter, name, ...params) { + const func = filter[name]; + if (typeof func === "function") { + func.apply(filter, params); + } + } + onFocusIn(e) { + const lastActivatedMenuItem = this.lastActivatedMenuItem; + if (lastActivatedMenuItem != null && !lastActivatedMenuItem.getGui().contains(e.target)) { + lastActivatedMenuItem.deactivate(); + this.lastActivatedMenuItem = null; + } + } +}; + +// packages/ag-grid-enterprise/src/multiFilter/multiFilter.ts +var MultiFilter = class extends BaseMultiFilter { + constructor() { + super(...arguments); + this.filterType = "multi"; + this.wrappers = []; + this.activeFilterIndices = []; + this.afterFiltersReadyFuncs = []; + } + init(params) { + this.params = params; + this.filterDefs = getMultiFilterDefs(params); + const initialModel = _getFilterModel(this.beans.colFilter.model, params.column.getColId()); + const { filterChangedCallback } = params; + this.filterChangedCallback = filterChangedCallback; + const filterPromises = this.filterDefs.map( + (filterDef, index) => this.createFilter(filterDef, index, initialModel) + ); + return new AgPromise8((resolve) => { + AgPromise8.all(filterPromises).then((wrappers) => { + this.wrappers = wrappers; + this.refreshGui("columnMenu").then(() => { + resolve(); + }); + }); + }).then(() => { + for (const f of this.afterFiltersReadyFuncs) { + f(); + } + this.afterFiltersReadyFuncs.length = 0; + }); + } + refresh(params) { + this.params = params; + return true; + } + isFilterActive() { + return this.wrappers.some((wrapper) => { + if (!wrapper) { + return false; + } + const { filter, handler, model } = wrapper; + if (handler) { + return model != null; + } + return filter.isFilterActive(); + }); + } + getLastActiveFilterIndex() { + const activeFilterIndices = this.activeFilterIndices; + return activeFilterIndices.length > 0 ? activeFilterIndices[activeFilterIndices.length - 1] : null; + } + doesFilterPass(params, indexToSkip) { + return this.wrappers.every((wrapper, index) => { + if (!wrapper || indexToSkip != null && index === indexToSkip) { + return true; + } + const { handler, filter, model } = wrapper; + if (handler) { + return model == null || handler.doesFilterPass({ + ...params, + model, + handlerParams: wrapper.handlerParams + }); + } + return !filter.isFilterActive() || filter.doesFilterPass(params); + }); + } + getModelFromUi() { + const model = { + filterType: this.filterType, + filterModels: this.wrappers.map((wrapper) => { + if (!wrapper) { + return null; + } + const providedFilter = wrapper.filter; + if (typeof providedFilter.getModelFromUi === "function") { + return providedFilter.getModelFromUi(); + } + return null; + }) + }; + return model; + } + getModel() { + if (!this.isFilterActive()) { + return null; + } + const model = { + filterType: this.filterType, + filterModels: this.wrappers.map((wrapper) => { + if (!wrapper) { + return null; + } + const { filter, handler, model: model2 } = wrapper; + if (handler) { + return model2; + } + return filter.isFilterActive() ? filter.getModel() : null; + }) + }; + return model; + } + setModel(model) { + const setFilterModel = (filter, filterModel) => { + return new AgPromise8((resolve) => { + const promise = filter.setModel(filterModel); + if (promise) { + promise.then(resolve); + } else { + resolve(); + } + }); + }; + const promises = []; + this.wrappers.forEach((wrapper, index) => { + if (!wrapper) { + return; + } + const modelForFilter = getFilterModelForIndex(model, index); + const { filter, filterParams, handler, handlerParams, state } = wrapper; + if (handler) { + const newState = { + model: modelForFilter, + state: state?.state + }; + wrapper.state = newState; + wrapper.model = modelForFilter; + promises.push( + _refreshHandlerAndUi( + () => AgPromise8.resolve({ filter, filterParams }), + handler, + handlerParams, + modelForFilter, + newState, + "api" + ).then(() => { + this.updateActiveListForHandler(index, wrapper.model); + }) + ); + } else { + promises.push( + setFilterModel(filter, modelForFilter).then(() => { + this.updateActiveListForFilter(index, filter); + }) + ); + } + }); + return AgPromise8.all(promises).then(() => { + }); + } + applyModel(source = "api") { + let result = false; + for (const wrapper of this.wrappers) { + if (wrapper) { + const filter = wrapper.filter; + if (filter instanceof ProvidedFilter3) { + result = filter.applyModel(source) || result; + } + } + } + return result; + } + getChildFilterInstance(index) { + return this.wrappers[index]?.filter; + } + getNumChildFilters() { + return this.wrappers.length; + } + destroy() { + for (const wrapper of this.wrappers) { + this.destroyBean(wrapper?.filter); + this.destroyBean(wrapper?.handler); + } + this.wrappers.length = 0; + super.destroy(); + } + getFilterWrappers() { + return this.wrappers; + } + getFilterFromWrapper(wrapper) { + return wrapper.filter; + } + getCompFromWrapper(wrapper) { + return wrapper.comp; + } + executeOnWrapper(wrapper, name) { + wrapper.handler?.[name]?.(); + } + createFilter(filterDef, index, initialModel) { + const column = this.params.column; + let initialModelForFilter = null; + let createWrapperComp; + const beans = this.beans; + const onModelChange = (model, additionalEventAttributes) => { + const wrapper = this.wrappers[index]; + if (!wrapper) { + return; + } + const newState = { + model, + state: wrapper.state?.state + }; + wrapper.state = newState; + wrapper.model = model; + _refreshHandlerAndUi( + () => AgPromise8.resolve({ + filter: wrapper.filter, + filterParams: wrapper.filterParams + }), + wrapper.handler, + wrapper.handlerParams, + model, + newState, + "ui" + ).then(() => { + this.onHandlerModelChanged(index, wrapper.model, additionalEventAttributes); + }); + }; + const { + compDetails, + handler, + handlerParams: originalHandlerParams, + createFilterUi + } = beans.colFilter.createFilterInstance( + column, + filterDef, + "agTextColumnFilter", + (defaultParams, isHandler) => { + const updatedParams = { + ...defaultParams, + filterChangedCallback: isHandler ? () => { + } : (additionalEventAttributes) => { + this.executeWhenAllFiltersReady( + () => this.onFilterModelChanged(index, additionalEventAttributes) + ); + }, + doesRowPassOtherFilter: (node) => defaultParams.doesRowPassOtherFilter(node) && this.doesFilterPass({ node, data: node.data }, index), + getValue: updateGetValue(beans, column, filterDef, defaultParams.getValue) + }; + if (isHandler) { + initialModelForFilter = getFilterModelForIndex(initialModel, index); + createWrapperComp = this.updateDisplayParams( + updatedParams, + index, + initialModelForFilter, + () => compDetails, + () => handler, + onModelChange + ); + } + return updatedParams; + } + ); + if (!createFilterUi) { + return AgPromise8.resolve(null); + } + let handlerParams; + if (handler) { + const { doesRowPassOtherFilter, getValue } = originalHandlerParams; + handlerParams = { + ...originalHandlerParams, + onModelChange, + doesRowPassOtherFilter: (node) => doesRowPassOtherFilter(node) && this.doesFilterPass({ node, data: node.data }, index), + getValue: updateGetValue(beans, column, filterDef, getValue) + }; + handler.init?.({ ...handlerParams, model: initialModelForFilter, source: "init" }); + } + return createFilterUi().then((filter) => { + if (!handler) { + return { filter, comp: filter }; + } + const filterParams = compDetails?.params; + const comp = createWrapperComp(filter); + return { + filter, + comp, + filterParams, + handler, + handlerParams, + model: initialModelForFilter + }; + }); + } + updateDisplayParams(displayParams, index, initialModelForFilter, getCompDetails, getHandler, onModelChange) { + const column = this.params.column; + const eventSvc = new LocalEventService2(); + displayParams.model = initialModelForFilter; + displayParams.state = { model: initialModelForFilter }; + displayParams.onModelChange = onModelChange; + displayParams.getHandler = getHandler; + const updateState = (wrapper, state) => { + wrapper.state = state; + eventSvc.dispatchEvent({ + type: "filterStateChanged", + column, + state + }); + }; + displayParams.onStateChange = (state) => { + const wrapper = this.wrappers[index]; + if (!wrapper) { + return; + } + updateState(wrapper, state); + _refreshFilterUi(wrapper.filter, wrapper.filterParams, wrapper.model ?? null, state, "ui"); + }; + const updateModel = (_column, action, additionalEventAttributes) => { + const wrapper = this.wrappers[index]; + if (!wrapper) { + return; + } + const getModel = () => wrapper?.model ?? null; + _updateFilterModel({ + action, + filterParams: wrapper.filterParams, + getFilterUi: () => { + const promise = AgPromise8.resolve(wrapper.filter); + return { + created: true, + filterParams: wrapper.filterParams, + compDetails: getCompDetails(), + create: () => promise, + promise + }; + }, + getModel, + getState: () => wrapper?.state ?? { model: getModel() }, + updateState: (state) => updateState(wrapper, state), + updateModel: (newModel) => wrapper.filterParams?.onModelChange(newModel, additionalEventAttributes), + processModelToApply: wrapper.handler?.processModelToApply?.bind(wrapper.handler) + }); + }; + displayParams.onAction = (action, additionalEventAttributes, event) => { + updateModel(column, action, additionalEventAttributes); + eventSvc.dispatchEvent({ + type: "filterAction", + column, + action, + event + }); + }; + return (filter) => { + const filterParams = getCompDetails()?.params; + return this.createManagedBean( + new FilterWrapperComp( + column, + { + comp: filter, + params: filterParams, + isHandler: true + }, + eventSvc, + updateModel, + false + ) + ); + }; + } + executeWhenAllFiltersReady(action) { + if ((this.wrappers?.length ?? 0) > 0) { + action(); + } else { + this.afterFiltersReadyFuncs.push(action); + } + } + updateActiveListForFilter(index, filter) { + this.updateActiveList(index, () => filter?.isFilterActive()); + } + updateActiveListForHandler(index, model) { + this.updateActiveList(index, () => model != null); + } + updateActiveList(index, isActive) { + const activeFilterIndices = this.activeFilterIndices; + _removeFromArray(this.activeFilterIndices, index); + if (isActive()) { + activeFilterIndices.push(index); + } + } + /** Only called for non-handlers */ + onFilterModelChanged(index, additionalEventAttributes) { + this.updateActiveListForFilter(index, this.wrappers[index]?.filter); + this.filterChanged(index, additionalEventAttributes); + } + onHandlerModelChanged(index, model, additionalEventAttributes) { + this.updateActiveListForHandler(index, model); + this.filterChanged(index, additionalEventAttributes); + } + filterChanged(index, additionalEventAttributes) { + this.filterChangedCallback(additionalEventAttributes); + this.wrappers.forEach((wrapper, childIndex) => { + if (index === childIndex || !wrapper) { + return; + } + const { filter, handler } = wrapper; + handler?.onAnyFilterChanged?.(); + if (typeof filter.onAnyFilterChanged === "function") { + filter.onAnyFilterChanged(); + } + }); + } + getModelAsString(model) { + if (!model?.filterModels?.length) { + return ""; + } + const lastActiveIndex = this.getLastActiveFilterIndex() ?? 0; + const activeFilter = this.wrappers[lastActiveIndex]?.filter; + return activeFilter?.getModelAsString?.(model.filterModels[lastActiveIndex]) ?? ""; + } +}; + +// packages/ag-grid-enterprise/src/multiFilter/multiFilterHandler.ts +import { BeanStub as BeanStub22, _removeFromArray as _removeFromArray2, _warn as _warn24 } from "ag-grid-community"; +var MultiFilterHandler = class extends BeanStub22 { + constructor() { + super(...arguments); + /** Used to get the filter type for filter models. */ + this.filterType = "multi"; + this.handlerWrappers = []; + /** ui active. could still have null model */ + this.activeFilterIndices = []; + this.filterDefs = []; + } + init(params) { + this.params = params; + const filterDefs = getMultiFilterDefs(params.filterParams); + this.filterDefs = filterDefs; + filterDefs.forEach((def, index) => { + const wrapper = this.beans.colFilter.createHandler(params.column, def, "agTextColumnFilter"); + this.handlerWrappers.push(wrapper); + if (!wrapper) { + _warn24(278, { colId: params.column.getColId() }); + return; + } + const { handler, handlerParams } = wrapper; + handler.init?.({ + ...this.updateHandlerParams(handlerParams, index, true), + model: getFilterModelForIndex(params.model, index), + source: "init" + }); + }); + this.resetActiveList(params.model); + } + refresh(params) { + this.params = params; + const { model, source, filterParams } = params; + const filters = filterParams?.filters; + this.handlerWrappers.forEach((wrapper, index) => { + if (wrapper) { + const updatedParams = this.updateHandlerParams(params, index, false, filters?.[index].filterParams); + wrapper.handlerParams = updatedParams; + wrapper.handler.refresh?.({ + ...updatedParams, + model: getFilterModelForIndex(model, index), + source + }); + } + }); + if (params.source !== "floating" && params.source !== "ui") { + this.resetActiveList(params.model); + } + if (params.additionalEventAttributes?.fromButtons) { + this.onAnyFilterChanged(); + } + } + updateHandlerParams(params, index, isInit, providedFilterParams) { + const { onModelChange, doesRowPassOtherFilter, getValue } = params; + const handlerParams = { + ...params, + onModelChange: (newModel, additionalEventAttributes) => onModelChange( + getUpdatedMultiFilterModel(this.params.model, this.handlerWrappers.length, newModel, index), + additionalEventAttributes + ), + doesRowPassOtherFilter: (node) => doesRowPassOtherFilter(node) && this.doesFilterPass({ node, data: node.data, model: this.params.model, handlerParams }, index), + getValue: updateGetValue(this.beans, params.column, this.filterDefs[index], getValue), + filterParams: this.updateFilterParams(params, isInit, providedFilterParams) + }; + return handlerParams; + } + updateFilterParams(params, isInit, providedFilterParams) { + const originalFilterParams = params.filterParams; + if (providedFilterParams?.buttons && isInit) { + _warn24(292, { colId: params.column.getColId() }); + } + const filterParamsForFilter = providedFilterParams ? { ...originalFilterParams, ...providedFilterParams } : originalFilterParams; + if (!filterParamsForFilter.buttons) { + return filterParamsForFilter; + } + if (providedFilterParams) { + delete filterParamsForFilter.buttons; + return filterParamsForFilter; + } + const { buttons: _, ...filterParamsForFilterWithoutButtons } = filterParamsForFilter; + return filterParamsForFilterWithoutButtons; + } + doesFilterPass(params, indexToSkip) { + const filterModels = params.model?.filterModels; + if (filterModels == null) { + return true; + } + return this.handlerWrappers.every((wrapper, index) => { + const model = filterModels[index]; + if (model == null || indexToSkip != null && index === indexToSkip) { + return true; + } + const handler = wrapper?.handler; + return !handler || handler.doesFilterPass({ ...params, model, handlerParams: wrapper.handlerParams }); + }); + } + resetActiveList(model) { + this.activeFilterIndices = []; + const filterModels = model?.filterModels; + if (filterModels == null) { + return; + } + for (let i = 0; i < this.handlerWrappers.length; i++) { + const isActive = filterModels[i] != null; + if (isActive) { + this.activeFilterIndices.push(i); + } + } + } + updateActiveList(index, childModel) { + const activeFilterIndices = this.activeFilterIndices; + _removeFromArray2(activeFilterIndices, index); + if (childModel != null) { + activeFilterIndices.push(index); + } + } + getLastActiveFilterIndex() { + const activeFilterIndices = this.activeFilterIndices; + return activeFilterIndices.length > 0 ? activeFilterIndices[activeFilterIndices.length - 1] : null; + } + getModelAsString(model, source) { + const isForToolPanel = source === "filterToolPanel"; + const defaultOption = () => isForToolPanel ? this.getLocaleTextFunc()("filterSummaryInactive", "is (All)") : ""; + if (!model?.filterModels?.length) { + return defaultOption(); + } + const lastActiveIndex = this.getLastActiveFilterIndex() ?? 0; + const activeWrapper = this.handlerWrappers[lastActiveIndex]; + return activeWrapper?.handler.getModelAsString?.(model.filterModels[lastActiveIndex], source) ?? defaultOption(); + } + getHandler(index) { + return this.handlerWrappers[index]?.handler; + } + onAnyFilterChanged() { + forEachReverse(this.handlerWrappers, (wrapper) => wrapper?.handler?.onAnyFilterChanged?.()); + } + onNewRowsLoaded() { + forEachReverse(this.handlerWrappers, (wrapper) => wrapper?.handler?.onNewRowsLoaded?.()); + } + destroy() { + for (const wrapper of this.handlerWrappers) { + this.destroyBean(wrapper?.handler); + } + this.handlerWrappers.length = 0; + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/multiFilter/multiFilterService.ts +import { BeanStub as BeanStub23, _getDefaultSimpleFilter, _getFilterParamsForDataType } from "ag-grid-community"; +var MultiFilterService = class extends BeanStub23 { + constructor() { + super(...arguments); + this.beanName = "multiFilter"; + } + getParamsForDataType(existingFilterParams, existingFilterValueGetter, dataTypeDefinition, formatValue) { + let filters = existingFilterParams?.filters; + const beans = this.beans; + if (!filters) { + const simpleFilter = _getDefaultSimpleFilter(dataTypeDefinition.baseDataType); + filters = [{ filter: simpleFilter }, { filter: "agSetColumnFilter" }]; + } + const translate = this.getLocaleTextFunc(); + filters = filters.map((filterDef) => { + const { + filter, + filterParams: existingChildFilterParams, + filterValueGetter: existingChildFilterValueGetter + } = filterDef; + if (typeof filter !== "string") { + return filterDef; + } + const { filterParams, filterValueGetter } = _getFilterParamsForDataType( + filter, + existingChildFilterParams, + existingChildFilterValueGetter ?? existingFilterValueGetter, + dataTypeDefinition, + formatValue, + beans, + translate + ); + return { + ...filterDef, + filterParams, + filterValueGetter + }; + }); + return { + filterParams: { + ...existingFilterParams, + filters + } + }; + } +}; + +// packages/ag-grid-enterprise/src/multiFilter/multiFilterUi.ts +import { AgPromise as AgPromise9, _getFilterDetails, _isUseApplyButton, _refreshFilterUi as _refreshFilterUi2, _warn as _warn25 } from "ag-grid-community"; +var MultiFilterUi = class extends BaseMultiFilter { + constructor() { + super(...arguments); + this.filterType = "multi"; + this.filters = []; + this.filterParams = []; + this.validity = []; + } + init(params) { + this.params = params; + const filterDefs = getMultiFilterDefs(params).map((filterDef) => { + if (filterDef.filterParams?.buttons) { + _warn25(292, { colId: params.column.getColId() }); + const newParams = { ...filterDef.filterParams }; + delete newParams.buttons; + return { + ...filterDef, + filterParams: newParams + }; + } + return filterDef; + }); + this.filterDefs = filterDefs; + this.allState = params.state; + const filterPromises = this.filterDefs.map( + (filterDef, index) => this.createFilter(filterDef, index) + ); + return new AgPromise9((resolve) => { + AgPromise9.all(filterPromises).then((filters) => { + this.filters = filters; + this.refreshGui("columnMenu").then(() => { + resolve(); + }); + }); + }); + } + refresh(params) { + const { model, state, source } = params; + if (source === "colDef") { + return false; + } + this.params = params; + const filterParams = this.filterParams; + if (state === this.allState) { + return true; + } + this.allState = state; + const newAllStateState = state.state; + this.filters.forEach((filter, index) => { + const modelForFilter = getFilterModelForIndex(model, index); + const stateForFilter = { + state: newAllStateState?.[index], + model: getFilterModelForIndex(state.model, index) + }; + _refreshFilterUi2(filter, filterParams[index], modelForFilter, stateForFilter, source); + }); + return true; + } + getLastActiveFilterIndex() { + return this.getHandler().getLastActiveFilterIndex?.() ?? null; + } + getChildFilterInstance(index) { + return this.filters[index] ?? void 0; + } + getNumChildFilters() { + return this.filters.length; + } + destroy() { + for (const filter of this.filters) { + this.destroyBean(filter); + } + this.filters.length = 0; + super.destroy(); + } + getFilterWrappers() { + return this.filters; + } + getFilterFromWrapper(wrapper) { + return wrapper; + } + getCompFromWrapper(wrapper) { + return wrapper; + } + createFilter(filterDef, index) { + const userCompFactory = this.beans.userCompFactory; + const filterParams = this.updateParams(filterDef, this.params, index); + const compDetails = _getFilterDetails( + userCompFactory, + filterDef, + filterParams, + "agTextColumnFilter" + ); + if (!compDetails) { + return AgPromise9.resolve(null); + } + this.filterParams[index] = compDetails.params; + return compDetails.newAgStackInstance(); + } + updateParams(filterDef, params, index) { + const { + doesRowPassOtherFilter, + model, + onModelChange, + state, + onStateChange, + column, + source, + onAction, + onUiChange, + getValue + } = params; + const filterModel = getFilterModelForIndex(model, index); + const filterState = state ? { + model: getFilterModelForIndex(state.model, index), + state: state.state?.[index] + } : { model: filterModel }; + const onAnyFilterChanged = () => { + const handler = this.getHandler(); + this.filters.forEach((filter, otherIndex) => { + if (index !== otherIndex) { + handler.getHandler(otherIndex)?.onAnyFilterChanged?.(); + filter?.onAnyFilterChanged?.(); + } + }); + }; + const colFilter = this.beans.colFilter; + return { + ...colFilter.createBaseFilterParams(column), + ...filterDef, + doesRowPassOtherFilter: (node) => doesRowPassOtherFilter(node) && this.getHandler().doesFilterPass( + { + node, + data: node.data, + model: this.params.model, + handlerParams: colFilter.getHandlerParams(column) + }, + index + ), + model: filterModel, + state: filterState, + onModelChange: (childModel, additionalEventAttributes) => { + const { filters, params: params2 } = this; + const newModel = getUpdatedMultiFilterModel(params2.model, filters.length, childModel, index); + this.updateActiveList(index, childModel); + onModelChange(newModel, additionalEventAttributes); + onAnyFilterChanged(); + }, + onStateChange: (newState) => this.onStateChange(onStateChange, index, newState), + getHandler: () => this.getHandler().getHandler(index), + onAction: (action, additionalEventAttributes, event) => { + if (_isUseApplyButton(params)) { + return; + } + const isChange = action === "apply" || action === "reset"; + if (isChange) { + this.updateActiveList(index, getFilterModelForIndex(this.params.state.model, index)); + } + onAction(action, additionalEventAttributes, event); + if (isChange) { + onAnyFilterChanged(); + } + }, + onUiChange, + source, + getValue: updateGetValue(this.beans, column, filterDef, getValue) + }; + } + updateActiveList(index, childModel) { + this.getHandler().updateActiveList?.(index, childModel); + } + getHandler() { + return this.params.getHandler(); + } + onStateChange(onStateChange, index, newState) { + const { model, state, valid } = newState; + const validity = this.validity; + validity[index] = valid; + const allState = this.allState; + const newModel = getUpdatedMultiFilterModel(allState.model, this.filters.length, model, index); + const allValid = validity.every((filterValid) => filterValid !== false); + const allStateState = [...allState.state ?? []]; + allStateState[index] = state; + const newAllState = { + state: allStateState, + model: newModel, + valid: allValid + }; + this.allState = newAllState; + onStateChange(newAllState); + } + getModelAsString(model) { + return this.getHandler().getModelAsString?.(model) ?? ""; + } +}; + +// packages/ag-grid-enterprise/src/multiFilter/multiFloatingFilter.ts +import { + AgPromise as AgPromise10, + Component as Component36, + _clearElement as _clearElement11, + _error as _error5, + _getDefaultFloatingFilterType, + _getFloatingFilterCompDetails, + _mergeDeep as _mergeDeep2, + _setDisplayed as _setDisplayed17 +} from "ag-grid-community"; +var MultiFloatingFilterElement = { + tag: "div", + cls: "ag-multi-floating-filter ag-floating-filter-input" +}; +var MultiFloatingFilterComp = class extends Component36 { + constructor() { + super(MultiFloatingFilterElement); + this.floatingFilters = []; + this.compDetailsList = []; + } + init(params) { + this.params = params; + const { compDetailsList } = this.getCompDetailsList(params); + return this.setParams(compDetailsList); + } + setParams(compDetailsList) { + const floatingFilterPromises = []; + compDetailsList.forEach((compDetails) => { + const floatingFilterPromise = compDetails?.newAgStackInstance(); + if (floatingFilterPromise != null) { + this.compDetailsList.push(compDetails); + floatingFilterPromises.push(floatingFilterPromise); + } + }); + return AgPromise10.all(floatingFilterPromises).then((floatingFilters) => { + floatingFilters.forEach((floatingFilter, index) => { + this.floatingFilters.push(floatingFilter); + const gui = floatingFilter.getGui(); + this.appendChild(gui); + if (index > 0) { + _setDisplayed17(gui, false); + } + }); + }); + } + refresh(params) { + this.params = params; + const { compDetailsList: newCompDetailsList, floatingFilterParamsList } = this.getCompDetailsList(params); + const allFloatingFilterCompsUnchanged = newCompDetailsList.length === this.compDetailsList.length && newCompDetailsList.every( + (newCompDetails, index) => !this.beans.colFilter?.areFilterCompsDifferent(this.compDetailsList[index], newCompDetails) + ); + if (allFloatingFilterCompsUnchanged) { + floatingFilterParamsList.forEach((floatingFilterParams, index) => { + const floatingFilter = this.floatingFilters[index]; + floatingFilter.refresh?.(floatingFilterParams); + }); + if (this.gos.get("enableFilterHandlers")) { + const reactiveParams = params; + if (reactiveParams.model == null) { + this.floatingFilters.forEach((filter, i) => { + _setDisplayed17(filter.getGui(), i === 0); + }); + } else { + const lastActiveFloatingFilterIndex = reactiveParams.getHandler()?.getLastActiveFilterIndex?.(); + this.floatingFilters.forEach((filter, i) => { + const shouldShow = lastActiveFloatingFilterIndex == null ? i === 0 : i === lastActiveFloatingFilterIndex; + _setDisplayed17(filter.getGui(), shouldShow); + }); + } + } + } else { + _clearElement11(this.getGui()); + this.destroyBeans(this.floatingFilters); + this.floatingFilters = []; + this.compDetailsList = []; + this.setParams(newCompDetailsList); + } + } + getCompDetailsList(params) { + const compDetailsList = []; + const floatingFilterParamsList = []; + const filterParams = params.filterParams; + const currentParentModel = params.currentParentModel; + const filterDefs = getMultiFilterDefs(filterParams); + filterDefs.forEach((filterDef, index) => { + const floatingFilterParams = { + ...params, + // set the parent filter instance for each floating filter to the relevant child filter instance + parentFilterInstance: (callback) => { + this.parentMultiFilterInstance((parent) => { + const child = parent.getChildFilterInstance(index); + if (child == null) { + return; + } + callback(child); + }); + }, + // return the parent model for the specific filter + currentParentModel: () => currentParentModel()?.filterModels?.[index] ?? null + }; + if (this.gos.get("enableFilterHandlers")) { + const reactiveParams = floatingFilterParams; + reactiveParams.model = reactiveParams.model?.filterModels?.[index] ?? null; + const { onModelChange, getHandler } = reactiveParams; + reactiveParams.onModelChange = (newModel, additionalEventAttributes) => onModelChange( + getUpdatedMultiFilterModel( + this.params.model, + filterDefs.length, + newModel, + index + ), + additionalEventAttributes + ); + reactiveParams.getHandler = () => { + const multiFilterHandler = getHandler(); + return multiFilterHandler.getHandler(index); + }; + } + _mergeDeep2(floatingFilterParams.filterParams, filterDef.filterParams); + const compDetails = this.getCompDetails(filterDef, floatingFilterParams); + if (compDetails) { + compDetailsList.push(compDetails); + floatingFilterParamsList.push(floatingFilterParams); + } + }); + return { compDetailsList, floatingFilterParamsList }; + } + onParentModelChanged(model, event) { + if (event?.afterFloatingFilter) { + return; + } + this.parentMultiFilterInstance((parent) => { + if (model == null) { + this.floatingFilters.forEach((filter, i) => { + filter.onParentModelChanged(null, event); + _setDisplayed17(filter.getGui(), i === 0); + }); + } else { + const lastActiveFloatingFilterIndex = parent.getLastActiveFilterIndex(); + this.floatingFilters.forEach((filter, i) => { + const filterModel = model.filterModels.length > i ? model.filterModels[i] : null; + filter.onParentModelChanged(filterModel, event); + const shouldShow = lastActiveFloatingFilterIndex == null ? i === 0 : i === lastActiveFloatingFilterIndex; + _setDisplayed17(filter.getGui(), shouldShow); + }); + } + }); + } + destroy() { + this.destroyBeans(this.floatingFilters); + this.floatingFilters.length = 0; + super.destroy(); + } + getCompDetails(filterDef, params) { + const { colFilter, frameworkOverrides, userCompFactory } = this.beans; + const defaultComponentName = _getDefaultFloatingFilterType( + frameworkOverrides, + filterDef, + () => colFilter.getDefaultFloatingFilter(this.params.column) + ) ?? "agReadOnlyFloatingFilter"; + return _getFloatingFilterCompDetails(userCompFactory, filterDef, params, defaultComponentName); + } + parentMultiFilterInstance(cb) { + this.params.parentFilterInstance((parent) => { + if (!(parent instanceof MultiFilter || parent instanceof MultiFilterUi)) { + _error5(120); + } + cb(parent); + }); + } +}; + +// packages/ag-grid-enterprise/src/multiFilter/multiFilterModule.ts +var MultiFilterModule = { + moduleName: "MultiFilter", + version: VERSION, + userComponents: { + agMultiColumnFilter: { + getComp: (beans) => beans.gos.get("enableFilterHandlers") ? { + classImp: MultiFilterUi, + params: { + useForm: true + } + } : MultiFilter + }, + agMultiColumnFloatingFilter: MultiFloatingFilterComp + }, + beans: [MultiFilterService], + dynamicBeans: { + agMultiColumnFilterHandler: MultiFilterHandler + }, + dependsOn: [EnterpriseCoreModule, _ColumnFilterModule2, MenuItemModule] +}; + +// packages/ag-grid-enterprise/src/rowGrouping/rowGroupingModule.ts +import { _ColumnFilterModule as _ColumnFilterModule3, _PopupModule as _PopupModule4 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/aggregation/aggColumnNameService.ts +import { BeanStub as BeanStub24, _exists as _exists17 } from "ag-grid-community"; +var AggColumnNameService = class extends BeanStub24 { + constructor() { + super(...arguments); + this.beanName = "aggColNameSvc"; + } + getHeaderName(column, headerName) { + if (this.gos.get("suppressAggFuncInHeader")) { + return headerName; + } + const { valueColsSvc, colModel, rowGroupColsSvc } = this.beans; + const pivotValueColumn = column.getColDef().pivotValueColumn; + const pivotActiveOnThisColumn = _exists17(pivotValueColumn); + let aggFunc = null; + let aggFuncFound; + if (pivotActiveOnThisColumn) { + const valueColumns = valueColsSvc?.columns ?? []; + const isCollapsedHeaderEnabled = this.gos.get("removePivotHeaderRowWhenSingleValueColumn") && valueColumns.length === 1; + const isTotalColumn = column.getColDef().pivotTotalColumnIds !== void 0; + if (isCollapsedHeaderEnabled && !isTotalColumn) { + return headerName; + } + aggFunc = pivotValueColumn ? pivotValueColumn.getAggFunc() : null; + aggFuncFound = true; + } else { + const measureActive = column.isValueActive(); + const isGrouping = rowGroupColsSvc?.columns.length !== 0; + const aggregationPresent = colModel.isPivotMode() || isGrouping || this.gos.get("treeData"); + if (measureActive && aggregationPresent) { + aggFunc = column.getAggFunc(); + aggFuncFound = true; + } else { + aggFuncFound = false; + } + } + if (aggFuncFound) { + const aggFuncString = typeof aggFunc === "string" ? aggFunc : "func"; + const localeTextFunc = this.getLocaleTextFunc(); + const aggFuncStringTranslated = localeTextFunc(aggFuncString, aggFuncString); + return `${aggFuncStringTranslated}(${headerName})`; + } + return headerName; + } +}; + +// packages/ag-grid-enterprise/src/aggregation/aggFuncService.ts +import { BeanStub as BeanStub25, _exists as _exists18, _last as _last9 } from "ag-grid-community"; +var defaultAggFuncNames = { + sum: "Sum", + first: "First", + last: "Last", + min: "Min", + max: "Max", + count: "Count", + avg: "Average" +}; +var AggFuncService = class extends BeanStub25 { + constructor() { + super(...arguments); + this.beanName = "aggFuncSvc"; + this.aggFuncsMap = {}; + this.initialised = false; + } + postConstruct() { + this.init(); + } + init() { + if (this.initialised) { + return; + } + this.initialiseWithDefaultAggregations(); + this.addAggFuncs(this.gos.get("aggFuncs")); + } + initialiseWithDefaultAggregations() { + const aggMap = this.aggFuncsMap; + aggMap["sum"] = aggSum; + aggMap["first"] = aggFirst; + aggMap["last"] = aggLast; + aggMap["min"] = aggMin; + aggMap["max"] = aggMax; + aggMap["count"] = aggCount; + aggMap["avg"] = aggAvg; + this.initialised = true; + } + isAggFuncPossible(column, func) { + const allKeys = this.getFuncNames(column); + const allowed = allKeys.includes(func); + const funcExists = _exists18(this.aggFuncsMap[func]); + return allowed && funcExists; + } + getDefaultFuncLabel(fctName) { + return defaultAggFuncNames[fctName] ?? fctName; + } + getDefaultAggFunc(column) { + const defaultAgg = column.getColDef().defaultAggFunc; + if (_exists18(defaultAgg) && this.isAggFuncPossible(column, defaultAgg)) { + return defaultAgg; + } + if (this.isAggFuncPossible(column, "sum")) { + return "sum"; + } + const allKeys = this.getFuncNames(column); + return allKeys?.length ? allKeys[0] : null; + } + addAggFuncs(aggFuncs) { + this.init(); + if (!aggFuncs) { + return; + } + for (const key of Object.keys(aggFuncs)) { + if (aggFuncs[key]) { + this.aggFuncsMap[key] = aggFuncs[key]; + } + } + } + getAggFunc(name) { + this.init(); + return this.aggFuncsMap[name]; + } + getFuncNames(column) { + const userAllowedFuncs = column.getColDef().allowedAggFuncs; + return userAllowedFuncs == null ? Object.keys(this.aggFuncsMap).sort() : userAllowedFuncs; + } + clear() { + this.aggFuncsMap = {}; + } +}; +function aggSum(params) { + const { values } = params; + let result = null; + for (let i = 0; i < values.length; i++) { + const value = values[i]; + if (typeof value === "number") { + if (result === null) { + result = value; + } else { + result += typeof result === "number" ? value : BigInt(value); + } + } else if (typeof value === "bigint") { + if (result === null) { + result = value; + } else { + result = (typeof result === "bigint" ? result : BigInt(result)) + value; + } + } + } + return result; +} +function aggFirst(params) { + return params.values.length > 0 ? params.values[0] : null; +} +function aggLast(params) { + return params.values.length > 0 ? _last9(params.values) : null; +} +function aggMin(params) { + const { values } = params; + let result = null; + for (let i = 0; i < values.length; i++) { + const value = values[i]; + if ((typeof value === "number" || typeof value === "bigint") && (result === null || result > value)) { + result = value; + } + } + return result; +} +function aggMax(params) { + const { values } = params; + let result = null; + for (let i = 0; i < values.length; i++) { + const value = values[i]; + if ((typeof value === "number" || typeof value === "bigint") && (result === null || result < value)) { + result = value; + } + } + return result; +} +var COUNT_PROTO = Object.freeze({ + // the grid by default uses toString to render values for an object, so this + // is a trick to get the default cellRenderer to display the avg value + toString: function() { + return this.value.toString(); + }, + // used for sorting + toNumber: function() { + return this.value; + } +}); +function aggCount(params) { + const { values } = params; + let count = 0; + for (let i = 0; i < values.length; i++) { + const value = values[i]; + count += value != null && typeof value.value === "number" ? value.value : 1; + } + const existingAggData = params.rowNode?.aggData?.[params.column.getColId()]; + if (existingAggData && existingAggData.value === count) { + return existingAggData; + } + const result = Object.create(COUNT_PROTO); + result.value = count; + return result; +} +var AVERAGE_PROTO = Object.freeze({ + // the grid by default uses toString to render values for an object, so this + // is a trick to get the default cellRenderer to display the avg value + toString: function() { + return typeof this.value === "number" || typeof this.value === "bigint" ? this.value.toString() : ""; + }, + // used for sorting + toNumber: function() { + return this.value; + } +}); +function aggAvg(params) { + const { values } = params; + let sum = 0; + let count = 0; + for (let i = 0; i < values.length; i++) { + const currentValue = values[i]; + let valueToAdd = null; + if (typeof currentValue === "number" || typeof currentValue === "bigint") { + valueToAdd = currentValue; + count++; + } else if (currentValue != null && (typeof currentValue.value === "number" || typeof currentValue.value === "bigint") && typeof currentValue.count === "number") { + valueToAdd = currentValue.value * (typeof currentValue.value === "number" ? currentValue.count : BigInt(currentValue.count)); + count += currentValue.count; + } + if (typeof valueToAdd === "number") { + sum += typeof sum === "number" ? valueToAdd : BigInt(valueToAdd); + } else if (typeof valueToAdd === "bigint") { + sum = (typeof sum === "bigint" ? sum : BigInt(sum)) + valueToAdd; + } + } + let value = null; + if (count > 0) { + value = sum / (typeof sum === "number" ? count : BigInt(count)); + } + const existingAggData = params.rowNode?.aggData?.[params.column?.getColId()]; + if (existingAggData && existingAggData.count === count && existingAggData.value === value) { + return existingAggData; + } + const result = Object.create(AVERAGE_PROTO); + result.count = count; + result.value = value; + return result; +} + +// packages/ag-grid-enterprise/src/aggregation/aggregatedChildrenSvc.ts +import { BeanStub as BeanStub26, _getGroupAggFiltering } from "ag-grid-community"; +var AggregatedChildrenSvc = class extends BeanStub26 { + constructor() { + super(...arguments); + this.beanName = "aggChildrenSvc"; + } + getAggregatedChildren(rowNode, col, recursive) { + if (!rowNode?.group) { + return []; + } + if (rowNode.rowPinned) { + rowNode = rowNode.pinnedSibling; + if (!rowNode) { + return []; + } + } + const gos = this.gos; + const children = getImmediateAggChildren(rowNode, col, gos); + if (!recursive) { + return children; + } + const result = []; + collectLeafDescendants(children, col, gos, result); + return result; + } +}; +var getImmediateAggChildren = (rowNode, col, gos) => { + const colDef = col?.colDef; + const pivotKeys = colDef?.pivotKeys; + if (pivotKeys) { + if (rowNode.leafGroup && pivotKeys.length && !colDef.pivotTotalColumnIds) { + return getNodesFromMappedSet(rowNode.childrenMapped, pivotKeys); + } + return rowNode.childrenAfterFilter ?? rowNode.childrenAfterGroup ?? []; + } + if (_getGroupAggFiltering(gos) || gos.get("suppressAggFilteredOnly")) { + return rowNode.childrenAfterGroup ?? []; + } + return rowNode.childrenAfterFilter ?? rowNode.childrenAfterGroup ?? []; +}; +var collectLeafDescendants = (children, col, gos, result) => { + for (let i = 0, len = children.length; i < len; ++i) { + const child = children[i]; + if (child.group) { + collectLeafDescendants(getImmediateAggChildren(child, col, gos), col, gos, result); + } else { + result.push(child); + } + } +}; + +// packages/ag-grid-enterprise/src/aggregation/aggregationApi.ts +function addAggFuncs(beans, aggFuncs) { + if (beans.aggFuncSvc) { + beans.aggFuncSvc.addAggFuncs(aggFuncs); + } +} +function clearAggFuncs(beans) { + if (beans.aggFuncSvc) { + beans.aggFuncSvc.clear(); + } +} +function setColumnAggFunc(beans, key, aggFunc) { + beans.valueColsSvc?.setColumnAggFunc?.(key, aggFunc, "api"); +} + +// packages/ag-grid-enterprise/src/aggregation/aggregationStage.ts +import { + BeanStub as BeanStub27, + _forEachChangedGroupDepthFirst, + _getGrandTotalRow as _getGrandTotalRow3, + _getGroupAggFiltering as _getGroupAggFiltering2, + _warn as _warn26 +} from "ag-grid-community"; +var AggregationStage = class extends BeanStub27 { + constructor() { + super(...arguments); + this.beanName = "aggStage"; + this.step = "aggregate"; + this.refreshProps = [ + "getGroupRowAgg", + "alwaysAggregateAtRootLevel", + "suppressAggFilteredOnly", + "grandTotalRow" + ]; + /** Tracks whether the previous execute() call produced aggData, so we only clear once on transition. */ + this.hadAgg = false; + } + // Stale aggData on demoted nodes is cleared by the group stage (setRowNodeGroup), not here. + execute(changedPath) { + const { gos, beans } = this; + const userAggFunc = gos.getCallback("getGroupRowAgg"); + const valueColumns = beans.valueColsSvc?.columns; + if (!valueColumns?.length && !userAggFunc) { + if (this.hadAgg && !changedPath) { + this.hadAgg = false; + const colModel2 = beans.colModel; + const rowModel2 = beans.rowModel; + _forEachChangedGroupDepthFirst(rowModel2.rootNode, rowModel2.hierarchical, void 0, (rowNode) => { + setAggDataWithSiblings(rowNode, null, colModel2); + }); + } + return; + } + this.hadAgg = true; + const colModel = beans.colModel; + const aggFuncSvc = beans.aggFuncSvc; + const aggregateRoot = gos.get("alwaysAggregateAtRootLevel") || !!_getGrandTotalRow3(gos) || colModel.isPivotMode(); + const filteredOnly = !_getGroupAggFiltering2(gos) && !gos.get("suppressAggFilteredOnly"); + const valueSvc = beans.valueSvc; + const api = beans.gridApi; + const context = beans.gridOptions.context; + const resolvedValueColumns = valueColumns ?? []; + const colCount = resolvedValueColumns.length; + const narrowedCellsPath = changedPath?.kind === "cells" ? changedPath : void 0; + let cellsChangedPath; + const valueCols = new Array(colCount); + for (let i = 0; i < colCount; ++i) { + const col = resolvedValueColumns[i]; + const colSlot = narrowedCellsPath ? narrowedCellsPath.getSlot(col.colId) : -1; + if (colSlot >= 0) { + cellsChangedPath = narrowedCellsPath; + } + valueCols[i] = { + column: col, + colId: col.colId, + colDef: col.colDef, + aggFunc: resolveAggFunc(col.getAggFunc(), aggFuncSvc, col), + colSlot + }; + } + const pivotData = resolvePivotColumns(colModel, beans.pivotResultCols, aggFuncSvc); + const values2d = colCount > 0 ? new Array(colCount) : null; + const rowModel = beans.rowModel; + _forEachChangedGroupDepthFirst(rowModel.rootNode, rowModel.hierarchical, changedPath, (rowNode) => { + if (rowNode.level === -1 && !aggregateRoot) { + setAggData(rowNode, null, colModel); + return; + } + let aggResult; + if (userAggFunc) { + aggResult = userAggFunc({ nodes: rowNode.childrenAfterFilter }); + } else if (!values2d) { + aggResult = null; + } else if (pivotData) { + aggResult = aggregateValuesAndPivot(rowNode, pivotData, valueSvc, api, context); + } else { + aggResult = aggregateValuesOnly( + rowNode, + valueCols, + colCount, + values2d, + cellsChangedPath, + filteredOnly, + valueSvc, + api, + context + ); + } + setAggDataWithSiblings(rowNode, aggResult, colModel); + }); + } +}; +var aggregateValuesOnly = (rowNode, valueCols, colCount, values2d, cellsChangedPath, filteredOnly, valueSvc, api, context) => { + const aggregatedChildren = (filteredOnly ? rowNode.childrenAfterFilter : rowNode.childrenAfterGroup) ?? []; + const childCount = aggregatedChildren.length; + const data = rowNode.data; + const result = /* @__PURE__ */ Object.create(null); + const rowSlot = cellsChangedPath ? cellsChangedPath.getSlot(rowNode) : -1; + const oldAggData = rowSlot >= 0 ? rowNode.aggData : void 0; + let changedCount = 0; + for (let j = 0; j < colCount; ++j) { + const vc = valueCols[j]; + if (rowSlot >= 0 && !cellsChangedPath.hasCellBySlot(rowSlot, vc.colSlot)) { + values2d[j] = null; + if (oldAggData) { + result[vc.colId] = oldAggData[vc.colId]; + } + } else { + values2d[j] = new Array(childCount); + ++changedCount; + } + } + if (changedCount === 0) { + return result; + } + for (let c = 0; c < childCount; ++c) { + const child = aggregatedChildren[c]; + const childAggData = child.aggData; + if (childAggData) { + for (let j = 0; j < colCount; ++j) { + const colValues = values2d[j]; + if (colValues !== null) { + const vc = valueCols[j]; + const v = childAggData[vc.colId]; + colValues[c] = v !== void 0 ? v : valueSvc.getValue(vc.column, child, "data"); + } + } + } else { + for (let j = 0; j < colCount; ++j) { + const colValues = values2d[j]; + if (colValues !== null) { + colValues[c] = valueSvc.getValue(valueCols[j].column, child, "data"); + } + } + } + } + for (let j = 0; j < colCount; ++j) { + const colValues = values2d[j]; + if (colValues === null) { + continue; + } + const rc = valueCols[j]; + const aggFunc = rc.aggFunc; + result[rc.colId] = aggFunc ? aggFunc({ + values: colValues, + column: rc.column, + colDef: rc.colDef, + rowNode, + data, + aggregatedChildren, + api, + context + }) : null; + } + return result; +}; +var aggregateValuesAndPivot = (rowNode, pivotData, valueSvc, api, context) => { + const pivotColCount = pivotData.length; + const isLeafGroup = rowNode.leafGroup; + const data = rowNode.data; + const childrenMapped = rowNode.childrenMapped; + const childrenAfterFilter = rowNode.childrenAfterFilter ?? []; + const result = /* @__PURE__ */ Object.create(null); + let prevPivotKeys; + let prevPivotChildren; + for (let i = 0; i < pivotColCount; ++i) { + const rc = pivotData[i]; + const column = rc.column; + const colId = rc.colId; + const totalColIds = rc.totalColIds; + let values; + let aggregatedChildren; + if (totalColIds != null) { + const tLen = totalColIds.length; + values = new Array(tLen); + for (let t = 0; t < tLen; ++t) { + values[t] = result[totalColIds[t]]; + } + aggregatedChildren = childrenAfterFilter; + } else if (isLeafGroup) { + const pivotKeys = rc.pivotKeys; + if (!prevPivotChildren || pivotKeys !== prevPivotKeys) { + prevPivotKeys = pivotKeys; + prevPivotChildren = getNodesFromMappedSet(childrenMapped, pivotKeys); + } + aggregatedChildren = prevPivotChildren; + const nodeCount = aggregatedChildren.length; + values = new Array(nodeCount); + for (let n = 0; n < nodeCount; ++n) { + values[n] = valueSvc.getValue(column, aggregatedChildren[n], "data"); + } + } else { + aggregatedChildren = childrenAfterFilter; + const nodeCount = aggregatedChildren.length; + values = new Array(nodeCount); + for (let n = 0; n < nodeCount; ++n) { + const childNode = aggregatedChildren[n]; + const childAggData = childNode.aggData; + const v = childAggData ? childAggData[colId] : void 0; + values[n] = v !== void 0 ? v : valueSvc.getValue(column, childNode, "data"); + } + } + const aggFunc = rc.aggFunc; + result[colId] = aggFunc ? aggFunc({ + values, + column, + colDef: column.colDef, + pivotResultColumn: rc.pivotResultCol, + rowNode, + data, + aggregatedChildren, + api, + context + }) : null; + } + return result; +}; +var resolveAggFunc = (aggFuncOrString, aggFuncSvc, column) => { + if (typeof aggFuncOrString === "function") { + return aggFuncOrString; + } + if (aggFuncOrString == null) { + return null; + } + const aggFunc = aggFuncSvc.getAggFunc(aggFuncOrString); + if (typeof aggFunc !== "function") { + _warn26(109, { inputValue: aggFuncOrString.toString(), allSuggestions: aggFuncSvc.getFuncNames(column) }); + return null; + } + return aggFunc; +}; +var resolvePivotColumns = (colModel, pivotResultCols, aggFuncSvc) => { + if (!colModel.isPivotActive()) { + return null; + } + const orderedList = pivotResultCols?.getAggregationOrderedList(); + if (!orderedList || orderedList.length === 0) { + return null; + } + const len = orderedList.length; + const resolved = new Array(len); + let count = 0; + for (let i = 0; i < len; ++i) { + const pivotResultCol = orderedList[i]; + const resultColDef = pivotResultCol.colDef; + const valueCol = resultColDef.pivotValueColumn; + if (!valueCol) { + continue; + } + resolved[count++] = { + column: valueCol, + colId: resultColDef.colId, + aggFunc: resolveAggFunc(valueCol.getAggFunc(), aggFuncSvc, valueCol), + pivotResultCol, + pivotKeys: resultColDef.pivotKeys, + totalColIds: resultColDef.pivotTotalColumnIds + }; + } + if (count === 0) { + return null; + } + resolved.length = count; + return resolved; +}; + +// packages/ag-grid-enterprise/src/aggregation/filterAggregatesStage.ts +import { BeanStub as BeanStub28, _forEachChangedGroupDepthFirst as _forEachChangedGroupDepthFirst2, _getGroupAggFiltering as _getGroupAggFiltering3 } from "ag-grid-community"; +var FilterAggregatesStage = class extends BeanStub28 { + constructor() { + super(...arguments); + this.beanName = "filterAggStage"; + this.step = "filter_aggregates"; + this.refreshProps = []; + /** for tree data, we include all children, groups and leafs */ + this.setAllChildrenCountTreeData = (rowNode) => { + const childrenAfterAggFilter = rowNode.childrenAfterAggFilter; + let allChildrenCount = 0; + if (childrenAfterAggFilter) { + const length = childrenAfterAggFilter.length; + allChildrenCount = length; + for (let i = 0; i < length; ++i) { + allChildrenCount += childrenAfterAggFilter[i].allChildrenCount ?? 0; + } + } + const count = ( + // Maintain the historical behaviour: + // - allChildrenCount is 0 in the root if there are no children + // - allChildrenCount is null in any non-root row if there are no children + allChildrenCount === 0 && rowNode.level >= 0 ? null : allChildrenCount + ); + rowNode.setAllChildrenCount(count); + rowNode.pinnedSibling?.setAllChildrenCount(count); + }; + /* for grid data, we only count the leafs */ + this.setAllChildrenCountGridGrouping = (rowNode) => { + const children = rowNode.childrenAfterAggFilter; + let allChildrenCount = 0; + for (let i = 0, len = children.length; i < len; ++i) { + const child = children[i]; + if (child.group) { + allChildrenCount += child.allChildrenCount; + } else { + allChildrenCount++; + } + } + rowNode.setAllChildrenCount(allChildrenCount); + rowNode.pinnedSibling?.setAllChildrenCount(allChildrenCount); + }; + } + wireBeans(beans) { + this.filterManager = beans.filterManager; + } + execute(changedPath) { + const { rowModel, colModel, groupStage } = this.beans; + const { filterManager } = this; + const isPivotMode2 = colModel.isPivotMode(); + const isAggFilterActive = filterManager?.isAggregateFilterPresent() || filterManager?.isAggregateQuickFilterPresent(); + const isTreeData = !!groupStage?.treeData; + const defaultPrimaryColumnPredicate = (params) => !params.node.group; + const defaultSecondaryColumnPredicate = (params) => params.node.leafGroup; + const applyFilterToNode = _getGroupAggFiltering3(this.gos) || (isPivotMode2 ? defaultSecondaryColumnPredicate : defaultPrimaryColumnPredicate); + const setAllChildrenCount = isTreeData ? this.setAllChildrenCountTreeData : this.setAllChildrenCountGridGrouping; + const preserveChildren = (node, recursive = false) => { + if (node.childrenAfterFilter) { + node.childrenAfterAggFilter = node.childrenAfterFilter; + if (recursive) { + const children = node.childrenAfterAggFilter; + for (let i = 0, len = children.length; i < len; ++i) { + preserveChildren(children[i], recursive); + } + } + if (node.hasChildren()) { + setAllChildrenCount(node); + } else { + node.setAllChildrenCount(null); + node.pinnedSibling?.setAllChildrenCount(null); + } + } + if (node.sibling) { + node.sibling.childrenAfterAggFilter = node.childrenAfterAggFilter; + } + }; + const filterChildren = (node) => { + node.childrenAfterAggFilter = node.childrenAfterFilter?.filter((child) => { + const shouldFilterRow = applyFilterToNode({ node: child }); + if (shouldFilterRow) { + const doesNodePassFilter = filterManager.doesRowPassAggregateFilters({ rowNode: child }); + if (doesNodePassFilter) { + preserveChildren(child, true); + return true; + } + } + const hasChildPassed = child.childrenAfterAggFilter?.length; + return hasChildPassed; + }) || null; + if (node.hasChildren()) { + setAllChildrenCount(node); + } else { + node.setAllChildrenCount(null); + node.pinnedSibling?.setAllChildrenCount(null); + } + if (node.sibling) { + node.sibling.childrenAfterAggFilter = node.childrenAfterAggFilter; + } + }; + _forEachChangedGroupDepthFirst2( + rowModel.rootNode, + rowModel.hierarchical, + changedPath, + isAggFilterActive ? filterChildren : preserveChildren + ); + } +}; + +// packages/ag-grid-enterprise/src/aggregation/footerService.ts +import { BeanStub as BeanStub29, _addGridCommonParams as _addGridCommonParams17, _getGrandTotalRow as _getGrandTotalRow4, _getGroupTotalRowCallback, _warn as _warn27 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/aggregation/footerUtils.ts +import { _createRowNodeSibling } from "ag-grid-community"; +function _createRowNodeFooter(rowNode, beans) { + if (rowNode.sibling) { + return; + } + const footerNode = _createRowNodeSibling(rowNode, beans); + footerNode.footer = true; + footerNode.setRowTop(null); + footerNode.setRowIndex(null); + footerNode.oldRowTop = null; + footerNode.id = "rowGroupFooter_" + rowNode.id; + footerNode.sibling = rowNode; + rowNode.sibling = footerNode; +} +function _destroyRowNodeFooter(rowNode) { + const sibling = rowNode.sibling; + if (!sibling) { + return; + } + sibling._destroy(false); + rowNode.sibling = void 0; + sibling.sibling = void 0; +} + +// packages/ag-grid-enterprise/src/aggregation/footerService.ts +var FooterService = class extends BeanStub29 { + constructor() { + super(...arguments); + this.beanName = "footerSvc"; + } + addTotalRows(startIndex, node, callback, includeFooterNodes, isRootNode, position) { + let index = startIndex; + if (isRootNode) { + const grandTotal = includeFooterNodes && _getGrandTotalRow4(this.gos); + if (_positionMatchesGrandTotalRow(position, grandTotal)) { + _createRowNodeFooter(node, this.beans); + callback(node.sibling, index++); + } + return index; + } + const isGroupIncludeFooter = _getGroupTotalRowCallback(this.gos); + const groupTotal = includeFooterNodes && isGroupIncludeFooter({ node }); + if (groupTotal === position) { + _createRowNodeFooter(node, this.beans); + callback(node.sibling, index++); + } + return index; + } + getTopDisplayIndex(rowsToDisplay, topLevelIndex, childrenAfterSort, getDefaultIndex) { + let adjustedIndex = topLevelIndex; + if (rowsToDisplay[0].footer) { + if (topLevelIndex === 0) { + return 0; + } + adjustedIndex -= 1; + } + const lastRow = rowsToDisplay[rowsToDisplay.length - 1]; + const indexOutsideGroupBounds = adjustedIndex >= childrenAfterSort.length; + if (lastRow.footer && indexOutsideGroupBounds) { + return lastRow.rowIndex; + } + return getDefaultIndex(adjustedIndex); + } + doesCellShowTotalPrefix(node, col) { + if (!node.footer || !col?.getColDef().showRowGroup) { + return false; + } + if (this.gos.get("treeData")) { + return true; + } + if (node.level === -1) { + return this.beans.showRowGroupCols?.columns[0] === col; + } + return !!node.rowGroupColumn && col?.isRowGroupDisplayed(node.rowGroupColumn.getId()); + } + applyTotalPrefix(value, formattedValue, node, column) { + const totalValueGetter = column.getColDef().cellRendererParams?.totalValueGetter; + if (totalValueGetter) { + const valueGetterParams = _addGridCommonParams17(this.gos, { column, node, value, formattedValue }); + const getterType = typeof totalValueGetter; + if (getterType === "function") { + return totalValueGetter(valueGetterParams); + } + if (typeof totalValueGetter === "string") { + return this.beans.expressionSvc?.evaluate(totalValueGetter, valueGetterParams); + } + _warn27(179); + } + if (node.level === -1) { + return this.getLocaleTextFunc()("footerTotal", "Total") + " "; + } + return this.getTotalValue(formattedValue ?? value) ?? ""; + } + getTotalValue(value) { + return this.getLocaleTextFunc()("footerTotal", "Total") + " " + (value ?? ""); + } +}; +function _positionMatchesGrandTotalRow(position, grandTotaRow) { + switch (grandTotaRow) { + case "top": + case "pinnedTop": + return position === "top"; + case "bottom": + case "pinnedBottom": + return position === "bottom"; + default: + return false; + } +} + +// packages/ag-grid-enterprise/src/aggregation/valueColsSvc.ts +import { BaseColsService, _exists as _exists19, _removeFromArray as _removeFromArray3, _warn as _warn28 } from "ag-grid-community"; +var ValueColsSvc = class extends BaseColsService { + constructor() { + super(...arguments); + this.beanName = "valueColsSvc"; + this.eventName = "columnValueChanged"; + this.columnProcessors = { + set: (column, added, source) => this.setValueActive(added, column, source), + add: (column, added, source) => this.setValueActive(true, column, source), + remove: (column, added, source) => this.setValueActive(false, column, source) + }; + this.columnExtractors = { + setFlagFunc: (col, flag, source) => this.setColValueActive(col, flag, source), + getIndexFunc: () => void 0, + getInitialIndexFunc: () => void 0, + getValueFunc: (colDef) => { + const aggFunc = colDef.aggFunc; + if (aggFunc === null || aggFunc === "") { + return null; + } + if (aggFunc === void 0) { + return; + } + return !!aggFunc; + }, + getInitialValueFunc: (colDef) => { + return colDef.initialAggFunc != null && colDef.initialAggFunc != ""; + } + }; + this.modifyColumnsNoEventsCallbacks = { + addCol: (column) => this.columns.push(column), + removeCol: (column) => _removeFromArray3(this.columns, column) + }; + } + extractCols(source, oldProvidedCols) { + this.columns = super.extractCols(source, oldProvidedCols); + for (const col of this.columns) { + const colDef = col.getColDef(); + if (colDef.aggFunc != null && colDef.aggFunc != "") { + this.setColAggFunc(col, colDef.aggFunc); + } else if (!col.getAggFunc()) { + this.setColAggFunc(col, colDef.initialAggFunc); + } + } + return this.columns; + } + setColumnAggFunc(key, aggFunc, source) { + if (!key) { + return; + } + const column = this.colModel.getColDefCol(key); + if (!column) { + return; + } + this.setColAggFunc(column, aggFunc); + this.dispatchColumnChangedEvent(this.eventSvc, this.eventName, [column], source); + } + syncColumnWithState(column, source, getValue) { + const aggFunc = getValue("aggFunc").value1; + if (aggFunc !== void 0) { + if (typeof aggFunc === "string") { + this.setColAggFunc(column, aggFunc); + if (!column.isValueActive()) { + this.setColValueActive(column, true, source); + this.modifyColumnsNoEventsCallbacks.addCol(column); + } + } else { + if (_exists19(aggFunc)) { + _warn28(33); + } + if (column.isValueActive()) { + this.setColValueActive(column, false, source); + this.modifyColumnsNoEventsCallbacks.removeCol(column); + } + } + } + } + setValueActive(active, column, source) { + if (active === column.isValueActive()) { + return; + } + this.setColValueActive(column, active, source); + if (active && !column.getAggFunc() && this.aggFuncSvc) { + const initialAggFunc = this.aggFuncSvc.getDefaultAggFunc(column); + this.setColAggFunc(column, initialAggFunc); + } + } + setColAggFunc(column, aggFunc) { + column.aggFunc = aggFunc; + column.dispatchStateUpdatedEvent("aggFunc"); + } + setColValueActive(column, value, source) { + if (column.aggregationActive !== value) { + column.aggregationActive = value; + column.dispatchColEvent("columnValueChanged", source); + } + } +}; + +// packages/ag-grid-enterprise/src/aggregation/aggregationModule.ts +var SharedAggregationModule = { + moduleName: "SharedAggregation", + version: VERSION, + beans: [AggFuncService, AggColumnNameService, FooterService, ValueColsSvc], + apiFunctions: { + addAggFuncs, + clearAggFuncs, + setColumnAggFunc + }, + dependsOn: [EnterpriseCoreModule] +}; +var AggregationModule = { + moduleName: "Aggregation", + version: VERSION, + beans: [AggregationStage, FilterAggregatesStage, AggregatedChildrenSvc], + rowModels: ["clientSide"], + dependsOn: [SharedAggregationModule] +}; + +// packages/ag-grid-enterprise/src/pivot/pivotColsSvc.ts +import { BaseColsService as BaseColsService2, _removeFromArray as _removeFromArray4 } from "ag-grid-community"; +var PivotColsSvc = class extends BaseColsService2 { + constructor() { + super(...arguments); + this.beanName = "pivotColsSvc"; + this.eventName = "columnPivotChanged"; + this.columnProcessors = { + set: (column, added, source) => this.setColPivotActive(column, added, source), + add: (column, added, source) => this.setColPivotActive(column, true, source), + remove: (column, added, source) => this.setColPivotActive(column, false, source) + }; + this.columnOrdering = { + enableProp: "pivot", + initialEnableProp: "initialPivot", + indexProp: "pivotIndex", + initialIndexProp: "initialPivotIndex" + }; + this.columnExtractors = { + setFlagFunc: (col, flag, source) => this.setColPivotActive(col, flag, source), + getIndexFunc: (colDef) => colDef.pivotIndex, + getInitialIndexFunc: (colDef) => colDef.initialPivotIndex, + getValueFunc: (colDef) => colDef.pivot, + getInitialValueFunc: (colDef) => colDef.initialPivot + }; + this.modifyColumnsNoEventsCallbacks = { + addCol: (column) => { + if (!this.columns.includes(column)) { + this.columns.push(column); + } + }, + removeCol: (column) => _removeFromArray4(this.columns, column) + }; + } + syncColumnWithState(column, source, getValue, rowIndex) { + const { value1: pivot, value2: pivotIndex } = getValue("pivot", "pivotIndex"); + if (pivot !== void 0 || pivotIndex !== void 0) { + if (typeof pivotIndex === "number" || pivot) { + if (!column.isPivotActive()) { + this.setColPivotActive(column, true, source); + this.modifyColumnsNoEventsCallbacks.addCol(column); + } + if (rowIndex && typeof pivotIndex === "number") { + rowIndex[column.getId()] = pivotIndex; + } + } else if (column.isPivotActive()) { + this.setColPivotActive(column, false, source); + this.modifyColumnsNoEventsCallbacks.removeCol(column); + } + } + } + setColPivotActive(column, pivot, source) { + if (column.pivotActive !== pivot) { + column.pivotActive = pivot; + if (pivot) { + const addedCols = this.beans.groupHierarchyColSvc?.insertVirtualColumnsForCol(this.columns, column); + addedCols?.forEach((c) => this.setColPivotActive(c, pivot, source)); + } + column.dispatchColEvent("columnPivotChanged", source); + } + column.dispatchStateUpdatedEvent("pivot"); + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/rowGroupColsSvc.ts +import { BaseColsService as BaseColsService3, _removeFromArray as _removeFromArray5, _shouldUpdateColVisibilityAfterGroup as _shouldUpdateColVisibilityAfterGroup2 } from "ag-grid-community"; +var RowGroupColsSvc = class extends BaseColsService3 { + constructor() { + super(...arguments); + this.beanName = "rowGroupColsSvc"; + this.eventName = "columnRowGroupChanged"; + this.columnProcessors = { + set: (column, added, source) => this.setActive(added, column, source), + add: (column, added, source) => this.setActive(true, column, source), + remove: (column, added, source) => this.setActive(false, column, source) + }; + this.columnOrdering = { + enableProp: "rowGroup", + initialEnableProp: "initialRowGroup", + indexProp: "rowGroupIndex", + initialIndexProp: "initialRowGroupIndex" + }; + this.columnExtractors = { + setFlagFunc: (col, flag, source) => this.setColRowGroupActive(col, flag, source), + getIndexFunc: (colDef) => colDef.rowGroupIndex, + getInitialIndexFunc: (colDef) => colDef.initialRowGroupIndex, + getValueFunc: (colDef) => colDef.rowGroup, + getInitialValueFunc: (colDef) => colDef.initialRowGroup + }; + this.modifyColumnsNoEventsCallbacks = { + addCol: (column) => { + if (!this.columns.includes(column)) { + this.columns.push(column); + } + }, + removeCol: (column) => _removeFromArray5(this.columns, column) + }; + } + moveColumn(fromIndex, toIndex, source) { + if (this.columns.length === 0) { + return; + } + const column = this.columns[fromIndex]; + const impactedColumns = this.columns.slice(fromIndex, toIndex); + this.columns.splice(fromIndex, 1); + this.columns.splice(toIndex, 0, column); + this.updateIndexMap(); + this.eventSvc.dispatchEvent({ + type: this.eventName, + columns: impactedColumns, + column: impactedColumns.length === 1 ? impactedColumns[0] : null, + source + }); + } + syncColumnWithState(column, source, getValue, rowIndex) { + const { value1: rowGroup, value2: rowGroupIndex } = getValue("rowGroup", "rowGroupIndex"); + if (rowGroup !== void 0 || rowGroupIndex !== void 0) { + if (typeof rowGroupIndex === "number" || rowGroup) { + if (!column.isRowGroupActive()) { + this.setColRowGroupActive(column, true, source); + this.modifyColumnsNoEventsCallbacks.addCol(column); + } + if (rowIndex && typeof rowGroupIndex === "number") { + rowIndex[column.getId()] = rowGroupIndex; + } + } else if (column.isRowGroupActive()) { + this.setColRowGroupActive(column, false, source); + this.modifyColumnsNoEventsCallbacks.removeCol(column); + } + } + } + setActive(active, column, source) { + if (active === column.isRowGroupActive()) { + return; + } + this.setColRowGroupActive(column, active, source); + const isGroupHierarchyCol = this.beans.groupHierarchyColSvc?.getColumn(column); + if (_shouldUpdateColVisibilityAfterGroup2(this.gos, active) && !isGroupHierarchyCol) { + this.colModel.setColsVisible([column], !active, source); + } + } + setColRowGroupActive(column, rowGroup, source) { + if (column.rowGroupActive !== rowGroup) { + column.rowGroupActive = rowGroup; + if (rowGroup) { + const addedCols = this.beans.groupHierarchyColSvc?.insertVirtualColumnsForCol(this.columns, column); + addedCols?.forEach((c) => this.setColRowGroupActive(c, rowGroup, source)); + } + column.dispatchColEvent("columnRowGroupChanged", source); + } + column.dispatchStateUpdatedEvent("rowGroup"); + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/autoColService.ts +import { + AgColumn, + BeanStub as BeanStub30, + GROUP_AUTO_COLUMN_ID, + _addColumnDefaultAndTypes, + _applyColumnState as _applyColumnState2, + _areColIdsEqual, + _columnsMatch, + _convertColumnEventSourceType, + _destroyColumnTree, + _getColumnStateFromColDef, + _isColumnsSortingCoupledToGroup, + _isGroupHideColumnsUntilExpanded, + _isGroupMultiAutoColumn, + _isGroupUseEntireRow, + _mergeDeep as _mergeDeep3, + _missing as _missing3, + _updateColsMap, + _warn as _warn29, + isColumnGroupAutoCol as isColumnGroupAutoCol2 +} from "ag-grid-community"; +var AutoColService = class extends BeanStub30 { + constructor() { + super(...arguments); + this.beanName = "autoColSvc"; + } + postConstruct() { + this.addManagedPropertyListener("autoGroupColumnDef", this.updateColumns.bind(this)); + this.setupGroupHideColumnsUntilExpanded(); + } + setupGroupHideColumnsUntilExpanded() { + const updateGroupColumnVisibility = () => this.updateGroupColumnVisibility(); + this.addManagedEventListeners({ + // modelUpdated is fired when rowGroup events are fired so we do not duplicate work by also listening to "rowGroupOpened" and "expandOrCollapseAll" + modelUpdated: updateGroupColumnVisibility + }); + this.addManagedPropertyListeners( + ["groupHideColumnsUntilExpanded", "groupDisplayType", "groupHideOpenParents"], + updateGroupColumnVisibility + ); + } + addColumns(cols) { + const { columns } = this; + if (columns == null) { + return; + } + cols.list = columns.list.concat(cols.list); + cols.tree = columns.tree.concat(cols.tree); + _updateColsMap(cols); + } + createColumns(cols, updateOrders, source) { + const beans = this.beans; + const { colModel, gos, rowGroupColsSvc, colGroupSvc } = beans; + const isPivotMode2 = colModel.isPivotMode(); + const groupFullWidthRow = _isGroupUseEntireRow(gos, isPivotMode2); + const suppressAutoColumn = isPivotMode2 ? gos.get("pivotSuppressAutoColumn") : this.isSuppressAutoCol(); + const rowGroupCols = rowGroupColsSvc?.columns; + const groupingActive = rowGroupCols && rowGroupCols.length > 0 || gos.get("treeData"); + const noAutoCols = !groupingActive || suppressAutoColumn || groupFullWidthRow; + const destroyPrevious = () => { + if (this.columns) { + _destroyColumnTree(beans, this.columns.tree); + this.columns = null; + } + }; + if (noAutoCols) { + destroyPrevious(); + return; + } + const list = this.generateAutoCols(rowGroupCols); + const autoColsSame = _areColIdsEqual(list, this.columns?.list || null); + const newTreeDepth = cols.treeDepth; + const oldTreeDepth = this.columns ? this.columns.treeDepth : -1; + const treeDepthSame = oldTreeDepth == newTreeDepth; + if (autoColsSame && treeDepthSame) { + const colsMap = new Map(list.map((col) => [col.getId(), col])); + for (const col of this.columns?.list ?? []) { + const newDef = colsMap.get(col.getId()); + if (newDef) { + col.setColDef(newDef.getColDef(), null, source); + } + } + return; + } + destroyPrevious(); + const treeDepth = colGroupSvc?.findDepth(cols.tree) ?? 0; + const tree = colGroupSvc?.balanceTreeForAutoCols(list, treeDepth) ?? []; + this.columns = { + list, + tree, + treeDepth, + map: {} + }; + const putAutoColsFirstInList = (cols2) => { + if (!cols2) { + return null; + } + const colsFiltered = cols2.filter((col) => !isColumnGroupAutoCol2(col)); + return [...list, ...colsFiltered]; + }; + updateOrders(putAutoColsFirstInList); + } + updateColumns(event) { + const source = _convertColumnEventSourceType(event.source); + this.columns?.list.forEach((col, index) => this.updateOneAutoCol(col, index, source)); + } + getColumn(key) { + return this.columns?.list.find((groupCol) => _columnsMatch(groupCol, key)) ?? null; + } + getColumns() { + return this.columns?.list ?? null; + } + generateAutoCols(rowGroupCols = []) { + const autoCols = []; + const { gos } = this; + const doingTreeData = gos.get("treeData"); + let doingMultiAutoColumn = _isGroupMultiAutoColumn(gos); + if (doingTreeData && doingMultiAutoColumn) { + _warn29(182); + doingMultiAutoColumn = false; + } + if (doingMultiAutoColumn) { + rowGroupCols.forEach((rowGroupCol, index) => { + autoCols.push(this.createOneAutoCol(rowGroupCol, index)); + }); + } else { + autoCols.push(this.createOneAutoCol()); + } + return autoCols; + } + isSuppressAutoCol() { + const gos = this.gos; + const groupDisplayType = gos.get("groupDisplayType"); + const isCustomRowGroups = groupDisplayType === "custom"; + if (isCustomRowGroups) { + return true; + } + const treeDataDisplayType = gos.get("treeDataDisplayType"); + return treeDataDisplayType === "custom"; + } + // rowGroupCol and index are missing if groupDisplayType != "multipleColumns" + createOneAutoCol(rowGroupCol, index) { + let colId; + if (rowGroupCol) { + colId = `${GROUP_AUTO_COLUMN_ID}-${rowGroupCol.getId()}`; + } else { + colId = GROUP_AUTO_COLUMN_ID; + } + const colDef = this.createAutoColDef(colId, rowGroupCol, index); + colDef.colId = colId; + const newCol = new AgColumn(colDef, null, colId, true); + this.createBean(newCol); + return newCol; + } + /** + * Refreshes an auto group col to load changes from defaultColDef or autoGroupColDef + */ + updateOneAutoCol(colToUpdate, index, source) { + const oldColDef = colToUpdate.getColDef(); + const underlyingColId = typeof oldColDef.showRowGroup == "string" ? oldColDef.showRowGroup : void 0; + const beans = this.beans; + const underlyingColumn = underlyingColId != null ? beans.colModel.getColDefCol(underlyingColId) : void 0; + const colId = colToUpdate.getId(); + const colDef = this.createAutoColDef(colId, underlyingColumn ?? void 0, index); + colToUpdate.setColDef(colDef, null, source); + _applyColumnState2(beans, { state: [_getColumnStateFromColDef(colDef, colId)] }, source); + } + createAutoColDef(colId, underlyingColumn, index) { + let res = this.createBaseColDef(underlyingColumn); + const autoGroupColumnDef = this.gos.get("autoGroupColumnDef"); + _mergeDeep3(res, autoGroupColumnDef); + res = _addColumnDefaultAndTypes(this.beans, res, colId, true); + if (autoGroupColumnDef?.groupRowEditable == null) { + res.groupRowEditable = void 0; + } + if (autoGroupColumnDef?.groupRowValueSetter == null) { + res.groupRowValueSetter = void 0; + } + if (!this.gos.get("treeData")) { + const noFieldOrValueGetter = _missing3(res.field) && _missing3(res.valueGetter) && _missing3(res.filterValueGetter) && res.filter !== "agGroupColumnFilter"; + if (noFieldOrValueGetter) { + res.filter = false; + } + } + if (index && index > 0) { + res.headerCheckboxSelection = false; + } + const isSortingCoupled = _isColumnsSortingCoupledToGroup(this.gos); + const hasOwnData = res.valueGetter || res.field != null; + if (isSortingCoupled && !hasOwnData) { + res.sortIndex = void 0; + res.initialSort = void 0; + } + return res; + } + createBaseColDef(rowGroupCol) { + const userDef = this.gos.get("autoGroupColumnDef"); + const localeTextFunc = this.getLocaleTextFunc(); + const res = { + headerName: localeTextFunc("group", "Group"), + showRowGroup: rowGroupCol?.getColId() ?? true + }; + const userHasProvidedGroupCellRenderer = userDef && (userDef.cellRenderer || userDef.cellRendererSelector); + if (!userHasProvidedGroupCellRenderer) { + res.cellRenderer = "agGroupCellRenderer"; + } + if (rowGroupCol) { + res.headerName = this.beans.colNames.getDisplayNameForColumn(rowGroupCol, "header") ?? void 0; + res.headerValueGetter = rowGroupCol.colDef.headerValueGetter; + } + return res; + } + getDeepestExpandedLevel(nodes, maxLevel) { + let deepest = -1; + if (!nodes) { + return deepest; + } + for (const node of nodes) { + if (!node.group || !node.expanded) { + continue; + } + if (node.level > deepest) { + deepest = node.level; + } + if (deepest >= maxLevel) { + return deepest; + } + const childDeepest = this.getDeepestExpandedLevel(node.childrenAfterGroup, maxLevel); + if (childDeepest > deepest) { + deepest = childDeepest; + } + if (deepest >= maxLevel) { + return deepest; + } + } + return deepest; + } + updateGroupColumnVisibility() { + const columns = this.columns?.list; + if (!columns || columns.length === 0) { + return; + } + const { gos, visibleCols, rowModel } = this.beans; + const isFeatureEnabled = _isGroupHideColumnsUntilExpanded(gos); + let changed = false; + const setColVisible = (col, visible) => { + if (visible !== col.isVisible()) { + col.setVisible(visible, "api"); + changed = true; + } + }; + const setAllColumnsVisible = () => { + for (const col of columns) { + setColVisible(col, true); + } + }; + if (!isFeatureEnabled) { + setAllColumnsVisible(); + } else if (columns.length > 1) { + const maxLevel = columns.length - 2; + const rootChildren = rowModel?.rootNode?.childrenAfterGroup; + const deepestExpandedLevel = this.getDeepestExpandedLevel(rootChildren, maxLevel); + if (deepestExpandedLevel >= maxLevel) { + setAllColumnsVisible(); + } else { + for (let level = 0; level < columns.length - 1; level++) { + setColVisible(columns[level + 1], deepestExpandedLevel >= level); + } + } + } + if (changed) { + visibleCols.refresh("api"); + } + } + destroy() { + _destroyColumnTree(this.beans, this.columns?.tree); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/changedPathImpl/changedPathFactory.ts +import { BeanStub as BeanStub31 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowHierarchy/sortNodesByDepthFirst.ts +var _sortBuckets = null; +var sortBucketsAlloc = (minBucket) => { + const old = _sortBuckets; + const newBuckets = new Uint32Array(1 << 32 - Math.clz32(minBucket | 63)); + if (old) { + newBuckets.set(old); + } + _sortBuckets = newBuckets; + return newBuckets; +}; +var sortTwoLevels = (nodes, nodeCount, deepest, deepCount) => { + const shallowCount = nodeCount - deepCount; + const deepLevel = deepest - 1; + if (shallowCount === 1) { + let si2 = 0; + while (nodes[si2].level === deepLevel) { + ++si2; + } + if (si2 < nodeCount - 1) { + const shallow2 = nodes[si2]; + nodes.copyWithin(si2, si2 + 1); + nodes[nodeCount - 1] = shallow2; + } + return nodes; + } + if (deepCount === 1) { + let di2 = 0; + while (nodes[di2].level !== deepLevel) { + ++di2; + } + if (di2 > 0) { + const deep = nodes[di2]; + nodes.copyWithin(1, 0, di2); + nodes[0] = deep; + } + return nodes; + } + const shallow = new Array(shallowCount); + let di = 0; + let si = 0; + for (let i = 0; i < nodeCount; ++i) { + const node = nodes[i]; + if (node.level === deepLevel) { + nodes[di++] = node; + } else { + shallow[si++] = node; + } + } + for (let i = 0; i < shallowCount; ++i) { + nodes[deepCount + i] = shallow[i]; + } + return nodes; +}; +var countingSort = (nodes, nodesLen) => { + let deepest = nodes[0].level + 1; + let shallowest = deepest; + let unsorted = 0; + let prevB = deepest; + let buckets = _sortBuckets; + if (!buckets || deepest >= buckets.length) { + buckets = sortBucketsAlloc(deepest); + } + ++buckets[deepest]; + for (let i = 1; i < nodesLen; ++i) { + const b = nodes[i].level + 1; + if (b > deepest) { + deepest = b; + if (deepest >= buckets.length) { + buckets = sortBucketsAlloc(deepest); + } + } else if (b < shallowest) { + shallowest = b; + } + ++buckets[b]; + unsorted |= prevB - b; + prevB = b; + } + if (unsorted >= 0) { + buckets.fill(0, shallowest, deepest + 1); + return nodes; + } + const sCount = buckets[shallowest]; + const dCount = buckets[deepest]; + if (sCount + dCount === nodesLen) { + buckets[shallowest] = 0; + buckets[deepest] = 0; + return sortTwoLevels(nodes, nodesLen, deepest, dCount); + } + let pos = 0; + for (let b = deepest; b >= shallowest; --b) { + const count = buckets[b]; + buckets[b] = pos; + pos += count; + } + const output = new Array(nodesLen); + for (let i = 0; i < nodesLen; ++i) { + const node = nodes[i]; + output[buckets[node.level + 1]++] = node; + } + buckets.fill(0, shallowest, deepest + 1); + return output; +}; +var _sortNodesByDepthFirst = (nodes, nodesLen = nodes.length) => { + if (nodesLen === 2) { + if (nodes[0].level < nodes[1].level) { + const tmp = nodes[0]; + nodes[0] = nodes[1]; + nodes[1] = tmp; + } + return nodes; + } + if (nodesLen > 16) { + return countingSort(nodes, nodesLen); + } + for (let i = 1; i < nodesLen; i++) { + const value = nodes[i]; + const valueLevel = value.level; + let j = i - 1; + if (nodes[j].level < valueLevel) { + let k = i; + do { + nodes[k] = nodes[j]; + k = j--; + } while (j >= 0 && nodes[j].level < valueLevel); + nodes[k] = value; + } + } + return nodes; +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/changedPathImpl/changedCellsPath.ts +var ChangedCellsPathImpl = class { + constructor() { + this.kind = "cells"; + /** + * All tracked rows, lazily sorted by depth-first when `getSortedRows` is called. + * Space: O(R) where R = number of tracked rows (including ancestors). + */ + this.rows = []; + /** + * True when `rows` needs resorting, set after new tracked rows are added. + * Space: O(1). + */ + this.unsorted = false; + /** + * Maps RowNode to row slot (or -1 for all-columns) and colId string to column slot. + * Used also to check if a row is tracked (has a slot) in O(1). + * RowNode keys never collide with string keys in a Map. + * Space: O(R + C) where R = number of tracked rows (including ancestors), C = number of tracked columns. + */ + this.slots = /* @__PURE__ */ new Map(); + /** + * Bitmask array for the first 32 columns. Always present. + * Space: O(R) where R = number of tracked rows (including ancestors). + */ + this.bits = []; + /** + * Extra bitmask arrays for columns 32+. `null` when C ≤ 32; `extraBits[0]` covers columns 32–63, etc. + * Space: O(R × max(0, ⌈C/32⌉ − 1)) where R = number of tracked rows (including ancestors), C = number of tracked columns. + */ + this.extraBits = null; + /** + * Number of distinct column IDs added via `addCell`, used to assign column slots. + * Does not include columns tracked via `addRow` (all-columns). Time: O(1). + * Space: O(1). + */ + this.colCount = 0; + } + /** {@inheritDoc ChangedCellsPath.addRow} Time: O(D), D = depth. */ + addRow(rowNode) { + let node = rowNode; + if (node == null) { + return; + } + const slots = this.slots; + if (slots.get(node) !== void 0) { + while (node != null && slots.get(node) >= 0) { + slots.set(node, -1); + node = node.parent; + } + return; + } + const rows = this.rows; + do { + slots.set(node, -1); + rows.push(node); + node = node.parent; + } while (node != null && !slots.has(node)); + this.unsorted = true; + } + /** {@inheritDoc ChangedCellsPath.addCell} Time: O(D × ⌈C/32⌉), D = depth, C = tracked columns. */ + addCell(rowNode, colId) { + if (colId == null) { + this.addRow(rowNode); + return; + } + if (rowNode == null) { + return; + } + const slots = this.slots; + const bits = this.bits; + const colSlot = slots.get(colId) ?? this.ensureCol(colId); + let rowSlot = slots.get(rowNode); + if (rowSlot === void 0) { + rowSlot = this.ensureRow(rowNode); + } else if (rowSlot < 0) { + return; + } + const word = colSlot < 32 ? bits : this.extraBits[(colSlot >>> 5) - 1]; + const bit = 1 << (colSlot & 31); + const rowBits = word[rowSlot]; + if ((rowBits & bit) !== 0) { + return; + } + word[rowSlot] = rowBits | bit; + let parent = rowNode.parent; + while (parent != null) { + const pSlot = slots.get(parent); + if (pSlot < 0) { + break; + } + const pBits = word[pSlot]; + if ((pBits & bit) !== 0) { + break; + } + word[pSlot] = pBits | bit; + parent = parent.parent; + } + } + /** {@inheritDoc ChangedCellsPath.hasRow} Time: O(1). */ + hasRow(rowNode) { + return this.slots.has(rowNode); + } + /** {@inheritDoc ChangedCellsPath.getSortedRows} Time: O(1) cached, O(R) if sort was invalidated. */ + getSortedRows() { + if (!this.unsorted) { + return this.rows; + } + this.unsorted = false; + const rows = _sortNodesByDepthFirst(this.rows); + this.rows = rows; + return rows; + } + /** {@inheritDoc ChangedCellsPath.getSlot} Read-only — does not allocate slots. Time: O(1). */ + getSlot(key) { + return this.slots.get(key) ?? -1; + } + /** {@inheritDoc ChangedCellsPath.hasCellBySlot} Time: O(1). */ + hasCellBySlot(rowSlot, colSlot) { + if (rowSlot < 0) { + return true; + } + if (colSlot < 32) { + return colSlot >= 0 && (this.bits[rowSlot] & 1 << colSlot) !== 0; + } + return (this.extraBits[(colSlot >>> 5) - 1][rowSlot] & 1 << (colSlot & 31)) !== 0; + } + /** Registers a new row and all its unregistered ancestors. Returns the row's bitmask index. + * Time: O(D × ⌈C/32⌉) where D = depth, C = number of tracked columns. In practice O(D) because + * C < 32 is the common case (single bitmask word per row, no extraBits loop). + * Space: O(D × ⌈C/32⌉). + */ + ensureRow(rowNode) { + const slots = this.slots; + const rows = this.rows; + const bits = this.bits; + const extraBits = this.extraBits; + let nextSlot = bits.push(0); + const originSlot = nextSlot - 1; + if (extraBits !== null) { + for (let w = 0, len = extraBits.length; w < len; ++w) { + extraBits[w].push(0); + } + } + slots.set(rowNode, originSlot); + rows.push(rowNode); + this.unsorted = true; + let p = rowNode.parent; + while (p != null && !slots.has(p)) { + slots.set(p, nextSlot); + rows.push(p); + nextSlot = bits.push(0); + if (extraBits !== null) { + for (let w = 0, len = extraBits.length; w < len; ++w) { + extraBits[w].push(0); + } + } + p = p.parent; + } + return originSlot; + } + /** + * Assigns a new column slot. Appends a bitmask array when crossing a 32-column boundary. + * Time: O(1) amortised, O(R) when crossing a 32-column boundary, where R = number of tracked rows (including ancestors) due to array extension and copying. + * Space: O(R) when crossing a 32-column boundary. + */ + ensureCol(colId) { + const colSlot = this.colCount++; + this.slots.set(colId, colSlot); + if (colSlot >= 32) { + const extraBitsIndex = (colSlot >>> 5) - 1; + let extraBits = this.extraBits; + if (extraBits === null) { + extraBits = []; + this.extraBits = extraBits; + } + if (extraBitsIndex >= extraBits.length) { + extraBits.push(new Array(this.bits.length).fill(0)); + } + } + return colSlot; + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/changedPathImpl/changedRowsPath.ts +var ChangedRowsPathImpl = class { + constructor() { + this.kind = "rows"; + /** + * All tracked rows, lazily sorted by depth-first when `getSortedRows` is called. + * Space: O(R) where R = number of tracked rows (including ancestors). + */ + this.rows = []; + /** + * True when `rows` needs resorting, set after new tracked rows are added. + * Space: O(1). + */ + this.unsorted = false; + /** + * Hash set that keeps track of which rows are in `rows` for O(1) lookup. + * Space: O(R) where R = number of tracked rows (including ancestors). + */ + this.rowSet = /* @__PURE__ */ new Set(); + } + /** {@inheritDoc ChangedRowsPath.addRow} Time: O(D), D = depth. */ + addRow(rowNode) { + let node = rowNode; + if (node == null) { + return; + } + const rowSet = this.rowSet; + if (rowSet.has(node)) { + return; + } + const rows = this.rows; + do { + rowSet.add(node); + rows.push(node); + node = node.parent; + } while (node != null && !rowSet.has(node)); + this.unsorted = true; + } + /** {@inheritDoc ChangedRowsPath.addCell} */ + addCell(rowNode, _colId) { + this.addRow(rowNode); + } + /** {@inheritDoc ChangedRowsPath.hasRow} Time: O(1). */ + hasRow(rowNode) { + return this.rowSet.has(rowNode); + } + /** {@inheritDoc ChangedRowsPath.getSortedRows} Time: O(1) cached, O(R) if sort was invalidated. */ + getSortedRows() { + if (!this.unsorted) { + return this.rows; + } + this.unsorted = false; + const rows = _sortNodesByDepthFirst(this.rows); + this.rows = rows; + return rows; + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/changedPathImpl/changedPathFactory.ts +var ChangedPathFactory = class extends BeanStub31 { + constructor() { + super(...arguments); + this.beanName = "changedPathFactory"; + } + /** {@inheritDoc IChangedPathFactory.newPath} */ + newPath(trackCells) { + return trackCells ? new ChangedCellsPathImpl() : new ChangedRowsPathImpl(); + } + /** {@inheritDoc IChangedPathFactory.ensureRowsPath} */ + ensureRowsPath(params) { + let changedPath = params.changedPath; + if (!changedPath && params.changedRowNodes && !params.newData) { + const rowModel = this.beans.rowModel; + if (rowModel.hierarchical) { + changedPath = new ChangedRowsPathImpl(); + params.changedPath = changedPath; + changedPath.addRow(rowModel.rootNode); + } + } + return changedPath; + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/clientSideExpansionService.ts +import { _exists as _exists20 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowHierarchy/baseExpansionService.ts +import { BeanStub as BeanStub32, _addGridCommonParams as _addGridCommonParams18, _createGlobalRowEvent, _setAriaExpanded as _setAriaExpanded8 } from "ag-grid-community"; +var BaseExpansionService = class extends BeanStub32 { + addExpandedCss(classes, rowNode) { + if (rowNode.isExpandable()) { + classes.push("ag-row-group"); + classes.push(rowNode.expanded ? "ag-row-group-expanded" : "ag-row-group-contracted"); + } + } + getRowExpandedListeners(rowCtrl) { + const { rowNode } = rowCtrl; + const updateExpandedCss = this.updateExpandedCss.bind(this, rowCtrl, rowNode); + return { + expandedChanged: updateExpandedCss, + hasChildrenChanged: updateExpandedCss + }; + } + setExpanded(rowNode, expanded, e, forceSync) { + if (rowNode.expanded === expanded) { + return; + } + rowNode._expanded = expanded; + rowNode.dispatchRowEvent("expandedChanged"); + const event = { ..._createGlobalRowEvent(rowNode, this.gos, "rowGroupOpened"), expanded, event: e || null }; + this.dispatchExpandedEvent(event, forceSync); + } + defaultExpanded(rowNode) { + const beans = this.beans; + const gos = beans.gos; + const level = rowNode.level ?? 0; + const isGroupOpenByDefault = rowNode.group && gos.get("isGroupOpenByDefault"); + if (!isGroupOpenByDefault) { + const groupDefaultExpanded = gos.get("groupDefaultExpanded"); + return groupDefaultExpanded === -1 || level < groupDefaultExpanded; + } + const params = _addGridCommonParams18(gos, { + rowNode, + field: rowNode.field, + key: rowNode.key, + level, + rowGroupColumn: rowNode.rowGroupColumn + }); + return !!isGroupOpenByDefault(params); + } + isExpandable(rowNode) { + if (rowNode.footer) { + return false; + } + if (this.beans.colModel.isPivotMode()) { + return rowNode.hasChildren() && !rowNode.leafGroup; + } + return rowNode.hasChildren() || rowNode.master; + } + updateExpandedCss(rowCtrl, rowNode) { + const expandable = rowNode.isExpandable(); + const expanded = rowNode.expanded == true; + rowCtrl.forEachGui(void 0, (gui) => { + const rowComp = gui.rowComp; + rowComp.toggleCss("ag-row-group", expandable); + rowComp.toggleCss("ag-row-group-expanded", expandable && expanded); + rowComp.toggleCss("ag-row-group-contracted", expandable && !expanded); + _setAriaExpanded8(gui.element, expandable && expanded); + }); + } + dispatchStateUpdatedEvent() { + this.eventSvc.dispatchEvent({ type: "rowExpansionStateChanged" }); + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/clientSideExpansionService.ts +var ClientSideExpansionService = class extends BaseExpansionService { + constructor() { + super(...arguments); + this.beanName = "expansionSvc"; + this.events = null; + this.dispatchExpandedDebounced = null; + } + destroy() { + super.destroy(); + this.events = null; + this.dispatchExpandedDebounced = null; + } + setExpansionState(state) { + const rowIdsToExpandSet = new Set(state.expandedRowGroupIds); + this.beans.rowModel.forEachNode((node) => { + const id = node.id; + if (!id) { + return; + } + node._expanded = rowIdsToExpandSet.has(id); + }); + this.onGroupExpandedOrCollapsed(); + } + getInternalExpansionState(allowCollapsed = false) { + const expandedRowGroupIds = []; + const collapsedRowGroupIds = []; + this.beans.rowModel.forEachNode((node) => { + const id = node.id; + if (!id) { + return; + } + if (node.expanded) { + expandedRowGroupIds.push(id); + } else if (allowCollapsed && node.isExpandable()) { + collapsedRowGroupIds.push(id); + } + }); + return { expandedRowGroupIds, collapsedRowGroupIds }; + } + getExpansionState() { + return this.getInternalExpansionState(); + } + isExpanded(rowNode) { + if (rowNode.footer) { + return !!rowNode._expanded; + } + if (!(rowNode.group || rowNode.master) || rowNode.leafGroup && this.beans.colModel.isPivotMode()) { + return false; + } + let value = rowNode._expanded; + if (value === null) { + value = this.defaultExpanded(rowNode) ?? false; + rowNode._expanded = value; + } + return !!value; + } + resetExpansion() { + const { rowModel } = this.beans; + rowModel.forEachNode((node) => { + if (!node.group && !node.master) { + return; + } + node._expanded = null; + }); + this.onGroupExpandedOrCollapsed(); + } + expandAll(expand) { + const { gos, rowModel, colModel, eventSvc } = this.beans; + const usingTreeData = gos.get("treeData"); + const usingPivotMode = colModel.isPivotActive(); + const recursiveExpandOrCollapse = (rowNodes) => { + if (!rowNodes) { + return; + } + for (const rowNode of rowNodes) { + const actionRow = () => { + rowNode._expanded = expand; + recursiveExpandOrCollapse(rowNode.childrenAfterGroup); + }; + if (rowNode.master) { + actionRow(); + continue; + } + if (usingTreeData) { + const hasChildren = _exists20(rowNode.childrenAfterGroup); + if (hasChildren) { + actionRow(); + } + continue; + } + if (usingPivotMode) { + const notLeafGroup = !rowNode.leafGroup; + if (notLeafGroup) { + actionRow(); + } + continue; + } + const isRowGroup = rowNode.group; + if (isRowGroup) { + actionRow(); + } + } + }; + const rootNode = rowModel.rootNode; + if (rootNode) { + recursiveExpandOrCollapse(rootNode.childrenAfterGroup); + } + this.onGroupExpandedOrCollapsed(); + eventSvc.dispatchEvent({ + type: "expandOrCollapseAll", + source: expand ? "expandAll" : "collapseAll" + }); + } + onGroupExpandedOrCollapsed() { + this.dispatchStateUpdatedEvent(); + this.beans.rowModel.reMapRows(); + } + setDetailsExpansionState(detailGridApi) { + const expansionState = this.getInternalExpansionState(true); + const allExpanded = expansionState.collapsedRowGroupIds.length === 0; + const allCollapsed = expansionState.expandedRowGroupIds.length === 0; + if (allCollapsed === allExpanded) { + return; + } + return allExpanded ? detailGridApi.expandAll() : detailGridApi.collapseAll(); + } + /** + * because the user can call rowNode.setExpanded() many times in one VM turn, + * we throttle the calls to ClientSideRowModel using animationFrameSvc. this means for 100 + * row nodes getting expanded, we only update the CSRM once, and then we fire all events after + * CSRM has updated. + * + * if we did not do this, then the user could call setExpanded on 100+ rows, causing the grid + * to re-render 100+ times, which would be a performance lag. + * + * we use animationFrameService + * rather than debounce() so this will get done if anyone flushes the animationFrameService + * (eg user calls api.ensureRowVisible(), which in turn flushes ). + */ + dispatchExpandedEvent(event, forceSync) { + (this.events ?? (this.events = [])).push(event); + if (forceSync) { + this.dispatchExpandedEvents(); + return; + } + let dispatch = this.dispatchExpandedDebounced; + if (!dispatch) { + if (!this.isAlive()) { + return; + } + dispatch = this.debounce(() => this.dispatchExpandedEvents()); + this.dispatchExpandedDebounced = dispatch; + } + dispatch(); + } + dispatchExpandedEvents() { + const { eventSvc, rowRenderer } = this.beans; + const eventsToDispatch = this.events; + const eventsLen = eventsToDispatch?.length; + if (!eventsLen) { + return; + } + this.events = null; + const rowNodes = new Array(eventsLen); + for (let i = 0; i < eventsLen; ++i) { + rowNodes[i] = eventsToDispatch[i].node; + eventSvc.dispatchEvent(eventsToDispatch[i]); + } + this.dispatchStateUpdatedEvent(); + rowRenderer.refreshCells({ rowNodes }); + } + // the advantage over normal debounce is the client can call flushAllFrames() + // to make sure all rendering is complete. we don't wait any milliseconds, + // as this is intended to batch calls in one VM turn. + debounce(func) { + const animationFrameSvc = this.beans.animationFrameSvc; + if (!animationFrameSvc) { + return () => window.setTimeout(func, 0); + } + let pending = false; + return () => { + if (!animationFrameSvc.active) { + window.setTimeout(func, 0); + return; + } + if (pending) { + return; + } + pending = true; + animationFrameSvc.addDestroyTask(() => { + pending = false; + func(); + }); + }; + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/flattenStage.ts +import { BeanStub as BeanStub33 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowHierarchy/flattenUtils.ts +import { _getGrandTotalRow as _getGrandTotalRow5, _getGroupTotalRowCallback as _getGroupTotalRowCallback2, _isGroupMultiAutoColumn as _isGroupMultiAutoColumn2 } from "ag-grid-community"; +function _getFlattenDetails(gos) { + let groupHideParentOfSingleChild = gos.get("groupHideParentOfSingleChild"); + if (!groupHideParentOfSingleChild) { + groupHideParentOfSingleChild = gos.get("groupRemoveSingleChildren"); + if (!groupHideParentOfSingleChild && gos.get("groupRemoveLowestSingleChildren")) { + groupHideParentOfSingleChild = "leafGroupsOnly"; + } + } + return { + groupHideParentOfSingleChild, + isGroupMultiAutoColumn: _isGroupMultiAutoColumn2(gos), + hideOpenParents: gos.get("groupHideOpenParents"), + grandTotalRow: _getGrandTotalRow5(gos), + groupTotalRow: _getGroupTotalRowCallback2(gos) + }; +} +function _isRemovedSingleChildrenGroup(details, rowNode, isParent) { + return details.groupHideParentOfSingleChild === true && isParent && rowNode.childrenAfterGroup.length === 1; +} +function _isRemovedLowestSingleChildrenGroup(details, rowNode, isParent) { + return details.groupHideParentOfSingleChild === "leafGroupsOnly" && isParent && rowNode.leafGroup && rowNode.childrenAfterGroup.length === 1; +} +function _shouldRowBeRendered(details, rowNode, isParent, skipLeafNodes, isRemovedSingleChildrenGroup, isRemovedLowestSingleChildrenGroup) { + if (skipLeafNodes && !isParent) { + return false; + } + if (isRemovedSingleChildrenGroup || isRemovedLowestSingleChildrenGroup) { + return false; + } + if (!details.hideOpenParents) { + return true; + } + if (rowNode.master || rowNode.level === -1) { + return true; + } + const neverAllowToExpand = skipLeafNodes && rowNode.leafGroup; + if (!neverAllowToExpand && rowNode.expanded) { + return false; + } + return true; +} + +// packages/ag-grid-enterprise/src/rowHierarchy/flattenStage.ts +var FlattenStage = class extends BeanStub33 { + constructor() { + super(...arguments); + this.beanName = "flattenStage"; + this.step = "map"; + this.refreshProps = [ + "groupHideParentOfSingleChild", + "groupRemoveSingleChildren", + "groupRemoveLowestSingleChildren", + "groupTotalRow", + "masterDetail" + ]; + } + execute() { + const { beans, gos } = this; + const result = []; + const rootNode = beans.rowModel.rootNode; + if (!rootNode) { + return result; + } + const skipLeafNodes = beans.colModel.isPivotMode(); + const showRootNode = skipLeafNodes && rootNode.leafGroup && rootNode.aggData; + const topList = showRootNode ? [rootNode] : rootNode.childrenAfterSort; + const details = _getFlattenDetails(gos); + this.recursivelyAddToRowsToDisplay(details, topList, result, skipLeafNodes, 0); + const atLeastOneRowPresent = result.length > 0; + const grandTotalRow = details.grandTotalRow; + const includeGrandTotalRow = !showRootNode && // don't show total footer when showRootNode is true (i.e. in pivot mode and no groups) + atLeastOneRowPresent && grandTotalRow; + if (includeGrandTotalRow) { + _createRowNodeFooter(rootNode, beans); + if (grandTotalRow === "pinnedBottom" || grandTotalRow === "pinnedTop") { + this.beans.pinnedRowModel?.setGrandTotalPinned(grandTotalRow === "pinnedBottom" ? "bottom" : "top"); + } else { + const addToTop = grandTotalRow === "top"; + this.addRowNodeToRowsToDisplay(details, rootNode.sibling, result, 0, addToTop); + } + } + return result; + } + recursivelyAddToRowsToDisplay(details, rowsToFlatten, result, skipLeafNodes, uiLevel) { + if (!rowsToFlatten?.length) { + return; + } + const masterDetailSvc = this.beans.masterDetailSvc; + for (let i = 0; i < rowsToFlatten.length; i++) { + const rowNode = rowsToFlatten[i]; + const isParent = rowNode.hasChildren(); + const isRemovedSingleChildrenGroup = _isRemovedSingleChildrenGroup(details, rowNode, isParent); + const isRemovedLowestSingleChildrenGroup = _isRemovedLowestSingleChildrenGroup(details, rowNode, isParent); + const thisRowShouldBeRendered = _shouldRowBeRendered( + details, + rowNode, + isParent, + skipLeafNodes, + isRemovedSingleChildrenGroup, + isRemovedLowestSingleChildrenGroup + ); + if (thisRowShouldBeRendered) { + this.addRowNodeToRowsToDisplay(details, rowNode, result, uiLevel); + } + if (skipLeafNodes && rowNode.leafGroup) { + continue; + } + if (isParent) { + const excludedParent = isRemovedSingleChildrenGroup || isRemovedLowestSingleChildrenGroup; + if (rowNode.expanded || excludedParent) { + const doesRowShowFooter = details.groupTotalRow({ node: rowNode }); + if (!doesRowShowFooter) { + _destroyRowNodeFooter(rowNode); + } + const uiLevelForChildren = excludedParent ? uiLevel : uiLevel + 1; + if (doesRowShowFooter === "top") { + _createRowNodeFooter(rowNode, this.beans); + this.addRowNodeToRowsToDisplay(details, rowNode.sibling, result, uiLevelForChildren); + } + const detailNode = masterDetailSvc?.getDetail(rowNode); + if (detailNode) { + this.addRowNodeToRowsToDisplay(details, detailNode, result, uiLevel); + } + this.recursivelyAddToRowsToDisplay( + details, + rowNode.childrenAfterSort, + result, + skipLeafNodes, + uiLevelForChildren + ); + if (doesRowShowFooter === "bottom") { + _createRowNodeFooter(rowNode, this.beans); + this.addRowNodeToRowsToDisplay(details, rowNode.sibling, result, uiLevelForChildren); + } + } + } else { + const detailNode = masterDetailSvc?.getDetail(rowNode); + if (detailNode) { + this.addRowNodeToRowsToDisplay(details, detailNode, result, uiLevel); + } + } + } + } + // duplicated method, it's also in floatingRowModel + addRowNodeToRowsToDisplay(details, rowNode, result, uiLevel, addToTop) { + if (addToTop) { + result.unshift(rowNode); + } else { + result.push(rowNode); + } + rowNode.setUiLevel(details.isGroupMultiAutoColumn ? 0 : uiLevel); + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/groupEditService.ts +import { + BeanStub as BeanStub34, + _ChangedRowNodes, + _csrmFirstLeaf, + _csrmReorderAllLeafs, + _getCellByPosition, + _isClientSideRowModel as _isClientSideRowModel4, + _prevOrNextDisplayedRow +} from "ag-grid-community"; +var GroupEditService = class extends BeanStub34 { + constructor() { + super(...arguments); + this.beanName = "groupEditSvc"; + this.pendingEditRefresh = null; + this.dropGroupTarget = null; + this.dropGroupTimer = null; + this.dropGroupThrottled = false; + this.draggingGroups = null; + } + postConstruct() { + if (_isClientSideRowModel4(this.gos)) { + this.addManagedListeners(this.eventSvc, { + cellValueChanged: (event) => this.onCsrmCellChange(event), + batchEditingStopped: () => this.flushGroupEdits() + }); + } + } + destroy() { + this.stopDragging(true); + super.destroy(); + } + /** Checks if the drop operation described by `rowsDrop` is a grouping edit */ + isGroupingDrop(rowsDrop) { + if (!rowsDrop.rowDragManaged || !rowsDrop.sameGrid) { + return false; + } + if (!this.gos.get("refreshAfterGroupEdit")) { + return false; + } + return !!this.beans.rowGroupColsSvc?.columns?.length && !this.beans.colModel.isPivotMode(); + } + initDraggingGroups(rowsDrop) { + const structure = /* @__PURE__ */ new Map(); + const recurse = (row) => { + const childrenAfterGroup = row.childrenAfterGroup; + if (childrenAfterGroup) { + if (structure.has(row)) { + return; + } + const children = childrenAfterGroup.slice(); + structure.set(row, children); + for (const child of children) { + recurse(child); + } + } + }; + for (const row of rowsDrop.rows) { + if (row.group) { + recurse(row); + } + } + this.draggingGroups = structure; + } + /** Checks if the drop operation described by `rowsDrop` can set a new parent */ + canSetParent(rowsDrop) { + if (!rowsDrop.sameGrid) { + return false; + } + if (this.beans.groupStage?.treeData) { + return true; + } + if (rowsDrop.rowDragManaged && !this.gos.get("refreshAfterGroupEdit")) { + return false; + } + return !!this.beans.rowGroupColsSvc?.columns?.length; + } + canDropRow(rowNode, rowsDrop) { + if (this.beans.groupStage?.treeData) { + return !wouldCycle(rowNode, rowsDrop.newParent); + } + const { position, target, newParent, rootNode } = rowsDrop; + const currentParent = rowNode.parent; + if (rowNode.group && (isAncestorOrSelf(rowNode, target) || isAncestorOrSelf(rowNode, newParent))) { + return false; + } + if (position === "inside") { + return true; + } + if (newParent && newParent !== currentParent) { + return newParent !== rootNode || currentParent === rootNode; + } + const comparisonParent = newParent ?? target?.parent ?? rootNode; + if (comparisonParent !== currentParent) { + return false; + } + const sourceLevel = rowNode.group ? rowNode.level : currentParent.level ?? -1; + let targetLevel = -1; + if (target) { + targetLevel = target.group ? target.level : target.parent?.level ?? -1; + } else if (comparisonParent) { + targetLevel = comparisonParent.level; + } + if (sourceLevel >= 0 && targetLevel >= 0 && targetLevel !== sourceLevel) { + return false; + } + return true; + } + fixRowsDrop(rowsDrop, canSetParent, fromNudge, yDelta) { + const treeData = !!this.beans.groupStage?.treeData; + rowsDrop.treeData = treeData; + const isRowGrouping = !!this.beans.rowGroupColsSvc?.columns?.length || this.gos.get("pivotMode"); + if (!isRowGrouping && !treeData) { + return; + } + if (!this.draggingGroups && this.isGroupingDrop(rowsDrop) && !rowsDrop.suppressMoveWhenRowDragging) { + this.initDraggingGroups(rowsDrop); + } + let target = rowsDrop.target; + let newParent = null; + let inside = false; + const rootNode = rowsDrop.rootNode; + const rowModel = this.beans.rowModel; + const canStartGroup = this.canStartGroup(target, treeData); + this.updateDropTarget(rowsDrop, fromNudge, canStartGroup); + const lastRowIndex = this.beans.pageBounds?.getLastRow?.() ?? rowModel.getRowCount() - 1; + if (canSetParent) { + if (!target || yDelta >= 0.5 && target.rowIndex === lastRowIndex) { + newParent = rootNode; + } else if (rowsDrop.moved && target && this.dropGroupThrottled && this.shouldDropTargetBeParent(rowsDrop)) { + newParent = target; + } + if (!newParent) { + newParent = target?.parent ?? rootNode; + } + } + if (!fromNudge && target && canStartGroup && !(target.group && target.expanded)) { + this.startDropGroupDelay(target); + } + if (newParent) { + if (target && newParent === target && newParent !== rootNode) { + const firstRow = newParent.expanded ? _prevOrNextDisplayedRow(rowModel, 1, target) : null; + if (firstRow?.parent === newParent) { + target = firstRow; + yDelta = -0.5; + } else { + inside = true; + } + } + if (target && !inside) { + let current = target; + while (current && current !== rootNode && current !== newParent) { + target = current; + current = current.parent; + } + } + } + rowsDrop.target = target; + rowsDrop.newParent = newParent; + rowsDrop.yDelta = yDelta; + rowsDrop.inside = inside; + } + clearNewSameParent(rowsDrop, canSetParent) { + const newParent = rowsDrop.newParent; + if (newParent && (!canSetParent || rowsHaveSameParent(rowsDrop.rows, newParent))) { + rowsDrop.newParent = null; + } + } + updateDropTarget(rowsDrop, fromNudge, canStartGroup) { + const target = canStartGroup ? rowsDrop.target : null; + if (this.dropGroupTarget && this.dropGroupTarget !== target) { + this.resetDragGroup(); + } + if (!target?.childrenAfterSort?.length) { + return; + } + if (fromNudge && this.dropGroupThrottled && !target.expanded && target.isExpandable?.()) { + target.setExpanded(true, void 0, true); + } + if (this.canDropInTarget(target, rowsDrop)) { + this.dropGroupThrottled = true; + this.dropGroupTarget = target; + } + } + canDropInTarget(target, rowsDrop) { + if (target.expanded) { + return true; + } + if (!target.group) { + return false; + } + if (rowsDrop.pointerPos === "inside") { + return true; + } + if (rowsDrop.treeData) { + return false; + } + const rows = rowsDrop.rows; + const targetLevel = target.level; + for (let i = 0, len = rows.length; i < len; ++i) { + const row = rows[i]; + if (row !== target && row.group && row.level !== targetLevel) { + return false; + } + } + return true; + } + startDropGroupDelay(target) { + if (this.dropGroupTarget && this.dropGroupTarget !== target) { + this.resetDragGroup(); + } + this.dropGroupTarget = target; + if (this.dropGroupTimer !== null) { + return; + } + const delay = this.gos.get("rowDragInsertDelay"); + this.dropGroupTimer = window.setTimeout(() => { + this.dropGroupTimer = null; + this.dropGroupThrottled = true; + this.beans.dragAndDrop?.nudge(); + }, delay); + } + resetDragGroup() { + if (this.dropGroupTimer !== null) { + window.clearTimeout(this.dropGroupTimer); + this.dropGroupTimer = null; + } + this.dropGroupTarget = null; + this.dropGroupThrottled = false; + } + stopDragging(final) { + if (final) { + this.draggingGroups = null; + } + this.resetDragGroup(); + } + shouldDropTargetBeParent({ target, rows, pointerPos, treeData }) { + if (!target || pointerPos === "none") { + return false; + } + if (pointerPos === "inside") { + return true; + } + if (!treeData && target.group && !target.expanded) { + return true; + } + if (pointerPos === "above") { + return false; + } + const rowModel = this.beans.rowModel; + const targetRowIndex = target.rowIndex; + let nextRowIndex = targetRowIndex + 1; + let nextRow; + do { + nextRow = rowModel.getRow(nextRowIndex++); + } while (nextRow?.footer); + const childrenAfterGroup = this.draggingGroups?.get(target) ?? target.childrenAfterGroup; + if (nextRow && nextRow.parent === target && childrenAfterGroup?.length) { + const rowsSet = new Set(rows); + for (let i = 0, len = childrenAfterGroup.length; i < len; ++i) { + const child = childrenAfterGroup[i]; + if (child.rowIndex !== null && !rowsSet.has(child)) { + return true; + } + } + } + return false; + } + /** Performs the grouping edit described by `rowsDrop` */ + dropGroupEdit(rowsDrop) { + const { beans } = this; + const position = rowsDrop.position; + const target = rowsDrop.target ?? null; + const rootNode = rowsDrop.rootNode; + const parentForValues = rowsDrop.newParent ?? target?.parent ?? rootNode; + const focusSvc = beans.focusSvc; + const cellPosition = focusSvc.getFocusedCell(); + const cellCtrl = cellPosition && _getCellByPosition(beans, cellPosition); + const leafs = /* @__PURE__ */ new Set(); + const changedRowNodes = new _ChangedRowNodes(); + const updates = changedRowNodes.updates; + let newGroupValues; + const processLeaf = (leafRow) => { + if (leafs.has(leafRow)) { + return; + } + leafs.add(leafRow); + newGroupValues ?? (newGroupValues = this.newGroupValues(parentForValues)); + if (this.setRowGroup(leafRow, newGroupValues)) { + updates.add(leafRow); + } + }; + const visitGroupedChildren = (groupNode) => { + const children = this.draggingGroups?.get(groupNode) ?? groupNode.childrenAfterGroup; + const childrenLen = children?.length; + if (childrenLen) { + for (let i = 0; i < childrenLen; ++i) { + const child = children[i]; + if (child.sourceRowIndex >= 0) { + processLeaf(child); + } else { + visitGroupedChildren(child); + } + } + } + }; + for (const row of rowsDrop.rows) { + if (row.group) { + visitGroupedChildren(row); + } else { + const firstLeaf = row.sourceRowIndex >= 0 && !row.destroyed ? row : this.csrmFirstLeaf(row); + if (firstLeaf) { + processLeaf(firstLeaf); + } + } + } + const reorderPosition = position === "inside" ? "above" : position; + const reorderTarget = position === "inside" ? this.findFirstLeafForParent(parentForValues, leafs) ?? target : target; + let orderChanged = false; + if (leafs.size && reorderPosition !== "none") { + orderChanged = _csrmReorderAllLeafs(rootNode._leafs, leafs, reorderTarget, reorderPosition === "above"); + } + if (!updates.size && !orderChanged) { + return false; + } + changedRowNodes.reordered = orderChanged; + for (const leaf of leafs) { + changedRowNodes.updates.add(leaf); + } + this.csrmRefresh(changedRowNodes); + if (cellCtrl) { + cellCtrl.focusCell(); + } else { + focusSvc.clearFocusedCell(); + } + return true; + } + canStartGroup(target, treeData) { + if (!target || target.level < 0 || target.footer || target.detail) { + return false; + } + if (target.group) { + return true; + } + return treeData; + } + /** Flushes any pending group edits for batch processing */ + flushGroupEdits() { + const pending = this.pendingEditRefresh; + if (pending) { + this.pendingEditRefresh = null; + this.csrmRefresh(pending); + } + } + /** Refreshes the grouping for the provided rows */ + csrmRefresh(changedRowNodes) { + const clientSideRowModel = this.beans.rowModel; + const rootNode = clientSideRowModel.rootNode; + if (!rootNode) { + return; + } + clientSideRowModel.refreshModel({ + step: "group", + keepRenderedRows: true, + animate: !this.gos.get("suppressAnimationFrame"), + changedRowNodes + }); + } + newGroupValues(parent) { + const columns = this.beans.rowGroupColsSvc?.columns ?? []; + const values = new Array(columns.length); + let maxLevel = -1; + let current = parent; + while (current && current.level >= 0) { + const column = columns[current.level]; + if (column) { + const colId = column.getColId(); + const level = current.level; + values[level] = current.groupData?.[colId] ?? current.key ?? void 0; + if (level > maxLevel) { + maxLevel = level; + } + } + current = current.parent; + } + return { values, columns, maxLevel }; + } + setRowGroup(row, { values, columns, maxLevel }) { + if (maxLevel < 0) { + return false; + } + const { valueSvc, changeDetectionSvc } = this.beans; + let changed = false; + changeDetectionSvc?.beginDeferred(); + try { + for (let level = 0; level < columns.length; ++level) { + const column = columns[level]; + if (!column || level > maxLevel) { + continue; + } + const newValue = values[level]; + const currentValue = valueSvc.getValue(column, row, "data"); + if (currentValue === newValue || currentValue == null && newValue == null) { + continue; + } + let valueToSet = newValue; + const parsedValue = valueSvc.parseValue(column, row, newValue, currentValue); + if (parsedValue !== void 0) { + valueToSet = parsedValue; + } + const updated = row.setDataValue(column, valueToSet, "rowDrag"); + if (updated) { + changed = true; + } + } + } finally { + changeDetectionSvc?.endDeferred(); + } + return changed; + } + onCsrmCellChange(event) { + const { column, node, source } = event; + if (!this.gos.get("refreshAfterGroupEdit")) { + return; + } + if (source === "rowDrag") { + return; + } + if (!column?.isRowGroupActive()) { + return; + } + if (node.group || !node.data) { + return; + } + const editSvc = this.beans.editSvc; + if (editSvc?.isBatchEditing()) { + let pending = this.pendingEditRefresh; + if (!pending) { + pending = newEditChangedRowNodes(); + this.pendingEditRefresh = pending; + } + pending.updates.add(node); + } else { + const changedRowNodes = newEditChangedRowNodes(); + changedRowNodes.updates.add(node); + this.csrmRefresh(changedRowNodes); + } + } + csrmFirstLeaf(parent) { + if (!parent) { + return null; + } + const draggingGroups = this.draggingGroups; + let children = draggingGroups?.get(parent) ?? parent.childrenAfterGroup; + while (children?.length) { + const child = children[0]; + if (child.sourceRowIndex >= 0) { + if (!child.destroyed) { + return child; + } + return this.firstAliveChildLeaf(child); + } + children = draggingGroups?.get(child) ?? child.childrenAfterGroup; + } + return _csrmFirstLeaf(parent); + } + firstAliveChildLeaf(parent) { + const children = this.draggingGroups?.get(parent) ?? parent.childrenAfterGroup; + if (children) { + for (const grandChild of children) { + if (grandChild.sourceRowIndex >= 0 && !grandChild.destroyed) { + return grandChild; + } + } + } + return null; + } + findFirstLeafForParent(parent, exclude) { + if (!parent) { + return null; + } + const children = this.draggingGroups?.get(parent) ?? parent?.childrenAfterGroup; + if (!children) { + return null; + } + for (let i = 0, len = children.length; i < len; ++i) { + const child = children[i]; + if (child.sourceRowIndex >= 0 && !exclude.has(child)) { + return child; + } + const found = this.findFirstLeafForParent(child, exclude); + if (found !== null) { + return found; + } + } + return null; + } +}; +var newEditChangedRowNodes = () => { + const result = new _ChangedRowNodes(); + result.reordered = true; + return result; +}; +var isAncestorOrSelf = (candidate, node) => { + if (!candidate || !node) { + return false; + } + let current = node; + while (current) { + if (current === candidate) { + return true; + } + current = current.parent; + } + return false; +}; +var wouldCycle = (row, newParent) => { + if (!newParent || row.parent === newParent) { + return false; + } + let current = newParent; + const rowId = row.id; + while (current) { + if (current === row) { + return true; + } + if (rowId != null && current.id === rowId) { + return true; + } + current = current.parent; + } + return false; +}; +var rowsHaveSameParent = (rows, newParent) => { + for (let i = 0, len = rows.length; i < len; ++i) { + if (rows[i].parent !== newParent) { + return false; + } + } + return true; +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/groupStage.ts +import { BeanStub as BeanStub35 } from "ag-grid-community"; +var GroupStage = class extends BeanStub35 { + constructor() { + super(...arguments); + this.beanName = "groupStage"; + this.step = "group"; + this.refreshProps = [ + "groupAllowUnbalanced", + "groupDefaultExpanded", + "groupDisplayType", + "groupHideOpenParents", + "initialGroupOrderComparator", + "treeData", + "treeDataChildrenField", + "treeDataParentIdField" + ]; + this.treeData = false; + this.grouping = false; + this.gosTreeData = false; + this.pivotMode = false; + this.hasTreeData = false; + this.hasRowGrouping = false; + this.needReset = false; + this.nested = false; + this.strategy = void 0; + this.strategyType = void 0; + this.columnsInvalidated = false; + } + postConstruct() { + const gos = this.gos; + this.hasRowGrouping = gos.isModuleRegistered("RowGrouping"); + if (gos.isModuleRegistered("TreeData")) { + this.hasTreeData = true; + this.gosTreeData = gos.get("treeData"); + } + this.addManagedEventListeners({ + showRowGroupColsSetChanged: () => this.strategy?.onShowRowGroupColsSetChanged() + }); + } + invalidateGroupCols() { + this.columnsInvalidated = true; + this.strategy?.invalidateGroupCols?.(); + } + destroy() { + this.strategy = this.destroyBean(this.strategy); + super.destroy(); + } + getNonLeaf(id) { + return this.strategy?.nonLeafsById?.get(id); + } + getNestedDataGetter() { + return this.getStrategy()?.nestedDataGetter; + } + onPropChange(changedProps) { + const gos = this.gos; + const oldNestedDataGetter = this.strategy?.nestedDataGetter; + if (changedProps.has("treeData")) { + this.gosTreeData = gos.get("treeData") && this.hasTreeData; + this.columnsInvalidated = true; + } + this.strategy?.onPropChange?.(changedProps); + return this.getNestedDataGetter() !== oldNestedDataGetter; + } + extractData() { + const rootNode = this.beans.rowModel.rootNode; + const nodes = this.nested ? rootNode?.childrenAfterGroup : rootNode?._leafs; + if (!nodes) { + return this.gos.get("rowData") ?? []; + } + const len = nodes.length; + const result = new Array(len); + let writeIdx = 0; + for (let i = 0; i < len; ++i) { + const data = nodes[i].data; + if (data != null) { + result[writeIdx++] = data; + } + } + result.length = writeIdx; + return result; + } + execute(params) { + const beans = this.beans; + const rowModel = beans.rowModel; + const rootNode = rowModel.rootNode; + if (!rootNode) { + return false; + } + const strategy = this.getStrategy(); + const nested = !!strategy?.nestedDataGetter; + const needReset = this.needReset; + this.nested = nested; + if (needReset) { + this.needReset = false; + beans.rowDragSvc?.cancelRowDrag(); + params.animate = false; + resetGrouping(rootNode, !nested, beans); + } + if (!strategy) { + rowModel.hierarchical = false; + return void 0; + } + rowModel.hierarchical = true; + beans.changedPathFactory?.ensureRowsPath(params, rootNode); + const executeResult = strategy.execute(rootNode, params); + return executeResult || needReset; + } + loadLeafs(node) { + return node.footer ? loadFooterLeafs(node) : loadRealLeafs(node); + } + loadGroupData(node) { + const strategy = this.getStrategy(); + if (strategy) { + return strategy.loadGroupData(node); + } + node._groupData = null; + return null; + } + clearNonLeafs() { + this.strategy?.clearNonLeafs(); + } + getWantedStrategyType() { + if (this.isAlive()) { + if (this.gosTreeData) { + return "tree"; + } + if (this.hasRowGrouping && (this.beans.rowGroupColsSvc?.columns?.length || this.pivotMode)) { + return "group"; + } + } + return "none"; + } + getStrategy() { + let strategy = this.strategy; + const pivotMode = this.beans.colModel.isPivotMode(); + if (pivotMode !== this.pivotMode) { + this.pivotMode = pivotMode; + this.columnsInvalidated = true; + } + if (strategy !== void 0 && !this.columnsInvalidated && this.isAlive()) { + return strategy; + } + this.columnsInvalidated = false; + const wantedType = this.getWantedStrategyType(); + if (wantedType === this.strategyType) { + if (strategy !== void 0) { + return strategy; + } + this.strategy = null; + return null; + } + if (strategy) { + this.strategy = this.destroyBean(strategy); + this.needReset = true; + } + this.strategyType = wantedType; + this.treeData = wantedType === "tree"; + this.grouping = wantedType === "group"; + if (wantedType === "none") { + this.strategy = null; + return null; + } + const beanName = wantedType === "tree" ? "treeGroupStrategy" : "groupStrategy"; + strategy = this.beans.registry.createDynamicBean(beanName, false) ?? null; + this.strategy = strategy && this.createBean(strategy); + return strategy; + } +}; +var loadFooterLeafs = (node) => { + const sibling = node.sibling; + if (!sibling) { + return null; + } + const siblingLeafs = sibling._leafs; + if (siblingLeafs !== void 0) { + return siblingLeafs; + } + return loadRealLeafs(sibling); +}; +var loadRealLeafs = (node) => { + const childrenAfterGroup = node.childrenAfterGroup; + const childrenAfterGroupLen = childrenAfterGroup?.length; + node._leafs = null; + if (!childrenAfterGroupLen) { + return null; + } + let leafs; + const onlyChild = childrenAfterGroupLen === 1 ? childrenAfterGroup[0] : null; + if (onlyChild?.group && onlyChild.sourceRowIndex < 0) { + leafs = onlyChild._leafs; + if (leafs === void 0) { + leafs = loadRealLeafs(onlyChild); + } + } else if (node.leafGroup) { + leafs = childrenAfterGroup; + } else { + leafs = []; + for (let i = 0; i < childrenAfterGroupLen; ++i) { + const child = childrenAfterGroup[i]; + if (child.sourceRowIndex >= 0) { + leafs.push(child); + } + if (!child.group) { + continue; + } + let childLeafs = child._leafs; + if (childLeafs === void 0) { + childLeafs = loadRealLeafs(child); + } + if (childLeafs) { + for (let j = 0, len = childLeafs.length; j < len; ++j) { + leafs.push(childLeafs[j]); + } + } + } + } + node._leafs = leafs; + return leafs; +}; +var resetGrouping = (rootNode, canResetTreeNode, beans) => { + const allLeafs = rootNode._leafs; + const rootSibling = rootNode.sibling; + rootNode.treeNodeFlags = 0; + rootNode.childrenAfterGroup = allLeafs; + rootNode.childrenMapped = null; + rootNode._groupData = void 0; + rootNode.aggData = null; + if (rootSibling) { + rootSibling.childrenAfterGroup = rootNode.childrenAfterGroup; + rootSibling.childrenAfterAggFilter = rootNode.childrenAfterAggFilter; + rootSibling.childrenAfterFilter = rootNode.childrenAfterFilter; + rootSibling.childrenAfterSort = rootNode.childrenAfterSort; + rootSibling.childrenMapped = null; + rootSibling._groupData = void 0; + rootSibling.aggData = null; + } + for (let i = 0, allLeafsLen = allLeafs.length ?? 0; i < allLeafsLen; ++i) { + const row = allLeafs[i]; + const sibling = row.sibling; + row._leafs = void 0; + resetChildRowGrouping(row); + if (sibling) { + resetChildRowGrouping(sibling); + } + row.parent = rootNode; + if (canResetTreeNode) { + row.treeParent = null; + } + setRowNodeGroup(row, beans, false); + } + rootNode.updateHasChildren(); +}; +var resetChildRowGrouping = (row) => { + row.key = null; + row.treeNodeFlags = 0; + row.allChildrenCount = null; + row.childrenAfterGroup = null; + row.childrenAfterAggFilter = null; + row.childrenAfterFilter = null; + row.childrenAfterSort = null; + row.childrenMapped = null; + row.level = 0; + row._groupData = void 0; +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/rendering/groupCellRenderer.ts +import { Component as Component37, RefPlaceholder as RefPlaceholder35, _setAriaRole as _setAriaRole9, _setDisplayed as _setDisplayed18 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowHierarchy/rendering/groupCellRendererCtrl.ts +import { + BeanStub as BeanStub36, + KeyCode as KeyCode28, + _createIconNoSpan as _createIconNoSpan19, + _getCellRendererDetails as _getCellRendererDetails2, + _getCheckboxLocation, + _getCheckboxes, + _getInnerCellRendererDetails, + _isElementInEventPath, + _isRowSelection, + _isStopPropagationForAgGrid as _isStopPropagationForAgGrid2, + _removeAriaExpanded as _removeAriaExpanded2, + _setAriaExpanded as _setAriaExpanded9, + _stopPropagationForAgGrid as _stopPropagationForAgGrid8 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowHierarchy/rowHierarchyUtils.ts +function _isHiddenParent(node, ancestor, gos) { + let currentNode = node; + const levelDiff = currentNode.level - ancestor.level; + if (levelDiff <= 0) { + return false; + } + const isHideOpenParents = gos.get("groupHideOpenParents"); + if (!isHideOpenParents) { + return false; + } + for (let i = 0; i < levelDiff; i++) { + const isFirstChild = currentNode.parent?.getFirstChild() === currentNode; + if (!isFirstChild) { + return false; + } + currentNode = currentNode.parent; + } + return currentNode === ancestor; +} + +// packages/ag-grid-enterprise/src/rowHierarchy/rendering/groupCellRendererCtrl.ts +var GroupCellRendererCtrl = class extends BeanStub36 { + constructor() { + super(...arguments); + // keep reference to this, so we can remove again when indent changes + this.indentClass = null; + } + init(comp, eGui, eCheckbox, eExpanded, eContracted, compClass, params) { + this.params = params; + this.eGui = eGui; + this.eCheckbox = eCheckbox; + this.eExpanded = eExpanded; + this.eContracted = eContracted; + this.comp = comp; + this.compClass = compClass; + const { node, column } = params; + this.node = node; + this.displayedNode = node; + const embeddedRowMismatch = this.isEmbeddedRowMismatch(); + if (embeddedRowMismatch) { + return; + } + if (node.footer) { + this.initFooterCell(); + return; + } + if (!column) { + this.initFullWidthCell(); + return; + } + this.displayedNode = this.beans.showRowGroupColValueSvc?.getDisplayedNode(node, column) ?? this.node; + this.setupExpand(); + this.setupCheckbox(); + this.addGroupValue(); + this.setupIndent(); + } + initFooterCell() { + const { node } = this.params; + this.addGroupValue(); + this.setupIndent(); + const isGrandTotal = node.level === -1; + if (!isGrandTotal) { + this.comp.toggleCss("ag-row-group-leaf-indent", true); + } + } + initFullWidthCell() { + const setupDragger = () => { + const { rowDragSvc } = this.beans; + if (!this.params.rowDrag || !rowDragSvc) { + return; + } + const rowDragComp = rowDragSvc.createRowDragComp(() => this.params.value, this.params.node); + this.createManagedBean(rowDragComp); + this.eGui.insertAdjacentElement("afterbegin", rowDragComp.getGui()); + }; + this.setupExpand(); + setupDragger(); + this.setupCheckbox(); + this.addGroupValue(); + this.setupIndent(); + } + /** + * Returns an aria "role" to place on full width group cells, or the parent wrapper. + * @returns the aria role to place on the parent wrapper + */ + getCellAriaRole() { + const colDefAriaRole = this.params.colDef?.cellAriaRole; + const columnColDefAriaRole = this.params.column?.getColDef().cellAriaRole; + return colDefAriaRole || columnColDefAriaRole || "gridcell"; + } + /** + * Determines if this cell should be rendered, as when using embeddedFullWidthRows + * only one group cell should be rendered. + * + * if [enableRTL] all but pinned right cells should be skipped if available + * otherwise prioritise pinned left cell if available + * otherwise center viewport. + * + * @returns whether the cell should be skipped due to embedded full width rows + */ + isEmbeddedRowMismatch() { + if (!this.params.fullWidth || !this.gos.get("embedFullWidthRows")) { + return false; + } + const { visibleCols } = this.beans; + const pinnedLeftCell = this.params.pinned === "left"; + const pinnedRightCell = this.params.pinned === "right"; + const bodyCell = !pinnedLeftCell && !pinnedRightCell; + if (this.gos.get("enableRtl")) { + if (visibleCols.isPinningLeft()) { + return !pinnedRightCell; + } + return !bodyCell; + } + if (visibleCols.isPinningLeft()) { + return !pinnedLeftCell; + } + return !bodyCell; + } + /** + * Displays the group value for the displayed node + */ + addGroupValue() { + const { + params: { value, valueFormatted } + } = this; + const innerCompDetails = this.getInnerCompDetails(); + this.comp.setInnerRenderer(innerCompDetails, valueFormatted ?? value ?? null); + } + /** + * Sets up expand/collapse: + * Chevron + * Aria-expanded + * Child count + */ + setupExpand() { + const { colModel } = this.beans; + const { eGridCell, suppressDoubleClickExpand } = this.params; + const addIconToDom = (iconName, element) => { + const icon = _createIconNoSpan19(iconName, this.beans, null); + if (icon) { + element.appendChild(icon); + this.addDestroyFunc(() => icon.remove()); + } + }; + addIconToDom("groupExpanded", this.eExpanded); + addIconToDom("groupContracted", this.eContracted); + const comp = this.comp; + const onExpandedChanged = () => { + const expandable = this.isExpandable(); + if (!expandable) { + return; + } + const expanded = !!this.displayedNode.expanded; + comp.setExpandedDisplayed(expanded); + comp.setContractedDisplayed(!expanded); + _setAriaExpanded9(eGridCell, expanded); + }; + const onExpandableChanged = () => { + const expandable = this.isExpandable(); + comp.toggleCss("ag-cell-expandable", expandable); + comp.toggleCss("ag-row-group", expandable); + const pivotModeAndLeaf = !expandable && colModel.isPivotMode(); + comp.toggleCss("ag-pivot-leaf-group", pivotModeAndLeaf); + const normalModeNotTotalFooter = !colModel.isPivotMode() && (!this.displayedNode.footer || this.displayedNode.level !== -1); + comp.toggleCss("ag-row-group-leaf-indent", !expandable && normalModeNotTotalFooter); + const count = this.getChildCount(); + const countString = count > 0 ? `(${count})` : ``; + comp.setChildCount(countString); + if (!expandable) { + comp.setExpandedDisplayed(false); + comp.setContractedDisplayed(false); + _removeAriaExpanded2(eGridCell); + } else { + onExpandedChanged(); + } + }; + const setupListeners = () => { + if (!suppressDoubleClickExpand && !this.isGroupCellEditable(this.displayedNode)) { + this.addManagedListeners(eGridCell, { dblclick: this.onCellDblClicked.bind(this) }); + } + this.addManagedListeners(this.eExpanded, { click: this.onExpandClicked.bind(this) }); + this.addManagedListeners(this.eContracted, { click: this.onExpandClicked.bind(this) }); + this.addManagedListeners(eGridCell, { keydown: this.onKeyDown.bind(this) }); + this.addManagedListeners(this.displayedNode, { + // Expandable state has changed + allChildrenCountChanged: onExpandableChanged, + masterChanged: onExpandableChanged, + groupChanged: onExpandableChanged, + hasChildrenChanged: onExpandableChanged, + // Node expanded changed + expandedChanged: onExpandedChanged + }); + }; + setupListeners(); + onExpandableChanged(); + } + /** + * Return the inner renderer details for the cell + * + * Prioritises: + * 1. Group row renderer for group rows + * 2. agFindCellRenderer for find results in group rows + * 3. Provided innerRenderer (i.e, cellRendererParams.innerRenderer) + * 4. Cell renderer of the grouped column + * 5. Inner renderer of the grouped column + * 6. agFindCellRenderer for find results + */ + getInnerCompDetails() { + const { userCompFactory, findSvc } = this.beans; + const params = this.params; + if (params.fullWidth) { + const groupRowRendererParams = this.gos.get("groupRowRendererParams"); + const groupRowInnerCompDetails = _getInnerCellRendererDetails( + userCompFactory, + groupRowRendererParams, + params + ); + if (groupRowInnerCompDetails) { + return groupRowInnerCompDetails; + } + if (findSvc?.isMatch(params.node, null)) { + return _getInnerCellRendererDetails( + userCompFactory, + { ...groupRowRendererParams, innerRenderer: "agFindCellRenderer" }, + params + ); + } + return void 0; + } + const isGroupRowRenderer = (details) => details && details.componentClass == this.compClass; + const innerCompDetails = _getInnerCellRendererDetails(userCompFactory, params, params); + if (innerCompDetails && !isGroupRowRenderer(innerCompDetails)) { + return innerCompDetails; + } + const { + displayedNode: { rowGroupColumn } + } = this; + const relatedColDef = rowGroupColumn?.colDef; + const isShowingThisCol = rowGroupColumn && params.column?.isRowGroupDisplayed(rowGroupColumn.getId()); + if (relatedColDef && isShowingThisCol) { + const relatedCompDetails = _getCellRendererDetails2(userCompFactory, relatedColDef, params); + if (relatedCompDetails) { + if (isGroupRowRenderer(relatedCompDetails)) { + if (relatedColDef?.cellRendererParams?.innerRenderer) { + return _getInnerCellRendererDetails( + userCompFactory, + relatedColDef.cellRendererParams, + params + ); + } + } else { + return relatedCompDetails; + } + } + } + if (findSvc?.isMatch(params.node, params.column)) { + return _getCellRendererDetails2( + userCompFactory, + { ...relatedColDef ?? params.colDef, cellRenderer: "agFindCellRenderer" }, + params + ); + } + } + /** + * Get the allChildCount of a given node + * @param node the node to return the count for + * @returns 0 if the count should not be displayed, otherwise the count + */ + getChildCount() { + const { column, suppressCount } = this.params; + if (suppressCount) { + return 0; + } + const { allChildrenCount, rowGroupColumn } = this.displayedNode; + const isDisplayingRowGroupCell = (allChildrenCount ?? 0) > 0 && (!rowGroupColumn || !column || column?.isRowGroupDisplayed(rowGroupColumn.getId())); + if (!isDisplayingRowGroupCell) { + return 0; + } + const isRepresentingOtherNode = this.gos.get("showOpenedGroup") && this.displayedNode !== this.node; + if (isRepresentingOtherNode && !_isHiddenParent(this.node, this.displayedNode, this.gos)) { + return 0; + } + return allChildrenCount ?? 0; + } + /** + * Checks whether the current cell is expandable, either due to [groupHideOpenParent] control or otherwise. + * @returns whether this cell is expandable + */ + isExpandable() { + const { node, column, colDef } = this.params; + if (!this.displayedNode.isExpandable()) { + return false; + } + if (node.rowPinned) { + return false; + } + const isFullWidth = !column; + if (isFullWidth) { + return true; + } + const hasChildren = node.hasChildren(); + if (hasChildren && colDef) { + const { showRowGroup } = colDef; + if (!showRowGroup) { + return false; + } + if (showRowGroup === true) { + return true; + } + } + if (node === this.displayedNode) { + if (node.rowGroupColumn) { + const showingThisRowGroup = column?.isRowGroupDisplayed(node.rowGroupColumn.getId()); + if (showingThisRowGroup) { + return true; + } + } + if (node.master) { + return colDef?.showRowGroup === true || colDef?.showRowGroup == null; + } + return false; + } + return _isHiddenParent(this.node, this.displayedNode, this.gos); + } + /** + * For full width group cells & single group column, indents child groups based on uiLevel + */ + setupIndent() { + const { suppressPadding, node, colDef } = this.params; + if (suppressPadding) { + return; + } + const setIndent = () => { + let level = node.uiLevel; + if (colDef && colDef.showRowGroup !== true) { + level = 0; + } + const newIndentClass = "ag-row-group-indent-" + level; + if (newIndentClass === this.indentClass) { + return; + } + if (this.indentClass) { + this.comp.toggleCss(this.indentClass, false); + } + this.indentClass = newIndentClass; + this.comp.toggleCss(newIndentClass, true); + this.eGui.style.setProperty("--ag-indentation-level", String(level)); + }; + this.addManagedListeners(node, { uiLevelChanged: setIndent.bind(this) }); + setIndent(); + } + /** + * Selection checkboxes + */ + setupCheckbox() { + const { node } = this.params; + const isRowSelectable = !node.footer && !node.rowPinned && !node.detail; + if (!isRowSelectable) { + return; + } + this.addManagedPropertyListener("rowSelection", ({ currentValue, previousValue }) => { + const curr = typeof currentValue === "object" ? currentValue : void 0; + const prev = typeof previousValue === "object" ? previousValue : void 0; + if (curr?.checkboxLocation !== prev?.checkboxLocation) { + this.destroyCheckbox(); + this.addCheckbox(); + } + }); + this.addCheckbox(); + } + addCheckbox() { + const { selectionSvc } = this.beans; + if (!selectionSvc || !_isRowSelection(this.gos)) { + return; + } + const { node, column } = this.params; + const rowSelection = this.gos.get("rowSelection"); + const checkboxLocation = _getCheckboxLocation(rowSelection); + if (checkboxLocation === "selectionColumn") { + return; + } + if (checkboxLocation === "autoGroupColumn") { + const isGroupColumn = column?.getColDef().showRowGroup != null; + const isFullWidthGroupRow = !column && node.group; + const isApplicableCell = isGroupColumn || isFullWidthGroupRow; + if (!isApplicableCell) { + return; + } + } + const checkboxes = typeof rowSelection === "object" ? _getCheckboxes(rowSelection) : this.params.checkbox; + const userWantsCheckboxes = typeof checkboxes === "function" || checkboxes === true; + if (!userWantsCheckboxes) { + return; + } + const isMultiAutoCol = typeof column?.getColDef().showRowGroup === "string"; + if (isMultiAutoCol && !this.isExpandable()) { + this.comp.setCheckboxSpacing(true); + return; + } + const cbSelectionComponent = selectionSvc.createCheckboxSelectionComponent(); + this.cbComp = cbSelectionComponent; + this.createBean(cbSelectionComponent); + cbSelectionComponent.init({ + rowNode: node, + // when groupHideOpenParents = true and group expanded, we want the checkbox to refer to leaf node state (not group node state) + column, + overrides: { + isVisible: checkboxes, + callbackParams: this.params, + removeHidden: true + } + }); + this.eCheckbox.appendChild(cbSelectionComponent.getGui()); + this.comp.setCheckboxVisible(true); + } + destroyCheckbox() { + this.comp.setCheckboxSpacing(false); + this.comp.setCheckboxVisible(false); + this.cbComp?.getGui().remove(); + this.cbComp = this.destroyBean(this.cbComp); + } + /** Whether the group cell is editable via groupRowEditable or enableGroupEdit. */ + isGroupCellEditable(node) { + const column = this.params.column; + return !!column && (!!column.getColDef().groupRowEditable || this.gos.get("enableGroupEdit")) && column.isCellEditable(node); + } + /** + * Called when the expand / contract icon is clicked. + */ + onExpandClicked(mouseEvent) { + if (_isStopPropagationForAgGrid2(mouseEvent)) { + return; + } + _stopPropagationForAgGrid8(mouseEvent); + this.onExpandOrContract(mouseEvent); + } + /** + * Called on cell key press - only handles 'Enter' key for expand/collapse + */ + onKeyDown(event) { + const isEnterKey = event.key === KeyCode28.ENTER; + if (!isEnterKey || this.params.suppressEnterExpand) { + return; + } + if (this.isGroupCellEditable(this.params.node)) { + return; + } + this.onExpandOrContract(event); + } + /** + * Called on cell double click - only expands/collapses if the event is not on the expand / contract icon + */ + onCellDblClicked(mouseEvent) { + if (_isStopPropagationForAgGrid2(mouseEvent)) { + return; + } + const targetIsExpandIcon = _isElementInEventPath(this.eExpanded, mouseEvent) || _isElementInEventPath(this.eContracted, mouseEvent); + if (!targetIsExpandIcon) { + this.onExpandOrContract(mouseEvent); + } + } + /** + * Called when expand or contract is attempted, to scroll the row and update the node state + * @param e originating event + */ + onExpandOrContract(e) { + if (!this.isExpandable()) { + return; + } + const rowNode = this.displayedNode; + const nextExpandState = !rowNode.expanded; + if (!nextExpandState && rowNode.sticky) { + this.beans.ctrlsSvc.getScrollFeature().setVerticalScrollPosition(rowNode.rowTop - rowNode.stickyRowTop); + } + rowNode.setExpanded(nextExpandState, e); + } + destroy() { + super.destroy(); + this.destroyCheckbox(); + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/rendering/groupCellRenderer.ts +var GroupCellRendererElement = { + tag: "span", + cls: "ag-cell-wrapper", + children: [ + { tag: "span", ref: "eExpanded", cls: "ag-group-expanded ag-hidden" }, + { tag: "span", ref: "eContracted", cls: "ag-group-contracted ag-hidden" }, + { tag: "span", ref: "eCheckbox", cls: "ag-group-checkbox ag-invisible" }, + { tag: "span", ref: "eValue", cls: "ag-group-value" }, + { tag: "span", ref: "eChildCount", cls: "ag-group-child-count" } + ] +}; +var GroupCellRenderer = class extends Component37 { + constructor() { + super(GroupCellRendererElement); + this.eExpanded = RefPlaceholder35; + this.eContracted = RefPlaceholder35; + this.eCheckbox = RefPlaceholder35; + this.eValue = RefPlaceholder35; + this.eChildCount = RefPlaceholder35; + } + init(params) { + const compProxy = { + setInnerRenderer: (compDetails, valueToDisplay) => this.setRenderDetails(compDetails, valueToDisplay), + setChildCount: (count) => this.eChildCount.textContent = count, + toggleCss: (cssClass, value) => this.toggleCss(cssClass, value), + setContractedDisplayed: (expanded) => _setDisplayed18(this.eContracted, expanded), + setExpandedDisplayed: (expanded) => _setDisplayed18(this.eExpanded, expanded), + setCheckboxVisible: (visible) => this.eCheckbox.classList.toggle("ag-invisible", !visible), + setCheckboxSpacing: (add) => this.eCheckbox.classList.toggle("ag-group-checkbox-spacing", add) + }; + const ctrl = this.createManagedBean(new GroupCellRendererCtrl()); + const fullWidth = !params.colDef; + const eGui = this.getGui(); + ctrl.init(compProxy, eGui, this.eCheckbox, this.eExpanded, this.eContracted, this.constructor, params); + if (fullWidth) { + _setAriaRole9(eGui, ctrl.getCellAriaRole()); + } + } + setRenderDetails(compDetails, valueToDisplay) { + if (compDetails) { + compDetails.newAgStackInstance().then((comp) => { + if (!comp) { + return; + } + const destroyComp = () => this.destroyBean(comp); + if (this.isAlive()) { + this.eValue.appendChild(comp.getGui()); + this.addDestroyFunc(destroyComp); + } else { + destroyComp(); + } + }); + } else { + this.eValue.innerText = valueToDisplay; + } + } + destroy() { + this.destroyBean(this.innerCellRenderer); + super.destroy(); + } + refresh() { + return false; + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/rendering/groupCellStyles.css +var groupCellStyles_default = ".ag-group-checkbox-spacing{width:var(--ag-icon-size)}:where(.ag-ltr) .ag-group-checkbox-spacing{margin-right:var(--ag-cell-widget-spacing)}:where(.ag-rtl) .ag-group-checkbox-spacing{margin-left:var(--ag-cell-widget-spacing)}"; + +// packages/ag-grid-enterprise/src/rowHierarchy/showRowGroupColValueService.ts +import { BeanStub as BeanStub37 } from "ag-grid-community"; +var ShowRowGroupColValueService = class extends BeanStub37 { + constructor() { + super(...arguments); + this.beanName = "showRowGroupColValueSvc"; + } + /** + * Get the value for display in the group column. Also returns the displayedNode from which the value was + * taken in cases of groupHideOpenParents and showOpenedGroup. + * + * Always uses 'data' mode because group column values represent structural position in the row hierarchy. + * The actual grouping (via getKeyForNode) uses committed data, so the display should match - showing + * a different group value while the row is still in its original group would be misleading. + */ + getGroupValue(node, column, ignoreAggData) { + if (!column) { + if (!node.group) { + return null; + } + return { displayedNode: node, value: node.groupValue }; + } + const valueSvc = this.beans.valueSvc; + const rowGroupColId = column.colDef.showRowGroup; + if (!rowGroupColId) { + return null; + } + if (node.level === -1 && node.footer) { + return { displayedNode: node, value: null }; + } + if (typeof rowGroupColId === "string") { + const colRowGroupIndex = this.beans.rowGroupColsSvc?.getColumnIndex(rowGroupColId) ?? -1; + if (colRowGroupIndex > node.level) { + return null; + } + const hideOpenParentsNode = this.getDisplayedNode(node, column, true); + if (hideOpenParentsNode) { + return { + displayedNode: hideOpenParentsNode, + value: valueSvc.getValue(column, hideOpenParentsNode, "data", ignoreAggData) + }; + } + } + const value = valueSvc.getValue(column, node, "data", ignoreAggData); + if (value == null) { + const displayedNode = this.getDisplayedNode(node, column); + if (displayedNode) { + return { + displayedNode, + value: valueSvc.getValue(column, displayedNode, "data", ignoreAggData) + }; + } + } + return { displayedNode: node, value }; + } + /** + * Formats a group col value, and prefixes it with the "Total" prefix if applicable + */ + formatAndPrefixGroupColValue(groupValue, column, exporting = false) { + const formattedValue = this.formatGroupColValue(groupValue, column, exporting); + const { value, displayedNode } = groupValue; + const footerSvc = this.beans.footerSvc; + if (footerSvc?.doesCellShowTotalPrefix(displayedNode, column)) { + const footerValue = footerSvc.applyTotalPrefix(value, formattedValue, displayedNode, column); + return footerValue; + } + if (displayedNode.footer && displayedNode.level === -1) { + return null; + } + return formattedValue; + } + /** + * Formats the group col value using the underlying column's value formatter + */ + formatGroupColValue(groupValue, column, exporting = false) { + const valueSvc = this.beans.valueSvc; + const { displayedNode, value } = groupValue; + const groupedCol = displayedNode.rowGroupColumn; + const isFullWidthGroup = displayedNode.group && !column; + const isShowingGroupCell = groupedCol && (isFullWidthGroup || column?.isRowGroupDisplayed(groupedCol.colId)); + if (isShowingGroupCell) { + if (exporting && groupedCol.colDef.useValueFormatterForExport === false) { + return null; + } + const formattedValue = valueSvc.formatValue(groupedCol, displayedNode, value); + if (formattedValue == null && displayedNode.key === "") { + const localeTextFunc = this.getLocaleTextFunc(); + return localeTextFunc("blanks", "(Blanks)"); + } + return formattedValue; + } + if (!column || displayedNode.group) { + return null; + } + if (exporting && column.colDef.useValueFormatterForExport === false) { + return null; + } + return valueSvc.formatValue(column, displayedNode, value); + } + /** + * Checks if the node has a value to inherit from the parent node for display in the given column + * + * This is used when [groupHideOpenParents] or [showOpenedGroup] are enabled + * + * @param node node to check for preferential nodes to display + * @param column column to get the displayed node for + * @returns a parent node of node to display the value from, or undefined if no value will be inherited + */ + getDisplayedNode(node, column, onlyHideOpenParents = false) { + const gos = this.gos; + const isGroupHideOpenParents = gos.get("groupHideOpenParents"); + const isShowOpenedGroupValue = gos.get("showOpenedGroup") && !onlyHideOpenParents; + if (!isGroupHideOpenParents && !isShowOpenedGroupValue) { + return void 0; + } + const showRowGroup = column.colDef.showRowGroup; + if (showRowGroup === true) { + if (node.group) { + return void 0; + } + return node.parent ?? void 0; + } + let pointer = node; + while (pointer && pointer.rowGroupColumn?.getId() != showRowGroup) { + const isFirstChild = pointer === pointer.parent?.getFirstChild(); + if (!isShowOpenedGroupValue && !isFirstChild) { + return void 0; + } + pointer = pointer.parent; + } + if (pointer === node) { + return void 0; + } + return pointer ?? void 0; + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/showRowGroupColsService.ts +import { BeanStub as BeanStub38 } from "ag-grid-community"; +var ShowRowGroupColsService = class extends BeanStub38 { + constructor() { + super(...arguments); + this.beanName = "showRowGroupCols"; + this.columns = []; + this.colsSet = /* @__PURE__ */ new Set(); + this.colsMap = /* @__PURE__ */ new Map(); + } + destroy() { + super.destroy(); + this.columns.length = 0; + this.colsSet.clear(); + this.colsMap.clear(); + } + refresh() { + const { colModel, rowGroupColsSvc } = this.beans; + const showRowGroupCols = this.columns; + const showRowGroupColsSet = this.colsSet; + const showRowGroupColsMap = this.colsMap; + showRowGroupColsMap.clear(); + const oldShowRowGroupColsLLen = showRowGroupCols.length; + let showRowGroupColsCount = 0; + let showRowGroupColsSetChanged = false; + const cols = colModel.getCols(); + for (let colIdx = 0, colsLen = cols.length; colIdx < colsLen; ++colIdx) { + const col = cols[colIdx]; + const colDef = col.getColDef(); + const showRowGroup = colDef.showRowGroup; + if (typeof showRowGroup === "string") { + showRowGroupColsMap.set(showRowGroup, col); + } else if (showRowGroup === true) { + const groupColumns = rowGroupColsSvc?.columns; + if (groupColumns) { + for (let grpColIdx = 0, grpColsLen = groupColumns.length; grpColIdx < grpColsLen; ++grpColIdx) { + showRowGroupColsMap.set(groupColumns[grpColIdx].getId(), col); + } + } + } else { + continue; + } + showRowGroupColsSetChanged || (showRowGroupColsSetChanged = showRowGroupColsCount >= oldShowRowGroupColsLLen || !showRowGroupColsSet.has(col)); + showRowGroupCols[showRowGroupColsCount++] = col; + } + showRowGroupColsSetChanged || (showRowGroupColsSetChanged = showRowGroupColsCount !== oldShowRowGroupColsLLen); + if (showRowGroupColsSetChanged) { + showRowGroupCols.length = showRowGroupColsCount; + showRowGroupColsSet.clear(); + for (let j = 0; j < showRowGroupColsCount; ++j) { + showRowGroupColsSet.add(showRowGroupCols[j]); + } + this.eventSvc.dispatchEvent({ type: "showRowGroupColsSetChanged" }); + } + } + getShowRowGroupCol(id) { + return this.colsMap.get(id); + } + getSourceColumnsForGroupColumn(groupCol) { + const sourceColumnId = groupCol.getColDef().showRowGroup; + if (!sourceColumnId) { + return null; + } + const { rowGroupColsSvc, colModel } = this.beans; + if (sourceColumnId === true && rowGroupColsSvc) { + return rowGroupColsSvc.columns; + } + const column = colModel.getColDefCol(sourceColumnId); + return column ? [column] : null; + } + isRowGroupDisplayed(column, colId) { + const showRowGroup = column.getColDef()?.showRowGroup; + return showRowGroup === true || showRowGroup != null && showRowGroup === colId; + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/stickyRowService.ts +import { BeanStub as BeanStub40, _isClientSideRowModel as _isClientSideRowModel6, _isGroupRowsSticky as _isGroupRowsSticky2, _isServerSideRowModel as _isServerSideRowModel2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowHierarchy/stickyRowFeature.ts +import { BeanStub as BeanStub39, _getRowHeightForNode, _isClientSideRowModel as _isClientSideRowModel5, _isGroupRowsSticky, _last as _last10 } from "ag-grid-community"; +var StickyRowFeature = class extends BeanStub39 { + constructor(createRowCon, destroyRowCtrls) { + super(); + this.createRowCon = createRowCon; + this.destroyRowCtrls = destroyRowCtrls; + this.stickyTopRowCtrls = []; + this.stickyBottomRowCtrls = []; + // sticky rows pulls in extra rows from other pages which impacts row position + this.extraTopHeight = 0; + this.extraBottomHeight = 0; + } + postConstruct() { + this.isClientSide = _isClientSideRowModel5(this.gos); + this.beans.ctrlsSvc.whenReady(this, (params) => { + this.gridBodyCtrl = params.gridBodyCtrl; + }); + this.resetStickyContainers(); + } + setOffsetTop(offset) { + if (this.extraTopHeight === offset) { + return; + } + this.extraTopHeight = offset; + this.eventSvc.dispatchEvent({ + type: "stickyTopOffsetChanged", + offset + }); + } + setOffsetBottom(offset) { + if (this.extraBottomHeight === offset) { + return; + } + this.extraBottomHeight = offset; + } + resetOffsets() { + this.setOffsetBottom(0); + this.setOffsetTop(0); + } + /** + * Get the last pixel of the group, this pixel is used to push the sticky node up out of the viewport. + */ + getLastPixelOfGroup(row) { + return this.isClientSide ? getClientSideLastPixelOfGroup(row) : getServerSideLastPixelOfGroup(row); + } + /** + * Get the first pixel of the group, this pixel is used to push the sticky node down out of the viewport + */ + getFirstPixelOfGroup(row) { + if (row.footer) { + return row.sibling.rowTop + row.sibling.rowHeight - 1; + } + if (row.hasChildren()) { + return row.rowTop - 1; + } + return 0; + } + updateStickyRows(container) { + const isTop = container === "top"; + let newStickyContainerHeight = 0; + if (!this.canRowsBeSticky()) { + return this.refreshNodesAndContainerHeight(container, /* @__PURE__ */ new Set(), newStickyContainerHeight); + } + const newStickyRows = /* @__PURE__ */ new Set(); + const { rowModel, rowRenderer, pinnedRowModel, pageBounds, rowContainerHeight } = this.beans; + const { pageFirstPixel, pageLastPixel } = pageBounds.getCurrentPagePixelRange(); + const pixelAtContainerBoundary = isTop ? rowRenderer.firstVisibleVPixel - this.extraTopHeight : rowRenderer.lastVisibleVPixel - this.extraTopHeight; + const divStretchOffset = rowContainerHeight.divStretchOffset ?? 0; + const pageFirstPixelWithOffset = pageFirstPixel + divStretchOffset; + const pageLastPixelWithOffset = pageLastPixel + divStretchOffset; + const addStickyRow = (stickyRow) => { + newStickyRows.add(stickyRow); + if (isTop) { + const lastChildBottom = this.getLastPixelOfGroup(stickyRow); + const stickRowBottom = pixelAtContainerBoundary + newStickyContainerHeight + stickyRow.rowHeight; + if (lastChildBottom < stickRowBottom) { + stickyRow.stickyRowTop = newStickyContainerHeight + (lastChildBottom - stickRowBottom); + } else { + stickyRow.stickyRowTop = newStickyContainerHeight; + } + } else { + const lastChildBottom = this.getFirstPixelOfGroup(stickyRow); + const stickRowTop = pixelAtContainerBoundary - (newStickyContainerHeight + stickyRow.rowHeight); + if (lastChildBottom > stickRowTop) { + stickyRow.stickyRowTop = newStickyContainerHeight - (lastChildBottom - stickRowTop); + } else { + stickyRow.stickyRowTop = newStickyContainerHeight; + } + } + newStickyContainerHeight = 0; + newStickyRows.forEach((rowNode) => { + const thisRowLastPx = rowNode.stickyRowTop + rowNode.rowHeight; + if (newStickyContainerHeight < thisRowLastPx) { + newStickyContainerHeight = thisRowLastPx; + } + }); + }; + const suppressFootersSticky = this.areFooterRowsStickySuppressed(); + const suppressGroupsSticky = this.gos.get("suppressGroupRowsSticky"); + const isRowSticky = (row) => { + if (!row.displayed) { + return false; + } + if (row.footer) { + if (suppressFootersSticky === true) { + return false; + } + if (suppressFootersSticky === "grand" && row.level === -1) { + return false; + } + if (suppressFootersSticky === "group" && row.level > -1) { + return false; + } + const isFooterFirstRowInGroup = row.sibling.rowIndex ? row.sibling.rowIndex + 1 === row.rowIndex : false; + if (container === "bottom" && isFooterFirstRowInGroup) { + return false; + } + if (row.level === -1 && pinnedRowModel?.getGrandTotalPinned()) { + return false; + } + const alreadySticking = newStickyRows.has(row); + return !alreadySticking; + } + if (row.isExpandable()) { + if (suppressGroupsSticky === true) { + return false; + } + if (container === "bottom") { + return false; + } + const alreadySticking = newStickyRows.has(row); + return !alreadySticking && !!row.expanded; + } + return false; + }; + for (let i = 0; i < 100; i++) { + let firstPixelAfterStickyRows = pixelAtContainerBoundary + newStickyContainerHeight; + if (!isTop) { + firstPixelAfterStickyRows = pixelAtContainerBoundary - newStickyContainerHeight; + } + if (isTop && firstPixelAfterStickyRows < pageFirstPixelWithOffset) { + firstPixelAfterStickyRows = pageFirstPixelWithOffset; + } else if (!isTop && firstPixelAfterStickyRows > pageLastPixelWithOffset) { + firstPixelAfterStickyRows = pageLastPixelWithOffset; + } + const firstIndex = rowModel.getRowIndexAtPixel(firstPixelAfterStickyRows); + const firstRow = rowModel.getRow(firstIndex); + if (firstRow == null) { + break; + } + const ancestors = this.getStickyAncestors(firstRow); + const firstMissingParent = ancestors.find( + (parent) => (isTop ? parent.rowIndex < firstIndex : parent.rowIndex > firstIndex) && isRowSticky(parent) + ); + if (firstMissingParent) { + addStickyRow(firstMissingParent); + continue; + } + const isFirstRowOutsideViewport = isTop ? firstRow.rowTop < firstPixelAfterStickyRows : firstRow.rowTop + firstRow.rowHeight > firstPixelAfterStickyRows; + if (isFirstRowOutsideViewport && isRowSticky(firstRow)) { + addStickyRow(firstRow); + continue; + } + break; + } + if (!isTop) { + newStickyRows.forEach((rowNode) => { + rowNode.stickyRowTop = newStickyContainerHeight - (rowNode.stickyRowTop + rowNode.rowHeight); + }); + } + return this.refreshNodesAndContainerHeight(container, newStickyRows, newStickyContainerHeight); + } + areFooterRowsStickySuppressed() { + const suppressFootersSticky = this.gos.get("suppressStickyTotalRow"); + if (suppressFootersSticky === true) { + return true; + } + const suppressGroupRows = suppressFootersSticky === "group"; + const suppressGrandRows = suppressFootersSticky === "grand"; + if (suppressGroupRows && suppressGrandRows) { + return true; + } + if (suppressGrandRows) { + return "grand"; + } + if (suppressGroupRows) { + return "group"; + } + return false; + } + canRowsBeSticky() { + const isStickyEnabled = _isGroupRowsSticky(this.gos); + const suppressFootersSticky = this.areFooterRowsStickySuppressed(); + const suppressGroupsSticky = this.gos.get("suppressGroupRowsSticky"); + return isStickyEnabled && (!suppressFootersSticky || !suppressGroupsSticky); + } + getStickyAncestors(rowNode) { + const ancestors = []; + let p = rowNode.footer ? rowNode.sibling : rowNode.parent; + while (p) { + if (p.sibling) { + ancestors.push(p.sibling); + } + ancestors.push(p); + p = p.parent; + } + return ancestors.reverse(); + } + checkStickyRows() { + const hasTopUpdated = this.updateStickyRows("top"); + const hasBottomUpdated = this.updateStickyRows("bottom"); + return hasTopUpdated || hasBottomUpdated; + } + destroyStickyCtrls() { + this.resetStickyContainers(); + } + resetStickyContainers() { + this.refreshNodesAndContainerHeight("top", /* @__PURE__ */ new Set(), 0); + this.refreshNodesAndContainerHeight("bottom", /* @__PURE__ */ new Set(), 0); + } + refreshStickyNode(stickRowNode) { + const allStickyNodes = /* @__PURE__ */ new Set(); + if (this.stickyTopRowCtrls.some((ctrl) => ctrl.rowNode === stickRowNode)) { + for (let i = 0; i < this.stickyTopRowCtrls.length; i++) { + const currentNode = this.stickyTopRowCtrls[i].rowNode; + if (currentNode !== stickRowNode) { + allStickyNodes.add(currentNode); + } + } + if (this.refreshNodesAndContainerHeight("top", allStickyNodes, this.topContainerHeight)) { + this.checkStickyRows(); + } + return; + } + for (let i = 0; i < this.stickyBottomRowCtrls.length; i++) { + const currentNode = this.stickyBottomRowCtrls[i].rowNode; + if (currentNode !== stickRowNode) { + allStickyNodes.add(currentNode); + } + } + if (this.refreshNodesAndContainerHeight("bottom", allStickyNodes, this.bottomContainerHeight)) { + this.checkStickyRows(); + } + } + /** + * Destroy old ctrls and create new ctrls where necessary. + */ + refreshNodesAndContainerHeight(container, newStickyNodes, height) { + const isTop = container === "top"; + const previousCtrls = isTop ? this.stickyTopRowCtrls : this.stickyBottomRowCtrls; + const removedCtrlsMap = {}; + const remainingCtrls = []; + for (let i = 0; i < previousCtrls.length; i++) { + const node = previousCtrls[i].rowNode; + const hasBeenRemoved = !newStickyNodes.has(node); + if (hasBeenRemoved) { + removedCtrlsMap[node.id] = previousCtrls[i]; + node.sticky = false; + continue; + } + remainingCtrls.push(previousCtrls[i]); + } + const existingNodes = /* @__PURE__ */ new Set(); + for (let i = 0; i < remainingCtrls.length; i++) { + existingNodes.add(remainingCtrls[i].rowNode); + } + const newCtrls = []; + newStickyNodes.forEach((node) => { + if (existingNodes.has(node)) { + return; + } + node.sticky = true; + newCtrls.push(this.createRowCon(node, false, false)); + }); + let hasSomethingChanged = !!newCtrls.length || remainingCtrls.length !== previousCtrls.length; + if (isTop) { + if (this.topContainerHeight !== height) { + this.topContainerHeight = height; + this.gridBodyCtrl.setStickyTopHeight(height); + hasSomethingChanged = true; + } + } else if (this.bottomContainerHeight !== height) { + this.bottomContainerHeight = height; + this.gridBodyCtrl.setStickyBottomHeight(height); + hasSomethingChanged = true; + } + this.destroyRowCtrls(removedCtrlsMap, false); + const newCtrlsList = [...remainingCtrls, ...newCtrls]; + newCtrlsList.sort((a, b) => b.rowNode.rowIndex - a.rowNode.rowIndex); + if (!isTop) { + newCtrlsList.reverse(); + } + for (const ctrl of newCtrlsList) { + ctrl.setRowTop(ctrl.rowNode.stickyRowTop); + } + const pageBounds = this.beans.pageBounds; + let extraHeight = 0; + if (isTop) { + for (const node of newStickyNodes) { + if (node.rowIndex < pageBounds.getFirstRow()) { + extraHeight += node.rowHeight; + } + } + if (extraHeight > this.topContainerHeight) { + extraHeight = this.topContainerHeight; + } + this.setOffsetTop(extraHeight); + } else { + for (const node of newStickyNodes) { + if (node.rowIndex > pageBounds.getLastRow()) { + extraHeight += node.rowHeight; + } + } + if (extraHeight > this.bottomContainerHeight) { + extraHeight = this.bottomContainerHeight; + } + this.setOffsetBottom(extraHeight); + } + if (!hasSomethingChanged) { + return false; + } + if (isTop) { + this.stickyTopRowCtrls = newCtrlsList; + } else { + this.stickyBottomRowCtrls = newCtrlsList; + } + return true; + } + ensureRowHeightsValid() { + let anyChange = false; + const updateRowHeight = (ctrl) => { + const rowNode = ctrl.rowNode; + if (rowNode.rowHeightEstimated) { + const rowHeight = _getRowHeightForNode(this.beans, rowNode); + rowNode.setRowHeight(rowHeight.height); + anyChange = true; + } + }; + this.stickyTopRowCtrls.forEach(updateRowHeight); + this.stickyBottomRowCtrls.forEach(updateRowHeight); + return anyChange; + } +}; +function getServerSideLastPixelOfGroup(row) { + if (row.isExpandable() || row.footer) { + if (row.master && row.detailNode) { + return row.detailNode.rowTop + row.detailNode.rowHeight; + } + const noOrContiguousSiblings = !row.sibling || Math.abs(row.sibling.rowIndex - row.rowIndex) === 1; + if (noOrContiguousSiblings) { + let storeBounds = row.childStore?.getStoreBounds(); + if (row.footer) { + storeBounds = row.sibling.childStore?.getStoreBounds(); + } + return (storeBounds?.heightPx ?? 0) + (storeBounds?.topPx ?? 0); + } + if (row.footer) { + return row.rowTop + row.rowHeight; + } + return row.sibling.rowTop + row.sibling.rowHeight; + } + return Number.MAX_SAFE_INTEGER; +} +function getClientSideLastPixelOfGroup(row) { + if (row.isExpandable() || row.footer) { + const grandTotalAtTop = row.footer && row.rowIndex === 0; + if (grandTotalAtTop) { + return Number.MAX_SAFE_INTEGER; + } + const noOrContiguousSiblings = !row.sibling || Math.abs(row.sibling.rowIndex - row.rowIndex) === 1; + if (noOrContiguousSiblings) { + let lastAncestor = row.footer ? row.sibling : row; + while (lastAncestor.isExpandable() && lastAncestor.expanded) { + if (lastAncestor.master && lastAncestor.detailNode) { + lastAncestor = lastAncestor.detailNode; + } else if (lastAncestor.childrenAfterSort) { + if (lastAncestor.childrenAfterSort.length === 0) { + break; + } + lastAncestor = _last10(lastAncestor.childrenAfterSort); + } + } + return lastAncestor.rowTop + lastAncestor.rowHeight; + } + if (row.footer) { + return row.rowTop + row.rowHeight; + } + return row.sibling.rowTop + row.sibling.rowHeight; + } + return Number.MAX_SAFE_INTEGER; +} + +// packages/ag-grid-enterprise/src/rowHierarchy/stickyRowService.ts +var StickyRowService = class extends BeanStub40 { + constructor() { + super(...arguments); + this.beanName = "stickyRowSvc"; + } + createStickyRowFeature(ctrl, createRowCon, destroyRowCtrls) { + const gos = this.gos; + if (_isGroupRowsSticky2(gos) && _isClientSideRowModel6(gos) || _isServerSideRowModel2(gos)) { + return ctrl.createManagedBean(new StickyRowFeature(createRowCon, destroyRowCtrls)); + } + return void 0; + } +}; + +// packages/ag-grid-enterprise/src/rowHierarchy/rowHierarchyModule.ts +var GroupCellRendererModule = { + moduleName: "GroupCellRenderer", + version: VERSION, + userComponents: { + agGroupRowRenderer: GroupCellRenderer, + agGroupCellRenderer: GroupCellRenderer + }, + dynamicBeans: { groupCellRendererCtrl: GroupCellRendererCtrl }, + icons: { + // shown on row group when contracted (click to expand) + groupContracted: "tree-closed", + // shown on row group when expanded (click to contract) + groupExpanded: "tree-open" + }, + css: [groupCellStyles_default], + dependsOn: [EnterpriseCoreModule] +}; +var GroupColumnModule = { + moduleName: "GroupColumn", + version: VERSION, + beans: [ + AutoColService, + ShowRowGroupColsService, + ShowRowGroupColValueService, + RowGroupColsSvc, + PivotColsSvc, + ValueColsSvc + ], + dependsOn: [EnterpriseCoreModule, GroupCellRendererModule] +}; +var ChangedPathModule = { + moduleName: "ChangedPath", + version: VERSION, + beans: [ChangedPathFactory], + dependsOn: [EnterpriseCoreModule] +}; +var ClientSideRowModelHierarchyModule = { + moduleName: "ClientSideRowModelHierarchy", + version: VERSION, + rowModels: ["clientSide"], + beans: [GroupStage, FlattenStage, ClientSideExpansionService], + dependsOn: [EnterpriseCoreModule, ChangedPathModule] +}; +var StickyRowModule = { + moduleName: "StickyRow", + version: VERSION, + beans: [StickyRowService] +}; +var GroupEditModule = { + moduleName: "GroupEdit", + version: VERSION, + beans: [GroupEditService], + dependsOn: [EnterpriseCoreModule, ClientSideRowModelHierarchyModule] +}; + +// packages/ag-grid-enterprise/src/groupHierarchy/groupHierarchyColService.ts +import { + AgColumn as AgColumn2, + BeanStub as BeanStub41, + GROUP_HIERARCHY_COLUMN_ID_PREFIX, + _addColumnDefaultAndTypes as _addColumnDefaultAndTypes2, + _areColIdsEqual as _areColIdsEqual2, + _columnsMatch as _columnsMatch2, + _destroyColumnTree as _destroyColumnTree2, + _removeAllFromArray, + _updateColsMap as _updateColsMap2 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/groupHierarchy/groupHierarchyUtils.ts +import { _MONTHS, _getDateParts as _getDateParts2, _parseDateTimeFromString as _parseDateTimeFromString2 } from "ag-grid-community"; +var getDate = ({ valueSvc, dataTypeSvc }, sourceCol, node) => { + const innerValue = valueSvc.getValue(sourceCol, node, "data"); + let date = null; + if (innerValue instanceof Date) { + date = innerValue; + } else if (typeof innerValue === "string") { + const parseDate = dataTypeSvc?.getDateParserFunction(sourceCol) ?? _parseDateTimeFromString2; + date = parseDate(innerValue) ?? null; + } + return date; +}; +var getDatePartValueGetter = (beans, col, index, map) => (params) => { + const date = getDate(beans, col, params.node); + const parts = _getDateParts2(date); + if (!parts) { + return null; + } + return map?.(parts[index]) ?? parts[index]; +}; +var getHeaderValueGetter = ({ colNames }, col, part) => (params) => { + const sourceName = colNames.getDisplayNameForColumn(col, params.location); + if (sourceName) { + return `${sourceName} (${part})`; + } + return ""; +}; +var MONTH_TO_LOCALE_KEY = Object.fromEntries(_MONTHS.map((m) => [m, m.toLowerCase()])); +var numericalMonthToNamedMonth = (monthStr) => { + const month = _MONTHS[Number.parseInt(monthStr, 10) - 1] ?? monthStr; + const localeKey = MONTH_TO_LOCALE_KEY[month] ?? monthStr; + return { month, localeKey }; +}; +function _getGroupHierarchy(colDef) { + return colDef.groupHierarchy ?? colDef.rowGroupingHierarchy; +} + +// packages/ag-grid-enterprise/src/groupHierarchy/groupHierarchyColService.ts +var GroupHierarchyColService = class extends BeanStub41 { + constructor() { + super(...arguments); + this.beanName = "groupHierarchyColSvc"; + this.columns = null; + /** Map from primary column to virtual (i.e. generated) columns */ + this.sourceColumnMap = /* @__PURE__ */ new WeakMap(); + /** Map from virtual column to associated primary column. Inverse of `sourceColumnMap` */ + this.inverseColumnMap = /* @__PURE__ */ new WeakMap(); + } + addColumns(cols) { + const groupHierarchyCols = this.columns; + if (groupHierarchyCols == null) { + return; + } + cols.list = groupHierarchyCols.list.filter((col) => !cols.list.some((c) => c.getColId() === col.getColId())).concat(cols.list); + cols.tree = groupHierarchyCols.tree.filter((col) => !cols.tree.some((c) => c.getId() === col.getId())).concat(cols.tree); + _updateColsMap2(cols); + } + createColumns(cols) { + const newSourceColumnMap = /* @__PURE__ */ new WeakMap(); + const newInverseColumnMap = /* @__PURE__ */ new WeakMap(); + const list = this.createGroupHierarchyColumns(cols, newSourceColumnMap, newInverseColumnMap); + const areSame = _areColIdsEqual2(list, this.columns?.list ?? []); + if (areSame) { + return; + } + _destroyColumnTree2(this.beans, this.columns?.tree); + this.columns = null; + const { colGroupSvc } = this.beans; + const treeDepth = colGroupSvc?.findDepth(cols.tree) ?? 0; + const tree = colGroupSvc?.balanceTreeForAutoCols(list, treeDepth) ?? []; + this.columns = { + list, + tree, + treeDepth, + map: {} + }; + this.sourceColumnMap = newSourceColumnMap; + this.inverseColumnMap = newInverseColumnMap; + } + updateColumns(_event) { + } + getColumn(key) { + return this.columns?.list.find((col) => _columnsMatch2(col, key)) ?? null; + } + getColumns() { + return this.columns?.list ?? null; + } + expandColumnInto(target, col) { + const expanded = this.getVirtualColumnsForColumn(col).concat(col); + for (const expandedCol of expanded) { + if (!target.some((_c) => _columnsMatch2(_c, expandedCol) || _c.getColId() === expandedCol.getColId())) { + target.push(expandedCol); + } + } + } + compareVirtualColumns(colA, colB) { + const sourceA = this.inverseColumnMap.get(colA); + const sourceB = this.inverseColumnMap.get(colB); + if (sourceA && sourceA === sourceB) { + const hierarchyCols = this.sourceColumnMap.get(sourceA) ?? []; + return hierarchyCols?.indexOf(colA) - hierarchyCols?.indexOf(colB); + } + if (this.sourceColumnMap.get(colA)?.includes(colB)) { + return 1; + } + if (this.sourceColumnMap.get(colB)?.includes(colA)) { + return -1; + } + return null; + } + insertVirtualColumnsForCol(columns, col) { + const hierarchyCols = this.getVirtualColumnsForColumn(col); + if (!hierarchyCols) { + return []; + } + let idxCol = columns.indexOf(col); + if (idxCol < 0) { + idxCol = columns.length - 1; + } + _removeAllFromArray(columns, hierarchyCols); + columns.splice(idxCol, 0, ...hierarchyCols); + return hierarchyCols; + } + getVirtualColumnsForColumn(col) { + if (this.isGroupHierarchyColsEnabledForCol(col)) { + return this.sourceColumnMap.get(col) ?? []; + } + return []; + } + isGroupHierarchyColsEnabled(cols) { + return cols.list.some((col) => this.isGroupHierarchyColsEnabledForCol(col)); + } + isGroupHierarchyColsEnabledForCol(col) { + const def = col.getColDef(); + const groupHierarchy = _getGroupHierarchy(def); + return !!(groupHierarchy && (def.rowGroup || def.enableRowGroup || def.rowGroupIndex != null || def.pivot || def.enablePivot || def.pivotIndex != null)); + } + createGroupHierarchyColDefs(sourceCol) { + const colDefs = []; + const sourceColDef = sourceCol.getColDef(); + const groupHierarchy = _getGroupHierarchy(sourceColDef); + if (!groupHierarchy) { + return colDefs; + } + if (!this.isGroupHierarchyColsEnabledForCol(sourceCol)) { + return colDefs; + } + for (const part of groupHierarchy) { + let colDef = null; + if (typeof part === "string") { + colDef = this.createColDefForPart(part, sourceCol, sourceColDef); + } else { + colDef = part; + } + if (colDef) { + colDefs.push(colDef); + } + } + return colDefs; + } + createGroupHierarchyColumns(cols, sourceColMap, inverseColMap) { + if (!this.isGroupHierarchyColsEnabled(cols)) { + return []; + } + const newCols = []; + for (const col of cols.list) { + for (const colDef of this.createGroupHierarchyColDefs(col)) { + const colId = colDef.colId; + this.gos.validateColDef(colDef, colId, true); + const newCol = new AgColumn2(colDef, null, colId, true); + this.createBean(newCol); + newCols.push(newCol); + updateMap(sourceColMap, col, newCol); + inverseColMap.set(newCol, col); + } + } + return newCols; + } + createColDefForPart(part, sourceCol, sourceColDef) { + const { beans, gos } = this; + const colId = `${GROUP_HIERARCHY_COLUMN_ID_PREFIX}-${sourceCol.getColId()}-${part}`; + const defaults = { + enableRowGroup: sourceColDef.enableRowGroup, + rowGroup: sourceColDef.rowGroup, + enablePivot: sourceColDef.enablePivot, + hide: true, + editable: false + }; + const groupHierarchyConfig = gos.get("groupHierarchyConfig") ?? {}; + if (part in groupHierarchyConfig) { + const colDef = { ...defaults, ...groupHierarchyConfig[part] }; + colDef.colId ?? (colDef.colId = colId); + return _addColumnDefaultAndTypes2(beans, colDef, colDef.colId, true); + } + const base = _addColumnDefaultAndTypes2(beans, { colId, ...defaults }, colId, true); + const translate = this.getLocaleTextFunc(); + const translatePart = (part2, fallback) => translate?.(part2, fallback) ?? fallback; + switch (part) { + case "year": + return { + ...base, + headerValueGetter: getHeaderValueGetter(beans, sourceCol, translatePart(part, "Year")), + valueGetter: getDatePartValueGetter(beans, sourceCol, 0) + }; + case "quarter": + return { + ...base, + headerValueGetter: getHeaderValueGetter(beans, sourceCol, translatePart(part, "Quarter")), + valueGetter: getDatePartValueGetter( + beans, + sourceCol, + 1, + (month) => (Math.floor(Number(month) / 4) + 1).toString() + ) + }; + case "month": + return { + ...base, + headerValueGetter: getHeaderValueGetter(beans, sourceCol, translatePart(part, "Month")), + valueGetter: getDatePartValueGetter(beans, sourceCol, 1) + }; + case "formattedMonth": + return { + ...base, + headerValueGetter: getHeaderValueGetter(beans, sourceCol, translatePart("month", "Month")), + valueGetter: getDatePartValueGetter(beans, sourceCol, 1, (month) => { + const nm = numericalMonthToNamedMonth(month); + return translatePart(nm.localeKey, nm.month); + }) + }; + case "day": + return { + ...base, + headerValueGetter: getHeaderValueGetter(beans, sourceCol, translatePart(part, "Day")), + valueGetter: getDatePartValueGetter(beans, sourceCol, 2) + }; + case "hour": + return { + ...base, + headerValueGetter: getHeaderValueGetter(beans, sourceCol, translatePart(part, "Hour")), + valueGetter: getDatePartValueGetter(beans, sourceCol, 3) + }; + case "minute": + return { + ...base, + headerValueGetter: getHeaderValueGetter(beans, sourceCol, translatePart(part, "Minute")), + valueGetter: getDatePartValueGetter(beans, sourceCol, 4) + }; + case "second": + return { + ...base, + headerValueGetter: getHeaderValueGetter(beans, sourceCol, translatePart(part, "Second")), + valueGetter: getDatePartValueGetter(beans, sourceCol, 5) + }; + default: + return null; + } + } +}; +function updateMap(wm, key, value) { + const existing = wm.get(key); + wm.set(key, (existing ?? []).concat(value)); +} + +// packages/ag-grid-enterprise/src/groupHierarchy/groupHierarchyModule.ts +var GroupHierarchyModule = { + moduleName: "GroupHierarchy", + version: VERSION, + beans: [GroupHierarchyColService], + dependsOn: [ChangedPathModule] +}; + +// packages/ag-grid-enterprise/src/rowGrouping/columnDropZones/agGridHeaderDropZones.ts +import { Component as Component38, _createElement as _createElement11 } from "ag-grid-community"; +var AgGridHeaderDropZones = class extends Component38 { + constructor() { + super(); + } + postConstruct() { + this.setGui(this.createNorthPanel()); + const onRowGroupChanged = this.onRowGroupChanged.bind(this); + this.addManagedEventListeners({ + columnRowGroupChanged: onRowGroupChanged, + newColumnsLoaded: onRowGroupChanged + }); + this.addManagedPropertyListener("rowGroupPanelShow", onRowGroupChanged); + this.addManagedPropertyListener("pivotPanelShow", () => this.onPivotPanelShow()); + this.onRowGroupChanged(); + } + createNorthPanel() { + const topPanelGui = _createElement11({ tag: "div", cls: "ag-column-drop-wrapper", role: "presentation" }); + const rowGroupComp = new RowGroupDropZonePanel(true); + this.rowGroupComp = this.createManagedBean(rowGroupComp); + const pivotComp = new PivotDropZonePanel(true); + this.pivotComp = this.createManagedBean(pivotComp); + topPanelGui.appendChild(rowGroupComp.getGui()); + topPanelGui.appendChild(pivotComp.getGui()); + const listener = this.onDropPanelVisible.bind(this); + this.addManagedListeners(rowGroupComp, { + displayChanged: listener + }); + this.addManagedListeners(pivotComp, { + displayChanged: listener + }); + this.onDropPanelVisible(); + return topPanelGui; + } + onDropPanelVisible() { + const { rowGroupComp, pivotComp } = this; + const bothDisplayed = rowGroupComp.isDisplayed() && pivotComp.isDisplayed(); + const classStr = "ag-column-drop-horizontal-half-width"; + rowGroupComp.toggleCss(classStr, bothDisplayed); + pivotComp.toggleCss(classStr, bothDisplayed); + } + onRowGroupChanged() { + const rowGroupComp = this.rowGroupComp; + if (!rowGroupComp) { + return; + } + const rowGroupPanelShow = this.gos.get("rowGroupPanelShow"); + if (rowGroupPanelShow === "always") { + rowGroupComp.setDisplayed(true); + } else if (rowGroupPanelShow === "onlyWhenGrouping") { + const grouping = this.beans.rowGroupColsSvc?.columns?.length !== 0; + rowGroupComp.setDisplayed(grouping); + } else { + rowGroupComp.setDisplayed(false); + } + } + onPivotPanelShow() { + const pivotComp = this.pivotComp; + if (!pivotComp) { + return; + } + const pivotPanelShow = this.gos.get("pivotPanelShow"); + if (pivotPanelShow === "always") { + pivotComp.setDisplayed(true); + } else if (pivotPanelShow === "onlyWhenPivoting") { + const pivoting = this.beans.colModel.isPivotActive(); + pivotComp.setDisplayed(pivoting); + } else { + pivotComp.setDisplayed(false); + } + } + getFocusableContainers() { + return [this.rowGroupComp, this.pivotComp].filter((comp) => !!comp); + } +}; +var AgGridHeaderDropZonesSelector = { + selector: "AG-GRID-HEADER-DROP-ZONES", + component: AgGridHeaderDropZones +}; + +// packages/ag-grid-enterprise/src/rowGrouping/groupFilter/groupFilter.ts +import { + AgPromise as AgPromise11, + AgSelect, + FilterComp as FilterComp2, + RefPlaceholder as RefPlaceholder36, + TabGuardComp as TabGuardComp3, + _clearElement as _clearElement12, + _createElement as _createElement12, + _setDisplayed as _setDisplayed19, + _warn as _warn30 +} from "ag-grid-community"; +function processGroupFilterParams(params) { + if (params.buttons) { + params.buttons = []; + } + return params; +} +var GroupFilterElement = { + tag: "div", + cls: "ag-group-filter", + children: [ + { tag: "div", ref: "eGroupField" }, + { tag: "div", ref: "eUnderlyingFilter" } + ] +}; +var GroupFilter = class extends TabGuardComp3 { + constructor() { + super(GroupFilterElement); + this.filterType = "group"; + this.eGroupField = RefPlaceholder36; + this.eUnderlyingFilter = RefPlaceholder36; + } + wireBeans(beans) { + this.groupFilterSvc = beans.groupFilter; + } + postConstruct() { + this.initialiseTabGuard({}); + } + init(legacyParams) { + this.params = legacyParams; + return this.updateParams().then(() => { + this.addHandlerListeners(this.updateGroups.bind(this)); + }); + } + refresh(legacyParams) { + const params = legacyParams; + this.params = params; + if (params.source === "colDef") { + this.updateParams(); + } + return true; + } + updateParams() { + this.validateParams(); + return this.updateGroups(); + } + validateParams() { + const { colDef } = this.params; + if (colDef.field) { + _warn30(234); + } + if (colDef.filterValueGetter) { + _warn30(235); + } + if (colDef.filterParams) { + _warn30(236); + } + } + addHandlerListeners(listener) { + const destroyFunctions = this.addManagedListeners(this.getHandler(), { + sourceColumnsChanged: () => { + this.updateGroups(); + }, + destroyed: () => { + for (const func of destroyFunctions) { + func(); + } + this.addHandlerListeners(listener); + } + }); + } + updateGroups() { + const { sourceColumns, selectedColumn } = this.updateGroupField(); + this.dispatchLocalEvent({ + type: "columnsChanged" + }); + return this.getUnderlyingFilters(sourceColumns, selectedColumn); + } + updateGroupField() { + this.groupColumn = this.params.column; + const handler = this.getHandler(); + if (!handler) { + return { sourceColumns: null }; + } + const { sourceColumns, hasMultipleColumns, selectedColumn } = handler; + const eGroupField = this.eGroupField; + _clearElement12(eGroupField); + if (this.eGroupFieldSelect) { + this.destroyBean(this.eGroupFieldSelect); + } + if (hasMultipleColumns && sourceColumns) { + this.createGroupFieldSelectElement(sourceColumns, selectedColumn); + eGroupField.appendChild(this.eGroupFieldSelect.getGui()); + eGroupField.appendChild(_createElement12({ tag: "div", cls: "ag-filter-separator" })); + } + _setDisplayed19(eGroupField, hasMultipleColumns); + return { sourceColumns, selectedColumn }; + } + createGroupFieldSelectElement(sourceColumns, selectedColumn) { + const eGroupFieldSelect = this.createManagedBean(new AgSelect()); + this.eGroupFieldSelect = eGroupFieldSelect; + const localeTextFunc = this.getLocaleTextFunc(); + eGroupFieldSelect.setLabel(localeTextFunc("groupFilterSelect", "Select field:")); + eGroupFieldSelect.setLabelAlignment("top"); + eGroupFieldSelect.addOptions( + sourceColumns.map((sourceColumn) => ({ + value: sourceColumn.getColId(), + text: this.beans.colNames.getDisplayNameForColumn(sourceColumn, "groupFilter", false) ?? void 0 + })) + ); + eGroupFieldSelect.setValue(selectedColumn.getColId()); + eGroupFieldSelect.onValueChange((newValue) => this.updateSelectedColumn(newValue)); + eGroupFieldSelect.addCss("ag-group-filter-field-select-wrapper"); + if (sourceColumns.length === 1) { + eGroupFieldSelect.setDisabled(true); + } + } + getUnderlyingFilters(sourceColumns, selectedColumn) { + if (!sourceColumns) { + this.filterColumnPairs = void 0; + this.selectedFilter = void 0; + return AgPromise11.resolve(); + } + const filterPromises = []; + const filterColumnPairs = []; + const colFilter = this.beans.colFilter; + for (const column of sourceColumns) { + const filterPromise = colFilter.getOrCreateFilterUi(column); + if (filterPromise) { + filterPromises.push( + filterPromise.then((filter) => { + if (filter) { + filterColumnPairs.push({ + filter, + column + }); + } + if (column.getColId() === selectedColumn.getColId()) { + this.selectedFilter = filter ?? void 0; + } + }) + ); + } + } + return AgPromise11.all(filterPromises).then(() => { + this.filterColumnPairs = filterColumnPairs; + }); + } + addUnderlyingFilterElement(selectedColumn) { + _clearElement12(this.eUnderlyingFilter); + if (!selectedColumn) { + return AgPromise11.resolve(); + } + const comp = this.createManagedBean(new FilterComp2(selectedColumn, "COLUMN_MENU")); + this.filterComp = comp; + if (!comp.hasFilter()) { + return AgPromise11.resolve(); + } + this.eUnderlyingFilter.appendChild(comp.getGui()); + return comp.getFilter()?.then(() => { + comp.afterGuiAttached?.(this.afterGuiAttachedParams); + if (!this.afterGuiAttachedParams?.suppressFocus && this.eGroupFieldSelect && !this.eGroupFieldSelect.isDisabled()) { + this.eGroupFieldSelect.getFocusableElement().focus(); + } + }) ?? AgPromise11.resolve(); + } + updateSelectedColumn(columnId) { + if (!columnId) { + return; + } + this.filterComp?.afterGuiDetached(); + this.destroyBean(this.filterComp); + const selectedFilterColumnPair = this.getFilterColumnPair(columnId); + const selectedColumn = selectedFilterColumnPair?.column; + this.selectedFilter = selectedFilterColumnPair?.filter; + this.getHandler().setSelectedColumn(selectedColumn); + this.dispatchLocalEvent({ + type: "columnsChanged" + }); + this.addUnderlyingFilterElement(selectedColumn); + } + isFilterActive() { + return this.groupFilterSvc.isFilterActive(this.groupColumn); + } + doesFilterPass() { + return true; + } + getModel() { + return null; + } + setModel() { + } + afterGuiAttached(params) { + this.afterGuiAttachedParams = params; + this.addUnderlyingFilterElement(this.getHandler().selectedColumn); + } + afterGuiDetached() { + _clearElement12(this.eUnderlyingFilter); + this.selectedFilter?.afterGuiDetached?.(); + } + getSelectedColumn() { + return this.getHandler().selectedColumn; + } + getHandler() { + return this.params.getHandler(); + } + getFilterColumnPair(columnId) { + if (!columnId) { + return void 0; + } + return this.filterColumnPairs?.find(({ column }) => column.getColId() === columnId); + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/groupFilter/groupFilterHandler.ts +import { BeanStub as BeanStub42, _warn as _warn31 } from "ag-grid-community"; +var GroupFilterHandler = class extends BeanStub42 { + init(params) { + this.params = params; + this.validateModel(params); + this.updateColumns(); + this.addManagedEventListeners({ + columnRowGroupChanged: this.updateColumns.bind(this), + filterDestroyed: (event) => this.onFilterDestroyed(event) + }); + } + refresh(params) { + this.params = params; + this.validateModel(params); + if (params.source === "colDef") { + this.updateColumns(); + } + } + doesFilterPass() { + return true; + } + setSelectedColumn(selectedColumn) { + this.selectedColumn = selectedColumn; + this.dispatchLocalEvent({ type: "selectedColumnChanged" }); + } + validateModel(params) { + if (params.model != null) { + params.onModelChange(null); + } + } + getSourceColumns() { + const groupColumn = this.params.column; + if (this.gos.get("treeData")) { + _warn31(237); + return []; + } + const sourceColumns = this.beans.groupFilter.getSourceColumns(groupColumn); + if (!sourceColumns) { + _warn31(183); + return []; + } + return sourceColumns; + } + updateColumns() { + const allSourceColumns = this.getSourceColumns(); + const sourceColumns = allSourceColumns.filter((sourceColumn) => sourceColumn.isFilterAllowed()); + this.sourceColumns = sourceColumns; + let selectedColumn; + let hasMultipleColumns; + if (!sourceColumns.length) { + selectedColumn = void 0; + hasMultipleColumns = false; + } else if (allSourceColumns.length === 1) { + selectedColumn = sourceColumns[0]; + hasMultipleColumns = false; + } else { + selectedColumn = this.selectedColumn; + if (!selectedColumn || !sourceColumns.some((column) => column.getId() === selectedColumn.getId())) { + selectedColumn = sourceColumns[0]; + } + hasMultipleColumns = true; + } + this.selectedColumn = selectedColumn; + this.hasMultipleColumns = hasMultipleColumns; + this.dispatchLocalEvent({ type: "sourceColumnsChanged" }); + } + onFilterDestroyed({ column: eventColumn, source }) { + if (source === "gridDestroyed") { + return; + } + const colId = eventColumn.getColId(); + if (this.sourceColumns?.some((column) => column.getColId() === colId)) { + setTimeout(() => { + if (this.isAlive()) { + this.updateColumns(); + } + }); + } + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/groupFilter/groupFilterService.ts +import { BeanStub as BeanStub43 } from "ag-grid-community"; +var GroupFilterService = class extends BeanStub43 { + constructor() { + super(...arguments); + this.beanName = "groupFilter"; + } + postConstruct() { + this.addManagedEventListeners({ + columnRowGroupChanged: () => this.updateFilterFlags("columnRowGroupChanged") + }); + } + isGroupFilter(column) { + return column.getColDef().filter === "agGroupColumnFilter"; + } + isFilterAllowed(column) { + const colFilter = this.beans.colFilter; + return !!this.getSourceColumns(column)?.some((column2) => colFilter?.isFilterAllowed(column2)); + } + isFilterActive(column) { + const colFilter = this.beans.colFilter; + return !!this.getSourceColumns(column)?.some((column2) => colFilter?.isFilterActive(column2)); + } + getSourceColumns(column) { + return this.beans.showRowGroupCols?.getSourceColumnsForGroupColumn(column); + } + updateFilterFlags(source, additionalEventAttributes) { + const { autoColSvc, colFilter } = this.beans; + autoColSvc?.getColumns()?.forEach((groupColumn) => { + if (this.isGroupFilter(groupColumn)) { + colFilter?.setColFilterActive( + groupColumn, + this.isFilterActive(groupColumn), + source, + additionalEventAttributes + ); + } + }); + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/groupFilter/groupFloatingFilter.ts +import { + AgInputTextField as AgInputTextField3, + AgPromise as AgPromise12, + Component as Component39, + RefPlaceholder as RefPlaceholder37, + _clearElement as _clearElement13, + _isGroupMultiAutoColumn as _isGroupMultiAutoColumn3 +} from "ag-grid-community"; +var GroupFloatingFilterElement = { + tag: "div", + ref: "eFloatingFilter", + cls: "ag-group-floating-filter ag-floating-filter-input", + role: "presentation" +}; +var GroupFloatingFilterComp = class extends Component39 { + constructor() { + super(GroupFloatingFilterElement); + this.eFloatingFilter = RefPlaceholder37; + this.haveAddedColumnListeners = false; + } + init(params) { + this.params = params; + const canShowUnderlyingFloatingFilter = _isGroupMultiAutoColumn3(this.gos); + const onColChange = this.onColChange.bind(this); + const setupFilterElement = (resolve) => { + if (canShowUnderlyingFloatingFilter) { + this.setupUnderlyingFloatingFilterElement().then(() => resolve()); + } else { + this.setupReadOnlyFloatingFilterElement(); + resolve(); + } + }; + if (this.gos.get("enableFilterHandlers")) { + return new AgPromise12((resolve) => setupFilterElement(resolve)).then(() => { + this.addHandlerListeners(params, onColChange); + }); + } else { + return new AgPromise12((resolve) => { + this.params.parentFilterInstance((parentFilterInstance) => { + this.parentFilterInstance = parentFilterInstance; + setupFilterElement(resolve); + }); + }).then(() => { + this.addManagedListeners(this.parentFilterInstance, { + columnsChanged: onColChange + }); + }); + } + } + refresh(params) { + this.params = params; + this.setParams(); + if (this.gos.get("enableFilterHandlers")) { + if (this.showingUnderlyingFloatingFilter) { + const column = this.getSelectedColumn(); + const compDetails = this.beans.colFilter.getFloatingFilterCompDetails( + column, + this.params.showParentFilter + ); + this.underlyingFloatingFilter?.refresh?.(compDetails?.params); + } else { + this.updateDisplayedValue(); + } + } + } + setParams() { + const displayName = this.beans.colNames.getDisplayNameForColumn(this.params.column, "header", true); + const translate = this.getLocaleTextFunc(); + this.eFloatingFilterText?.setInputAriaLabel(`${displayName} ${translate("ariaFilterInput", "Filter Input")}`); + } + addHandlerListeners(params, listener) { + const destroyFunctions = this.addManagedListeners(params.getHandler(), { + selectedColumnChanged: listener, + sourceColumnsChanged: listener, + destroyed: () => { + for (const func of destroyFunctions) { + func(); + } + this.addHandlerListeners(this.params, listener); + } + }); + } + setupReadOnlyFloatingFilterElement() { + if (!this.eFloatingFilterText) { + this.eFloatingFilterText = this.createManagedBean(new AgInputTextField3()); + this.eFloatingFilterText.setDisabled(true).addGuiEventListener("click", () => this.params.showParentFilter()); + this.setParams(); + } + this.updateDisplayedValue(); + this.eFloatingFilter.appendChild(this.eFloatingFilterText.getGui()); + } + setupUnderlyingFloatingFilterElement() { + this.showingUnderlyingFloatingFilter = false; + this.underlyingFloatingFilter = void 0; + _clearElement13(this.eFloatingFilter); + const column = this.getSelectedColumn(); + if (column && !column.isVisible()) { + const colFilter = this.beans.colFilter; + const compDetails = colFilter.getFloatingFilterCompDetails(column, this.params.showParentFilter); + if (compDetails) { + if (!this.haveAddedColumnListeners) { + this.haveAddedColumnListeners = true; + this.addManagedListeners(column, { + visibleChanged: this.onColumnVisibleChanged.bind(this), + colDefChanged: this.onColDefChanged.bind(this) + }); + } + return compDetails.newAgStackInstance().then((floatingFilter) => { + this.underlyingFloatingFilter = floatingFilter; + this.underlyingFloatingFilter?.onParentModelChanged(colFilter.getModelForColumn(column)); + this.appendChild(floatingFilter.getGui()); + this.showingUnderlyingFloatingFilter = true; + }); + } + } + this.setupReadOnlyFloatingFilterElement(); + return AgPromise12.resolve(); + } + getSelectedColumn() { + if (this.gos.get("enableFilterHandlers")) { + const reactiveParams = this.params; + return reactiveParams.getHandler().selectedColumn; + } else { + return this.parentFilterInstance.getSelectedColumn(); + } + } + onColumnVisibleChanged() { + this.setupUnderlyingFloatingFilterElement(); + } + onColDefChanged(event) { + if (!event.column) { + return; + } + const compDetails = this.beans.colFilter.getFloatingFilterCompDetails( + event.column, + this.params.showParentFilter + ); + if (compDetails) { + this.underlyingFloatingFilter?.refresh?.(compDetails.params); + } + } + onParentModelChanged(_model, event) { + if (this.showingUnderlyingFloatingFilter) { + this.underlyingFloatingFilter?.onParentModelChanged( + this.beans.colFilter.getModelForColumn(this.getSelectedColumn()), + event + ); + } else { + this.updateDisplayedValue(); + } + } + updateDisplayedValue() { + const eFloatingFilterText = this.eFloatingFilterText; + if (!eFloatingFilterText) { + return; + } + const colFilter = this.beans.colFilter; + const column = this.getSelectedColumn(); + const updateText = (filterOrHandler) => { + if (!filterOrHandler) { + eFloatingFilterText.setValue(""); + eFloatingFilterText.setDisplayed(false); + } else { + const model = column ? colFilter.getModelForColumn(column) : null; + eFloatingFilterText.setValue(model == null ? "" : filterOrHandler.getModelAsString?.(model) ?? ""); + eFloatingFilterText.setDisplayed(true); + } + }; + if (!column) { + updateText(); + } else if (this.gos.get("enableFilterHandlers")) { + updateText(colFilter.getHandler(column)); + } else { + colFilter.getOrCreateFilterUi(column)?.then((filter) => { + updateText(filter); + }); + } + } + onColChange() { + if (!this.showingUnderlyingFloatingFilter) { + this.updateDisplayedValue(); + } + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/groupStrategy/groupStrategy.ts +import { BeanStub as BeanStub44, RowNode, _csrmFirstLeaf as _csrmFirstLeaf2, _forEachChangedGroupDepthFirst as _forEachChangedGroupDepthFirst3, _warn as _warn32 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowGrouping/groupStrategy/groupColumns.ts +var makeGroupColumns = (columns, result) => { + if (!columns) { + result.length = 0; + return; + } + const len = columns.length; + result.length = len; + for (let i = 0; i < len; i++) { + const col = columns[i]; + const colDef = col.getColDef(); + result[i] = { + col, + field: colDef.field, + type: colDef.type, + keyCreator: colDef.keyCreator, + valueGetter: colDef.valueGetter + }; + } +}; +var groupColumnsChanged = (groupColumns, columns) => { + const len = groupColumns.length; + if (len !== columns?.length) { + return true; + } + for (let i = 0; i < len; i++) { + const a = groupColumns[i]; + const b = columns[i]; + if (a.col !== b) { + return true; + } + const bColDef = b.getColDef(); + if (a.field !== bColDef.field || a.type !== bColDef.type || a.valueGetter !== bColDef.valueGetter || a.keyCreator !== bColDef.keyCreator) { + return true; + } + } + return false; +}; + +// packages/ag-grid-enterprise/src/rowGrouping/groupStrategy/sortGroupChildren.ts +function sortGroupChildren(rowNodes) { + if (!rowNodes) { + return false; + } + const length = rowNodes.length; + if (length < 2) { + return false; + } + let atLeastOneOutOfOrder = false; + for (let i = 1; i < length; i++) { + if (compareGroupChildren(rowNodes[i - 1], rowNodes[i]) > 0) { + atLeastOneOutOfOrder = true; + break; + } + } + if (!atLeastOneOutOfOrder) { + return false; + } + rowNodes.sort(compareGroupChildren); + return true; +} +function compareGroupChildren(nodeA, nodeB) { + const positionA = nodeA.sourceRowIndex; + const positionB = nodeB.sourceRowIndex; + const aHasIndex = positionA >= 0; + const bHasIndex = positionB >= 0; + const bothNodesAreUserNodes = aHasIndex && bHasIndex; + const bothNodesAreFillerNodes = !aHasIndex && !bHasIndex; + if (bothNodesAreUserNodes) { + return positionA - positionB; + } + if (bothNodesAreFillerNodes) { + return nodeA.__objectId - nodeB.__objectId; + } + if (aHasIndex) { + return 1; + } + return -1; +} + +// packages/ag-grid-enterprise/src/rowGrouping/groupStrategy/groupStrategy.ts +var GroupStrategy = class extends BeanStub44 { + constructor() { + super(...arguments); + // when grouping, these items are of note: + // rowNode.parent: RowNode: set to the parent + // rowNode.childrenAfterGroup: RowNode[] = the direct children of this group + // rowNode.childrenMapped: string=>RowNode = children mapped by group key (when groups) or an empty map if leaf group (this is then used by pivot) + // for leaf groups, rowNode.childrenAfterGroup = rowNode.allLeafChildren; + this.groupCols = []; + this.nonLeafsById = /* @__PURE__ */ new Map(); + this.checkGroupCols = true; + this.pivotMode = false; + this.groupEmpty = false; + } + invalidateGroupCols() { + this.checkGroupCols = true; + } + destroy() { + super.destroy(); + this.groupCols.length = 0; + this.nonLeafsById.clear(); + } + clearNonLeafs() { + const nonLeafsById = this.nonLeafsById; + for (const node of nonLeafsById.values()) { + node._destroy(false); + } + nonLeafsById.clear(); + } + loadGroupData(node) { + if (!node.group) { + node._groupData = null; + return null; + } + const rowGroupCol = node.rowGroupColumn; + const { valueSvc, showRowGroupCols } = this.beans; + const groupData = {}; + node._groupData = groupData; + if (!rowGroupCol) { + return groupData; + } + const leafNode = _csrmFirstLeaf2(node); + const rowGroupColId = rowGroupCol.getId(); + if (!showRowGroupCols) { + return groupData; + } + const groupDisplayCols = showRowGroupCols.columns; + for (let i = 0, len = groupDisplayCols.length; i < len; ++i) { + const col = groupDisplayCols[i]; + if (col.isRowGroupDisplayed(rowGroupColId)) { + groupData[col.getColId()] = valueSvc.getValue(rowGroupCol, leafNode, "data"); + } + } + return groupData; + } + execute(rootNode, params) { + const changedPath = params.changedPath; + const refreshResult = this.initRefresh(params); + if (refreshResult !== "skip") { + const changedRowNodes = params.changedRowNodes; + if (changedRowNodes) { + this.handleDeltaUpdate(rootNode, changedPath, changedRowNodes, !!params.animate); + } else { + this.shotgunResetEverything(rootNode); + } + } + this.positionLeafsAndGroups(rootNode, changedPath); + this.orderGroups(rootNode); + this.beans.selectionSvc?.updateSelectableAfterGrouping(changedPath); + } + positionLeafsAndGroups(rootNode, changedPath) { + _forEachChangedGroupDepthFirst3(rootNode, true, changedPath, (group) => { + const children = group.childrenAfterGroup; + const childrenLen = children?.length; + if (!childrenLen) { + return; + } + const newChildren = new Array(childrenLen); + let writeIdx = 0; + let changed = false; + let unbalancedNode; + for (let readIdx = 0; readIdx < childrenLen; ++readIdx) { + const node = children[readIdx]; + if (!node.childrenAfterGroup?.length) { + changed || (changed = writeIdx !== readIdx); + newChildren[writeIdx++] = node; + } else if (!unbalancedNode && node.key === "") { + unbalancedNode = node; + const last = childrenLen - 1; + changed || (changed = readIdx !== last); + newChildren[last] = node; + } + } + if (changed) { + for (let readIdx = 0; readIdx < childrenLen; ++readIdx) { + const node = children[readIdx]; + if (node.childrenAfterGroup?.length && node !== unbalancedNode) { + newChildren[writeIdx++] = node; + } + } + group.childrenAfterGroup = newChildren; + const sibling = group.sibling; + if (sibling) { + sibling.childrenAfterGroup = newChildren; + } + } + }); + } + initRefresh(params) { + const { rowGroupColsSvc, colModel, gos } = this.beans; + this.pivotMode = colModel.isPivotMode(); + this.groupEmpty = this.pivotMode || !gos.get("groupAllowUnbalanced"); + const cols = rowGroupColsSvc?.columns; + const groupCols = this.groupCols; + const afterColumnsChanged = params.afterColumnsChanged; + if (afterColumnsChanged || !groupCols || this.checkGroupCols) { + this.checkGroupCols = false; + if (groupCols && !groupColumnsChanged(groupCols, cols)) { + if (afterColumnsChanged) { + return "skip"; + } + } else { + params.animate = false; + const topLevelChanged = groupCols[0]?.col.getId() !== cols?.[0]?.getId(); + makeGroupColumns(cols, groupCols); + return topLevelChanged ? "refresh" : "groupColsChanged"; + } + } + return "refresh"; + } + handleDeltaUpdate(rootNode, changedPath, { removals, updates, adds, reordered }, animate) { + const parentsWithRemovals = /* @__PURE__ */ new Set(); + for (let i = 0, len = removals.length; i < len; ++i) { + const rowNode = removals[i]; + const oldParent = this.removeFromParent(rowNode); + if (!parentsWithRemovals.has(oldParent)) { + parentsWithRemovals.add(oldParent); + changedPath?.addRow(oldParent); + } + } + for (const rowNode of updates) { + const oldParent = rowNode.parent; + changedPath?.addRow(oldParent); + if (this.moveNodeInWrongPath(rootNode, rowNode)) { + parentsWithRemovals.add(oldParent); + const newParent = rowNode.parent; + changedPath?.addRow(newParent); + reordered || (reordered = (newParent?.childrenAfterGroup?.length ?? 0) > 1); + } + } + if (adds.size) { + for (const rowNode of adds) { + this.insertOneNode(rootNode, rowNode); + const newParent = rowNode.parent; + changedPath?.addRow(newParent); + reordered || (reordered = (newParent?.childrenAfterGroup?.length ?? 0) > 1); + } + } + if (parentsWithRemovals.size) { + batchedRemove(parentsWithRemovals); + this.removeEmptyGroups(parentsWithRemovals, animate); + } + if (reordered) { + this.sortChildren(rootNode, changedPath); + } + } + // this is used when doing delta updates, eg Redux, keeps nodes in right order + sortChildren(rootNode, changedPath) { + _forEachChangedGroupDepthFirst3(rootNode, true, void 0, (node) => { + const didSort = sortGroupChildren(node.childrenAfterGroup); + if (didSort) { + changedPath?.addRow(node); + } + }); + } + orderGroups(rootNode) { + const initialGroupOrderComparator = this.gos.getCallback("initialGroupOrderComparator"); + if (!initialGroupOrderComparator) { + return; + } + const beans = this.beans; + const api = beans.gridApi; + const context = beans.gridOptions.context; + const comparer = (nodeA, nodeB) => initialGroupOrderComparator({ api, context, nodeA, nodeB }); + const recursiveSort = (rowNode) => { + const childrenAfterGroup = rowNode.childrenAfterGroup; + const childrenAfterGroupLen = childrenAfterGroup?.length; + if (!childrenAfterGroupLen || rowNode.leafGroup) { + return; + } + if (childrenAfterGroupLen > 1) { + childrenAfterGroup.sort(comparer); + } + for (let i = 0, len = childrenAfterGroupLen; i < len; ++i) { + recursiveSort(childrenAfterGroup[i]); + } + }; + recursiveSort(rootNode); + } + moveNodeInWrongPath(rootNode, childNode) { + const { valueSvc } = this.beans; + const createGroupForEmpty = this.groupEmpty; + let ancestor = childNode.parent; + let changed = false; + const groupCols = this.groupCols; + if (!groupCols) { + return false; + } + for (let idx = groupCols.length - 1; idx >= 0; --idx) { + const { col } = groupCols[idx]; + let key = valueSvc.getKeyForNode(col, childNode); + if (key == null || key === "") { + if (!createGroupForEmpty) { + continue; + } + key = ""; + } + if (!ancestor?.parent || ancestor.key !== key) { + changed = true; + break; + } + ancestor = ancestor.parent; + } + changed || (changed = !!ancestor?.parent); + if (!changed) { + return false; + } + this.removeFromParent(childNode); + this.insertOneNode(rootNode, childNode); + childNode.setData(childNode.data); + return true; + } + groupShouldBeRemoved(rowNode) { + const mapKey = this.getChildrenMappedKey(rowNode.key, rowNode.rowGroupColumn); + const parentChildrenMapped = rowNode.parent?.childrenMapped; + const groupAlreadyRemoved = parentChildrenMapped ? !parentChildrenMapped[mapKey] : true; + if (groupAlreadyRemoved) { + return false; + } + return !!rowNode.group && (rowNode.childrenAfterGroup?.length ?? 0) === 0; + } + removeEmptyGroups(parents, animate) { + const selectionSvc = this.beans.selectionSvc; + let nodesToUnselect; + const possibleEmptyGroups = Array.from(parents); + const groupsById = this.nonLeafsById; + do { + parents.clear(); + for (let idx = 0; idx < possibleEmptyGroups.length; ++idx) { + let pointer = possibleEmptyGroups[idx]; + while (pointer) { + const parent = pointer.parent; + if (pointer.destroyed) { + possibleEmptyGroups[idx] = parent; + pointer = parent; + continue; + } + if (!parent) { + break; + } + if (!this.groupShouldBeRemoved(pointer)) { + pointer = parent; + continue; + } + parents.add(parent); + this.removeFromParent(pointer); + if (selectionSvc && pointer.isSelected()) { + nodesToUnselect ?? (nodesToUnselect = []); + nodesToUnselect.push(pointer); + } + possibleEmptyGroups[idx] = parent; + groupsById.delete(pointer.id); + pointer._destroy(animate); + pointer = parent; + } + } + batchedRemove(parents); + } while (parents.size); + if (nodesToUnselect) { + selectionSvc.setNodesSelected({ + nodes: nodesToUnselect, + newValue: false, + source: "rowGroupChanged" + }); + } + } + // removes the node from the parent by: + // a) removing from childrenAfterGroup (using batchRemover if present, otherwise immediately) + // b) removing from childrenMapped (immediately) + // c) setRowTop(null) - as the rowRenderer uses this to know the RowNode is no longer needed + // d) setRowIndex(null) - as the rowNode will no longer be displayed. + removeFromParent(child) { + const oldParent = child.parent; + if (oldParent) { + const mapKey = this.getChildrenMappedKey(child.key, child.rowGroupColumn); + const childParentChildrenMapped = oldParent.childrenMapped; + if (childParentChildrenMapped) { + delete childParentChildrenMapped[mapKey]; + } + } + child.setRowTop(null); + child.setRowIndex(null); + return oldParent; + } + /** + * This is idempotent, but relies on the `key` field being the same throughout a RowNode's lifetime + */ + addToParent(child, parent) { + const childrenMapped = parent.childrenMapped ?? (parent.childrenMapped = {}); + const mapKey = this.getChildrenMappedKey(child.key, child.rowGroupColumn); + if (childrenMapped[mapKey] !== child) { + childrenMapped[mapKey] = child; + let childrenAfterGroup = parent.childrenAfterGroup; + if (!childrenAfterGroup) { + parent.childrenAfterGroup = childrenAfterGroup = []; + const sibling = parent.sibling; + if (sibling) { + sibling.childrenAfterGroup = parent.childrenAfterGroup; + } + } + childrenAfterGroup.push(child); + setRowNodeGroup(parent, this.beans, true); + invalidateAllLeafChildren(parent); + } + } + shotgunResetEverything(rootNode) { + const groupsById = this.nonLeafsById; + for (const node of groupsById.values()) { + node.childrenAfterGroup = null; + node.childrenMapped = null; + } + rootNode.leafGroup = !this.groupCols?.length; + rootNode.childrenAfterGroup = []; + rootNode.childrenMapped = {}; + rootNode.updateHasChildren(); + const sibling = rootNode.sibling; + if (sibling) { + sibling.childrenAfterGroup = rootNode.childrenAfterGroup; + sibling.childrenMapped = rootNode.childrenMapped; + } + const allLeafs = rootNode._leafs; + for (let i = 0, len = allLeafs.length; i < len; ++i) { + this.insertOneNode(rootNode, allLeafs[i]); + } + this.destroyStaleGroups(groupsById); + } + /** Remove and destroy group nodes that were not reused (still have childrenAfterGroup === null) */ + destroyStaleGroups(groupsById) { + const selectionSvc = this.beans.selectionSvc; + let nodesToDeselect; + for (const [id, node] of groupsById) { + if (node.childrenAfterGroup !== null) { + continue; + } + if (selectionSvc && node.isSelected()) { + (nodesToDeselect ?? (nodesToDeselect = [])).push(node); + } + groupsById.delete(id); + node._destroy(false); + } + if (nodesToDeselect) { + selectionSvc.setNodesSelected({ + nodes: nodesToDeselect, + newValue: false, + source: "rowGroupChanged" + }); + } + } + insertOneNode(rootNode, childNode) { + let parentGroup = rootNode; + const { beans, groupCols, groupEmpty } = this; + const valueSvc = beans.valueSvc; + if (!groupCols) { + return; + } + const len = groupCols.length; + for (let i = 0; i < len; ++i) { + const groupCol = groupCols[i]; + const col = groupCol.col; + let key = valueSvc.getKeyForNode(col, childNode); + if (key == null || key === "") { + if (!groupEmpty) { + continue; + } + key = ""; + } + const existingGroup = parentGroup.childrenMapped?.[this.getChildrenMappedKey(key, col)]; + if (existingGroup) { + parentGroup = existingGroup; + continue; + } + const nextLevel = parentGroup.level + 1; + const isLeafLevel = nextLevel >= len - 1; + const newGroup = this.createGroup(parentGroup, groupCol, key, nextLevel, isLeafLevel, childNode); + this.addToParent(newGroup, parentGroup); + parentGroup = newGroup; + } + if (!parentGroup.group) { + _warn32(184, { parentGroupData: parentGroup.data, childNodeData: childNode.data }); + } + childNode.parent = parentGroup; + childNode.level = parentGroup.level + 1; + parentGroup.childrenAfterGroup.push(childNode); + parentGroup.updateHasChildren(); + invalidateAllLeafChildren(parentGroup); + } + createGroup(parent, groupCol, key, level, isLeafLevel, leafNode) { + const col = groupCol.col; + const id = (parent.level >= 0 ? parent.id + "-" : "row-group-") + (col.getColId() + "-" + key); + const groupsById = this.nonLeafsById; + let node = groupsById.get(id); + let singleUse = true; + if (node) { + if (node.childrenAfterGroup !== null) { + node._expanded ?? (node._expanded = null); + return node; + } + singleUse = false; + invalidateAllLeafChildren(node); + } else { + node = new RowNode(this.beans); + node.group = true; + node.key = key; + node.id = id; + node.aggData = null; + groupsById.set(id, node); + } + const applyValuesToNode = (n) => { + n.childrenAfterGroup = children; + n.childrenMapped = mapped; + n.parent = parent; + n.level = level; + n.rowGroupIndex = level; + n.leafGroup = isLeafLevel; + }; + const children = []; + const mapped = {}; + applyValuesToNode(node); + node.field = groupCol.field ?? null; + node.rowGroupColumn = col; + node.groupValue = this.beans.valueSvc.getValue(col, leafNode, "data"); + node._expanded ?? (node._expanded = null); + if (singleUse) { + node.setAllChildrenCount(0); + node.updateHasChildren(); + return node; + } + const sibling = node.sibling; + if (sibling) { + applyValuesToNode(sibling); + } + node.dispatchRowEvent("hasChildrenChanged"); + return node; + } + getChildrenMappedKey(key, rowGroupColumn) { + return rowGroupColumn ? rowGroupColumn.getId() + "-" + key : key; + } + onShowRowGroupColsSetChanged() { + const { rowModel, valueSvc } = this.beans; + for (const groupNode of this.nonLeafsById.values()) { + groupNode._groupData = void 0; + const rowGroupColumn = groupNode.rowGroupColumn; + const leafNode = rowGroupColumn && _csrmFirstLeaf2(groupNode); + groupNode.groupValue = leafNode && valueSvc.getValue(rowGroupColumn, leafNode, "data"); + } + const allLeafs = rowModel.rootNode?._leafs; + if (allLeafs) { + for (let i = 0, len = allLeafs.length; i < len; ++i) { + const leafNode = allLeafs[i]; + leafNode.parent._groupData = void 0; + } + } + } +}; +var batchedRemove = (parents) => { + for (const parent of parents) { + const childrenAfterGroup = parent?.childrenAfterGroup; + if (!childrenAfterGroup) { + continue; + } + const childrenAfterGroupLen = childrenAfterGroup.length; + let writeIdx = 0; + for (let readIdx = 0; readIdx < childrenAfterGroupLen; ++readIdx) { + const item = childrenAfterGroup[readIdx]; + if (item.parent === parent && !item.destroyed) { + if (writeIdx !== readIdx) { + childrenAfterGroup[writeIdx] = item; + } + ++writeIdx; + } + } + if (childrenAfterGroupLen !== writeIdx) { + childrenAfterGroup.length = writeIdx; + parent.updateHasChildren(); + invalidateAllLeafChildren(parent); + } + } +}; +var invalidateAllLeafChildren = (node) => { + while (node._leafs !== void 0) { + const parent = node.parent; + if (!parent) { + break; + } + node._leafs = void 0; + node = parent; + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/rowGroupingApi.ts +function setRowGroupColumns(beans, colKeys) { + beans.rowGroupColsSvc?.setColumns(colKeys, "api"); +} +function removeRowGroupColumns(beans, colKeys) { + beans.rowGroupColsSvc?.removeColumns(colKeys, "api"); +} +function addRowGroupColumns(beans, colKeys) { + beans.rowGroupColsSvc?.addColumns(colKeys, "api"); +} +function moveRowGroupColumn(beans, fromIndex, toIndex) { + beans.rowGroupColsSvc?.moveColumn?.(fromIndex, toIndex, "api"); +} +function getRowGroupColumns(beans) { + return beans.rowGroupColsSvc?.columns ?? []; +} + +// packages/ag-grid-enterprise/src/rowGrouping/rowGroupingModule.ts +var SharedRowGroupingModule = { + moduleName: "SharedRowGrouping", + version: VERSION, + apiFunctions: { + setRowGroupColumns, + removeRowGroupColumns, + addRowGroupColumns, + getRowGroupColumns, + moveRowGroupColumn + }, + dependsOn: [ + EnterpriseCoreModule, + SharedAggregationModule, + GroupColumnModule, + StickyRowModule, + GroupHierarchyModule + ] +}; +var RowGroupingModule = { + moduleName: "RowGrouping", + version: VERSION, + dynamicBeans: { groupStrategy: GroupStrategy }, + rowModels: ["clientSide"], + dependsOn: [SharedRowGroupingModule, AggregationModule, ClientSideRowModelHierarchyModule, GroupEditModule] +}; +var RowGroupingPanelModule = { + moduleName: "RowGroupingPanel", + version: VERSION, + selectors: [AgGridHeaderDropZonesSelector], + icons: { + // identifies the pivot drop zone + pivotPanel: "pivot", + // "Row groups" drop zone in column tool panel + rowGroupPanel: "group", + // separator between column 'pills' when you add multiple columns to the header drop zone + panelDelimiter: "small-right", + // version of panelDelimiter used in RTL mode + panelDelimiterRtl: "small-left" + }, + dependsOn: [SharedColumnStateUpdateStrategyModule, _PopupModule4] +}; +var GroupFilterModule = { + moduleName: "GroupFilter", + version: VERSION, + userComponents: { + agGroupColumnFilter: { + classImp: GroupFilter, + processParams: processGroupFilterParams + }, + agGroupColumnFloatingFilter: GroupFloatingFilterComp + }, + beans: [GroupFilterService], + dynamicBeans: { + agGroupColumnFilterHandler: GroupFilterHandler + }, + dependsOn: [EnterpriseCoreModule, _ColumnFilterModule3] +}; + +// packages/ag-grid-enterprise/src/viewportRowModel/viewportRowModel.ts +import { + BeanStub as BeanStub45, + RowNode as RowNode2, + _addGridCommonParams as _addGridCommonParams19, + _getRowHeightAsNumber, + _getRowIdCallback, + _warn as _warn33 +} from "ag-grid-community"; +var ViewportRowModel = class extends BeanStub45 { + constructor() { + super(...arguments); + this.beanName = "rowModel"; + this.hierarchical = false; + // rowRenderer tells us these + this.firstRow = -1; + this.lastRow = -1; + // datasource tells us this + this.rowCount = -1; + this.rowNodesByIndex = {}; + /** Dummy root node */ + this.rootNode = null; + /** + * Used to see if setRowData has been called inside of the viewportChanged event context, + * if so the new rows are already being calculated, and the model does not need updated + * otherwise, a new model event needs to fire as rows have changed externally. + */ + this.viewportChangedContext = false; + } + // we don't implement as lazy row heights is not supported in this row model + ensureRowHeightsValid(_startPixel, _endPixel, _startLimitIndex, _endLimitIndex) { + return false; + } + postConstruct() { + const beans = this.beans; + const rootNode = new RowNode2(beans); + this.rootNode = rootNode; + rootNode.level = -1; + this.rowHeight = _getRowHeightAsNumber(beans); + this.addManagedEventListeners({ viewportChanged: this.onViewportChanged.bind(this) }); + this.addManagedPropertyListener("viewportDatasource", () => this.updateDatasource()); + this.addManagedPropertyListener("rowHeight", () => { + this.rowHeight = _getRowHeightAsNumber(beans); + this.updateRowHeights(); + }); + } + start() { + this.updateDatasource(); + } + isLastRowIndexKnown() { + return true; + } + destroy() { + this.destroyDatasource(); + super.destroy(); + this.rootNode = null; + } + destroyDatasource() { + const datasource = this.datasource; + if (!datasource) { + return; + } + datasource.destroy?.(); + this.beans.rowRenderer.datasourceChanged(); + this.firstRow = -1; + this.lastRow = -1; + } + updateDatasource() { + const datasource = this.gos.get("viewportDatasource"); + if (datasource) { + this.setViewportDatasource(datasource); + } + } + getPageSize() { + return this.gos.get("viewportRowModelPageSize"); + } + getBufferSize() { + return this.gos.get("viewportRowModelBufferSize"); + } + calculateFirstRow(firstRenderedRow) { + const bufferSize = this.getBufferSize(); + const pageSize = this.getPageSize(); + const afterBuffer = firstRenderedRow - bufferSize; + if (afterBuffer < 0) { + return 0; + } + return Math.floor(afterBuffer / pageSize) * pageSize; + } + calculateLastRow(lastRenderedRow) { + if (lastRenderedRow === -1) { + return lastRenderedRow; + } + const bufferSize = this.getBufferSize(); + const pageSize = this.getPageSize(); + const afterBuffer = lastRenderedRow + bufferSize; + const result = Math.ceil(afterBuffer / pageSize) * pageSize; + const lastRowIndex = this.rowCount - 1; + return Math.min(result, lastRowIndex); + } + onViewportChanged(event) { + const newFirst = this.calculateFirstRow(event.firstRow); + const newLast = this.calculateLastRow(event.lastRow); + if (this.firstRow !== newFirst || this.lastRow !== newLast) { + this.firstRow = newFirst; + this.lastRow = newLast; + this.purgeRowsNotInViewport(); + this.viewportChangedContext = true; + this.datasource?.setViewportRange(this.firstRow, this.lastRow); + this.viewportChangedContext = false; + } + } + purgeRowsNotInViewport() { + const rowNodesByIndex = this.rowNodesByIndex; + for (const indexStr of Object.keys(rowNodesByIndex)) { + const index = parseInt(indexStr, 10); + if (index < this.firstRow || index > this.lastRow) { + if (this.isRowFocused(index) || this.beans.editSvc?.isRowEditing(rowNodesByIndex[index])) { + continue; + } + delete rowNodesByIndex[index]; + } + } + } + isRowFocused(rowIndex) { + const focusedCell = this.beans.focusSvc.getFocusCellToUseAfterRefresh(); + if (!focusedCell) { + return false; + } + if (focusedCell.rowPinned != null) { + return false; + } + const hasFocus = focusedCell.rowIndex === rowIndex; + return hasFocus; + } + setViewportDatasource(viewportDatasource) { + this.destroyDatasource(); + this.datasource = viewportDatasource; + this.rowCount = -1; + if (!viewportDatasource.init) { + _warn33(226); + } else { + viewportDatasource.init( + _addGridCommonParams19(this.gos, { + setRowCount: this.setRowCount.bind(this), + setRowData: this.setRowData.bind(this), + getRow: this.getRow.bind(this) + }) + ); + } + } + getType() { + return "viewport"; + } + getRow(rowIndex) { + if (!this.rowNodesByIndex[rowIndex]) { + this.rowNodesByIndex[rowIndex] = this.createBlankRowNode(rowIndex); + } + return this.rowNodesByIndex[rowIndex]; + } + getRowNode(id) { + let result; + this.forEachNode((rowNode) => { + if (rowNode.id === id) { + result = rowNode; + } + }); + return result; + } + getRowCount() { + return this.rowCount === -1 ? 0 : this.rowCount; + } + getRowIndexAtPixel(pixel) { + if (this.rowHeight !== 0) { + return Math.floor(pixel / this.rowHeight); + } + return 0; + } + /** Viewport row model does not support dynamic row heights by design and while it is possible to implement this feature, it leads to view-model desync due to data being not isotropic in time */ + resetRowHeights() { + } + /** Viewport row model does not support dynamic row heights by design and while it is possible to implement this feature, it leads to view-model desync due to data being not isotropic in time */ + onRowHeightChanged() { + } + getRowBounds(index) { + const rowHeight = this.rowHeight; + return { + rowHeight, + rowTop: rowHeight * index + }; + } + updateRowHeights() { + const rowHeight = this.rowHeight; + this.forEachNode((node) => { + node.setRowHeight(rowHeight); + node.setRowTop(rowHeight * node.rowIndex); + }); + this.eventSvc.dispatchEvent({ + type: "modelUpdated", + newData: false, + newPage: false, + keepRenderedRows: true, + animate: false + }); + } + getTopLevelRowCount() { + return this.getRowCount(); + } + getTopLevelRowDisplayedIndex(topLevelIndex) { + return topLevelIndex; + } + isEmpty() { + return this.rowCount > 0; + } + getOverlayType() { + return null; + } + isRowsToRender() { + return this.rowCount > 0; + } + getNodesInRangeForSelection(firstInRange, lastInRange) { + const firstIndex = firstInRange.rowIndex; + const lastIndex = lastInRange.rowIndex; + const firstNodeOutOfRange = firstIndex < this.firstRow || firstIndex > this.lastRow; + const lastNodeOutOfRange = lastIndex < this.firstRow || lastIndex > this.lastRow; + if (firstNodeOutOfRange || lastNodeOutOfRange) { + return []; + } + const result = []; + const startIndex = firstIndex <= lastIndex ? firstIndex : lastIndex; + const endIndex = firstIndex <= lastIndex ? lastIndex : firstIndex; + for (let i = startIndex; i <= endIndex; i++) { + result.push(this.rowNodesByIndex[i]); + } + return result; + } + forEachNode(callback) { + let callbackCount = 0; + for (const indexStr of Object.keys(this.rowNodesByIndex)) { + const index = parseInt(indexStr, 10); + const rowNode = this.rowNodesByIndex[index]; + callback(rowNode, callbackCount); + callbackCount++; + } + } + setRowData(rowData) { + const getRowIdFunc = _getRowIdCallback(this.beans.gos); + const existingNodesById = /* @__PURE__ */ new Map(); + if (getRowIdFunc) { + for (const row of Object.values(this.rowNodesByIndex)) { + existingNodesById.set(row.id, row); + } + } + for (let i = this.firstRow; i <= this.lastRow; i++) { + const data = rowData[i]; + if (!data) { + continue; + } + let rowId; + let row; + if (getRowIdFunc) { + rowId = getRowIdFunc({ data, rowPinned: void 0, level: 0, parentKeys: void 0 }); + row = existingNodesById.get(rowId); + } else { + row = this.rowNodesByIndex[i]; + } + if (row) { + row.updateData(data); + row.setRowIndex(i); + row.setRowTop(this.rowHeight * i); + } else { + row = this.createBlankRowNode(i); + row.setDataAndId(data, rowId ?? i.toString()); + } + this.rowNodesByIndex[i] = row; + } + if (!this.viewportChangedContext) { + this.eventSvc.dispatchEvent({ + type: "modelUpdated", + newData: false, + newPage: false, + keepRenderedRows: true, + animate: false + }); + } + } + createBlankRowNode(rowIndex) { + const rowNode = new RowNode2(this.beans); + const rowHeight = this.rowHeight; + rowNode.setRowHeight(rowHeight); + rowNode.setRowTop(rowHeight * rowIndex); + rowNode.setRowIndex(rowIndex); + return rowNode; + } + setRowCount(rowCount, keepRenderedRows = false) { + if (rowCount === this.rowCount) { + return; + } + this.rowCount = rowCount; + const eventSvc = this.eventSvc; + eventSvc.dispatchEventOnce({ + type: "rowCountReady" + }); + eventSvc.dispatchEvent({ + type: "modelUpdated", + newData: false, + newPage: false, + keepRenderedRows, + animate: false + }); + } + isRowPresent(rowNode) { + const foundRowNode = this.getRowNode(rowNode.id); + return !!foundRowNode; + } +}; + +// packages/ag-grid-enterprise/src/viewportRowModel/viewportRowModelModule.ts +var ViewportRowModelModule = { + moduleName: "ViewportRowModel", + version: VERSION, + rowModels: ["viewport"], + beans: [ViewportRowModel], + dependsOn: [EnterpriseCoreModule] +}; + +// packages/ag-grid-enterprise/src/clipboard/clipboardModule.ts +import { CsvExportModule, HighlightChangesModule, _KeyboardNavigationModule as _KeyboardNavigationModule2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/clipboard/clipboardApi.ts +function copyToClipboard(beans, params) { + beans.clipboardSvc?.copyToClipboard(params); +} +function cutToClipboard(beans, params) { + beans.clipboardSvc?.cutToClipboard(params); +} +function copySelectedRowsToClipboard(beans, params) { + beans.clipboardSvc?.copySelectedRowsToClipboard(params); +} +function copySelectedRangeToClipboard(beans, params) { + beans.clipboardSvc?.copySelectedRangeToClipboard(params); +} +function copySelectedRangeDown(beans) { + beans.clipboardSvc?.copyRangeDown(); +} +function pasteFromClipboard(beans) { + beans.clipboardSvc?.pasteFromClipboard(); +} + +// packages/ag-grid-enterprise/src/clipboard/clipboardService.ts +import { + BeanStub as BeanStub46, + _createCellId as _createCellId2, + _exists as _exists21, + _forEachChangedGroupDepthFirst as _forEachChangedGroupDepthFirst4, + _getActiveDomElement as _getActiveDomElement12, + _getDocument as _getDocument4, + _getRowBelow as _getRowBelow2, + _getRowNode as _getRowNode3, + _isClientSideRowModel as _isClientSideRowModel7, + _isSameRow, + _last as _last11, + _removeFromArray as _removeFromArray6, + _warn as _warn34, + isColumnSelectionCol, + isSpecialCol as isSpecialCol2 +} from "ag-grid-community"; +var SOURCE_PASTE = "paste"; +var EXPORT_TYPE_DRAG_COPY = "dragCopy"; +var EXPORT_TYPE_CLIPBOARD = "clipboard"; +function stringToArray(strData, delimiter = ",") { + const data = []; + const isNewline = (char) => char === "\r" || char === "\n"; + let insideQuotedField = false; + if (strData === "") { + return [[""]]; + } + for (let row = 0, column = 0, position = 0; position < strData.length; position++) { + const previousChar = strData[position - 1]; + const currentChar = strData[position]; + const nextChar = strData[position + 1]; + const ensureDataExists = () => { + if (!data[row]) { + data[row] = []; + } + if (!data[row][column]) { + data[row][column] = ""; + } + }; + ensureDataExists(); + if (currentChar === '"') { + if (insideQuotedField) { + if (nextChar === '"') { + data[row][column] += '"'; + position++; + } else { + insideQuotedField = false; + } + } else if (previousChar === void 0 || previousChar === delimiter || isNewline(previousChar)) { + insideQuotedField = true; + } + } + if (!insideQuotedField && currentChar !== '"') { + if (currentChar === delimiter) { + column++; + ensureDataExists(); + continue; + } else if (isNewline(currentChar)) { + column = 0; + row++; + ensureDataExists(); + if (currentChar === "\r" && nextChar === "\n") { + position++; + } + continue; + } + } + data[row][column] += currentChar; + } + return data; +} +var ClipboardService = class extends BeanStub46 { + constructor() { + super(...arguments); + this.beanName = "clipboardSvc"; + this.clientSideRowModel = null; + this.gridCtrl = null; + this.lastPasteOperationTime = 0; + this.navigatorApiFailed = false; + } + postConstruct() { + const { gos, rowModel, ctrlsSvc } = this.beans; + if (_isClientSideRowModel7(gos, rowModel)) { + this.clientSideRowModel = rowModel; + } + ctrlsSvc.whenReady(this, (p) => { + this.gridCtrl = p.gridCtrl; + }); + } + destroy() { + super.destroy(); + this.clientSideRowModel = null; + this.gridCtrl = null; + } + pasteFromClipboard() { + const allowNavigator = !this.gos.get("suppressClipboardApi"); + if (allowNavigator && !this.navigatorApiFailed && navigator.clipboard?.readText) { + navigator.clipboard.readText().then(this.processClipboardData.bind(this)).catch((e) => { + _warn34(40, { e, method: "readText" }); + this.navigatorApiFailed = true; + this.pasteFromClipboardLegacy(); + }); + } else { + this.pasteFromClipboardLegacy(); + } + } + pasteFromClipboardLegacy() { + let defaultPrevented = false; + const handlePasteEvent = (e) => { + const currentPastOperationTime = Date.now(); + if (currentPastOperationTime - this.lastPasteOperationTime < 50) { + defaultPrevented = true; + e.preventDefault(); + } + this.lastPasteOperationTime = currentPastOperationTime; + }; + this.executeOnTempElement( + (textArea) => { + textArea.addEventListener("paste", handlePasteEvent); + textArea.focus({ preventScroll: true }); + }, + (element) => { + const data = element.value; + if (!defaultPrevented) { + this.processClipboardData(data); + } else { + this.refocusLastFocusedCell(); + } + element.removeEventListener("paste", handlePasteEvent); + } + ); + } + refocusLastFocusedCell() { + const { focusSvc } = this.beans; + const focusedCell = focusSvc.getFocusedCell(); + if (focusedCell) { + focusSvc.setFocusedCell({ + rowIndex: focusedCell.rowIndex, + column: focusedCell.column, + rowPinned: focusedCell.rowPinned, + forceBrowserFocus: true + }); + } + } + getClipboardDelimiter() { + const delimiter = this.gos.get("clipboardDelimiter"); + return _exists21(delimiter) ? delimiter : " "; + } + processClipboardData(data) { + if (data == null) { + return; + } + let parsedData = stringToArray(data, this.getClipboardDelimiter()); + const userFunc = this.gos.getCallback("processDataFromClipboard"); + if (userFunc) { + parsedData = userFunc({ data: parsedData }); + } + if (parsedData == null) { + return; + } + if (this.gos.get("suppressLastEmptyLineOnPaste")) { + this.removeLastLineIfBlank(parsedData); + } + const { rangeSvc, editSvc } = this.beans; + const pasteOperation = (cellsToFlash, updatedRowNodes, focusedCell, changedPath) => { + const rangeActive = rangeSvc?.isMoreThanOneCell(); + const pasteIntoRange = rangeActive && !this.hasOnlyOneValueToPaste(parsedData); + if (pasteIntoRange) { + this.pasteIntoActiveRange(parsedData, cellsToFlash, updatedRowNodes, changedPath); + } else { + this.pasteStartingFromFocusedCell(parsedData, cellsToFlash, updatedRowNodes, focusedCell, changedPath); + } + editSvc?.stopEditing(void 0, { source: SOURCE_PASTE }); + }; + this.doPasteOperation(pasteOperation); + } + // common code to paste operations, e.g. paste to cell, paste to range, and copy range down + doPasteOperation(pasteOperationFunc) { + const source = "clipboard"; + const { eventSvc, focusSvc, rowRenderer, gos } = this.beans; + eventSvc.dispatchEvent({ + type: "pasteStart", + source + }); + const { clientSideRowModel } = this; + const rootNode = clientSideRowModel?.rootNode; + const changedPath = rootNode && this.beans.changedPathFactory?.newPath(gos.get("aggregateOnlyChangedColumns")); + const cellsToFlash = {}; + const updatedRowNodes = []; + const focusedCell = focusSvc.getFocusedCell(); + pasteOperationFunc(cellsToFlash, updatedRowNodes, focusedCell, changedPath); + const nodesToRefresh = updatedRowNodes.slice(); + if (changedPath) { + clientSideRowModel.doAggregate(changedPath); + _forEachChangedGroupDepthFirst4(rootNode, clientSideRowModel.hierarchical, changedPath, (rowNode) => { + nodesToRefresh.push(rowNode); + }); + } + rowRenderer.refreshCells({ rowNodes: nodesToRefresh }); + this.dispatchFlashCells(cellsToFlash); + this.fireRowChanged(updatedRowNodes); + this.refocusLastFocusedCell(); + eventSvc.dispatchEvent({ + type: "pasteEnd", + source + }); + } + getPreProcessRangeCallback(clipboardData) { + return (cellRange) => { + const { rangeSvc } = this.beans; + if (!rangeSvc) { + return; + } + const { rowDiff, colDiff } = this.getAdjustedRangeDimensionForPaste(cellRange, clipboardData); + if (rowDiff !== 0) { + rangeSvc.extendRangeRowCountBy(cellRange, rowDiff); + } + if (colDiff !== 0) { + rangeSvc.extendRangeColumnCountBy(cellRange, colDiff); + } + }; + } + getAdjustedRangeDimensionForPaste(cellRange, clipboardData) { + const rangeSvc = this.beans.rangeSvc; + const clipboardRowCount = clipboardData.length; + const rangeRowCount = rangeSvc.getRangeRowCount(cellRange); + const isRowMultiple = rangeRowCount >= clipboardRowCount && rangeRowCount % clipboardRowCount === 0; + const clipboardColCount = clipboardData[0].length; + const rangeColCount = cellRange.columns.length; + const isColMultiple = rangeColCount >= clipboardColCount && rangeColCount % clipboardColCount === 0; + return { + rowDiff: isRowMultiple ? 0 : clipboardRowCount - rangeRowCount, + colDiff: isColMultiple ? 0 : clipboardColCount - rangeColCount + }; + } + pasteIntoActiveRange(clipboardData, cellsToFlash, updatedRowNodes, changedPath) { + let indexOffset = 0; + let dataRowIndex = 0; + const rowCallback = (currentRow, rowNode, range, rangeIndex) => { + const atEndOfClipboardData = rangeIndex - indexOffset >= clipboardData.length; + if (atEndOfClipboardData) { + if (rangeIndex % clipboardData.length !== 0) { + return; + } + indexOffset += dataRowIndex; + dataRowIndex = 0; + } + const currentRowData = clipboardData[rangeIndex - indexOffset]; + updatedRowNodes.push(rowNode); + const processCellFromClipboardFunc = this.gos.getCallback("processCellFromClipboard"); + const columns = range.columns; + const selectionColIdx = columns.findIndex(isColumnSelectionCol); + if (selectionColIdx !== -1) { + columns.splice(selectionColIdx, 1); + } + for (let idx = 0; idx < columns.length; idx++) { + const column = columns[idx]; + if (!column.isCellEditable(rowNode) || column.isSuppressPaste(rowNode)) { + continue; + } + let calculatedIdx = idx; + if (idx >= currentRowData.length) { + calculatedIdx = idx % currentRowData.length; + } + const newValue = this.processCell( + rowNode, + column, + currentRowData[calculatedIdx], + EXPORT_TYPE_DRAG_COPY, + processCellFromClipboardFunc, + true + ); + rowNode.setDataValue(column, newValue, SOURCE_PASTE); + changedPath?.addCell(rowNode.parent, column.getId()); + const { rowIndex, rowPinned } = currentRow; + const cellId = _createCellId2({ rowIndex, column, rowPinned }); + cellsToFlash[cellId] = true; + } + dataRowIndex++; + }; + this.iterateActiveRanges(rowCallback, false, this.getPreProcessRangeCallback(clipboardData)); + } + getDisplayedColumnsStartingAt(column) { + let currentColumn = column; + const columns = []; + const { visibleCols } = this.beans; + while (currentColumn && isSpecialCol2(currentColumn)) { + currentColumn = visibleCols.getColAfter(currentColumn); + } + while (currentColumn != null) { + columns.push(currentColumn); + currentColumn = visibleCols.getColAfter(currentColumn); + } + return columns; + } + pasteStartingFromFocusedCell(parsedData, cellsToFlash, updatedRowNodes, focusedCell, changedPath) { + if (!focusedCell) { + return; + } + const currentRow = { rowIndex: focusedCell.rowIndex, rowPinned: focusedCell.rowPinned }; + const columnsToPasteInto = this.getDisplayedColumnsStartingAt(focusedCell.column); + if (this.isPasteSingleValueIntoRange(parsedData)) { + this.pasteSingleValueIntoRange(parsedData, updatedRowNodes, cellsToFlash, changedPath); + } else { + this.pasteMultipleValues( + parsedData, + currentRow, + updatedRowNodes, + columnsToPasteInto, + cellsToFlash, + EXPORT_TYPE_CLIPBOARD, + changedPath + ); + } + } + // if range is active, and only one cell, then we paste this cell into all cells in the active range. + isPasteSingleValueIntoRange(parsedData) { + const rangeSvc = this.beans.rangeSvc; + return this.hasOnlyOneValueToPaste(parsedData) && !!rangeSvc && !rangeSvc.isEmpty(); + } + pasteSingleValueIntoRange(parsedData, updatedRowNodes, cellsToFlash, changedPath) { + const value = parsedData[0][0]; + const rowCallback = (currentRow, rowNode, range) => { + updatedRowNodes.push(rowNode); + range.columns.forEach( + (column) => this.updateCellValue(rowNode, column, value, cellsToFlash, EXPORT_TYPE_CLIPBOARD, changedPath) + ); + }; + this.iterateActiveRanges(rowCallback); + } + hasOnlyOneValueToPaste(parsedData) { + return parsedData.length === 1 && parsedData[0].length === 1; + } + copyRangeDown() { + const { rangeSvc, gos, formula, valueSvc } = this.beans; + if (!rangeSvc || rangeSvc.isEmpty()) { + return; + } + const firstRowValues = []; + const pasteOperation = (cellsToFlash, updatedRowNodes, focusedCell, changedPath) => { + const processCellForClipboardFunc = gos.getCallback("processCellForClipboard"); + const processCellFromClipboardFunc = gos.getCallback("processCellFromClipboard"); + const rowCallback = (currentRow, rowNode, range) => { + const { columns } = range; + if (!firstRowValues.length) { + columns.forEach((column) => { + const value = this.processCell( + rowNode, + column, + valueSvc.getValue(column, rowNode, "batch"), + EXPORT_TYPE_DRAG_COPY, + processCellForClipboardFunc, + false, + true + ); + firstRowValues.push(value); + }); + } else { + updatedRowNodes.push(rowNode); + columns.forEach((column, index) => { + if (!column.isCellEditable(rowNode) || column.isSuppressPaste(rowNode)) { + return; + } + const isFormula = column.isAllowFormula() && formula?.isFormula(firstRowValues[index]); + if (isFormula) { + firstRowValues[index] = formula?.updateFormulaByOffset({ + value: firstRowValues[index], + rowDelta: 1 + }); + } + const firstRowValue = this.processCell( + rowNode, + column, + firstRowValues[index], + EXPORT_TYPE_DRAG_COPY, + processCellFromClipboardFunc, + true + ); + rowNode.setDataValue(column, firstRowValue, SOURCE_PASTE); + changedPath?.addCell(rowNode.parent, column.getId()); + const { rowIndex, rowPinned } = currentRow; + const cellId = _createCellId2({ rowIndex, column, rowPinned }); + cellsToFlash[cellId] = true; + }); + } + }; + this.iterateActiveRanges(rowCallback, true); + }; + this.doPasteOperation(pasteOperation); + } + removeLastLineIfBlank(parsedData) { + const lastLine = _last11(parsedData); + const lastLineIsBlank = lastLine && lastLine.length === 1 && lastLine[0] === ""; + if (lastLineIsBlank) { + if (parsedData.length === 1) { + return; + } + _removeFromArray6(parsedData, lastLine); + } + } + fireRowChanged(rowNodes) { + if (this.gos.get("editType") !== "fullRow") { + return; + } + for (const rowNode of rowNodes) { + this.eventSvc.dispatchEvent({ + type: "rowValueChanged", + node: rowNode, + data: rowNode.data, + rowIndex: rowNode.rowIndex, + rowPinned: rowNode.rowPinned + }); + } + } + /** Returns true when a row should be skipped during paste. */ + shouldSkipPasteRow(row, columns, skipGroupRows) { + if (row.detail || row.footer) { + return true; + } + if (skipGroupRows && row.group) { + for (const col of columns) { + if (col.isCellEditable(row)) { + return false; + } + } + return true; + } + return false; + } + pasteMultipleValues(clipboardGridData, currentRow, updatedRowNodes, columnsToPasteInto, cellsToFlash, type, changedPath) { + let rowPointer = currentRow; + const beans = this.beans; + const { gos } = beans; + const skipGroupRows = this.clientSideRowModel != null && !gos.get("enableGroupEdit") && !gos.get("treeData"); + const getNextGoodRowNode = () => { + while (rowPointer) { + const res = _getRowNode3(beans, rowPointer); + rowPointer = _getRowBelow2(beans, { + rowPinned: rowPointer.rowPinned, + rowIndex: rowPointer.rowIndex + }); + if (res != null && !this.shouldSkipPasteRow(res, columnsToPasteInto, skipGroupRows)) { + return res; + } + } + return null; + }; + for (const clipboardRowData of clipboardGridData) { + const rowNode = getNextGoodRowNode(); + if (!rowNode) { + continue; + } + clipboardRowData.forEach( + (value, index) => this.updateCellValue(rowNode, columnsToPasteInto[index], value, cellsToFlash, type, changedPath) + ); + updatedRowNodes.push(rowNode); + } + } + updateCellValue(rowNode, column, value, cellsToFlash, type, changedPath) { + if (!rowNode || !column?.isCellEditable(rowNode) || column?.isSuppressPaste(rowNode)) { + return; + } + const processedValue = this.processCell( + rowNode, + column, + value, + type, + this.gos.getCallback("processCellFromClipboard"), + true + ); + rowNode.setDataValue(column, processedValue, SOURCE_PASTE); + const { rowIndex, rowPinned } = rowNode; + const cellId = _createCellId2({ rowIndex, column, rowPinned }); + cellsToFlash[cellId] = true; + changedPath?.addCell(rowNode.parent, column.getId()); + } + copyToClipboard(params = {}) { + this.copyOrCutToClipboard(params); + } + cutToClipboard(params = {}, source = "api") { + if (this.gos.get("suppressCutToClipboard")) { + return; + } + this.eventSvc.dispatchEvent({ + type: "cutStart", + source + }); + this.copyOrCutToClipboard(params, true); + this.eventSvc.dispatchEvent({ + type: "cutEnd", + source + }); + } + copyOrCutToClipboard(params, cut) { + let { includeHeaders, includeGroupHeaders } = params; + const { gos, focusSvc } = this.beans; + if (includeHeaders == null) { + includeHeaders = gos.get("copyHeadersToClipboard"); + } + if (includeGroupHeaders == null) { + includeGroupHeaders = gos.get("copyGroupHeadersToClipboard"); + } + const copyParams = { includeHeaders, includeGroupHeaders }; + const rowSelection = gos.get("rowSelection"); + const cellSelection = gos.get("cellSelection"); + let cellClearType = null; + if (this.shouldCopyCells(cellSelection, rowSelection)) { + this.copySelectedRangeToClipboard(copyParams); + cellClearType = 0 /* CellRange */; + } else if (this.shouldCopyRows(rowSelection)) { + this.copySelectedRowsToClipboard(copyParams); + cellClearType = 1 /* SelectedRows */; + } else if (focusSvc.isAnyCellFocused()) { + this.copyFocusedCellToClipboard(copyParams); + cellClearType = 2 /* FocusedCell */; + } + if (cut && cellClearType !== null) { + this.clearCellsAfterCopy(cellClearType); + } + } + shouldCopyCells(cellSelection, rowSelection) { + const { rangeSvc, selectionSvc, gos } = this.beans; + if (!rangeSvc || rangeSvc.isEmpty()) { + return false; + } + if (cellSelection) { + const shouldCopyRowsInstead = typeof rowSelection === "object" && rowSelection.copySelectedRows && !selectionSvc?.isEmpty(); + return !shouldCopyRowsInstead; + } else { + const suppressCopySingleCellRanges = gos.get("suppressCopySingleCellRanges"); + const shouldSkip = !rangeSvc.isMoreThanOneCell() && suppressCopySingleCellRanges; + return !shouldSkip; + } + } + shouldCopyRows(rowSelection) { + const { selectionSvc, gos } = this.beans; + if (selectionSvc?.isEmpty() ?? true) { + return false; + } + if (rowSelection && typeof rowSelection !== "string") { + return rowSelection.copySelectedRows ?? false; + } else { + return !gos.get("suppressCopyRowsToClipboard"); + } + } + clearCellsAfterCopy(type) { + const beans = this.beans; + const { rangeSvc, focusSvc, eventSvc } = beans; + eventSvc.dispatchEvent({ type: "keyShortcutChangedCellStart" }); + if (type === 0 /* CellRange */) { + rangeSvc.clearCellRangeCellValues({ cellEventSource: "clipboardSvc" }); + } else if (type === 1 /* SelectedRows */) { + this.clearSelectedRows(); + } else { + const focusedCell = focusSvc.getFocusedCell(); + if (focusedCell == null) { + return; + } + const rowNode = _getRowNode3(beans, focusedCell); + if (rowNode) { + this.clearCellValue(rowNode, focusedCell.column); + } + } + eventSvc.dispatchEvent({ type: "keyShortcutChangedCellEnd" }); + } + clearSelectedRows() { + const { selectionSvc, visibleCols } = this.beans; + const selected = selectionSvc?.getSelectedNodes() ?? []; + const columns = visibleCols.allCols; + for (const row of selected) { + for (const col of columns) { + this.clearCellValue(row, col); + } + } + } + clearCellValue(rowNode, column) { + if (!column.isCellEditable(rowNode)) { + return; + } + const deleteValue = this.beans.valueSvc.getDeleteValue(column, rowNode); + rowNode.setDataValue(column, deleteValue, "clipboardSvc"); + } + iterateActiveRanges(rowCallback, onlyFirst, preProcessRange) { + const rangeSvc = this.beans.rangeSvc; + if (!rangeSvc || rangeSvc.isEmpty()) { + return; + } + const currentCellRanges = rangeSvc.getCellRanges(); + const cellRanges = onlyFirst ? [currentCellRanges[0]] : currentCellRanges; + for (const cellRange of cellRanges) { + this.iterateActiveRange({ cellRange, rowCallback, preProcessRange }); + } + } + iterateActiveRange(params) { + const { cellRange, preProcessRange, rowCallback } = params; + const { beans } = this; + const { rangeSvc } = beans; + if (!rangeSvc) { + return; + } + if (preProcessRange) { + preProcessRange(cellRange); + } + let currentRow = rangeSvc.getRangeStartRow(cellRange); + const lastRow = rangeSvc.getRangeEndRow(cellRange); + let rangeIndex = 0; + let isLastRow = false; + while (!isLastRow && currentRow != null) { + const rowNode = _getRowNode3(beans, currentRow); + isLastRow = _isSameRow(currentRow, lastRow); + rowCallback(currentRow, rowNode, cellRange, rangeIndex++); + currentRow = _getRowBelow2(beans, currentRow); + } + } + copySelectedRangeToClipboard(params = {}) { + const rangeSvc = this.beans.rangeSvc; + if (!rangeSvc || rangeSvc.isEmpty()) { + return; + } + const allRangesMerge = rangeSvc.areAllRangesAbleToMerge(); + const { data, cellsToFlash } = allRangesMerge ? this.buildDataFromMergedRanges(rangeSvc, params) : this.buildDataFromRanges(rangeSvc, params); + this.copyDataToClipboard(data); + this.dispatchFlashCells(cellsToFlash); + } + buildDataFromMergedRanges(rangeSvc, params) { + const columnsSet = /* @__PURE__ */ new Set(); + const ranges = rangeSvc.getCellRanges(); + const rowPositionsMap = /* @__PURE__ */ new Map(); + const allRowPositions = []; + const allCellsToFlash = {}; + const isClientSideRowModel = _isClientSideRowModel7(this.gos, this.beans.rowModel); + const flatCache = /* @__PURE__ */ new Set(); + if (!isClientSideRowModel) { + this.beans.rowModel.forEachNode((node) => { + flatCache.add(node.rowIndex); + }); + } + for (const range of ranges) { + range.columns.forEach((col) => columnsSet.add(col)); + const { rowPositions, cellsToFlash } = this.getRangeRowPositionsAndCellsToFlash(rangeSvc, range); + for (const rowPosition of rowPositions) { + const isInCache = flatCache.has(rowPosition.rowIndex); + if (!isClientSideRowModel && !isInCache) { + continue; + } + const rowPositionAsString = `${rowPosition.rowIndex}-${rowPosition.rowPinned || "null"}`; + if (!rowPositionsMap.get(rowPositionAsString)) { + rowPositionsMap.set(rowPositionAsString, true); + allRowPositions.push(rowPosition); + } + } + Object.assign(allCellsToFlash, cellsToFlash); + } + const allColumns = this.beans.visibleCols.allCols; + const exportedColumns = Array.from(columnsSet); + exportedColumns.sort((a, b) => { + const posA = allColumns.indexOf(a); + const posB = allColumns.indexOf(b); + return posA - posB; + }); + const data = this.buildExportParams({ + columns: exportedColumns, + rowPositions: allRowPositions, + includeHeaders: params.includeHeaders, + includeGroupHeaders: params.includeGroupHeaders + }); + return { data, cellsToFlash: allCellsToFlash }; + } + buildDataFromRanges(rangeSvc, params) { + const ranges = rangeSvc.getCellRanges(); + const data = []; + const allCellsToFlash = {}; + for (const range of ranges) { + const { rowPositions, cellsToFlash } = this.getRangeRowPositionsAndCellsToFlash(rangeSvc, range); + Object.assign(allCellsToFlash, cellsToFlash); + data.push( + this.buildExportParams({ + columns: range.columns, + rowPositions, + includeHeaders: params.includeHeaders, + includeGroupHeaders: params.includeGroupHeaders + }) + ); + } + return { data: data.join("\n"), cellsToFlash: allCellsToFlash }; + } + getRangeRowPositionsAndCellsToFlash(rangeSvc, range) { + const rowPositions = []; + const cellsToFlash = {}; + const startRow = rangeSvc.getRangeStartRow(range); + const lastRow = rangeSvc.getRangeEndRow(range); + let node = startRow; + while (node) { + rowPositions.push(node); + for (const column of range.columns) { + const { rowIndex, rowPinned } = node; + const cellId = _createCellId2({ rowIndex, column, rowPinned }); + cellsToFlash[cellId] = true; + } + if (_isSameRow(node, lastRow)) { + break; + } + node = _getRowBelow2(this.beans, node); + } + return { rowPositions, cellsToFlash }; + } + getCellsToFlashFromRowNodes(rowNodes) { + const allDisplayedColumns = this.beans.visibleCols.allCols; + const cellsToFlash = {}; + for (let i = 0; i < rowNodes.length; i++) { + const { level, rowIndex: index, rowPinned, sibling } = rowNodes[i]; + const rowIndex = level === -1 ? sibling.rowIndex : index; + if (rowIndex == null) { + continue; + } + for (let j = 0; j < allDisplayedColumns.length; j++) { + const column = allDisplayedColumns[j]; + const cellId = _createCellId2({ rowIndex, column, rowPinned }); + cellsToFlash[cellId] = true; + } + } + return cellsToFlash; + } + copyFocusedCellToClipboard(params = {}) { + let focusedCell = this.beans.focusSvc.getFocusedCell(); + if (focusedCell == null) { + return; + } + focusedCell = this.beans.rowSpanSvc?.getCellStart(focusedCell) ?? focusedCell; + const cellId = _createCellId2(focusedCell); + const currentRow = { rowPinned: focusedCell.rowPinned, rowIndex: focusedCell.rowIndex }; + const column = focusedCell.column; + const data = this.buildExportParams({ + columns: [column], + rowPositions: [currentRow], + includeHeaders: params.includeHeaders, + includeGroupHeaders: params.includeGroupHeaders + }); + this.copyDataToClipboard(data); + this.dispatchFlashCells({ [cellId]: true }); + } + copySelectedRowsToClipboard(params = {}) { + const { columnKeys, includeHeaders, includeGroupHeaders } = params; + const data = this.buildExportParams({ + columns: columnKeys, + includeHeaders, + includeGroupHeaders + }); + this.copyDataToClipboard(data); + const rowNodes = this.beans.selectionSvc?.getSelectedNodes() || []; + this.dispatchFlashCells(this.getCellsToFlashFromRowNodes(rowNodes)); + } + buildExportParams(params) { + const { columns, rowPositions, includeHeaders = false, includeGroupHeaders = false } = params; + const { gos, csvCreator } = this.beans; + const processRowGroupCallback = ({ node, column }) => { + const { value, valueFormatted } = this.beans.valueSvc.getValueForDisplay({ + column, + node, + includeValueFormatted: true, + from: "batch" + }); + const val = valueFormatted ?? value ?? ""; + const cb = gos.getCallback("processCellForClipboard"); + if (!cb) { + return val; + } + return cb({ + column, + node, + value: val, + type: EXPORT_TYPE_CLIPBOARD, + formatValue: (valueToFormat) => this.beans.valueSvc.formatValue(column, node, valueToFormat) ?? valueToFormat, + parseValue: (valueToParse) => this.beans.valueSvc.parseValue(column, node, valueToParse, value) ?? valueToParse + }); + }; + const exportParams = { + columnKeys: columns, + rowPositions, + skipColumnHeaders: !includeHeaders, + skipColumnGroupHeaders: !includeGroupHeaders, + suppressQuotes: true, + columnSeparator: this.getClipboardDelimiter(), + onlySelected: !rowPositions, + valueFrom: "batch", + processCellCallback: gos.getCallback("processCellForClipboard"), + processRowGroupCallback, + processHeaderCallback: gos.getCallback("processHeaderForClipboard"), + processGroupHeaderCallback: gos.getCallback("processGroupHeaderForClipboard") + }; + return csvCreator.getDataAsCsv(exportParams, true); + } + // eslint-disable-next-line @typescript-eslint/ban-types + dispatchFlashCells(cellsToFlash) { + window.setTimeout(() => { + this.eventSvc.dispatchEvent({ + type: "flashCells", + cells: cellsToFlash + }); + }, 0); + } + processCell(rowNode, column, value, type, func, canParse, canFormat) { + const { valueSvc, formula } = this.beans; + if (func) { + const params = { + column, + node: rowNode, + value, + type, + formatValue: (valueToFormat) => valueSvc.formatValue(column, rowNode ?? null, valueToFormat) ?? valueToFormat, + parseValue: (valueToParse) => valueSvc.parseValue( + column, + rowNode ?? null, + valueToParse, + valueSvc.getValue(column, rowNode, "edit") + ) + }; + return func(params); + } + if (canParse && column.getColDef().useValueParserForImport !== false) { + return valueSvc.parseValue(column, rowNode ?? null, value, valueSvc.getValue(column, rowNode, "edit")); + } + if (canFormat && column.getColDef().useValueFormatterForExport !== false) { + if (formula?.isFormula(value)) { + return value; + } + return valueSvc.formatValue(column, rowNode ?? null, value) ?? value; + } + return value; + } + copyDataToClipboard(data) { + const userProvidedFunc = this.gos.getCallback("sendToClipboard"); + if (userProvidedFunc) { + userProvidedFunc({ data }); + return; + } + const allowNavigator = !this.gos.get("suppressClipboardApi"); + if (allowNavigator && navigator.clipboard) { + navigator.clipboard.writeText(data).catch((e) => { + _warn34(40, { e, method: "writeText" }); + this.copyDataToClipboardLegacy(data); + }); + return; + } + this.copyDataToClipboardLegacy(data); + } + copyDataToClipboardLegacy(data) { + this.executeOnTempElement((element) => { + const eDocument = _getDocument4(this.beans); + const focusedElementBefore = _getActiveDomElement12(this.beans); + element.value = data || " "; + element.select(); + element.focus({ preventScroll: true }); + const result = eDocument.execCommand("copy"); + if (!result) { + _warn34(41); + } + if (focusedElementBefore?.focus != null) { + focusedElementBefore.focus({ preventScroll: true }); + } + }); + } + executeOnTempElement(callbackNow, callbackAfter) { + if (!this.gridCtrl) { + return; + } + const eDoc = _getDocument4(this.beans); + const eTempInput = eDoc.createElement("textarea"); + const style = eTempInput.style; + style.width = "1px"; + style.height = "1px"; + const documentElement = eDoc.documentElement; + style.top = documentElement.scrollTop + "px"; + style.left = documentElement.scrollLeft + "px"; + style.position = "absolute"; + style.opacity = "0"; + const guiRoot = this.gridCtrl.getGui(); + guiRoot.appendChild(eTempInput); + try { + callbackNow(eTempInput); + } catch (err) { + _warn34(42); + } + if (callbackAfter) { + window.setTimeout(() => { + callbackAfter(eTempInput); + eTempInput.remove(); + }, 100); + } else { + eTempInput.remove(); + } + } +}; + +// packages/ag-grid-enterprise/src/clipboard/clipboardModule.ts +var ClipboardModule = { + moduleName: "Clipboard", + version: VERSION, + beans: [ClipboardService], + apiFunctions: { + copyToClipboard, + cutToClipboard, + copySelectedRowsToClipboard, + copySelectedRangeToClipboard, + copySelectedRangeDown, + pasteFromClipboard + }, + dependsOn: [EnterpriseCoreModule, CsvExportModule, _KeyboardNavigationModule2, HighlightChangesModule] +}; + +// packages/ag-grid-enterprise/src/rowNumbers/rowNumbersModule.ts +import { CellStyleModule, _SharedDragAndDropModule as _SharedDragAndDropModule4 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowNumbers/rowNumbers.css +var rowNumbers_default = '.ag-row-number-cell{background-color:var(--ag-header-background-color);border:none;color:var(--ag-header-text-color);font-family:var(--ag-header-font-family);font-size:var(--ag-header-font-size);font-weight:var(--ag-header-font-weight);overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;width:100%}:where(.ag-ltr) .ag-row-number-cell{text-align:right}:where(.ag-rtl) .ag-row-number-cell{text-align:left}.ag-row-numbers-resizer{bottom:-2px;cursor:ns-resize;height:4px;position:absolute;width:100%}:where(.ag-ltr) .ag-row-numbers-resizer{left:0}:where(.ag-rtl) .ag-row-numbers-resizer{right:0}.ag-floating-bottom .ag-row-numbers-resizer{bottom:unset;top:-2px}:where(.ag-row-number-header.ag-row-number-selection-enabled){cursor:cell}.ag-row-number-range-highlight{background-color:var(--ag-range-header-highlight-color)}.ag-row-number-range-selected{background-color:var(--ag-row-numbers-selected-color)}:where(.ag-ltr){.ag-row-number-header,:where(.ag-cell.ag-row-number-cell):not(.ag-cell-last-left-pinned){border-right:var(--ag-pinned-column-border)}:where(.ag-cell.ag-row-number-cell.ag-row-number-selection-enabled){cursor:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxLjUiPjxwYXRoIGQ9Ik0zLjQ0NSA4LjkxMVY3LjQwOUg5Ljc1VjYuMDE0bDIuNTM1IDIuMTQ2LTIuNTM1IDIuMTQ2VjguOTExeiIgc3R5bGU9InN0cm9rZTojZmZmO3N0cm9rZS13aWR0aDouNDFweCIgdHJhbnNmb3JtPSJtYXRyaXgoMS41Nzg0IDAgMCAxLjg2NDI5IC00LjQxMyAtNy4yMTIpIi8+PC9zdmc+"),auto}}:where(.ag-rtl){.ag-row-number-header,:where(.ag-cell.ag-row-number-cell):not(.ag-cell-first-right-pinned){border-left:var(--ag-pinned-column-border)}:where(.ag-cell.ag-row-number-cell.ag-row-number-selection-enabled){cursor:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxLjUiPjxwYXRoIGQ9Ik01Ljk3OSA4LjkxMXYxLjM5NUwzLjQ0NSA4LjE2bDIuNTM0LTIuMTQ2djEuMzk1aDYuMzA2djEuNTAyeiIgc3R5bGU9InN0cm9rZTojZmZmO3N0cm9rZS13aWR0aDouNDFweCIgdHJhbnNmb3JtPSJtYXRyaXgoMS41Nzg0IDAgMCAxLjg2NDI5IC00LjQxMyAtNy4yMTIpIi8+PC9zdmc+"),auto}}'; + +// packages/ag-grid-enterprise/src/rowNumbers/rowNumbersRowResizer.ts +import { Component as Component40, Direction, _getRowNode as _getRowNode4 } from "ag-grid-community"; +var RowNumbersRowResizerElement = { + tag: "div", + cls: "ag-row-numbers-resizer" +}; +var AgRowNumbersRowResizer = class extends Component40 { + constructor(cellCtrl) { + super(RowNumbersRowResizerElement); + this.cellCtrl = cellCtrl; + this.initialYPosition = -1; + this.dragging = false; + } + postConstruct() { + const { beans, cellCtrl } = this; + const { dragSvc, environment } = beans; + this.defaultRowHeight = environment.getDefaultRowHeight(); + dragSvc.addDragSource({ + dragStartPixels: 0, + eElement: this.getGui(), + onDragStart: this.onDragStart.bind(this), + onDragging: this.onDragging.bind(this), + onDragStop: this.onDragStop.bind(this), + onDragCancel: this.onDragCancel.bind(this), + includeTouch: true, + stopPropagationForTouch: true + }); + const rowPosition = cellCtrl.getRowPosition(); + this.node = _getRowNode4(this.beans, rowPosition); + } + onDragStart(mouseEvent) { + if (!this.node) { + return; + } + const { + beans: { ctrlsSvc, eventSvc } + } = this; + const ctrl = ctrlsSvc.get("gridCtrl"); + ctrl.setResizeCursor(Direction.Vertical); + this.dragging = true; + this.initialHeight = this.node.rowHeight; + eventSvc.dispatchEvent({ + type: "rowResizeStarted", + node: this.node, + event: mouseEvent, + rowHeight: this.initialHeight + }); + } + onDragging(mouseEvent) { + let { clientY } = mouseEvent; + if (this.cellCtrl.rowNode.rowPinned === "bottom") { + clientY *= -1; + } + if (this.initialYPosition === -1 || !this.dragging) { + this.initialYPosition = clientY; + return; + } + const { beans, initialHeight, initialYPosition, defaultRowHeight, node } = this; + if (initialHeight == null) { + return; + } + const currentSize = node?.rowHeight; + const newSize = Math.max(initialHeight - (initialYPosition - clientY), defaultRowHeight); + if (currentSize === newSize) { + return; + } + node?.setRowHeight(newSize); + const { rowRenderer, rowModel, pinnedRowModel } = beans; + const pinned = !!node?.rowPinned; + if (pinned) { + rowRenderer.redraw({ afterScroll: true }); + } + if (!pinned || pinnedRowModel?.isManual()) { + rowModel.onRowHeightChanged({ animate: false }); + } + } + onDragStop(mouseEvent) { + this.beans.eventSvc.dispatchEvent({ + type: "rowResizeEnded", + node: this.node, + event: mouseEvent, + rowHeight: this.node?.rowHeight + }); + this.clearDragDetails(true); + } + onDragCancel() { + this.clearDragDetails(true); + } + clearDragDetails(fromDragEvent) { + this.initialYPosition = -1; + this.initialHeight = null; + this.dragging = false; + if (fromDragEvent) { + const ctrl = this.beans.ctrlsSvc.get("gridCtrl"); + ctrl.setResizeCursor(false); + } + } + destroy() { + this.clearDragDetails(false); + this.node = void 0; + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/rowNumbers/rowNumbersService.ts +import { + AgColumn as AgColumn3, + BeanStub as BeanStub47, + KeyCode as KeyCode29, + ROW_NUMBERS_COLUMN_ID, + _addGridCommonParams as _addGridCommonParams20, + _applyColumnState as _applyColumnState3, + _areColIdsEqual as _areColIdsEqual3, + _convertColumnEventSourceType as _convertColumnEventSourceType2, + _createElement as _createElement13, + _debounce as _debounce4, + _destroyColumnTree as _destroyColumnTree3, + _getColumnStateFromColDef as _getColumnStateFromColDef2, + _getFirstRow, + _getRowNode as _getRowNode5, + _interpretAsRightClick, + _isRowNumbers as _isRowNumbers2, + _selectAllCells, + _setAriaLabel as _setAriaLabel15, + _updateColsMap as _updateColsMap3, + isRowNumberCol +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowNumbers/rowNumbersRowResizeFeature.ts +import { _isRowNumbers, _warn as _warn35 } from "ag-grid-community"; +function _isRowNumbersResizerEnabled(beans) { + const rowNumbers = _isRowNumbers(beans); + return !(!rowNumbers || typeof rowNumbers !== "object" || !rowNumbers.enableRowResizer); +} +var RowNumbersRowResizeFeature = class { + constructor(beans, cellCtrl) { + this.beans = beans; + this.cellCtrl = cellCtrl; + } + refreshRowResizer() { + if (!_isRowNumbersResizerEnabled(this.beans) || !this.isRowResizeSupported(this.cellCtrl.rowNode)) { + this.removeRowResizerFromCellComp(); + } else { + this.addResizerToCellComp(); + } + } + isRowResizeSupported(node) { + const { pinnedRowModel, rowModel, visibleCols } = this.beans; + const rowModelModelHasOnRowHeightChanged = !!rowModel.onRowHeightChanged; + if (visibleCols.autoHeightCols.length) { + _warn35(276); + return false; + } + if (node.rowPinned != null) { + return pinnedRowModel?.isManual() ? rowModelModelHasOnRowHeightChanged : true; + } + return rowModelModelHasOnRowHeightChanged; + } + addResizerToCellComp() { + const { beans, cellCtrl } = this; + let { rowResizer } = this; + if (!rowResizer) { + rowResizer = beans.registry.createDynamicBean( + "rowNumberRowResizer", + false, + cellCtrl + ); + if (!rowResizer) { + return; + } + this.rowResizer = beans.context.createBean(rowResizer); + } + cellCtrl.comp.setRowResizerElement(rowResizer.getGui()); + } + removeRowResizerFromCellComp() { + const { + rowResizer, + beans: { context }, + cellCtrl + } = this; + if (!rowResizer) { + return; + } + cellCtrl.comp?.setRowResizerElement(null); + this.rowResizer = context.destroyBean(rowResizer); + } + destroy() { + this.removeRowResizerFromCellComp(); + } +}; + +// packages/ag-grid-enterprise/src/rowNumbers/rowNumbersService.ts +var RowNumbersService = class extends BeanStub47 { + constructor() { + super(...arguments); + this.beanName = "rowNumbersSvc"; + this.isIntegratedWithSelection = false; + this.lastColumnResized = 0; + } + postConstruct() { + const refreshCells_debounced = _debounce4(this, this.refreshCells.bind(this), 10); + this.addManagedEventListeners({ + columnResized: () => { + this.lastColumnResized = Date.now(); + }, + cellFocused: this.onGridCellFocused.bind(this), + modelUpdated: (params) => { + refreshCells_debounced(false, !params.keepRenderedRows); + }, + rangeSelectionChanged: () => this.refreshCells(true), + pinnedRowsChanged: () => refreshCells_debounced(false, true) + }); + this.addManagedPropertyListeners(["rowNumbers", "cellSelection"], (e) => { + this.updateColumns(e); + }); + this.refreshSelectionIntegration(); + this.registerRangeSelectionExtension(); + } + shouldSkipColumn(column) { + return _isRowNumbers2(this.beans) && isRowNumberCol(column); + } + isAllColumnsSelectionCell(cellPosition) { + return _isRowNumbers2(this.beans) && isRowNumberCol(cellPosition.column); + } + isAllColumnsRange(range, allColumns) { + if (!_isRowNumbers2(this.beans) || allColumns.length === 0) { + return false; + } + return range.columns.length === allColumns.length && allColumns.every((column) => range.columns.includes(column)); + } + registerRangeSelectionExtension() { + const rangeSvc = this.beans.rangeSvc; + if (!rangeSvc) { + return; + } + rangeSvc.registerRangeSelectionExtension(this); + this.addDestroyFunc(() => rangeSvc.unregisterRangeSelectionExtension?.(this)); + } + addColumns(cols) { + if (this.columns == null) { + return; + } + cols.list = this.columns.list.concat(cols.list); + cols.tree = this.columns.tree.concat(cols.tree); + _updateColsMap3(cols); + } + createColumns(cols, updateOrders) { + const destroyCollection = () => { + _destroyColumnTree3(this.beans, this.columns?.tree); + this.columns = null; + }; + const { beans } = this; + if (!_isRowNumbers2(beans)) { + destroyCollection(); + return; + } + const newTreeDepth = cols.treeDepth; + const oldTreeDepth = this.columns?.treeDepth ?? -1; + const treeDepthSame = oldTreeDepth == newTreeDepth; + const list = this.generateRowNumberCols(); + const areSame = _areColIdsEqual3(list, this.columns?.list ?? []); + if (areSame && treeDepthSame) { + return; + } + destroyCollection(); + const { colGroupSvc } = this.beans; + const treeDepth = colGroupSvc?.findDepth(cols.tree) ?? 0; + const tree = colGroupSvc?.balanceTreeForAutoCols(list, treeDepth) ?? []; + this.columns = { + list, + tree, + treeDepth, + map: {} + }; + const putRowNumbersColsFirstInList = (cols2) => { + if (!cols2) { + return null; + } + const colsFiltered = cols2.filter((col) => !isRowNumberCol(col)); + return [...list, ...colsFiltered]; + }; + updateOrders(putRowNumbersColsFirstInList); + } + handleMouseDownOnCell(cellPosition, mouseEvent) { + if (!this.isIntegratedWithSelection || mouseEvent.target.classList.contains("ag-row-numbers-resizer")) { + if (this.beans.rangeSvc) { + mouseEvent.preventDefault(); + } + mouseEvent.stopImmediatePropagation(); + return false; + } + if (!mouseEvent.shiftKey && !_interpretAsRightClick(this.beans, mouseEvent)) { + this.focusFirstRenderedCellAtRowPosition(cellPosition); + } + return true; + } + handleKeyDownOnCell(cellPosition, event) { + if (!this.isIntegratedWithSelection) { + return false; + } + if (event.key === KeyCode29.ENTER) { + this.selectRowCells(cellPosition, event); + event.preventDefault(); + return true; + } + return false; + } + selectRowCells(cellPosition, keyboardEvent) { + const { rangeSvc } = this.beans; + if (!rangeSvc) { + return; + } + rangeSvc.handleCellKeyboardSelect(keyboardEvent, cellPosition); + } + updateColumns(event) { + const source = _convertColumnEventSourceType2(event.source); + this.refreshSelectionIntegration(); + for (const col of this.columns?.list ?? []) { + const colDef = this.createRowNumbersColDef(); + col.setColDef(colDef, null, source); + _applyColumnState3(this.beans, { state: [_getColumnStateFromColDef2(colDef, col.getColId())] }, source); + } + } + getColumn() { + return this.columns?.list.find(isRowNumberCol) ?? null; + } + getColumns() { + return this.columns?.list ?? null; + } + setupForHeader(comp) { + const { column, eGridHeader } = comp.params; + if (!isRowNumberCol(column)) { + return; + } + _setAriaLabel15(eGridHeader, "Row Number"); + this.addManagedElementListeners(eGridHeader, { + click: this.onHeaderClick.bind(this), + keydown: this.onHeaderKeyDown.bind(this), + focus: this.onHeaderFocus.bind(this) + }); + } + onGridCellFocused(event) { + if (!this.isIntegratedWithSelection || event.rowIndex == null || !event.column || !isRowNumberCol(event.column)) { + return; + } + const translate = this.getLocaleTextFunc(); + const message = translate("ariaSelectAllRowCells", "Press Enter to select all cells on this row"); + this.beans.ariaAnnounce?.announceValue(message, "ariaSelectAllRowCells"); + } + createRowNumbersRowResizerFeature(ctrl) { + if (!_isRowNumbersResizerEnabled(this.beans)) { + return void 0; + } + return new RowNumbersRowResizeFeature(this.beans, ctrl); + } + refreshSelectionIntegration() { + const { beans } = this; + const { gos, rangeSvc } = beans; + const cellSelection = gos.get("cellSelection"); + this.refreshRowNumberOverrides(); + this.isIntegratedWithSelection = !!rangeSvc && !!cellSelection && !this.isSuppressCellSelectionIntegration; + } + refreshRowNumberOverrides() { + const rowNumbers = _isRowNumbers2(this.beans); + this.rowNumberOverrides = {}; + this.isSuppressCellSelectionIntegration = false; + if (!rowNumbers || typeof rowNumbers !== "object") { + return; + } + if (rowNumbers.suppressCellSelectionIntegration) { + this.isSuppressCellSelectionIntegration = true; + } + const colDefValidProps = [ + "contextMenuItems", + "context", + "onCellClicked", + "onCellContextMenu", + "onCellDoubleClicked", + "headerTooltip", + "headerStyle", + "headerComponent", + "headerComponentParams", + "suppressHeaderKeyboardEvent", + "suppressNavigable", + "tooltipField", + "tooltipValueGetter", + "tooltipComponent", + "tooltipComponentParams", + "tooltipComponentSelector", + "valueGetter", + "valueFormatter", + "width", + "maxWidth", + "minWidth", + "resizable", + "cellRenderer", + "cellRendererSelector", + "cellRendererParams" + ]; + for (const prop of colDefValidProps) { + if (rowNumbers[prop] != null) { + this.rowNumberOverrides[prop] = rowNumbers[prop]; + } + } + } + onHeaderFocus() { + if (!this.isIntegratedWithSelection) { + return; + } + const translate = this.getLocaleTextFunc(); + const message = translate("ariaSelectAllCells", "Press Space or Enter to select all cells"); + this.beans.ariaAnnounce?.announceValue(message, "ariaSelectAllCells"); + } + onHeaderKeyDown(e) { + if (!this.isIntegratedWithSelection || e.key !== KeyCode29.SPACE && e.key !== KeyCode29.ENTER) { + return; + } + e.preventDefault(); + this.selectAllCellsFromHeader(); + } + onHeaderClick(_e) { + if (Date.now() - this.lastColumnResized < 100 || !this.isIntegratedWithSelection || this.getColumn()?.resizing) { + return; + } + this.focusAllCellsFromHeaderClick(); + } + selectAllCellsFromHeader() { + _selectAllCells(this.beans); + } + focusAllCellsFromHeaderClick() { + this.selectAllCellsFromHeader(); + this.focusFirstRenderedCellAtRowPosition(); + } + refreshCells(force, runAutoSize) { + const column = this.getColumn(); + if (!column) { + return; + } + if (runAutoSize) { + const width = this.beans.autoWidthCalc?.getPreferredWidthForElements([this.createDummyElement(column)], 2); + if (width != null) { + this.beans.colResize?.setColumnWidths( + [{ key: column, newWidth: width }], + false, + true, + "rowNumbersService" + ); + } + } + this.beans.rowRenderer.refreshCells({ + columns: [column], + force + }); + } + createDummyElement(column) { + const div = _createElement13({ tag: "div", cls: "ag-cell-value ag-cell" }); + let value = String(this.beans.rowModel.getRowCount() + 1); + if (typeof this.rowNumberOverrides.valueFormatter === "function") { + const valueFormatterParams = _addGridCommonParams20(this.beans.gos, { + data: void 0, + value, + node: null, + column, + colDef: column.colDef + }); + value = this.rowNumberOverrides.valueFormatter(valueFormatterParams); + } + div.textContent = value; + return div; + } + createRowNumbersColDef() { + const { gos, contextMenuSvc } = this.beans; + const enableRTL = gos.get("enableRtl"); + return { + // overridable properties + minWidth: 60, + width: 60, + resizable: false, + valueGetter: this.valueGetter.bind(this), + contextMenuItems: this.isIntegratedWithSelection || !contextMenuSvc ? void 0 : () => [], + // overrides + ...this.rowNumberOverrides, + // non-overridable properties + colId: ROW_NUMBERS_COLUMN_ID, + chartDataType: "excluded", + suppressHeaderMenuButton: true, + sortable: false, + suppressMovable: true, + lockPinned: true, + pinned: enableRTL ? "right" : "left", + lockPosition: enableRTL ? "right" : "left", + editable: false, + suppressFillHandle: true, + suppressAutoSize: true, + suppressSizeToFit: true, + suppressHeaderContextMenu: true, + headerClass: this.getHeaderClass(), + cellClass: this.getCellClass.bind(this), + cellAriaRole: "rowheader" + }; + } + valueGetter(params) { + const node = params.node; + const isFormulasActive = this.beans.formula?.active; + const pinnedSibling = node?.pinnedSibling; + if (node?.rowPinned && pinnedSibling) { + const rowIndex = isFormulasActive ? pinnedSibling.formulaRowIndex : pinnedSibling.rowIndex; + return `${rowIndex == null ? "-" : rowIndex + 1}`; + } + return String(((isFormulasActive ? node?.formulaRowIndex : node?.rowIndex) || 0) + 1); + } + getHeaderClass() { + const cssClass = ["ag-row-number-header"]; + if (this.isIntegratedWithSelection) { + cssClass.push("ag-row-number-selection-enabled"); + } + return cssClass; + } + getCellClass(params) { + const { beans } = this; + const { rangeSvc, gos } = beans; + const { node } = params; + const cssClasses = ["ag-row-number-cell"]; + const cellSelection = gos.get("cellSelection"); + if (!rangeSvc || !cellSelection) { + return cssClasses; + } + if (this.isIntegratedWithSelection) { + cssClasses.push("ag-row-number-selection-enabled"); + } + const ranges = rangeSvc.getCellRanges(); + if (!ranges.length) { + return cssClasses; + } + const allColsLen = this.beans.visibleCols.allCols.length - 1; + const shouldHighlight = typeof cellSelection === "object" && cellSelection.enableHeaderHighlight; + for (const range of ranges) { + if (rangeSvc.isRowInRange({ rowIndex: node.rowIndex, rowPinned: node.rowPinned }, range)) { + if (shouldHighlight) { + cssClasses.push("ag-row-number-range-highlight"); + } + if (range.columns.length === allColsLen) { + cssClasses.push("ag-row-number-range-selected"); + } + } + } + return cssClasses; + } + generateRowNumberCols() { + const { gos, beans } = this; + if (!_isRowNumbers2(beans)) { + return []; + } + const colDef = this.createRowNumbersColDef(); + const colId = colDef.colId; + gos.validateColDef(colDef, colId, true); + const col = new AgColumn3(colDef, null, colId, false); + this.createBean(col); + return [col]; + } + focusFirstRenderedCellAtRowPosition(rowPosition) { + const editSvc = this.beans.editSvc; + if (editSvc?.isEditing() && editSvc.isRangeSelectionEnabledWhileEditing?.()) { + return; + } + if (!rowPosition) { + rowPosition = _getFirstRow(this.beans); + if (!rowPosition) { + return; + } + } + const { beans, gos } = this; + const { visibleCols, colViewport } = beans; + const pinnedCols = gos.get("enableRtl") ? visibleCols.rightCols : visibleCols.leftCols; + let columns; + if (pinnedCols.length == 1) { + const rowNode = _getRowNode5(beans, rowPosition); + if (!rowNode) { + return; + } + columns = colViewport.getColsWithinViewport(rowNode); + } else { + columns = pinnedCols; + } + const column = columns.find((col) => !isRowNumberCol(col)); + if (!column) { + return; + } + const { rowPinned, rowIndex } = rowPosition; + setTimeout(() => { + beans.focusSvc.setFocusedCell({ + rowIndex, + rowPinned, + column, + forceBrowserFocus: true, + preventScrollOnBrowserFocus: true + }); + }); + } + destroy() { + _destroyColumnTree3(this.beans, this.columns?.tree); + this.rowNumberOverrides = null; + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/rowNumbers/rowNumbersModule.ts +var RowNumbersModule = { + moduleName: "RowNumbers", + version: VERSION, + beans: [RowNumbersService], + dynamicBeans: { rowNumberRowResizer: AgRowNumbersRowResizer }, + dependsOn: [EnterpriseCoreModule, CellStyleModule, _SharedDragAndDropModule4], + css: [rowNumbers_default] +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/filtersToolPanelModule.ts +import { _ColumnFilterModule as _ColumnFilterModule4 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/filterToolPanel/filtersToolPanel.ts +import { Component as Component45, RefPlaceholder as RefPlaceholder41 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/filterToolPanel/agFiltersToolPanelHeader.ts +import { + AgInputTextFieldSelector as AgInputTextFieldSelector8, + Component as Component41, + RefPlaceholder as RefPlaceholder38, + _createIconNoSpan as _createIconNoSpan20, + _debounce as _debounce5, + _setDisplayed as _setDisplayed20 +} from "ag-grid-community"; +var AgFiltersToolPanelHeaderElement = { + tag: "div", + cls: "ag-filter-toolpanel-search", + role: "presentation", + children: [ + { + tag: "div", + ref: "eExpand", + cls: "ag-filter-toolpanel-expand" + }, + { + tag: "ag-input-text-field", + ref: "eFilterTextField", + cls: "ag-filter-toolpanel-search-input" + } + ] +}; +var AgFiltersToolPanelHeader = class extends Component41 { + constructor() { + super(...arguments); + this.eExpand = RefPlaceholder38; + this.eFilterTextField = RefPlaceholder38; + } + postConstruct() { + this.setTemplate(AgFiltersToolPanelHeaderElement, [AgInputTextFieldSelector8]); + const translate = this.getLocaleTextFunc(); + this.eFilterTextField.setAutoComplete(false).setInputAriaLabel(translate("ariaFilterColumnsInput", "Filter Columns Input")).onValueChange(this.onSearchTextChanged.bind(this)); + this.createExpandIcons(); + this.setExpandState(0 /* EXPANDED */); + this.addManagedElementListeners(this.eExpand, { click: this.onExpandClicked.bind(this) }); + this.addManagedEventListeners({ newColumnsLoaded: this.showOrHideOptions.bind(this) }); + } + init(params) { + this.params = params; + if (this.beans.colModel.ready) { + this.showOrHideOptions(); + } + } + createExpandIcons() { + const { eExpand, beans } = this; + eExpand.appendChild(this.eExpandChecked = _createIconNoSpan20("accordionOpen", beans)); + eExpand.appendChild(this.eExpandUnchecked = _createIconNoSpan20("accordionClosed", beans)); + eExpand.appendChild(this.eExpandIndeterminate = _createIconNoSpan20("accordionIndeterminate", beans)); + } + // we only show expand / collapse if we are showing filters + showOrHideOptions() { + const { params, eFilterTextField } = this; + const showFilterSearch = !params.suppressFilterSearch; + const showExpand = !params.suppressExpandAll; + const translate = this.getLocaleTextFunc(); + eFilterTextField.setInputPlaceholder(translate("searchOoo", "Search...")); + const isFilterGroupPresent = (col) => col.getOriginalParent() && col.isFilterAllowed(); + const filterGroupsPresent = this.beans.colModel.getCols().some(isFilterGroupPresent); + _setDisplayed20(eFilterTextField.getGui(), showFilterSearch); + _setDisplayed20(this.eExpand, showExpand && filterGroupsPresent); + } + onSearchTextChanged() { + if (!this.onSearchTextChangedDebounced) { + this.onSearchTextChangedDebounced = _debounce5( + this, + () => this.dispatchLocalEvent({ type: "searchChanged", searchText: this.eFilterTextField.getValue() }), + 300 + ); + } + this.onSearchTextChangedDebounced(); + } + onExpandClicked() { + const event = this.currentExpandState === 0 /* EXPANDED */ ? { type: "collapseAll" } : { type: "expandAll" }; + this.dispatchLocalEvent(event); + } + setExpandState(state) { + this.currentExpandState = state; + _setDisplayed20(this.eExpandChecked, state === 0 /* EXPANDED */); + _setDisplayed20(this.eExpandUnchecked, state === 1 /* COLLAPSED */); + _setDisplayed20(this.eExpandIndeterminate, state === 2 /* INDETERMINATE */); + } +}; +var AgFiltersToolPanelHeaderSelector = { + selector: "AG-FILTERS-TOOL-PANEL-HEADER", + component: AgFiltersToolPanelHeader +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/agFiltersToolPanelList.ts +import { + Component as Component44, + _addGridCommonParams as _addGridCommonParams21, + _clearElement as _clearElement16, + _exists as _exists22, + _getActiveDomElement as _getActiveDomElement13, + _mergeDeep as _mergeDeep4, + _setAriaLabel as _setAriaLabel18, + _warn as _warn36, + isProvidedColumnGroup as isProvidedColumnGroup6 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/filterToolPanel/toolPanelFilterComp.ts +import { + Component as Component42, + FilterComp as FilterComp3, + KeyCode as KeyCode30, + RefPlaceholder as RefPlaceholder39, + _clearElement as _clearElement14, + _createElement as _createElement14, + _createIconNoSpan as _createIconNoSpan21, + _setAriaExpanded as _setAriaExpanded10, + _setAriaLabel as _setAriaLabel16, + _setAriaRole as _setAriaRole10, + _setDisplayed as _setDisplayed21 +} from "ag-grid-community"; +var ToolPanelFilterElement = { + tag: "div", + cls: "ag-filter-toolpanel-instance", + children: [ + { + tag: "div", + ref: "eFilterToolPanelHeader", + cls: "ag-filter-toolpanel-header ag-filter-toolpanel-instance-header", + role: "button", + attrs: { "aria-expanded": "false" }, + children: [ + { tag: "div", ref: "eExpand", cls: "ag-filter-toolpanel-expand" }, + { tag: "span", ref: "eFilterName", cls: "ag-header-cell-text" }, + { + tag: "span", + ref: "eFilterIcon", + cls: "ag-header-icon ag-filter-icon ag-filter-toolpanel-instance-header-icon" + } + ] + }, + { tag: "div", ref: "agFilterToolPanelBody", cls: "ag-filter-toolpanel-instance-body ag-filter" } + ] +}; +var ToolPanelFilterComp = class extends Component42 { + constructor(hideHeader, expandedCallback) { + super(ToolPanelFilterElement); + this.hideHeader = hideHeader; + this.expandedCallback = expandedCallback; + this.eFilterToolPanelHeader = RefPlaceholder39; + this.eFilterName = RefPlaceholder39; + this.agFilterToolPanelBody = RefPlaceholder39; + this.eFilterIcon = RefPlaceholder39; + this.eExpand = RefPlaceholder39; + this.expanded = false; + } + postConstruct() { + const { beans, eExpand, eFilterIcon } = this; + const eExpandChecked = _createIconNoSpan21("accordionOpen", beans); + this.eExpandChecked = eExpandChecked; + const eExpandUnchecked = _createIconNoSpan21("accordionClosed", beans); + this.eExpandUnchecked = eExpandUnchecked; + eExpand.appendChild(eExpandChecked); + eExpand.appendChild(eExpandUnchecked); + const translate = this.getLocaleTextFunc(); + _setAriaLabel16(eFilterIcon, translate("ariaFilterActive", "Filter Active")); + _setAriaRole10(eFilterIcon, "img"); + } + setColumn(column) { + this.column = column; + const { beans, eFilterToolPanelHeader, eFilterIcon, eExpandChecked, hideHeader } = this; + this.eFilterName.innerText = beans.colNames.getDisplayNameForColumn(column, "filterToolPanel", false) || ""; + this.addManagedListeners(eFilterToolPanelHeader, { + click: this.toggleExpanded.bind(this), + keydown: this.onKeyDown.bind(this) + }); + this.addManagedEventListeners({ filterOpened: this.onFilterOpened.bind(this) }); + this.addInIcon("filterActive", eFilterIcon, column); + _setDisplayed21(eFilterIcon, this.isFilterActive()); + _setDisplayed21(eExpandChecked, false); + if (hideHeader) { + _setDisplayed21(eFilterToolPanelHeader, false); + eFilterToolPanelHeader.removeAttribute("tabindex"); + } else { + eFilterToolPanelHeader.setAttribute("tabindex", "0"); + } + this.addManagedListeners(column, { filterChanged: this.onFilterChanged.bind(this) }); + } + onKeyDown(e) { + const { key } = e; + const { ENTER, SPACE, LEFT, RIGHT } = KeyCode30; + if (key !== ENTER && key !== SPACE && key !== LEFT && key !== RIGHT) { + return; + } + e.preventDefault(); + if (key === ENTER || key === SPACE) { + this.toggleExpanded(); + } else if (key === KeyCode30.LEFT) { + this.collapse(); + } else { + this.expand(); + } + } + getColumn() { + return this.column; + } + getColumnFilterName() { + return this.beans.colNames.getDisplayNameForColumn(this.column, "filterToolPanel", false); + } + addCssClassToTitleBar(cssClass) { + this.eFilterToolPanelHeader.classList.add(cssClass); + } + addInIcon(iconName, eParent, column) { + if (eParent == null) { + return; + } + const eIcon = _createIconNoSpan21(iconName, this.beans, column); + eParent.appendChild(eIcon); + } + isFilterActive() { + return !!this.beans.colFilter?.isFilterActive(this.column); + } + onFilterChanged() { + _setDisplayed21(this.eFilterIcon, this.isFilterActive()); + this.dispatchLocalEvent({ type: "filterChanged" }); + } + toggleExpanded() { + if (this.expanded) { + this.collapse(); + } else { + this.expand(); + } + } + expand() { + if (this.expanded) { + return; + } + this.expanded = true; + _setAriaExpanded10(this.eFilterToolPanelHeader, true); + _setDisplayed21(this.eExpandChecked, true); + _setDisplayed21(this.eExpandUnchecked, false); + this.addFilterElement(); + this.expandedCallback(); + } + addFilterElement(suppressFocus) { + const filterPanelWrapper = _createElement14({ tag: "div", cls: "ag-filter-toolpanel-instance-filter" }); + const comp = this.createManagedBean(new FilterComp3(this.column, "TOOLBAR")); + this.filterComp = comp; + if (!comp.hasFilter()) { + return; + } + comp.getFilter()?.then((filter) => { + this.underlyingFilter = filter; + if (!filter) { + return; + } + filterPanelWrapper.appendChild(comp.getGui()); + this.agFilterToolPanelBody.appendChild(filterPanelWrapper); + comp.afterGuiAttached({ container: "toolPanel", suppressFocus }); + }); + } + collapse() { + if (!this.expanded) { + return; + } + this.expanded = false; + _setAriaExpanded10(this.eFilterToolPanelHeader, false); + this.removeFilterElement(); + _setDisplayed21(this.eExpandChecked, false); + _setDisplayed21(this.eExpandUnchecked, true); + const filterComp = this.filterComp; + filterComp?.afterGuiDetached(); + this.destroyBean(filterComp); + this.expandedCallback(); + } + removeFilterElement() { + _clearElement14(this.agFilterToolPanelBody); + } + isExpanded() { + return this.expanded; + } + onPanelHidden() { + if (!this.expanded) { + return; + } + const filter = this.underlyingFilter; + if (!filter) { + return; + } + filter.afterGuiDetached?.(); + } + onFilterOpened(event) { + if (event.source !== "COLUMN_MENU") { + return; + } + if (event.column !== this.column) { + return; + } + if (!this.expanded) { + return; + } + this.collapse(); + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/toolPanelFilterGroupComp.ts +import { + Component as Component43, + RefPlaceholder as RefPlaceholder40, + _clearElement as _clearElement15, + _createIconNoSpan as _createIconNoSpan22, + _getShouldDisplayTooltip as _getShouldDisplayTooltip4, + _setAriaLabel as _setAriaLabel17, + _setAriaRole as _setAriaRole11, + isProvidedColumnGroup as isProvidedColumnGroup5 +} from "ag-grid-community"; +var ToolPanelFilterGroupComp = class extends Component43 { + constructor(columnGroup, childFilterComps, expandedCallback, depth, showingColumn) { + super(); + this.columnGroup = columnGroup; + this.childFilterComps = childFilterComps; + this.expandedCallback = expandedCallback; + this.depth = depth; + this.showingColumn = showingColumn; + this.filterGroupComp = RefPlaceholder40; + } + postConstruct() { + const groupParams = { + cssIdentifier: "filter-toolpanel", + direction: "vertical" + }; + this.setTemplate( + { + tag: "div", + cls: "ag-filter-toolpanel-group-wrapper", + children: [{ tag: "ag-group-component", ref: "filterGroupComp" }] + }, + [AgGroupComponentSelector], + { filterGroupComp: groupParams } + ); + this.setGroupTitle(); + const { filterGroupComp, depth, childFilterComps, gos } = this; + filterGroupComp.setAlignItems("stretch"); + filterGroupComp.addCss(`ag-filter-toolpanel-group-level-${depth}`); + filterGroupComp.getGui().style.setProperty("--ag-indentation-level", String(depth)); + filterGroupComp.addCssClassToTitleBar(`ag-filter-toolpanel-group-level-${depth}-header`); + for (const filterComp of childFilterComps) { + filterGroupComp.addItem(filterComp); + filterComp.addCssClassToTitleBar(`ag-filter-toolpanel-group-level-${depth + 1}-header`); + filterComp.getGui().style.setProperty("--ag-indentation-level", String(depth + 1)); + } + const column = this.showingColumn ? this.columnGroup : void 0; + this.tooltipFeature = this.createOptionalManagedBean( + this.beans.registry.createDynamicBean("tooltipFeature", false, { + getGui: () => this.getGui(), + getLocation: () => "filterToolPanelColumnGroup", + shouldDisplayTooltip: _getShouldDisplayTooltip4( + gos, + () => filterGroupComp.getGui().querySelector(".ag-group-title") + ), + getAdditionalParams: () => ({ + colDef: column?.getColDef(), + column + }) + }) + ); + this.refreshFilterClass(); + this.addExpandCollapseListeners(); + this.addFilterChangedListeners(); + this.setupTooltip(); + this.addInIcon("filterActive"); + } + setupTooltip() { + if (!this.showingColumn) { + return; + } + const refresh = () => { + this.tooltipFeature?.setTooltipAndRefresh(this.columnGroup.getColDef().headerTooltip); + }; + refresh(); + this.addManagedEventListeners({ newColumnsLoaded: refresh }); + } + addCssClassToTitleBar(cssClass) { + this.filterGroupComp.addCssClassToTitleBar(cssClass); + } + onPanelHidden() { + for (const filterComp of this.childFilterComps) { + filterComp.onPanelHidden(); + } + } + isColumnGroup() { + return isProvidedColumnGroup5(this.columnGroup); + } + isExpanded() { + return this.filterGroupComp.isExpanded(); + } + getChildren() { + return this.childFilterComps; + } + getFilterGroupName() { + return this.filterGroupName ?? ""; + } + getFilterGroupId() { + return this.columnGroup.getId(); + } + hideGroupItem(hide, index) { + this.filterGroupComp.hideItem(hide, index); + } + hideGroup(hide) { + this.setDisplayed(!hide); + } + addInIcon(iconName) { + const eIcon = _createIconNoSpan22(iconName, this.beans); + if (eIcon) { + eIcon.classList.add("ag-filter-toolpanel-group-instance-header-icon"); + const translate = this.getLocaleTextFunc(); + _setAriaLabel17(eIcon, translate("ariaFilterActive", "Filter Active")); + _setAriaRole11(eIcon, "img"); + } + this.filterGroupComp.addTitleBarWidget(eIcon); + } + forEachToolPanelFilterChild(action) { + for (const filterComp of this.childFilterComps) { + if (filterComp instanceof ToolPanelFilterComp) { + action(filterComp); + } + } + } + addExpandCollapseListeners() { + const expandListener = this.isColumnGroup() ? () => this.expandedCallback() : () => this.forEachToolPanelFilterChild((filterComp) => filterComp.expand()); + const collapseListener = this.isColumnGroup() ? () => this.expandedCallback() : () => this.forEachToolPanelFilterChild((filterComp) => filterComp.collapse()); + this.addManagedListeners(this.filterGroupComp, { + expanded: expandListener, + collapsed: collapseListener + }); + } + getColumns() { + if (isProvidedColumnGroup5(this.columnGroup)) { + return this.columnGroup.getLeafColumns(); + } + return [this.columnGroup]; + } + addFilterChangedListeners() { + for (const column of this.getColumns()) { + this.addManagedListeners(column, { filterChanged: () => this.refreshFilterClass() }); + } + if (!isProvidedColumnGroup5(this.columnGroup)) { + this.addManagedEventListeners({ filterOpened: this.onFilterOpened.bind(this) }); + } + } + refreshFilterClass() { + const columns = this.getColumns(); + const anyChildFiltersActive = () => columns.some((col) => col.isFilterActive()); + this.filterGroupComp.toggleCss("ag-has-filter", anyChildFiltersActive()); + } + onFilterOpened(event) { + if (event.source !== "COLUMN_MENU") { + return; + } + if (event.column !== this.columnGroup) { + return; + } + if (!this.isExpanded()) { + return; + } + this.collapse(); + } + expand() { + this.filterGroupComp.toggleGroupExpand(true); + } + collapse() { + this.filterGroupComp.toggleGroupExpand(false); + } + setGroupTitle() { + const columnGroup = this.columnGroup; + const filterGroupName = isProvidedColumnGroup5(columnGroup) ? this.getColumnGroupName(columnGroup) : this.getColumnName(columnGroup); + this.filterGroupName = filterGroupName; + this.filterGroupComp.setTitle(filterGroupName || ""); + } + getColumnGroupName(columnGroup) { + return this.beans.colNames.getDisplayNameForProvidedColumnGroup(null, columnGroup, "filterToolPanel"); + } + getColumnName(column) { + return this.beans.colNames.getDisplayNameForColumn(column, "filterToolPanel", false); + } + destroyFilters() { + this.childFilterComps = this.destroyBeans(this.childFilterComps); + _clearElement15(this.getGui()); + } + destroy() { + this.destroyFilters(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/agFiltersToolPanelList.ts +var AgFiltersToolPanelList = class extends Component44 { + constructor() { + super({ tag: "div", cls: "ag-filter-list-panel" }); + this.initialised = false; + this.hasLoadedInitialState = false; + this.isInitialState = false; + this.filterGroupComps = []; + // If a column drag is happening, we suppress handling the event until it has completed + this.suppressOnColumnsChanged = false; + this.onColumnsChangedPending = false; + } + wireBeans(beans) { + this.colModel = beans.colModel; + } + init(params) { + this.initialised = true; + const defaultParams = _addGridCommonParams21(this.gos, { + suppressExpandAll: false, + suppressFilterSearch: false, + suppressSyncLayoutWithGrid: false + }); + _mergeDeep4(defaultParams, params); + this.params = defaultParams; + if (!defaultParams.suppressSyncLayoutWithGrid) { + this.addManagedEventListeners({ columnMoved: () => this.onColumnsChanged() }); + } + this.addManagedEventListeners({ + newColumnsLoaded: () => this.onColumnsChanged(), + toolPanelVisibleChanged: (event) => { + if (event.key === "filters" && !event.visible) { + this.onPanelHidden(); + } + }, + dragStarted: () => { + this.suppressOnColumnsChanged = true; + }, + dragStopped: () => { + this.suppressOnColumnsChanged = false; + if (this.onColumnsChangedPending) { + this.onColumnsChangedPending = false; + this.onColumnsChanged(); + } + } + }); + if (this.colModel.ready) { + this.onColumnsChanged(); + } + } + onColumnsChanged() { + if (this.suppressOnColumnsChanged) { + this.onColumnsChangedPending = true; + return; + } + const pivotModeActive = this.colModel.isPivotMode(); + const shouldSyncColumnLayoutWithGrid = !this.params.suppressSyncLayoutWithGrid && !pivotModeActive; + if (shouldSyncColumnLayoutWithGrid) { + this.syncFilterLayout(); + } else { + this.buildTreeFromProvidedColumnDefs(); + } + this.refreshAriaLabel(); + } + syncFilterLayout() { + syncLayoutWithGrid(this.colModel, this.setFiltersLayout.bind(this)); + this.refreshAriaLabel(); + } + buildTreeFromProvidedColumnDefs() { + const columnTree = this.colModel.getColDefColTree(); + this.recreateFilters(columnTree); + } + setFiltersLayout(colDefs) { + const columnTree = toolPanelCreateColumnTree(this.colModel, colDefs); + this.recreateFilters(columnTree); + } + recreateFilters(columnTree) { + const activeElement = _getActiveDomElement13(this.beans); + if (!this.hasLoadedInitialState) { + this.hasLoadedInitialState = true; + this.isInitialState = !!this.params.initialState; + } + const expansionState = this.getExpansionState(); + this.destroyFilters(); + const filterGroupComps = this.recursivelyAddComps(columnTree, 0, expansionState); + this.filterGroupComps = filterGroupComps; + const len = filterGroupComps.length; + if (len) { + for (const comp of filterGroupComps) { + this.appendChild(comp); + } + this.setFirstAndLastVisible(0, len - 1); + } + const searchFilterText = this.searchFilterText; + if (_exists22(searchFilterText)) { + this.searchFilters(searchFilterText); + } + this.fireExpandedEvent(); + if (this.getGui().contains(activeElement)) { + activeElement.focus(); + } + this.isInitialState = false; + this.refreshAriaLabel(); + } + recursivelyAddComps(tree, depth, expansionState) { + return tree.map((child) => { + if (isProvidedColumnGroup6(child)) { + return this.recursivelyAddFilterGroupComps(child, depth, expansionState)?.flatMap((a) => a) ?? []; + } + const column = child; + if (!this.shouldDisplayFilter(column)) { + return []; + } + const hideFilterCompHeader = depth === 0; + const filterComp = new ToolPanelFilterComp(hideFilterCompHeader, () => this.onFilterExpanded()); + this.createBean(filterComp); + filterComp.setColumn(column); + if (expansionState.get(column.getId())) { + filterComp.expand(); + } + if (depth > 0) { + return filterComp; + } + const filterGroupComp = this.createBean( + new ToolPanelFilterGroupComp(column, [filterComp], this.onGroupExpanded.bind(this), depth, true) + ); + filterGroupComp.addCssClassToTitleBar("ag-filter-toolpanel-header"); + if (!expansionState.get(filterGroupComp.getFilterGroupId())) { + filterGroupComp.collapse(); + } + return filterGroupComp; + }).flatMap((a) => a); + } + refreshAriaLabel() { + const translate = this.getLocaleTextFunc(); + const filterListName = translate("ariaFilterPanelList", "Filter List"); + const localeFilters = translate("filters", "Filters"); + const eGui = this.getGui(); + const groupSelector = ".ag-filter-toolpanel-group-wrapper"; + const itemSelector = ".ag-filter-toolpanel-group-item"; + const hiddenSelector = ".ag-hidden"; + const visibleItems = eGui.querySelectorAll(`${itemSelector}:not(${groupSelector}, ${hiddenSelector})`); + const totalVisibleItems = visibleItems.length; + _setAriaLabel18(this.getAriaElement(), `${filterListName} ${totalVisibleItems} ${localeFilters}`); + } + recursivelyAddFilterGroupComps(columnGroup, depth, expansionState) { + if (!this.filtersExistInChildren(columnGroup.getChildren())) { + return; + } + const colGroupDef = columnGroup.getColGroupDef(); + if (colGroupDef?.suppressFiltersToolPanel) { + return []; + } + const newDepth = columnGroup.isPadding() ? depth : depth + 1; + const childFilterComps = this.recursivelyAddComps(columnGroup.getChildren(), newDepth, expansionState).flatMap( + (a) => a + ); + if (columnGroup.isPadding()) { + return childFilterComps; + } + const filterGroupComp = new ToolPanelFilterGroupComp( + columnGroup, + childFilterComps, + this.onGroupExpanded.bind(this), + depth, + false + ); + this.createBean(filterGroupComp); + filterGroupComp.addCssClassToTitleBar("ag-filter-toolpanel-header"); + const expansionStateValue = expansionState.get(filterGroupComp.getFilterGroupId()); + if (this.isInitialState && !expansionStateValue || expansionStateValue === false) { + filterGroupComp.collapse(); + } + return [filterGroupComp]; + } + filtersExistInChildren(tree) { + return tree.some((child) => { + if (isProvidedColumnGroup6(child)) { + return this.filtersExistInChildren(child.getChildren()); + } + return this.shouldDisplayFilter(child); + }); + } + shouldDisplayFilter(column) { + const suppressFiltersToolPanel = column.getColDef()?.suppressFiltersToolPanel; + return column.isFilterAllowed() && !suppressFiltersToolPanel; + } + getExpansionState() { + const expansionState = /* @__PURE__ */ new Map(); + if (this.isInitialState) { + const { expandedColIds, expandedGroupIds } = this.params.initialState; + for (const id of expandedColIds) { + expansionState.set(id, true); + } + for (const id of expandedGroupIds) { + expansionState.set(id, true); + } + return expansionState; + } + const recursiveGetExpansionState = (filterGroupComp) => { + expansionState.set(filterGroupComp.getFilterGroupId(), filterGroupComp.isExpanded()); + for (const child of filterGroupComp.getChildren()) { + if (child instanceof ToolPanelFilterGroupComp) { + recursiveGetExpansionState(child); + } else { + expansionState.set(child.getColumn().getId(), child.isExpanded()); + } + } + }; + this.filterGroupComps.forEach(recursiveGetExpansionState); + return expansionState; + } + refresh() { + } + // lazy initialise the panel + setVisible(visible) { + super.setDisplayed(visible); + if (visible && !this.initialised) { + this.init(this.params); + } + } + expandFilterGroups(expand, groupIds) { + const updatedGroupIds = []; + const updateGroupExpandState = (filterGroup) => { + const groupId = filterGroup.getFilterGroupId(); + const shouldExpandOrCollapse = !groupIds || groupIds.includes(groupId); + if (shouldExpandOrCollapse) { + if (expand && filterGroup.isColumnGroup()) { + filterGroup.expand(); + } else { + filterGroup.collapse(); + } + updatedGroupIds.push(groupId); + } + for (const child of filterGroup.getChildren()) { + if (child instanceof ToolPanelFilterGroupComp) { + updateGroupExpandState(child); + } + } + }; + this.filterGroupComps.forEach(updateGroupExpandState); + this.onGroupExpanded(); + if (groupIds) { + const unrecognisedGroupIds = groupIds.filter((groupId) => updatedGroupIds.indexOf(groupId) < 0); + if (unrecognisedGroupIds.length > 0) { + _warn36(166, { unrecognisedGroupIds }); + } + } + } + expandFilters(expand, colIds) { + const updatedColIds = []; + const updateGroupExpandState = (filterComp) => { + if (filterComp instanceof ToolPanelFilterGroupComp) { + let anyChildrenChanged = false; + for (const child of filterComp.getChildren()) { + const childUpdated = updateGroupExpandState(child); + if (childUpdated) { + if (expand) { + filterComp.expand(); + anyChildrenChanged = true; + } else if (!filterComp.isColumnGroup()) { + filterComp.collapse(); + } + } + } + return anyChildrenChanged; + } + const colId = filterComp.getColumn().getColId(); + const updateFilterExpandState = !colIds || colIds.includes(colId); + if (updateFilterExpandState) { + if (expand) { + filterComp.expand(); + } else { + filterComp.collapse(); + } + updatedColIds.push(colId); + } + return updateFilterExpandState; + }; + this.filterGroupComps.forEach(updateGroupExpandState); + this.onGroupExpanded(); + if (colIds) { + const unrecognisedColIds = colIds.filter((colId) => updatedColIds.indexOf(colId) < 0); + if (unrecognisedColIds.length > 0) { + _warn36(167, { unrecognisedColIds }); + } + } + } + onGroupExpanded() { + this.fireExpandedEvent(); + } + onFilterExpanded() { + this.dispatchLocalEvent({ type: "filterExpanded" }); + } + fireExpandedEvent() { + let expandedCount = 0; + let notExpandedCount = 0; + const updateExpandCounts = (filterGroup) => { + if (!filterGroup.isColumnGroup()) { + return; + } + if (filterGroup.isExpanded()) { + expandedCount++; + } else { + notExpandedCount++; + } + for (const child of filterGroup.getChildren()) { + if (child instanceof ToolPanelFilterGroupComp) { + updateExpandCounts(child); + } + } + }; + this.filterGroupComps.forEach(updateExpandCounts); + let state; + if (expandedCount > 0 && notExpandedCount > 0) { + state = 2 /* INDETERMINATE */; + } else if (notExpandedCount > 0) { + state = 1 /* COLLAPSED */; + } else { + state = 0 /* EXPANDED */; + } + this.dispatchLocalEvent({ type: "groupExpanded", state }); + } + performFilterSearch(searchText) { + this.searchFilterText = _exists22(searchText) ? searchText.toLowerCase() : null; + this.searchFilters(this.searchFilterText); + } + searchFilters(searchFilter) { + const passesFilter = (groupName) => { + return !_exists22(searchFilter) || groupName.toLowerCase().indexOf(searchFilter) !== -1; + }; + const recursivelySearch = (filterItem, parentPasses) => { + if (!(filterItem instanceof ToolPanelFilterGroupComp)) { + return passesFilter(filterItem.getColumnFilterName() || ""); + } + const children = filterItem.getChildren(); + const groupNamePasses = passesFilter(filterItem.getFilterGroupName()); + const alreadyPassed = parentPasses || groupNamePasses; + if (alreadyPassed) { + filterItem.hideGroup(false); + for (let i = 0; i < children.length; i++) { + recursivelySearch(children[i], alreadyPassed); + filterItem.hideGroupItem(false, i); + } + return true; + } + let anyChildPasses = false; + children.forEach((child, index) => { + const childPasses = recursivelySearch(child, parentPasses); + filterItem.hideGroupItem(!childPasses, index); + if (childPasses) { + anyChildPasses = true; + } + }); + filterItem.hideGroup(!anyChildPasses); + return anyChildPasses; + }; + let firstVisible; + let lastVisible; + this.filterGroupComps.forEach((filterGroup, idx) => { + recursivelySearch(filterGroup, false); + const isHidden = filterGroup.getGui()?.classList.contains("ag-hidden"); + if (firstVisible === void 0) { + if (!isHidden) { + firstVisible = idx; + lastVisible = idx; + } + } else if (!isHidden && lastVisible !== idx) { + lastVisible = idx; + } + }); + this.setFirstAndLastVisible(firstVisible, lastVisible); + this.refreshAriaLabel(); + } + setFirstAndLastVisible(firstIdx, lastIdx) { + this.filterGroupComps.forEach((filterGroup, idx) => { + filterGroup.removeCss("ag-first-group-visible"); + filterGroup.removeCss("ag-last-group-visible"); + if (idx === firstIdx) { + filterGroup.addCss("ag-first-group-visible"); + } + if (idx === lastIdx) { + filterGroup.addCss("ag-last-group-visible"); + } + }); + } + onPanelHidden() { + for (const filterGroupComp of this.filterGroupComps) { + filterGroupComp.onPanelHidden(); + } + } + getExpandedFiltersAndGroups() { + const expandedGroupIds = []; + const expandedColIds = /* @__PURE__ */ new Set(); + const getExpandedFiltersAndGroups = (filterComp) => { + if (filterComp instanceof ToolPanelFilterGroupComp) { + for (const child of filterComp.getChildren()) { + getExpandedFiltersAndGroups(child); + } + const groupId = filterComp.getFilterGroupId(); + if (filterComp.isExpanded() && !expandedColIds.has(groupId)) { + expandedGroupIds.push(groupId); + } + } else if (filterComp.isExpanded()) { + expandedColIds.add(filterComp.getColumn().getColId()); + } + }; + this.filterGroupComps.forEach(getExpandedFiltersAndGroups); + return { expandedGroupIds, expandedColIds: Array.from(expandedColIds) }; + } + destroyFilters() { + this.filterGroupComps = this.destroyBeans(this.filterGroupComps); + _clearElement16(this.getGui()); + } + destroy() { + this.destroyFilters(); + super.destroy(); + } +}; +var AgFiltersToolPanelListSelector = { + selector: "AG-FILTERS-TOOL-PANEL-LIST", + component: AgFiltersToolPanelList +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/filtersToolPanel.css +var filtersToolPanel_default = ".ag-filter-toolpanel{flex:1 1 0px;min-width:0}.ag-filter-toolpanel-header,.ag-filter-toolpanel-search{align-items:center;color:var(--ag-header-text-color);display:flex;font-weight:var(--ag-header-font-weight);padding:0 var(--ag-spacing);>:where(.ag-filter-icon),>:where(.ag-filter-toolpanel-expand),>:where(.ag-filter-toolpanel-search-input),>:where(.ag-header-cell-text){align-items:center;display:flex}}.ag-filter-toolpanel-header{padding-bottom:var(--ag-spacing);padding-top:var(--ag-spacing);position:relative;&:focus-visible{border-radius:var(--ag-border-radius);box-shadow:inset var(--ag-focus-shadow)}}:where(.ag-ltr) .ag-filter-toolpanel-group-instance-header-icon,:where(.ag-ltr) .ag-filter-toolpanel-instance-header-icon{margin-left:var(--ag-spacing)}:where(.ag-rtl) .ag-filter-toolpanel-group-instance-header-icon,:where(.ag-rtl) .ag-filter-toolpanel-instance-header-icon{margin-right:var(--ag-spacing)}.ag-filter-toolpanel-search{min-height:var(--ag-header-height);padding-bottom:var(--ag-spacing);padding-top:var(--ag-widget-container-vertical-padding)}:where(.ag-filter-toolpanel-group:not(.ag-has-filter)>.ag-group-title-bar) .ag-filter-toolpanel-group-instance-header-icon{display:none}.ag-filter-toolpanel-search-input{flex-grow:1;height:calc(var(--ag-spacing)*4)}:where(.ag-ltr) .ag-filter-toolpanel-group-title-bar-icon{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-filter-toolpanel-group-title-bar-icon{margin-left:var(--ag-spacing)}.ag-filter-toolpanel-expand{cursor:pointer}:where(.ag-ltr) .ag-filter-toolpanel-expand{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-filter-toolpanel-expand{margin-left:var(--ag-spacing)}:where(.ag-ltr) .ag-filter-toolpanel-group-title-bar,:where(.ag-ltr) .ag-filter-toolpanel-instance-header{padding-left:calc(var(--ag-spacing) + var(--ag-filter-tool-panel-group-indent)*var(--ag-indentation-level))}:where(.ag-rtl) .ag-filter-toolpanel-group-title-bar,:where(.ag-rtl) .ag-filter-toolpanel-instance-header{padding-right:calc(var(--ag-spacing) + var(--ag-filter-tool-panel-group-indent)*var(--ag-indentation-level))}:where(.ag-ltr) .ag-filter-toolpanel-instance-body{margin-left:var(--ag-filter-tool-panel-group-indent)}:where(.ag-rtl) .ag-filter-toolpanel-instance-body{margin-right:var(--ag-filter-tool-panel-group-indent)}.ag-filter-toolpanel-instance-filter{background-color:var(--ag-chrome-background-color)}.ag-filter-toolpanel-group-level-0{border-top:none}"; + +// packages/ag-grid-enterprise/src/filterToolPanel/filtersToolPanel.ts +var FiltersToolPanelElement = { + tag: "div", + cls: "ag-filter-toolpanel", + children: [ + { tag: "ag-filters-tool-panel-header", ref: "filtersToolPanelHeaderPanel" }, + { tag: "ag-filters-tool-panel-list", ref: "filtersToolPanelListPanel" } + ] +}; +var FiltersToolPanel = class extends Component45 { + constructor() { + super(FiltersToolPanelElement, [AgFiltersToolPanelHeaderSelector, AgFiltersToolPanelListSelector]); + this.filtersToolPanelHeaderPanel = RefPlaceholder41; + this.filtersToolPanelListPanel = RefPlaceholder41; + this.initialised = false; + this.listenerDestroyFuncs = []; + this.registerCSS(filtersToolPanel_default); + } + init(params) { + if (this.initialised) { + for (const func of this.listenerDestroyFuncs) { + func(); + } + this.listenerDestroyFuncs = []; + } + this.initialised = true; + const defaultParams = { + suppressExpandAll: false, + suppressFilterSearch: false, + suppressSyncLayoutWithGrid: false + }; + const newParams = { + ...defaultParams, + ...params + }; + this.params = newParams; + const { filtersToolPanelHeaderPanel, filtersToolPanelListPanel } = this; + filtersToolPanelHeaderPanel.init(newParams); + filtersToolPanelListPanel.init(newParams); + const { suppressExpandAll: hideExpand, suppressFilterSearch: hideSearch } = newParams; + if (hideExpand && hideSearch) { + filtersToolPanelHeaderPanel.setDisplayed(false); + } + this.listenerDestroyFuncs.push( + ...this.addManagedListeners(filtersToolPanelHeaderPanel, { + expandAll: () => filtersToolPanelListPanel.expandFilterGroups(true), + collapseAll: () => filtersToolPanelListPanel.expandFilterGroups(false), + searchChanged: (event) => filtersToolPanelListPanel.performFilterSearch(event.searchText) + }), + ...this.addManagedListeners(filtersToolPanelListPanel, { + filterExpanded: newParams.onStateUpdated, + groupExpanded: (event) => { + filtersToolPanelHeaderPanel.setExpandState(event.state); + newParams.onStateUpdated(); + } + }) + ); + } + // lazy initialise the panel + setVisible(visible) { + super.setDisplayed(visible); + if (visible && !this.initialised) { + this.init(this.params); + } + } + setFilterLayout(colDefs) { + this.filtersToolPanelListPanel.setFiltersLayout(colDefs); + } + expandFilterGroups(groupIds) { + this.filtersToolPanelListPanel.expandFilterGroups(true, groupIds); + } + collapseFilterGroups(groupIds) { + this.filtersToolPanelListPanel.expandFilterGroups(false, groupIds); + } + expandFilters(colIds) { + this.filtersToolPanelListPanel.expandFilters(true, colIds); + } + collapseFilters(colIds) { + this.filtersToolPanelListPanel.expandFilters(false, colIds); + } + syncLayoutWithGrid() { + this.filtersToolPanelListPanel.syncFilterLayout(); + } + refresh(params) { + this.init(params); + return true; + } + getState() { + return this.filtersToolPanelListPanel.getExpandedFiltersAndGroups(); + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/filterPanelService.ts +import { BeanStub as BeanStub48, FilterComp as FilterComp4 } from "ag-grid-community"; +var FilterPanelService = class extends BeanStub48 { + constructor() { + super(...arguments); + this.beanName = "filterPanelSvc"; + this.states = /* @__PURE__ */ new Map(); + this.orderedStates = []; + this.initialStateApplied = false; + this.columnsLoaded = false; + this.isActive = false; + } + postConstruct() { + if (!this.gos.get("enableFilterHandlers")) { + return; + } + const updateFilterStates = this.updateFilterStates.bind(this); + const updateApplyButton = () => this.dispatchStatesUpdates(void 0, true); + const onFilterDestroyed = this.onFilterDestroyed.bind(this); + this.addManagedEventListeners({ + newColumnsLoaded: () => { + this.columnsLoaded = true; + if (!this.initialStateApplied) { + this.applyState(); + } + updateFilterStates(); + }, + dataTypesInferred: updateFilterStates, + filterChanged: updateFilterStates, + filterDestroyed: onFilterDestroyed, + filterHandlerDestroyed: onFilterDestroyed, + filterOpened: updateApplyButton, + filterClosed: updateApplyButton + }); + const refreshForColumn = ({ column }) => { + this.states.get(column.getColId())?.refresh?.(); + updateApplyButton(); + }; + this.addManagedListeners(this.beans.colFilter, { + filterStateChanged: refreshForColumn, + filterModelAsStringChanged: refreshForColumn + }); + } + updateParams(params, state) { + this.params = params; + let dispatchedStateUpdates = false; + if (state) { + this.currState = state; + if (this.columnsLoaded) { + const newIds = new Set(state.filters?.map((f) => f.colId)); + for (const id of this.getIds()) { + if (!newIds.has(id)) { + this.remove(id); + } + } + this.clear(); + this.applyState(); + this.updateFilterStates(); + dispatchedStateUpdates = true; + } + } + if (!dispatchedStateUpdates) { + this.dispatchStatesUpdates(); + } + this.beans.colFilter?.setGlobalButtons(!!params.buttons?.length); + } + getIds() { + return Array.from(this.states.keys()); + } + getAvailable() { + const beans = this.beans; + const availableFilters = []; + for (const column of beans.colModel.getColDefCols() ?? []) { + const id = column.getColId(); + if (column.isFilterAllowed() && !column.colDef.suppressFiltersToolPanel && !this.states.get(id)) { + availableFilters.push({ + id, + name: getDisplayName(beans, column) + }); + } + } + return availableFilters; + } + add(id) { + this.createFilter(id, true); + this.dispatchStatesUpdates(id); + } + remove(id) { + const { + states, + orderedStates, + beans: { colFilter, selectableFilter } + } = this; + const state = states.get(id); + if (!state) { + return; + } + state.destroy?.(); + const column = state.state.column; + states.delete(id); + selectableFilter?.clearActive(id); + colFilter?.destroyFilter(column); + this.eventSvc.dispatchEvent({ + type: "filterSwitched", + column + }); + const index = orderedStates.indexOf(id); + orderedStates.splice(index, 1); + const newActiveId = orderedStates[index]; + this.dispatchStatesUpdates(newActiveId); + } + getState(id) { + return this.states.get(id)?.state; + } + updateFilterState(id, key, value, suppressEvents) { + const filterState = this.getState(id); + if (!filterState) { + return; + } + filterState[key] = value; + if (!suppressEvents) { + this.dispatchLocalEvent({ + type: "filterPanelStateChanged", + id, + state: filterState + }); + } + } + expand(id, expanded) { + const existingFilterState = this.states.get(id); + if (!existingFilterState) { + return; + } + existingFilterState.destroy?.(); + const { + handler, + state: { column } + } = existingFilterState; + const newFilterState = this.createFilterState(column, handler, expanded); + this.states.set(id, newFilterState); + this.dispatchLocalEvent({ + type: "filterPanelStateChanged", + id, + state: newFilterState.state + }); + } + updateType(id, filterDef) { + const stateWrapper = this.states.get(id); + if (!stateWrapper) { + return; + } + const state = stateWrapper.state; + if (state.expanded === false) { + return; + } + const filterDefs = state.filterDefs; + if (!filterDefs) { + return; + } + const { colFilter, selectableFilter } = this.beans; + selectableFilter?.setActive(id, filterDefs, filterDef); + colFilter.filterParamsChanged(id, "columnFilter"); + const column = state.column; + this.eventSvc.dispatchEvent({ + type: "filterSwitched", + column + }); + const newStateWrapper = this.states.get(id); + if (!newStateWrapper) { + return; + } + const newState = newStateWrapper.state; + this.dispatchLocalEvent({ + type: "filterPanelStateChanged", + id, + state: newState + }); + } + getActions() { + const actions = this.params?.buttons; + if (!actions?.length) { + return void 0; + } + const canApply = !!this.beans.colFilter?.canApplyAll(); + return { actions, canApply }; + } + doAction(action) { + this.beans.colFilter?.updateAllModels(action); + } + getGridState() { + const filters = []; + this.states.forEach((stateWrapper, colId) => { + filters.push({ + colId, + expanded: stateWrapper.state.expanded + }); + }); + return { + filters + }; + } + createFilter(id, expanded) { + const stateWrapper = this.createFilterStateWrapper(id, expanded); + if (stateWrapper) { + this.states.set(id, stateWrapper); + this.orderedStates.push(id); + } + } + createFilterStateWrapper(id, expanded) { + const { colModel, colFilter } = this.beans; + const column = colModel.getColDefCol(id); + if (column && !column.colDef.suppressFiltersToolPanel) { + const handler = colFilter.getHandler(column, true); + if (handler) { + return this.createFilterState(column, handler, expanded); + } + } + return void 0; + } + updateFilterStates() { + if (!this.params) { + return; + } + const filterModel = this.beans.colFilter.getModel(); + const processedIds = /* @__PURE__ */ new Set(); + for (const id of Object.keys(filterModel)) { + const existingState = this.states.get(id); + if (!existingState) { + this.createFilter(id); + } else { + existingState.refresh?.(); + } + processedIds.add(id); + } + this.states.forEach((state, id) => { + if (!processedIds.has(id)) { + state.refresh?.(); + } + }); + this.dispatchStatesUpdates(); + } + createFilterState(column, handler, expanded) { + const beans = this.beans; + const { colFilter, selectableFilter } = beans; + const name = getDisplayName(beans, column); + const colId = column.getColId(); + const getIsEditing = () => !!this.params?.buttons && colFilter.hasUnappliedModel(colId); + const isEditing = getIsEditing(); + if (expanded) { + const colDef = column.colDef; + const { filterDefs, activeFilterDef } = selectableFilter?.getDefs(column, colDef) ?? {}; + const filterComp = this.createBean(new FilterComp4(column, "TOOLBAR", true)); + return { + state: { + column, + name, + isEditing, + expanded, + detail: filterComp.getGui(), + activeFilterDef, + filterDefs, + afterGuiAttached: filterComp.afterGuiAttached.bind(filterComp), + afterGuiDetached: filterComp.afterGuiDetached.bind(filterComp) + }, + handler, + refresh: () => { + this.updateFilterState(colId, "isEditing", getIsEditing()); + }, + destroy: () => this.destroyBean(filterComp) + }; + } else { + const colId2 = column.getColId(); + const getSummary = () => handler.getModelAsString?.(colFilter.getStateForColumn(colId2).model, "filterToolPanel") ?? ""; + return { + state: { + column, + name, + isEditing, + expanded: false, + summary: getSummary() + }, + handler, + refresh: () => { + this.updateFilterState(colId2, "isEditing", getIsEditing(), true); + this.updateFilterState(colId2, "summary", getSummary()); + } + }; + } + } + onFilterDestroyed({ column, source }) { + const { colFilter, filterManager } = this.beans; + if (!colFilter?.isAlive() || !filterManager?.isFilterAllowed(column)) { + return; + } + const states = this.states; + const id = column.getColId(); + const existingState = states.get(id); + if (existingState) { + const stateWrapper = this.createFilterStateWrapper(id, existingState.state.expanded); + if (stateWrapper) { + existingState.destroy?.(); + states.set(id, stateWrapper); + } else { + this.remove(id); + } + if (source === "api") { + this.dispatchStatesUpdates(); + } + } + } + dispatchStatesUpdates(activeId, action) { + this.dispatchLocalEvent({ + type: "filterPanelStatesChanged", + activeId, + action + }); + } + applyState() { + if (this.params && this.columnsLoaded) { + this.initialStateApplied = true; + for (const { colId, expanded } of this.currState?.filters ?? []) { + this.createFilter(colId, expanded); + } + } + } + destroy() { + this.clear(); + this.params = void 0; + this.currState = void 0; + super.destroy(); + } + clear() { + const { states, orderedStates } = this; + states.forEach((state) => state.destroy?.()); + states.clear(); + orderedStates.length = 0; + } +}; +function getDisplayName(beans, column) { + return beans.colNames.getDisplayNameForColumn(column, "filterToolPanel") ?? column.getColId(); +} + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/selectableFilterService.ts +import { + BeanStub as BeanStub49, + _addGridCommonParams as _addGridCommonParams22, + _getDefaultSimpleFilter as _getDefaultSimpleFilter2, + _getFilterParamsForDataType as _getFilterParamsForDataType2, + _isSetFilterByDefault, + _warn as _warn37 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/filterPanelUtils.ts +import { _removeFromParent as _removeFromParent7, _translate as _translate2 } from "ag-grid-community"; +var DEFAULT_LOCALE_TEXT2 = { + addFilterCard: "Add Filter", + ariaLabelAddFilterField: "Add Filter Field", + ariaLabelFilterCardDelete: "Delete Filter", + ariaLabelFilterCardHasEdits: "Has Edits", + agTextColumnFilterDisplayName: "Simple Filter", + agNumberColumnFilterDisplayName: "Simple Filter", + agDateColumnFilterDisplayName: "Simple Filter", + agSetColumnFilterDisplayName: "Selection Filter", + agMultiColumnFilterDisplayName: "Combo Filter", + addFilterPlaceholder: "Search columns..." +}; +function translateForFilterPanel(bean, key) { + return _translate2(bean, DEFAULT_LOCALE_TEXT2, key); +} +function compareAndUpdateListsInDom(eContainer, eNewItems, ePrevItems) { + let newIndex = 0; + for (let prevIndex = 0; prevIndex < ePrevItems.length; prevIndex++) { + const ePrevItem = ePrevItems[prevIndex]; + if (ePrevItem === eNewItems[newIndex]) { + newIndex++; + } else { + _removeFromParent7(ePrevItem); + } + } + while (newIndex < eNewItems.length) { + eContainer.appendChild(eNewItems[newIndex++]); + } +} + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/selectableFilterService.ts +var SelectableFilterService = class extends BeanStub49 { + constructor() { + super(...arguments); + this.beanName = "selectableFilter"; + this.selectedFilters = /* @__PURE__ */ new Map(); + this.valueGetters = /* @__PURE__ */ new Map(); + } + postConstruct() { + const { gos, selectedFilters } = this; + const initialState = gos.get("initialState")?.filter?.selectableFilters ?? {}; + for (const colId of Object.keys(initialState)) { + selectedFilters.set(colId, initialState[colId]); + } + } + getFilterValueGetter(colId) { + return this.valueGetters.get(colId); + } + isSelectable(filterDef) { + return filterDef.filter === "agSelectableColumnFilter"; + } + getFilterDef(column, filterDef) { + return this.getDefs(column, filterDef).activeFilterDef; + } + getDefs(column, filterDef, overrideIndex) { + if (!this.isSelectable(filterDef)) { + return void 0; + } + const beans = this.beans; + const { gos, dataTypeSvc, colFilter } = beans; + let filterParams = filterDef.filterParams; + const colDef = column.colDef; + if (typeof filterParams === "function") { + filterParams = filterParams( + _addGridCommonParams22(gos, { + column, + colDef + }) + ); + } + const cellDataType = dataTypeSvc?.getBaseDataType(column); + const dataTypeDefinition = dataTypeSvc?.getDataTypeDefinition(column); + const formatValue = dataTypeSvc?.getFormatValue(cellDataType); + const { filters, defaultFilterParams, defaultFilterIndex } = filterParams ?? {}; + const updateDef = (def) => { + const { filter, filterParams: defFilterParams, name, filterValueGetter = colDef.filterValueGetter } = def; + const userParams = defaultFilterParams ? { ...defaultFilterParams, ...defFilterParams } : defFilterParams; + let updatedParams; + if (dataTypeDefinition && formatValue) { + if (filter === "agMultiColumnFilter") { + updatedParams = beans.multiFilter?.getParamsForDataType( + userParams, + filterValueGetter, + dataTypeDefinition, + formatValue + ); + } else { + updatedParams = _getFilterParamsForDataType2( + filter, + userParams, + filterValueGetter, + dataTypeDefinition, + formatValue, + beans, + this.getLocaleTextFunc() + ); + } + } + let updatedName; + if (!name) { + let filterString = filter; + if (typeof filter === "boolean") { + filterString = colFilter?.getDefaultFilterFromDataType(() => cellDataType); + } + if (typeof filterString === "string") { + updatedName = translateForFilterPanel(this, `${filterString}DisplayName`); + } else { + _warn37(280, { colId: column.getColId() }); + updatedName = ""; + } + } + if (defaultFilterParams || updatedParams || updatedName) { + return { + ...def, + filterParams: userParams, + name: updatedName ?? name, + ...updatedParams + }; + } + return def; + }; + const filterDefs = (filters ?? this.getDefaultFilters(column)).map(updateDef); + let index = overrideIndex ?? // provided override + this.selectedFilters.get(column.getColId()) ?? // UI selected value + defaultFilterIndex ?? // col def value + (!filters && _isSetFilterByDefault(gos) ? 1 : 0); + if (index >= filterDefs.length) { + index = 0; + } + const activeFilterDef = filterDefs[index]; + return { filterDefs, activeFilterDef }; + } + setActive(colId, filterDefs, activeFilterDef, silent) { + const index = filterDefs.indexOf(activeFilterDef); + if (index < 0) { + return; + } + const { selectedFilters, valueGetters } = this; + selectedFilters.set(colId, index); + const filterValueGetter = activeFilterDef.filterValueGetter; + if (filterValueGetter) { + valueGetters.set(colId, filterValueGetter); + } else { + valueGetters.delete(colId); + } + if (!silent) { + this.onChange(); + } + } + clearActive(colId) { + const { selectedFilters, valueGetters } = this; + selectedFilters.delete(colId); + valueGetters.delete(colId); + this.onChange(); + } + getState() { + return Object.fromEntries(this.selectedFilters); + } + setState(state) { + this.clearAll(); + const colModel = this.beans.colModel; + for (const colId of Object.keys(state)) { + const column = colModel.getColDefCol(colId); + if (column) { + const defs = this.getDefs(column, column.colDef, state[colId]); + if (defs) { + this.setActive(colId, defs.filterDefs, defs.activeFilterDef, true); + } + } + } + } + destroy() { + this.clearAll(); + super.destroy(); + } + clearAll() { + const { selectedFilters, valueGetters } = this; + selectedFilters.clear(); + valueGetters.clear(); + } + onChange() { + this.dispatchLocalEvent({ + type: "selectedFilterChanged" + }); + } + getDefaultFilters(column) { + const beans = this.beans; + const { gos, dataTypeSvc } = beans; + const isMultiFilterEnabled = gos.isModuleRegistered("MultiFilter"); + const cellDataType = dataTypeSvc?.getBaseDataType(column); + const simpleFilter = _getDefaultSimpleFilter2(cellDataType, false); + return [ + { filter: simpleFilter }, + { filter: "agSetColumnFilter" }, + ...isMultiFilterEnabled ? [ + { + filter: "agMultiColumnFilter" + } + ] : [] + ]; + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/wrapperToolPanel.ts +import { Component as Component51, _warn as _warn38 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/filterPanel.ts +import { + Component as Component50, + FilterButtonComp as FilterButtonComp3, + RefPlaceholder as RefPlaceholder44, + _focusInto as _focusInto8, + _getActiveDomElement as _getActiveDomElement14, + _isNothingFocused as _isNothingFocused4, + _removeFromParent as _removeFromParent10, + _translateForFilter +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/addFilterComp.ts +import { Component as Component46, _clearElement as _clearElement17, _createElement as _createElement15, _createIconNoSpan as _createIconNoSpan23 } from "ag-grid-community"; +var AddFilterElement = { + tag: "div", + cls: "ag-filter-card ag-filter-card-add" +}; +var AddFilterComp = class extends Component46 { + constructor(options) { + super(AddFilterElement); + this.options = /* @__PURE__ */ new Map(); + this.setOptions(options); + } + postConstruct() { + this.showButton(); + } + refresh(newOptions) { + this.setOptions(newOptions); + const { eSelect, options } = this; + if (eSelect) { + eSelect.setValueList({ valueList: Array.from(options.keys()), refresh: true }); + } + } + showButton() { + _clearElement17(this.getGui()); + this.destroySelect(); + const eButton = _createElement15({ + tag: "button", + cls: "ag-button ag-standard-button ag-filter-add-button", + children: [ + { tag: "span", children: [() => _createIconNoSpan23("filterAdd", this.beans)] }, + { + tag: "span", + cls: "ag-filter-add-button-label", + children: translateForFilterPanel(this, "addFilterCard") + } + ] + }); + this.activateTabIndex([eButton]); + const clickListener = this.showSelect.bind(this); + eButton.addEventListener("click", clickListener); + this.removeButton = () => { + eButton.removeEventListener("click", clickListener); + }; + this.appendChild(eButton); + eButton.focus(); + } + showSelect() { + _clearElement17(this.getGui()); + this.destroyButton(); + const pickerAriaLabelKey = "ariaLabelAddFilterField"; + const selectParams = { + className: "ag-filter-add-select", + pickerType: "virtual-list", + pickerAriaLabelKey, + pickerAriaLabelValue: translateForFilterPanel(this, pickerAriaLabelKey), + placeholder: translateForFilterPanel(this, "addFilterPlaceholder"), + value: "", + valueList: Array.from(this.options.keys()), + searchType: "matchAny", + allowTyping: true, + filterList: true, + highlightMatch: true, + valueFormatter: (value) => this.options.get(value) + }; + const eSelect = this.createManagedBean(new AgRichSelect(selectParams)); + this.eSelect = eSelect; + this.appendChild(eSelect.getGui()); + eSelect.showPicker(); + eSelect.getFocusableElement().focus(); + eSelect.addManagedListeners(eSelect, { + fieldPickerValueSelected: ({ value: id }) => this.dispatchLocalEvent({ + type: "filterSelected", + id + }), + pickerHidden: () => { + this.showButton(); + } + }); + } + setOptions(newOptions) { + const options = this.options; + options.clear(); + for (const { id, name } of newOptions) { + options.set(id, name); + } + } + destroySelect() { + this.eSelect = this.destroyBean(this.eSelect); + } + destroyButton() { + this.removeButton = this.removeButton?.(); + } + destroy() { + this.destroySelect(); + this.destroyButton(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/filterCardComp.ts +import { + Component as Component49, + RefPlaceholder as RefPlaceholder43, + _clearElement as _clearElement18, + _createIcon as _createIcon3, + _removeFromParent as _removeFromParent9, + _setAriaControls, + _setAriaExpanded as _setAriaExpanded11, + _setAriaLabel as _setAriaLabel19, + _setDisplayed as _setDisplayed22 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/filterDetailComp.ts +import { AgSelectSelector, Component as Component47, RefPlaceholder as RefPlaceholder42, _removeFromParent as _removeFromParent8 } from "ag-grid-community"; +var FilterDetailElement = { + tag: "div", + cls: "ag-filter-card-body", + children: [{ tag: "ag-select", cls: "ag-filter-type-select", ref: "eFilterType" }] +}; +var FilterDetailComp = class extends Component47 { + constructor() { + super(...arguments); + this.eFilterType = RefPlaceholder42; + } + postConstruct() { + const eFilterTypeParams = { + onValueChange: (filterDef) => this.dispatchLocalEvent({ type: "filterTypeChanged", filterDef }) + }; + this.setTemplate(FilterDetailElement, [AgSelectSelector], { eFilterType: eFilterTypeParams }); + this.eFilterType.setDisplayed(false); + } + refresh(newState) { + const oldState = this.state; + this.state = newState; + const { + activeFilterDef: newActiveFilterDef, + filterDefs: newFilterDefs, + detail: newDetail, + afterGuiAttached, + afterGuiDetached + } = newState; + const { activeFilterDef: oldActiveFilterDef, filterDefs: oldFilterDefs, detail: oldDetail } = oldState ?? {}; + const eFilterType = this.eFilterType; + if (newFilterDefs !== oldFilterDefs) { + eFilterType.clearOptions(); + const options = newFilterDefs?.map((filterDef) => ({ value: filterDef, text: filterDef.name })); + if (options) { + eFilterType.clearOptions().addOptions(options).setValue(newActiveFilterDef, true); + } + eFilterType.setDisplayed(!!options); + } else if (newActiveFilterDef !== oldActiveFilterDef) { + eFilterType.setValue(newActiveFilterDef, true); + } + if (newDetail !== oldDetail) { + if (oldDetail) { + _removeFromParent8(oldDetail); + afterGuiDetached(); + } + this.appendChild(newDetail); + afterGuiAttached({ + container: "newFiltersToolPanel", + suppressFocus: true + }); + } + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/filterSummaryComp.ts +import { Component as Component48 } from "ag-grid-community"; +var FilterSummaryElement = { + tag: "div", + cls: "ag-filter-card-summary", + attrs: { + "aria-hidden": "true" + } +}; +var FilterSummaryComp = class extends Component48 { + constructor() { + super(FilterSummaryElement); + } + refresh(state) { + this.getGui().textContent = state.summary; + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/filterCardComp.ts +var FilterCardElement = { + tag: "div", + cls: "ag-filter-card", + children: [ + { + tag: "div", + cls: "ag-filter-card-header", + role: "presentation", + children: [ + { + tag: "div", + cls: "ag-filter-card-heading", + role: "heading", + attrs: { + "aria-level": "2" + }, + children: [ + { + tag: "button", + ref: "eExpand", + cls: "ag-button ag-filter-card-expand", + children: [ + { tag: "span", ref: "eTitle", cls: "ag-filter-card-title" }, + { tag: "span", ref: "eEditing", cls: "ag-filter-card-editing-icon" }, + { tag: "span", ref: "eExpandIcon", cls: "ag-filter-card-expand-icon" } + ] + } + ] + }, + { + tag: "button", + ref: "eDelete", + cls: "ag-button ag-filter-card-delete", + children: [{ tag: "span", ref: "eDeleteIcon", cls: "ag-filter-card-delete-icon" }] + } + ] + } + ] +}; +var FilterCardComp = class extends Component49 { + constructor(id) { + super(FilterCardElement); + this.id = id; + this.eTitle = RefPlaceholder43; + this.eExpand = RefPlaceholder43; + this.eDelete = RefPlaceholder43; + this.eExpandIcon = RefPlaceholder43; + this.eDeleteIcon = RefPlaceholder43; + this.eEditing = RefPlaceholder43; + } + postConstruct() { + const { beans, eDelete, eExpand, eDeleteIcon, eEditing, id } = this; + const filterPanelService = beans.filterPanelSvc; + _setAriaLabel19(eDelete, translateForFilterPanel(this, "ariaLabelFilterCardDelete")); + eDeleteIcon.appendChild(_createIcon3("close", beans, null)); + this.activateTabIndex([eExpand, eDelete]); + this.addManagedElementListeners(eExpand, { + click: () => filterPanelService.expand(id, !this.state?.expanded) + }); + this.addManagedElementListeners(eDelete, { + click: () => filterPanelService.remove(id) + }); + this.addManagedEventListeners({ filterOpened: this.onFilterOpened.bind(this) }); + eEditing.appendChild(_createIcon3("filterCardEditing", beans, null)); + } + refresh(newState) { + const { eExpand, eEditing, state: oldState, beans } = this; + this.state = newState; + const { name, expanded, isEditing } = newState; + this.eTitle.textContent = name; + _setDisplayed22(eEditing, isEditing); + if (!oldState || expanded !== oldState.expanded) { + this.toggleExpand(newState); + } + let ariaLabel = expanded ? null : `${name} ${newState.summary}`; + if (isEditing) { + ariaLabel = `${ariaLabel ?? name}. ${translateForFilterPanel(this, "ariaLabelFilterCardHasEdits")}`; + } + _setAriaLabel19(eExpand, ariaLabel); + const removeComp = (comp) => { + if (!comp) { + return; + } + _removeFromParent9(comp.getGui()); + return this.destroyBean(comp); + }; + const createOrRefreshComp = (comp, FilterComp5, postCreateFunc) => { + if (!comp) { + comp = this.createBean(new FilterComp5()); + postCreateFunc?.(comp); + this.appendChild(comp.getGui()); + } + comp.refresh(newState); + return comp; + }; + if (newState.expanded) { + this.summaryComp = removeComp(this.summaryComp); + const detailComp = createOrRefreshComp( + this.detailComp, + FilterDetailComp, + (comp) => comp.addManagedListeners(comp, { + filterTypeChanged: ({ filterDef }) => beans.filterPanelSvc.updateType(this.id, filterDef) + }) + ); + this.detailComp = detailComp; + const detailId = `ag-${this.getCompId()}-filter`; + detailComp.getGui().id = detailId; + _setAriaControls(eExpand, detailId); + } else { + this.detailComp = removeComp(this.detailComp); + this.summaryComp = createOrRefreshComp(this.summaryComp, FilterSummaryComp); + _setAriaControls(eExpand, null); + } + } + toggleExpand(state) { + const expanded = !!state.expanded; + const { eExpandIcon, eExpand, beans } = this; + _clearElement18(eExpandIcon); + eExpandIcon.appendChild(_createIcon3(expanded ? "filterCardCollapse" : "filterCardExpand", beans, null)); + _setAriaExpanded11(eExpand, expanded); + } + onFilterOpened(event) { + const { state, beans, id } = this; + if (event.source === "COLUMN_MENU" && event.column === state?.column && state?.expanded) { + beans.filterPanelSvc.expand(id, false); + } + } + destroy() { + this.detailComp = this.destroyBean(this.detailComp); + this.summaryComp = this.destroyBean(this.summaryComp); + this.state = void 0; + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/filterPanel.ts +function isSingleRefresh(params) { + return !!params?.id; +} +function isActionRefresh(params) { + return !!params?.action; +} +var FilterPanelElement = { + tag: "div", + cls: "ag-filter-panel", + children: [{ tag: "div", cls: "ag-filter-panel-container", ref: "eContainer" }] +}; +var FilterPanel = class extends Component50 { + constructor() { + super(FilterPanelElement); + this.eContainer = RefPlaceholder44; + this.filters = /* @__PURE__ */ new Map(); + } + refresh(params) { + if (isActionRefresh(params)) { + this.refreshActions(); + return; + } + if (isSingleRefresh(params)) { + this.filters.get(params.id)?.refresh(params.state); + return; + } + const { eContainer, filters: existingFilters, beans } = this; + const filterPanelSvc = beans.filterPanelSvc; + const filterIds = filterPanelSvc.getIds(); + const newFilters = /* @__PURE__ */ new Map(); + const somethingIsFocused = !_isNothingFocused4(beans); + const activeElement = somethingIsFocused ? _getActiveDomElement14(beans) : void 0; + const containerHasFocus = somethingIsFocused && eContainer.contains(activeElement); + const ePrevItems = []; + const eNewItems = []; + for (const id of filterIds) { + const newFilter = existingFilters.get(id) ?? this.createBean(new FilterCardComp(id)); + newFilter.refresh(filterPanelSvc.getState(id)); + newFilters.set(id, newFilter); + eNewItems.push(newFilter.getGui()); + } + this.filters = newFilters; + const compsToDestroy = []; + existingFilters.forEach((existingFilter, id) => { + ePrevItems.push(existingFilter.getGui()); + if (!newFilters.has(id)) { + compsToDestroy.push(existingFilter); + } + }); + let addFilterComp = this.addFilterComp; + if (addFilterComp) { + ePrevItems.push(addFilterComp.getGui()); + } + const addFilterOptions = filterPanelSvc.getAvailable(); + if (addFilterOptions.length) { + if (!addFilterComp) { + addFilterComp = this.createBean(new AddFilterComp(addFilterOptions)); + addFilterComp.addManagedListeners(addFilterComp, { + filterSelected: ({ id }) => filterPanelSvc.add(id) + }); + } + addFilterComp.refresh(addFilterOptions); + eNewItems.push(addFilterComp.getGui()); + } else { + addFilterComp = this.destroyBean(addFilterComp); + } + this.addFilterComp = addFilterComp; + compareAndUpdateListsInDom(eContainer, eNewItems, ePrevItems); + for (const comp of compsToDestroy) { + this.destroyBean(comp); + } + const activeId = params?.activeId; + const activeItemToFocus = activeId && newFilters.get(activeId)?.getGui(); + if (activeItemToFocus) { + _focusInto8(activeItemToFocus); + } else if (containerHasFocus && _isNothingFocused4(beans)) { + _focusInto8(eNewItems[eNewItems.length - 1] ?? eContainer); + } + this.refreshActions(); + } + refreshActions() { + const filterPanelSvc = this.beans.filterPanelSvc; + const { actions, canApply } = filterPanelSvc.getActions() ?? {}; + let buttonComp = this.buttonComp; + if (actions?.length) { + const buttons = actions.map((type) => ({ + type, + label: _translateForFilter(this, `${type}Filter`) + })); + if (!buttonComp) { + buttonComp = this.createBean(new FilterButtonComp3({ className: "ag-filter-panel-buttons" })); + this.getGui().appendChild(buttonComp.getGui()); + const listeners = {}; + for (const action of ["apply", "clear", "reset", "cancel"]) { + listeners[action] = () => filterPanelSvc.doAction(action); + } + buttonComp.addManagedListeners(buttonComp, listeners); + } + buttonComp.updateButtons(buttons); + buttonComp.updateValidity(canApply !== false); + } else if (buttonComp) { + _removeFromParent10(buttonComp.getGui()); + buttonComp = this.destroyBean(buttonComp); + } + this.buttonComp = buttonComp; + } + destroy() { + this.beans.filterPanelSvc?.clear?.(); + this.addFilterComp = this.destroyBean(this.addFilterComp); + this.buttonComp = this.destroyBean(this.buttonComp); + const filters = this.filters; + filters.forEach((filter) => this.destroyBean(filter)); + filters.clear(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/newFiltersToolPanel.css +var newFiltersToolPanel_default = ".ag-filter-panel{display:flex;flex-direction:column;width:100%;:where(.ag-standard-button){transition:background-color .25s ease-in-out,color .25s ease-in-out}}.ag-filter-panel .ag-simple-filter-body-wrapper{padding:var(--ag-widget-vertical-spacing) var(--ag-widget-container-horizontal-padding) 0}.ag-filter-panel .ag-mini-filter{margin-left:var(--ag-widget-container-horizontal-padding);margin-right:var(--ag-widget-container-horizontal-padding);margin-top:var(--ag-widget-vertical-spacing)}.ag-filter-panel-container{display:flex;flex:1;flex-direction:column;gap:var(--ag-widget-container-vertical-padding);overflow:auto;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding) 0}.ag-filter-card{background-color:var(--ag-background-color);border:solid var(--ag-border-width) var(--ag-border-color);border-radius:var(--ag-border-radius)}.ag-filter-card-header{align-items:center;display:flex;flex-direction:row;gap:var(--ag-spacing);padding-top:var(--ag-widget-vertical-spacing)}.ag-filter-card-heading{flex:1;overflow:hidden;padding-bottom:calc(var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing));padding-top:calc(var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing))}:where(.ag-ltr) .ag-filter-card-heading{padding-left:var(--ag-widget-horizontal-spacing)}:where(.ag-rtl) .ag-filter-card-heading{padding-right:var(--ag-widget-horizontal-spacing)}.ag-filter-card-expand{align-items:center;display:flex;flex-direction:row;width:100%}.ag-filter-card-title{font-weight:var(--ag-header-font-weight);overflow:hidden;text-overflow:ellipsis}.ag-filter-card-expand-icon{display:flex;flex:1;justify-content:end}.ag-filter-card-editing-icon{margin:0 var(--ag-spacing)}.ag-filter-card-delete-icon,.ag-filter-card-editing-icon,.ag-filter-card-expand-icon,.ag-filter-card-summary{color:var(--ag-filter-panel-card-subtle-color)}.ag-filter-card-delete-icon,.ag-filter-card-expand-icon{transition:color .25s ease-in-out}.ag-filter-card-delete-icon:hover,.ag-filter-card-expand-icon:hover,.ag-filter-card-heading:hover .ag-filter-card-expand-icon{color:var(--ag-filter-panel-card-subtle-hover-color)}.ag-filter-add-button,.ag-filter-card-delete,.ag-filter-card-expand{border-radius:var(--ag-button-border-radius)}.ag-filter-card-summary,.ag-filter-type-select{margin-left:var(--ag-widget-container-horizontal-padding);margin-right:var(--ag-widget-container-horizontal-padding)}:where(.ag-ltr) .ag-filter-card-delete{margin-right:var(--ag-widget-horizontal-spacing)}:where(.ag-rtl) .ag-filter-card-delete{margin-left:var(--ag-widget-horizontal-spacing)}.ag-filter-card-summary{margin-bottom:var(--ag-widget-container-vertical-padding)}.ag-filter-type-select{padding-top:var(--ag-widget-vertical-spacing)}.ag-filter-card-add{border:0;padding:0}.ag-filter-add-button{align-items:center;display:flex;flex-direction:row;line-height:1.5;width:100%}:where(.ag-ltr) .ag-filter-add-button-label{margin-left:var(--ag-spacing)}:where(.ag-rtl) .ag-filter-add-button-label{margin-right:var(--ag-spacing)}.ag-filter-add-select{border:0;.ag-rich-select-value{border:0;padding:calc(((1.5*var(--ag-font-size) + 2*var(--ag-button-vertical-padding)) - var(--ag-input-height))/2) var(--ag-spacing)}}:where(.ag-ltr) .ag-filter-add-select{.ag-text-field-input{padding-left:calc(var(--ag-spacing)*1.5 + 12px)!important}}:where(.ag-rtl) .ag-filter-add-select{.ag-text-field-input{padding-right:calc(var(--ag-spacing)*1.5 + 12px)!important}}.ag-filter-panel-buttons{display:flex;flex-wrap:wrap;gap:var(--ag-widget-vertical-spacing) var(--ag-widget-horizontal-spacing);justify-content:flex-end;overflow:hidden;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding) 0}.ag-filter-panel-buttons-button{line-height:1.5}.ag-filter-panel .ag-filter-panel-buttons-apply-button{background-color:var(--ag-filter-panel-apply-button-background-color);color:var(--ag-filter-panel-apply-button-color)}.ag-filter-panel-buttons:where(:last-child),.ag-filter-panel-container:where(:last-child){padding-bottom:var(--ag-widget-container-vertical-padding)}.ag-filter-panel .ag-set-filter-body-wrapper,.ag-filter-panel .ag-simple-filter-body-wrapper{padding-bottom:var(--ag-widget-container-vertical-padding)}"; + +// packages/ag-grid-enterprise/src/filterToolPanel/newFilterToolPanel/wrapperToolPanel.ts +var WrapperToolPanel = class extends Component51 { + constructor() { + super(); + this.registerCSS(newFiltersToolPanel_default); + } + init(params) { + if (!this.gos.get("enableFilterHandlers")) { + _warn38(282); + return; + } + const filterPanelSvc = this.beans.filterPanelSvc; + filterPanelSvc.isActive = true; + this.addDestroyFunc(() => { + filterPanelSvc.isActive = false; + }); + this.updateParams(params, params.initialState); + const filterPanel = this.createManagedBean(new FilterPanel()); + this.filterPanel = filterPanel; + const refresh = (event) => { + filterPanel.refresh(event); + params.onStateUpdated(); + }; + refresh(); + this.addManagedListeners(filterPanelSvc, { + filterPanelStatesChanged: refresh, + filterPanelStateChanged: refresh + }); + } + getGui() { + return this.filterPanel?.getGui(); + } + refresh(params) { + this.updateParams(params, params.initialState); + return true; + } + updateParams(params, initialState) { + this.beans.filterPanelSvc?.updateParams(params, initialState); + } + getState() { + return this.beans.filterPanelSvc?.getGridState() ?? {}; + } +}; + +// packages/ag-grid-enterprise/src/filterToolPanel/filtersToolPanelModule.ts +var FiltersToolPanelModule = { + moduleName: "FiltersToolPanel", + version: VERSION, + userComponents: { agFiltersToolPanel: FiltersToolPanel }, + icons: { + // filter tool panel tab + filtersToolPanel: "filter" + }, + dependsOn: [SideBarModule, EnterpriseCoreModule, _ColumnFilterModule4] +}; +var NewFiltersToolPanelModule = { + moduleName: "NewFiltersToolPanel", + version: VERSION, + userComponents: { agNewFiltersToolPanel: WrapperToolPanel }, + beans: [FilterPanelService, SelectableFilterService], + icons: { + // filter add button in new filter tool panel + filterAdd: "filter-add", + // filter tool panel tab + filtersToolPanel: "filter", + // open icon for rich select + richSelectOpen: "small-down", + // remove for rich select editor pills + richSelectRemove: "cancel", + // loading async values + richSelectLoading: "loading", + // button to expand filter card in new filter tool panel + filterCardExpand: "chevron-down", + // button to collapse filter card in new filter tool panel + filterCardCollapse: "chevron-up", + // indicates filter card in new filter tool panel has edits + filterCardEditing: "edit" + }, + dependsOn: [SideBarModule, EnterpriseCoreModule, _ColumnFilterModule4] +}; + +// packages/ag-grid-enterprise/src/masterDetail/masterDetailModule.ts +import { EventApiModule } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/masterDetail/detailCellRenderer.ts +import { Component as Component52, RefPlaceholder as RefPlaceholder45, _getGridRegisteredModules, _missing as _missing5, _warn as _warn40, createGrid } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/masterDetail/detailCellRendererCtrl.ts +import { BeanStub as BeanStub50, _addGridCommonParams as _addGridCommonParams23, _focusInto as _focusInto9, _isSameRow as _isSameRow2, _missing as _missing4, _warn as _warn39 } from "ag-grid-community"; +var DetailCellRendererCtrl = class extends BeanStub50 { + constructor() { + super(...arguments); + this.loadRowDataVersion = 0; + } + wireBeans(beans) { + this.environment = beans.environment; + } + init(comp, params) { + this.params = params; + this.comp = comp; + const doNothingBecauseInsidePinnedSection = params.pinned != null; + if (doNothingBecauseInsidePinnedSection) { + return; + } + this.setAutoHeightClasses(); + this.setupRefreshStrategy(); + this.createDetailGrid(); + this.loadRowData(); + this.addManagedEventListeners({ fullWidthRowFocused: this.onFullWidthRowFocused.bind(this) }); + } + onFullWidthRowFocused(e) { + const params = this.params; + const row = { rowIndex: params.node.rowIndex, rowPinned: params.node.rowPinned }; + const eventRow = { rowIndex: e.rowIndex, rowPinned: e.rowPinned }; + const isSameRow = _isSameRow2(row, eventRow); + if (!isSameRow) { + return; + } + _focusInto9(this.comp.getGui(), e.fromBelow); + } + setAutoHeightClasses() { + const autoHeight = this.gos.get("detailRowAutoHeight"); + const parentClass = autoHeight ? "ag-details-row-auto-height" : "ag-details-row-fixed-height"; + const detailClass = autoHeight ? "ag-details-grid-auto-height" : "ag-details-grid-fixed-height"; + const comp = this.comp; + comp.toggleCss(parentClass, true); + comp.toggleDetailGridCss(detailClass, true); + } + setupRefreshStrategy() { + const providedStrategy = this.params.refreshStrategy; + const validSelection = providedStrategy == "everything" || providedStrategy == "nothing" || providedStrategy == "rows"; + if (validSelection) { + this.refreshStrategy = providedStrategy; + return; + } + if (providedStrategy != null) { + _warn39(170, { providedStrategy }); + } + this.refreshStrategy = "rows"; + } + createDetailGrid() { + const { params, gos } = this; + if (_missing4(params.detailGridOptions)) { + _warn39(171); + return; + } + const masterTheme = gos.get("theme"); + const detailTheme = params.detailGridOptions.theme; + if (detailTheme && detailTheme !== masterTheme) { + _warn39(267); + } + const gridOptions = { + themeStyleContainer: this.environment.eStyleContainer, + ...params.detailGridOptions, + theme: masterTheme + }; + const autoHeight = gos.get("detailRowAutoHeight"); + if (autoHeight) { + gridOptions.domLayout = "autoHeight"; + } + this.comp.setDetailGrid(gridOptions); + } + registerDetailWithMaster(api) { + const { + params, + beans: { selectionSvc, findSvc, expansionSvc } + } = this; + const rowId = params.node.id; + const masterGridApi = params.api; + const gridInfo = { + id: rowId, + api + }; + const rowNode = params.node; + if (masterGridApi.isDestroyed()) { + return; + } + masterGridApi.addDetailGridInfo(rowId, gridInfo); + rowNode.detailGridInfo = gridInfo; + const masterNode = rowNode.parent; + findSvc?.registerDetailGrid(rowNode, api); + function onDetailSelectionChanged() { + if (masterNode) { + selectionSvc?.refreshMasterNodeState(masterNode); + } + } + function adjustDetailsOnExpandOrCollapseAll({ source }) { + if (source === "expandAll") { + return api.expandAll(); + } + if (source === "collapseAll") { + return api.collapseAll(); + } + } + function onMasterRowSelected({ node, source }) { + if (node !== masterNode || source === "masterDetail" || api.isDestroyed()) { + return; + } + selectionSvc?.setDetailSelectionState(masterNode, params.detailGridOptions, api); + } + api.addEventListener("firstDataRendered", () => { + if (api.isDestroyed() || masterGridApi.isDestroyed()) { + return; + } + selectionSvc?.setDetailSelectionState(masterNode, params.detailGridOptions, api); + api.addEventListener("selectionChanged", onDetailSelectionChanged); + masterGridApi.addEventListener("rowSelected", onMasterRowSelected); + const sharedApiModuleName = "CsrmSsrmSharedApi"; + const asAgModuleName = `${sharedApiModuleName}Module`; + if (api.isModuleRegistered(asAgModuleName)) { + masterGridApi.addEventListener("expandOrCollapseAll", adjustDetailsOnExpandOrCollapseAll); + expansionSvc?.setDetailsExpansionState(api); + } + }); + this.addManagedListeners(masterNode, { + masterChanged: (event) => { + if (!event.node.master) { + this.onDestroy(gridInfo); + } + } + }); + this.addDestroyFunc(() => this.onDestroy(gridInfo)); + } + onDestroy(gridInfo) { + const { params } = this; + const rowNode = params.node; + const masterGridApi = params.api; + if (rowNode.detailGridInfo !== gridInfo) { + return; + } + if (!masterGridApi.isDestroyed()) { + masterGridApi.removeDetailGridInfo(rowNode.id); + } + rowNode.detailGridInfo = null; + } + loadRowData() { + this.loadRowDataVersion++; + const versionThisCall = this.loadRowDataVersion; + const params = this.params; + if (params.detailGridOptions?.rowModelType === "serverSide") { + const node = params.node; + node.detailGridInfo?.api?.refreshServerSide({ purge: true }); + return; + } + const userFunc = params.getDetailRowData; + if (!userFunc) { + _warn39(172); + return; + } + const successCallback = (rowData) => { + const mostRecentCall = this.loadRowDataVersion === versionThisCall; + if (mostRecentCall) { + this.comp.setRowData(rowData); + } + }; + const funcParams = { + node: params.node, + // we take data from node, rather than params.data + // as the data could have been updated with new instance + data: params.node.data, + successCallback, + context: _addGridCommonParams23(this.gos, {}).context + }; + userFunc(funcParams); + } + refresh() { + const GET_GRID_TO_REFRESH = false; + const GET_GRID_TO_DO_NOTHING = true; + switch (this.refreshStrategy) { + case "nothing": + return GET_GRID_TO_DO_NOTHING; + case "everything": + return GET_GRID_TO_REFRESH; + } + this.loadRowData(); + return GET_GRID_TO_DO_NOTHING; + } +}; + +// packages/ag-grid-enterprise/src/masterDetail/detailFrameworkComponentWrapper.ts +var DetailFrameworkComponentWrapper = class { + constructor(parentWrapper) { + this.parentWrapper = parentWrapper; + } + wrap(frameworkComponent, mandatoryMethods, optionalMethods, componentType) { + return this.parentWrapper.wrap(frameworkComponent, mandatoryMethods, optionalMethods, componentType); + } +}; + +// packages/ag-grid-enterprise/src/masterDetail/detailCellRenderer.ts +var PinnedDetailCellRendererElement = { tag: "div", cls: "ag-details-row" }; +var DetailCellRendererElement = { + tag: "div", + cls: "ag-details-row", + role: "gridcell", + children: [{ tag: "div", ref: "eDetailGrid", cls: "ag-details-grid", role: "presentation" }] +}; +var DetailCellRenderer = class extends Component52 { + constructor() { + super(...arguments); + this.eDetailGrid = RefPlaceholder45; + } + wireBeans(beans) { + this.context = beans.context; + } + init(params) { + this.params = params; + this.selectAndSetTemplate(); + const compProxy = { + toggleCss: (cssClassName, on) => this.toggleCss(cssClassName, on), + toggleDetailGridCss: (cssClassName, on) => this.eDetailGrid.classList.toggle(cssClassName, on), + setDetailGrid: (gridOptions) => this.setDetailGrid(gridOptions), + setRowData: (rowData) => this.setRowData(rowData), + getGui: () => this.eDetailGrid + }; + this.ctrl = this.createManagedBean(new DetailCellRendererCtrl()); + this.ctrl.init(compProxy, params); + } + refresh() { + return this.ctrl?.refresh() ?? false; + } + selectAndSetTemplate() { + const params = this.params; + if (params.pinned) { + this.setTemplate(PinnedDetailCellRendererElement); + return; + } + const setDefaultTemplate = () => { + this.setTemplate(DetailCellRendererElement); + }; + if (_missing5(params.template)) { + setDefaultTemplate(); + } else if (typeof params.template === "string") { + this.setTemplate(params.template, []); + } else if (typeof params.template === "function") { + const templateFunc = params.template; + const template = templateFunc(params); + this.setTemplate(template, []); + } else { + _warn40(168); + setDefaultTemplate(); + } + if (this.eDetailGrid == null) { + _warn40(169); + } + } + setDetailGrid(gridOptions) { + if (!this.eDetailGrid) { + return; + } + const parentFrameworkComponentWrapper = this.context.getBean("frameworkCompWrapper"); + const frameworkCompWrapper = new DetailFrameworkComponentWrapper(parentFrameworkComponentWrapper); + const { frameworkOverrides } = this.beans; + const api = createGrid(this.eDetailGrid, gridOptions, { + frameworkOverrides, + providedBeanInstances: { frameworkCompWrapper }, + modules: _getGridRegisteredModules(this.params.api.getGridId(), gridOptions.rowModelType ?? "clientSide") + }); + this.detailApi = api; + this.ctrl?.registerDetailWithMaster(api); + this.addDestroyFunc(() => { + api.destroy(); + }); + } + setRowData(rowData) { + this.detailApi?.setGridOption("rowData", rowData); + } +}; + +// packages/ag-grid-enterprise/src/masterDetail/masterDetailApi.ts +function operateOnStore(beans, callback) { + const store = beans.masterDetailSvc?.store; + return store ? callback(store) : void 0; +} +function addDetailGridInfo(beans, id, gridInfo) { + operateOnStore(beans, (store) => { + store[id] = gridInfo; + }); +} +function removeDetailGridInfo(beans, id) { + operateOnStore(beans, (store) => { + delete store[id]; + }); +} +function getDetailGridInfo(beans, id) { + return operateOnStore(beans, (store) => store[id]); +} +function forEachDetailGridInfo(beans, callback) { + operateOnStore(beans, (store) => { + let index = 0; + Object.values(store).forEach((gridInfo) => { + if (gridInfo) { + callback(gridInfo, index++); + } + }); + }); +} + +// packages/ag-grid-enterprise/src/masterDetail/masterDetailModule.css +var masterDetailModule_default = ".ag-details-row{width:100%}.ag-details-row-fixed-height{height:100%}.ag-details-grid{width:100%}.ag-details-grid-fixed-height{height:100%}"; + +// packages/ag-grid-enterprise/src/masterDetail/masterDetailService.ts +import { + BeanStub as BeanStub51, + RowNode as RowNode3, + _exists as _exists23, + _getClientSideRowModel, + _isClientSideRowModel as _isClientSideRowModel8, + _isServerSideRowModel as _isServerSideRowModel3, + _observeResize as _observeResize2 +} from "ag-grid-community"; +var MasterDetailService = class extends BeanStub51 { + constructor() { + super(...arguments); + this.beanName = "masterDetailSvc"; + this.store = {}; + } + isEnabled() { + return this.gos.get("masterDetail"); + } + postConstruct() { + const gos = this.gos; + if (_isClientSideRowModel8(gos)) { + this.enabled = this.isEnabled(); + } + if (_isServerSideRowModel3(gos)) { + this.addEventListeners(); + } + } + addEventListeners() { + const rowNodeDataChanged = (event) => { + this.setMaster(event.node, false, true); + }; + let removeListeners; + const addOrRemoveListeners = () => { + if (removeListeners) { + for (const removeListener of removeListeners) { + removeListener(); + } + removeListeners = void 0; + } + if (this.isEnabled()) { + removeListeners = this.addManagedListeners(this.beans.eventSvc, { rowNodeDataChanged }); + } + }; + addOrRemoveListeners(); + this.gos.addPropertyEventListener("masterDetail", addOrRemoveListeners); + } + refreshModel(params) { + if (params.changedProps) { + const enabled = this.isEnabled(); + if (this.enabled !== enabled) { + this.setMasters(null); + return; + } + } + if (params.rowDataUpdated) { + this.setMasters(params.changedRowNodes); + } + } + setMaster(row, created, updated) { + const oldMaster = row.master; + const enabled = this.isEnabled(); + let newMaster = enabled; + const gos = this.gos; + const isRowMaster = gos.get("isRowMaster"); + const treeData = gos.get("treeData"); + if (enabled) { + if (created || updated) { + if (isRowMaster) { + const data = row.data; + newMaster = !!data && !!isRowMaster(data); + } + } else { + newMaster = oldMaster; + } + } + if (!treeData) { + if (newMaster && created || // if changing AWAY from master, forget current state + !newMaster && oldMaster) { + row._expanded ?? (row._expanded = null); + } + } + if (newMaster !== oldMaster) { + row.master = newMaster; + row.dispatchRowEvent("masterChanged"); + } + } + setMasters(changedRowNodes) { + this.enabled = this.isEnabled(); + if (changedRowNodes) { + for (const node of changedRowNodes.updates) { + this.setMaster(node, false, true); + } + for (const node of changedRowNodes.adds) { + this.setMaster(node, true, false); + } + } else { + const allLeafChildren = _getClientSideRowModel(this.beans)?.rootNode?._leafs; + if (allLeafChildren) { + for (let i = 0, len = allLeafChildren.length; i < len; ++i) { + this.setMaster(allLeafChildren[i], true, false); + } + } + } + } + /** Used by flatten stage to get or create a detail node from a master node */ + getDetail(masterNode) { + if (!masterNode.master || !masterNode.expanded) { + return null; + } + let detailNode = masterNode.detailNode; + if (detailNode) { + return detailNode; + } + detailNode = new RowNode3(this.beans); + detailNode.detail = true; + detailNode.selectable = false; + detailNode.parent = masterNode; + if (_exists23(masterNode.id)) { + detailNode.id = "detail_" + masterNode.id; + } + detailNode.data = masterNode.data; + detailNode.level = masterNode.level + 1; + masterNode.detailNode = detailNode; + return detailNode; + } + setupDetailRowAutoHeight(rowCtrl, eDetailGui) { + const { gos, beans } = this; + if (!gos.get("detailRowAutoHeight")) { + return; + } + const checkRowSizeFunc = () => { + const clientHeight = eDetailGui.clientHeight; + if (clientHeight != null && clientHeight > 0) { + const updateRowHeightFunc = () => { + const { rowModel } = this.beans; + const { rowNode } = rowCtrl; + rowNode.setRowHeight(clientHeight); + if (_isClientSideRowModel8(gos, rowModel) || _isServerSideRowModel3(gos, rowModel)) { + rowModel.onRowHeightChanged(); + } + }; + window.setTimeout(updateRowHeightFunc, 0); + } + }; + const resizeObserverDestroyFunc = _observeResize2(beans, eDetailGui, checkRowSizeFunc); + rowCtrl.addDestroyFunc(resizeObserverDestroyFunc); + checkRowSizeFunc(); + } + destroy() { + this.store = {}; + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/masterDetail/masterDetailModule.ts +var SharedMasterDetailModule = { + moduleName: "SharedMasterDetail", + version: VERSION, + beans: [MasterDetailService], + userComponents: { agDetailCellRenderer: DetailCellRenderer }, + dynamicBeans: { detailCellRendererCtrl: DetailCellRendererCtrl }, + apiFunctions: { + addDetailGridInfo, + removeDetailGridInfo, + getDetailGridInfo, + forEachDetailGridInfo + }, + dependsOn: [EnterpriseCoreModule, GroupCellRendererModule, StickyRowModule], + css: [masterDetailModule_default] +}; +var MasterDetailModule = { + moduleName: "MasterDetail", + version: VERSION, + dependsOn: [SharedMasterDetailModule, ClientSideRowModelHierarchyModule, EventApiModule] +}; + +// packages/ag-grid-enterprise/src/rangeSelection/rangeSelectionModule.ts +import { _DragModule, _KeyboardNavigationModule as _KeyboardNavigationModule3 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rangeSelection/agFillHandle.ts +import { + _addGridCommonParams as _addGridCommonParams24, + _getCellByPosition as _getCellByPosition2, + _getFillHandle, + _getLastRow, + _getNormalisedMousePosition, + _getRowAbove, + _getRowBelow as _getRowBelow3, + _getRowNode as _getRowNode6, + _isRowBefore as _isRowBefore3, + _isSameRow as _isSameRow3, + _last as _last13, + _stopPropagationForAgGrid as _stopPropagationForAgGrid9, + _toStringOrNull as _toStringOrNull6, + _warn as _warn41, + isRowNumberCol as isRowNumberCol2 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rangeSelection/abstractSelectionHandle.ts +import { + Component as Component53, + _areCellsEqual, + _getCellPositionForEvent, + _getPageBody as _getPageBody2, + _isRowBefore as _isRowBefore2, + _isVisible as _isVisible7, + _last as _last12, + _setDisplayed as _setDisplayed23 +} from "ag-grid-community"; +var AbstractSelectionHandle = class extends Component53 { + constructor() { + super(...arguments); + this.changedCalculatedValues = false; + this.dragging = false; + this.shouldDestroyOnEndDragging = false; + } + postConstruct() { + this.beans.dragSvc.addDragSource({ + dragStartPixels: 0, + eElement: this.getGui(), + onDragging: (e) => { + let startingMove = false; + if (!this.dragging) { + startingMove = true; + this.dragging = true; + const pageBody = _getPageBody2(this.beans); + pageBody.classList?.add(this.getDraggingCssClass()); + } + this.updateValuesOnMove(e); + if (startingMove) { + this.changedCalculatedValues = false; + return; + } + this.beans.rangeSvc.autoScrollService.check(e); + if (this.changedCalculatedValues) { + this.onDrag(e); + this.changedCalculatedValues = false; + } + }, + onDragStop: (e) => { + this.dragging = false; + this.onDragEnd(e); + this.clearDragProperties(); + }, + onDragCancel: () => { + this.dragging = false; + this.onDragCancel(); + this.clearDragProperties(); + } + }); + this.addManagedEventListeners({ + cellSelectionChanged: this.updateLocalRangeIfNeeded.bind(this) + }); + this.addManagedElementListeners(this.getGui(), { + pointerdown: stopEventPropagation, + mousedown: stopEventPropagation + }); + } + getLastCellHovered() { + return this.lastCellHovered; + } + getDraggingCssClass() { + return `ag-dragging-${this.type === 0 /* FILL */ ? "fill" : "range"}-handle`; + } + updateValuesOnMove(e) { + const cell = _getCellPositionForEvent(this.gos, e); + if (!cell || this.shouldSkipCell(cell) || this.lastCellHovered && _areCellsEqual(cell, this.lastCellHovered)) { + return; + } + this.lastCellHovered = cell; + this.changedCalculatedValues = true; + } + clearDragProperties() { + this.clearValues(); + this.beans.rangeSvc.autoScrollService.ensureCleared(); + const pageBody = _getPageBody2(this.beans); + pageBody.classList?.remove(this.getDraggingCssClass()); + if (this.shouldDestroyOnEndDragging) { + this.destroy(); + } + } + getType() { + return this.type; + } + refresh(cellCtrl, cellRange) { + const oldCellComp = this.cellCtrl; + const eGui = this.getGui(); + const cellRangeToUse = cellRange ?? _last12(this.beans.rangeSvc.getCellRanges()); + const start = cellRangeToUse.startRow; + const end = cellRangeToUse.endRow; + if (start && end) { + const isBefore = _isRowBefore2(end, start); + if (isBefore) { + this.rangeStartRow = end; + this.rangeEndRow = start; + } else { + this.rangeStartRow = start; + this.rangeEndRow = end; + } + } + if (oldCellComp !== cellCtrl || !_isVisible7(eGui)) { + this.cellCtrl = cellCtrl; + const eParentOfValue = cellCtrl.comp.getParentOfValue(); + if (eParentOfValue) { + eParentOfValue.appendChild(eGui); + } + } + this.cellRange = cellRangeToUse; + } + clearValues() { + this.lastCellHovered = void 0; + } + destroy() { + if (!this.shouldDestroyOnEndDragging && this.dragging) { + _setDisplayed23(this.getGui(), false); + this.shouldDestroyOnEndDragging = true; + return; + } + this.shouldDestroyOnEndDragging = false; + super.destroy(); + this.getGui()?.remove(); + } + updateLocalRangeIfNeeded(event) { + if (!this.cellRange) { + return; + } + const { id, type } = this.cellRange; + if (!id || id !== event.id) { + return; + } + const newRange = this.beans.rangeSvc?.getCellRanges().find((range) => range.id === id && range.type === type); + if (newRange && newRange !== this.cellRange) { + this.cellRange = newRange; + } + } +}; +var stopEventPropagation = (e) => { + e.stopPropagation(); +}; + +// packages/ag-grid-enterprise/src/rangeSelection/utils.ts +function findLineByLeastSquares(values) { + const len = values.length; + let maxDecimals = 0; + if (len <= 1) { + return values; + } + for (let i = 0; i < values.length; i++) { + const value = values[i]; + const splitExponent = value.toString().split("e-"); + if (splitExponent.length > 1) { + maxDecimals = Math.max(maxDecimals, parseInt(splitExponent[1], 10)); + continue; + } + if (Math.floor(value) === value) { + continue; + } + maxDecimals = Math.max(maxDecimals, value.toString().split(".")[1].length); + } + let sum_x = 0; + let sum_y = 0; + let sum_xy = 0; + let sum_xx = 0; + let y = 0; + for (let x = 0; x < len; x++) { + y = values[x]; + sum_x += x; + sum_y += y; + sum_xx += x * x; + sum_xy += x * y; + } + const m = (len * sum_xy - sum_x * sum_y) / (len * sum_xx - sum_x * sum_x); + const b = sum_y / len - m * sum_x / len; + const result = []; + for (let x = 0; x <= len; x++) { + result.push(parseFloat((x * m + b).toFixed(maxDecimals))); + } + return result; +} + +// packages/ag-grid-enterprise/src/rangeSelection/agFillHandle.ts +var FillHandleElement = { + tag: "div", + cls: "ag-fill-handle" +}; +var AgFillHandle = class extends AbstractSelectionHandle { + constructor() { + super(FillHandleElement); + this.markedCells = []; + this.cellValues = []; + this.isUp = false; + this.isLeft = false; + this.isReduce = false; + this.type = 0 /* FILL */; + } + postConstruct() { + super.postConstruct(); + this.addManagedElementListeners(this.getGui(), { + dblclick: this.onDblClick.bind(this) + }); + } + onDblClick(e) { + _stopPropagationForAgGrid9(e); + const { cellRange: initialRange, rangeStartRow, beans } = this; + const { rangeSvc, visibleCols } = beans; + const lastRow = _getLastRow(beans); + if (!lastRow) { + return; + } + const fillHandleDirection = this.getFillHandleDirection(); + this.dragAxis = fillHandleDirection === "xy" ? "y" : fillHandleDirection; + const finalRange = rangeSvc?.createCellRangeFromCellRangeParams({ + rowStartIndex: rangeStartRow.rowIndex, + rowStartPinned: rangeStartRow.rowPinned, + columnStart: initialRange.columns[0], + rowEndIndex: this.dragAxis === "x" ? initialRange.endRow?.rowIndex ?? null : lastRow.rowIndex, + rowEndPinned: this.dragAxis === "x" ? initialRange.endRow?.rowPinned : lastRow.rowPinned, + columnEnd: this.dragAxis === "x" ? _last13(visibleCols.allCols) : _last13(initialRange.columns) + }); + this.isUp = false; + this.isLeft = false; + if (finalRange) { + this.performFill({ + event: e, + initialRange, + finalRange + }); + } + this.dragAxis = void 0; + } + updateValuesOnMove(e) { + super.updateValuesOnMove(e); + if (!this.initialXY) { + this.initialXY = _getNormalisedMousePosition(this.beans, e); + } + const { x, y } = this.initialXY; + const { x: newX, y: newY } = _getNormalisedMousePosition(this.beans, e); + const diffX = Math.abs(x - newX); + const diffY = Math.abs(y - newY); + const allowedDirection = this.getFillHandleDirection(); + let direction; + if (allowedDirection === "xy") { + direction = diffX > diffY ? "x" : "y"; + } else { + direction = allowedDirection; + } + if (direction !== this.dragAxis) { + this.dragAxis = direction; + this.changedCalculatedValues = true; + } + } + shouldSkipCell(cell) { + return isRowNumberCol2(cell.column); + } + onDrag(_) { + if (!this.initialPosition) { + const cellCtrl = this.cellCtrl; + if (!cellCtrl) { + return; + } + this.initialPosition = cellCtrl.cellPosition; + } + const lastCellHovered = this.getLastCellHovered(); + if (lastCellHovered) { + this.markPathFrom(this.initialPosition, lastCellHovered); + } + } + onDragEnd(e) { + this.initialXY = null; + if (!this.markedCells.length) { + return; + } + const isX = this.dragAxis === "x"; + const { + cellRange: initialRange, + rangeStartRow, + rangeEndRow, + beans: { rangeSvc } + } = this; + const colLen = initialRange.columns.length; + let finalRange; + if (!this.isUp && !this.isLeft) { + finalRange = rangeSvc.createCellRangeFromCellRangeParams({ + rowStartIndex: rangeStartRow.rowIndex, + rowStartPinned: rangeStartRow.rowPinned, + columnStart: initialRange.columns[0], + rowEndIndex: isX ? rangeEndRow.rowIndex : this.lastCellMarked.rowIndex, + rowEndPinned: isX ? rangeEndRow.rowPinned : this.lastCellMarked.rowPinned, + columnEnd: isX ? this.lastCellMarked.column : initialRange.columns[colLen - 1] + }); + } else { + const startRow = isX ? rangeStartRow : this.lastCellMarked; + finalRange = rangeSvc.createCellRangeFromCellRangeParams({ + rowStartIndex: startRow.rowIndex, + rowStartPinned: startRow.rowPinned, + columnStart: isX ? this.lastCellMarked.column : initialRange.columns[0], + rowEndIndex: rangeEndRow.rowIndex, + rowEndPinned: rangeEndRow.rowPinned, + columnEnd: initialRange.columns[colLen - 1] + }); + } + if (finalRange) { + this.performFill({ + event: e, + initialRange, + finalRange, + shouldUpdateRange: true + }); + } + } + onDragCancel() { + this.initialXY = null; + if (!this.markedCells.length) { + return; + } + this.clearMarkedPath(); + } + performFill({ + event, + initialRange, + finalRange, + shouldUpdateRange + }) { + const { eventSvc, rangeSvc } = this.beans; + eventSvc.dispatchEvent({ type: "fillStart" }); + this.handleValueChanged(initialRange, finalRange, event); + if (shouldUpdateRange) { + rangeSvc.setCellRanges([finalRange]); + } + eventSvc.dispatchEvent({ + type: "fillEnd", + initialRange, + finalRange + }); + } + getFillHandleDirection() { + const direction = _getFillHandle(this.gos)?.direction; + if (!direction) { + return "xy"; + } + if (direction !== "x" && direction !== "y" && direction !== "xy") { + _warn41(177); + return "xy"; + } + return direction; + } + handleValueChanged(initialRange, finalRange, e) { + const { beans } = this; + const { rangeSvc, gos, valueSvc } = beans; + const initialRangeEndRow = rangeSvc.getRangeEndRow(initialRange); + const initialRangeStartRow = rangeSvc.getRangeStartRow(initialRange); + const finalRangeEndRow = rangeSvc.getRangeEndRow(finalRange); + const finalRangeStartRow = rangeSvc.getRangeStartRow(finalRange); + const isVertical = this.dragAxis === "y"; + if (this.isReduce && !_getFillHandle(gos)?.suppressClearOnFillReduction) { + const columns = isVertical ? initialRange.columns : initialRange.columns.filter((col) => finalRange.columns.indexOf(col) < 0); + const startRow = isVertical ? _getRowBelow3(beans, finalRangeEndRow) : finalRangeStartRow; + if (startRow) { + this.clearCellsInRange(startRow, initialRangeEndRow, columns); + } + return; + } + const values = []; + const initialValues = []; + const initialNonAggregatedValues = []; + const initialFormattedValues = []; + let withinInitialRange = true; + let idx = 0; + const resetValues = () => { + values.length = 0; + initialValues.length = 0; + initialNonAggregatedValues.length = 0; + initialFormattedValues.length = 0; + idx = 0; + }; + const iterateAcrossCells = (column, columns) => { + let currentRow = this.isUp ? initialRangeEndRow : initialRangeStartRow; + let finished = false; + if (isVertical) { + withinInitialRange = true; + resetValues(); + } + while (!finished && currentRow) { + const rowNode = _getRowNode6(beans, currentRow); + if (!rowNode) { + break; + } + if (isVertical && column) { + fillValues( + values, + column, + rowNode, + () => !_isSameRow3(currentRow, this.isUp ? initialRangeStartRow : initialRangeEndRow) + ); + } else if (columns) { + withinInitialRange = true; + resetValues(); + for (const col of columns) { + fillValues( + values, + col, + rowNode, + () => col !== (this.isLeft ? initialRange.columns[0] : _last13(initialRange.columns)) + ); + } + } + finished = _isSameRow3(currentRow, this.isUp ? finalRangeStartRow : finalRangeEndRow); + currentRow = this.isUp ? _getRowAbove(this.beans, currentRow) : _getRowBelow3(beans, currentRow); + } + }; + const fillValues = (currentValues, col, rowNode, updateInitialSet) => { + let currentValue; + let skipValue = false; + if (withinInitialRange) { + currentValue = valueSvc.getValue(col, rowNode, "edit"); + initialValues.push(currentValue); + initialNonAggregatedValues.push(valueSvc.getValue(col, rowNode, "edit", true)); + initialFormattedValues.push( + valueSvc.getValueForDisplay({ column: col, node: rowNode, from: "edit" }).valueFormatted + ); + withinInitialRange = updateInitialSet(); + } else { + const { value, fromUserFunction, sourceCol, sourceRowNode } = this.processValues({ + event: e, + values: currentValues, + initialValues, + initialNonAggregatedValues, + initialFormattedValues, + col, + rowNode, + idx: idx++ + }); + currentValue = value; + if (col.isCellEditable(rowNode)) { + const cellValue = valueSvc.getValue(col, rowNode, "edit"); + if (!fromUserFunction) { + if (sourceCol) { + const sourceColDef = sourceCol.getColDef(); + if (sourceColDef.useValueFormatterForExport !== false && sourceColDef.valueFormatter) { + const formattedValue = valueSvc.getValueForDisplay({ + column: sourceCol, + node: sourceRowNode, + includeValueFormatted: true, + from: "edit" + }).valueFormatted; + if (formattedValue != null) { + currentValue = formattedValue; + } + } + } + if (col.getColDef().useValueParserForImport !== false) { + currentValue = valueSvc.parseValue( + col, + rowNode, + // if no sourceCol, then currentValue is a number + sourceCol ? currentValue : _toStringOrNull6(currentValue), + cellValue + ); + } + } + if (!fromUserFunction || cellValue !== currentValue) { + rowNode.setDataValue(col, currentValue, "rangeSvc"); + } else { + skipValue = true; + } + } + } + if (!skipValue) { + currentValues.push({ + value: currentValue, + column: col, + rowNode + }); + } + }; + const { changeDetectionSvc } = this.beans; + changeDetectionSvc?.beginDeferred(); + try { + if (isVertical) { + initialRange.columns.forEach((col) => { + iterateAcrossCells(col); + }); + } else { + const columns = this.isLeft ? [...finalRange.columns].reverse() : finalRange.columns; + iterateAcrossCells(void 0, columns); + } + this.beans.editSvc?.stopEditing(void 0, { source: "fillHandle" }); + } finally { + changeDetectionSvc?.endDeferred(); + } + } + clearCellsInRange(startRow, endRow, columns) { + const cellRange = { + startRow, + endRow, + columns, + startColumn: columns[0] + }; + this.beans.rangeSvc.clearCellRangeCellValues({ cellRanges: [cellRange], restoreSourceInBatch: true }); + } + processValues(params) { + const { formula, valueSvc } = this.beans; + const { event, values, initialValues, initialNonAggregatedValues, initialFormattedValues, col, rowNode, idx } = params; + const userFillOperation = _getFillHandle(this.gos)?.setFillValue; + const isVertical = this.dragAxis === "y"; + let direction; + if (isVertical) { + direction = this.isUp ? "up" : "down"; + } else { + direction = this.isLeft ? "left" : "right"; + } + if (userFillOperation) { + const params2 = _addGridCommonParams24(this.gos, { + event, + values: values.map(({ value }) => value), + initialValues, + initialNonAggregatedValues, + initialFormattedValues, + currentIndex: idx, + currentCellValue: valueSvc.getValue(col, rowNode, "edit"), + direction, + column: col, + rowNode + }); + const userResult = userFillOperation(params2); + if (userResult !== false) { + return { value: userResult, fromUserFunction: true }; + } + } + const isNumeric = (v) => typeof v === "number" && Number.isFinite(v) || typeof v === "string" && /^[+-]?\d+(?:\.\d+)?$/.test(v.trim()); + const allNumbers = values.every(({ value }) => isNumeric(value)); + if (event.altKey || !allNumbers) { + const valueForFunctions = String(_last13(values)?.value ?? ""); + if (allNumbers && initialValues.length === 1) { + const multiplier = this.isUp || this.isLeft ? -1 : 1; + return { + value: parseFloat(valueForFunctions) + 1 * multiplier, + fromUserFunction: false + }; + } + const { value: cyclicValue, column: sourceCol, rowNode: sourceRowNode } = values[idx % values.length]; + let processedValue; + const fromFormula = sourceCol.isAllowFormula() && formula?.isFormula(valueForFunctions); + if (fromFormula) { + const rowDelta = direction === "up" ? -1 : direction === "down" ? 1 : 0; + const columnDelta = direction === "left" ? -1 : direction === "right" ? 1 : 0; + processedValue = formula.updateFormulaByOffset({ value: valueForFunctions, rowDelta, columnDelta }); + } else { + processedValue = cyclicValue; + } + return { + value: processedValue, + fromUserFunction: false, + sourceCol: fromFormula ? void 0 : sourceCol, + sourceRowNode + }; + } + return { + value: _last13(findLineByLeastSquares(values.map(({ value }) => Number(value)))), + fromUserFunction: false + }; + } + clearValues() { + this.clearMarkedPath(); + this.clearCellValues(); + this.lastCellMarked = void 0; + super.clearValues(); + } + clearMarkedPath() { + for (const cell of this.markedCells) { + if (!cell.isAlive()) { + continue; + } + const { comp } = cell; + comp.toggleCss("ag-selection-fill-top", false); + comp.toggleCss("ag-selection-fill-right", false); + comp.toggleCss("ag-selection-fill-bottom", false); + comp.toggleCss("ag-selection-fill-left", false); + } + this.markedCells.length = 0; + this.isUp = false; + this.isLeft = false; + this.isReduce = false; + } + clearCellValues() { + this.cellValues.length = 0; + } + markPathFrom(initialPosition, currentPosition) { + this.clearMarkedPath(); + this.clearCellValues(); + if (this.dragAxis === "y") { + if (_isSameRow3(currentPosition, initialPosition)) { + return; + } + const isBefore = _isRowBefore3(currentPosition, initialPosition); + const { rangeStartRow, rangeEndRow } = this; + if (isBefore && (currentPosition.rowPinned == rangeStartRow.rowPinned && currentPosition.rowIndex >= rangeStartRow.rowIndex || rangeStartRow.rowPinned != rangeEndRow.rowPinned && currentPosition.rowPinned == rangeEndRow.rowPinned && currentPosition.rowIndex <= rangeEndRow.rowIndex)) { + this.reduceVertical(initialPosition, currentPosition); + this.isReduce = true; + } else { + this.extendVertical(initialPosition, currentPosition, isBefore); + this.isReduce = false; + } + } else { + const initialColumn = initialPosition.column; + const currentColumn = currentPosition.column; + if (initialColumn === currentColumn) { + return; + } + const displayedColumns = this.beans.visibleCols.allCols; + const initialIndex = displayedColumns.indexOf(initialColumn); + const currentIndex = displayedColumns.indexOf(currentColumn); + if (currentIndex <= initialIndex && currentIndex >= displayedColumns.indexOf(this.cellRange.columns[0])) { + this.reduceHorizontal(initialPosition, currentPosition); + this.isReduce = true; + } else { + this.extendHorizontal(initialPosition, currentPosition, currentIndex < initialIndex); + this.isReduce = false; + } + } + this.lastCellMarked = currentPosition; + } + extendVertical(initialPosition, endPosition, isMovingUp) { + const beans = this.beans; + const { rangeSvc } = beans; + let row = initialPosition; + do { + const cellRange = this.cellRange; + const colLen = cellRange.columns.length; + for (let i = 0; i < colLen; i++) { + const column = cellRange.columns[i]; + const rowPos = { rowIndex: row.rowIndex, rowPinned: row.rowPinned }; + const cellPos = { ...rowPos, column }; + const cellInRange = rangeSvc.isCellInSpecificRange(cellPos, cellRange); + const isInitialRow = _isSameRow3(row, initialPosition); + if (isMovingUp) { + this.isUp = true; + } + if (!isInitialRow) { + const cell = _getCellByPosition2(beans, cellPos); + if (cell) { + this.markedCells.push(cell); + const cellComp = cell.comp; + if (!cellInRange) { + cellComp.toggleCss("ag-selection-fill-left", i === 0); + cellComp.toggleCss("ag-selection-fill-right", i === colLen - 1); + } + cellComp.toggleCss( + isMovingUp ? "ag-selection-fill-top" : "ag-selection-fill-bottom", + _isSameRow3(row, endPosition) + ); + } + } + } + if (_isSameRow3(row, endPosition)) { + break; + } + } while ( + // tslint:disable-next-line + row = isMovingUp ? _getRowAbove(this.beans, row) : _getRowBelow3(beans, row) + ); + } + reduceVertical(initialPosition, endPosition) { + let row = initialPosition; + const beans = this.beans; + do { + const cellRange = this.cellRange; + const colLen = cellRange.columns.length; + const isLastRow = _isSameRow3(row, endPosition); + for (let i = 0; i < colLen; i++) { + const rowPos = { rowIndex: row.rowIndex, rowPinned: row.rowPinned }; + const celPos = { ...rowPos, column: cellRange.columns[i] }; + const cell = _getCellByPosition2(beans, celPos); + if (cell) { + this.markedCells.push(cell); + cell.comp.toggleCss("ag-selection-fill-bottom", _isSameRow3(row, endPosition)); + } + } + if (isLastRow) { + break; + } + } while (row = _getRowAbove(beans, row)); + } + extendHorizontal(initialPosition, endPosition, isMovingLeft) { + const beans = this.beans; + const { visibleCols } = beans; + const allCols = visibleCols.allCols; + const startCol = allCols.indexOf(isMovingLeft ? endPosition.column : initialPosition.column); + const endCol = allCols.indexOf(isMovingLeft ? this.cellRange.columns[0] : endPosition.column); + const offset = isMovingLeft ? 0 : 1; + const colsToMark = allCols.slice(startCol + offset, endCol + offset); + const { rangeStartRow, rangeEndRow } = this; + for (const column of colsToMark) { + let row = rangeStartRow; + let isLastRow = false; + do { + isLastRow = _isSameRow3(row, rangeEndRow); + const cell = _getCellByPosition2(beans, { + rowIndex: row.rowIndex, + rowPinned: row.rowPinned, + column + }); + if (cell) { + this.markedCells.push(cell); + const cellComp = cell.comp; + cellComp.toggleCss("ag-selection-fill-top", _isSameRow3(row, rangeStartRow)); + cellComp.toggleCss("ag-selection-fill-bottom", _isSameRow3(row, rangeEndRow)); + if (isMovingLeft) { + this.isLeft = true; + cellComp.toggleCss("ag-selection-fill-left", column === colsToMark[0]); + } else { + cellComp.toggleCss("ag-selection-fill-right", column === _last13(colsToMark)); + } + } + row = _getRowBelow3(beans, row); + } while (!isLastRow); + } + } + reduceHorizontal(initialPosition, endPosition) { + const beans = this.beans; + const { visibleCols } = beans; + const allCols = visibleCols.allCols; + const startCol = allCols.indexOf(endPosition.column); + const endCol = allCols.indexOf(initialPosition.column); + const colsToMark = allCols.slice(startCol, endCol); + const { rangeStartRow, rangeEndRow } = this; + for (const column of colsToMark) { + let row = rangeStartRow; + let isLastRow = false; + do { + isLastRow = _isSameRow3(row, rangeEndRow); + const cell = _getCellByPosition2(this.beans, { + rowIndex: row.rowIndex, + rowPinned: row.rowPinned, + column + }); + if (cell) { + this.markedCells.push(cell); + cell.comp.toggleCss("ag-selection-fill-right", column === colsToMark[0]); + } + row = _getRowBelow3(beans, row); + } while (!isLastRow); + } + } + refresh(cellCtrl, cellRange) { + const cellRangeToUse = cellRange ?? this.beans.rangeSvc.getCellRanges()[0]; + const isColumnRange = !cellRangeToUse.startRow || !cellRangeToUse.endRow; + if (isColumnRange) { + this.destroy(); + return; + } + super.refresh(cellCtrl, cellRangeToUse); + } +}; + +// packages/ag-grid-enterprise/src/rangeSelection/agRangeHandle.ts +import { CellRangeType, _isSameRow as _isSameRow4, _last as _last14 } from "ag-grid-community"; +var AgRangeHandle = class extends AbstractSelectionHandle { + constructor() { + super({ tag: "div", cls: "ag-range-handle" }); + this.type = 1 /* RANGE */; + this.rangeFixed = false; + } + onDrag(_) { + const lastCellHovered = this.getLastCellHovered(); + if (!lastCellHovered) { + return; + } + const rangeSvc = this.beans.rangeSvc; + const targetRange = this.cellRange ?? _last14(rangeSvc.getCellRanges()); + if (!targetRange) { + return; + } + if (!this.rangeFixed) { + this.fixRangeStartEnd(targetRange); + this.rangeFixed = true; + } + this.endPosition = { + rowIndex: lastCellHovered.rowIndex, + rowPinned: lastCellHovered.rowPinned, + column: lastCellHovered.column + }; + if (rangeSvc.getCellRanges().length === 2 && rangeSvc.getCellRanges()[0].type === CellRangeType.DIMENSION && targetRange.type === CellRangeType.VALUE) { + const rowChanged = !_isSameRow4(this.endPosition, rangeSvc.getRangeEndRow(targetRange)); + if (rowChanged) { + rangeSvc.updateRangeRowBoundary({ + cellRange: rangeSvc.getCellRanges()[0], + boundary: "end", + cellPosition: { + ...this.endPosition, + column: rangeSvc.getCellRanges()[0].columns[0] + }, + silent: true + }); + } + } + rangeSvc.extendRangeToCell(targetRange, this.endPosition); + } + shouldSkipCell(_) { + return false; + } + onDragEnd(_) { + const cellRange = this.cellRange ?? _last14(this.beans.rangeSvc.getCellRanges()); + if (!cellRange) { + return; + } + this.fixRangeStartEnd(cellRange); + this.rangeFixed = false; + } + onDragCancel() { + this.rangeFixed = false; + } + fixRangeStartEnd(cellRange) { + const rangeSvc = this.beans.rangeSvc; + const startRow = rangeSvc.getRangeStartRow(cellRange); + const endRow = rangeSvc.getRangeEndRow(cellRange); + const column = cellRange.columns[0]; + cellRange.startRow = startRow; + cellRange.endRow = endRow; + cellRange.startColumn = column; + } +}; + +// packages/ag-grid-enterprise/src/rangeSelection/rangeSelection.css +var rangeSelection_default = ".ag-body-viewport:not(.ag-has-focus) .ag-cell-range-single-cell:not(.ag-cell-inline-editing),.ag-cell-range-selected.ag-cell-range-chart,.ag-cell-range-selected:not(.ag-cell-focus){background-color:var(--ag-range-selection-background-color);&.ag-cell-range-chart{background-color:var(--ag-range-selection-chart-background-color)!important;&.ag-cell-range-chart-category{background-color:var(--ag-range-selection-chart-category-background-color)!important}}}.ag-cell-range-selected-1.ag-cell-range-chart,.ag-cell-range-selected-1.ag-formula-range,.ag-cell-range-selected-1:not(.ag-cell-focus),.ag-root:not(.ag-context-menu-open) .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-1:not(.ag-cell-inline-editing){background-color:var(--ag-range-selection-background-color)}.ag-cell-range-selected-2.ag-cell-range-chart,.ag-cell-range-selected-2.ag-formula-range,.ag-cell-range-selected-2:not(.ag-cell-focus){background-image:linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color))}.ag-cell-range-selected-3.ag-cell-range-chart,.ag-cell-range-selected-3.ag-formula-range,.ag-cell-range-selected-3:not(.ag-cell-focus){background-image:linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color)),linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color))}.ag-cell-range-selected-4.ag-cell-range-chart,.ag-cell-range-selected-4.ag-formula-range,.ag-cell-range-selected-4:not(.ag-cell-focus){background-image:linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color)),linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color)),linear-gradient(var(--ag-range-selection-background-color),var(--ag-range-selection-background-color))}.ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell){&.ag-cell-range-top{border-top-color:var(--ag-range-selection-border-color);border-top-style:var(--ag-range-selection-border-style)}&.ag-cell-range-right{border-right-color:var(--ag-range-selection-border-color);border-right-style:var(--ag-range-selection-border-style)}&.ag-cell-range-bottom{border-bottom-color:var(--ag-range-selection-border-color);border-bottom-style:var(--ag-range-selection-border-style)}&.ag-cell-range-left{border-left-color:var(--ag-range-selection-border-color);border-left-style:var(--ag-range-selection-border-style)}}.ag-cell.ag-selection-fill-top,.ag-cell.ag-selection-fill-top.ag-cell-range-selected{border-top:1px dashed;border-top-color:var(--ag-range-selection-border-color)}:where(.ag-ltr) .ag-cell.ag-selection-fill-right,:where(.ag-ltr) .ag-cell.ag-selection-fill-right.ag-cell-range-selected{border-right:1px dashed var(--ag-range-selection-border-color)!important}:where(.ag-rtl) .ag-cell.ag-selection-fill-right,:where(.ag-rtl) .ag-cell.ag-selection-fill-right.ag-cell-range-selected{border-left:1px dashed var(--ag-range-selection-border-color)!important}.ag-cell.ag-selection-fill-bottom,.ag-cell.ag-selection-fill-bottom.ag-cell-range-selected{border-bottom:1px dashed;border-bottom-color:var(--ag-range-selection-border-color)}:where(.ag-ltr) .ag-cell.ag-selection-fill-left,:where(.ag-ltr) .ag-cell.ag-selection-fill-left.ag-cell-range-selected{border-left:1px dashed var(--ag-range-selection-border-color)!important}:where(.ag-rtl) .ag-cell.ag-selection-fill-left,:where(.ag-rtl) .ag-cell.ag-selection-fill-left.ag-cell-range-selected{border-right:1px dashed var(--ag-range-selection-border-color)!important}.ag-fill-handle,.ag-range-handle{background-color:var(--ag-range-selection-border-color);bottom:-1px;height:6px;position:absolute;width:6px}:where(.ag-ltr) .ag-fill-handle,:where(.ag-ltr) .ag-range-handle{right:-1px}:where(.ag-rtl) .ag-fill-handle,:where(.ag-rtl) .ag-range-handle{left:-1px}.ag-fill-handle{cursor:crosshair}:where(.ag-ltr) .ag-range-handle{cursor:nwse-resize}:where(.ag-rtl) .ag-range-handle{cursor:nesw-resize}"; + +// packages/ag-grid-enterprise/src/rangeSelection/rangeSelectionApi.ts +function getCellRanges(beans) { + return beans.rangeSvc?.getCellRanges() ?? null; +} +function addCellRange(beans, params) { + beans.rangeSvc?.addCellRange(params); +} +function clearRangeSelection(beans) { + beans.rangeSvc?.removeAllCellRanges(); +} + +// packages/ag-grid-enterprise/src/rangeSelection/rangeService.ts +import { + AutoScrollService as AutoScrollService2, + BeanStub as BeanStub55, + KeyCode as KeyCode31, + _areCellsEqual as _areCellsEqual2, + _areEqual as _areEqual5, + _exists as _exists24, + _getAbsoluteRowIndex, + _getCellCtrlForEventTarget, + _getEnableColumnSelection, + _getFirstRow as _getFirstRow2, + _getLastRow as _getLastRow2, + _getRowAbove as _getRowAbove2, + _getRowBelow as _getRowBelow4, + _getRowCtrlForEventTarget, + _getRowNode as _getRowNode7, + _getSuppressMultiRanges, + _interpretAsRightClick as _interpretAsRightClick2, + _isCellSelectionEnabled as _isCellSelectionEnabled2, + _isDomLayout, + _isRowBefore as _isRowBefore4, + _isSameRow as _isSameRow6, + _isUsingNewCellSelectionAPI, + _last as _last16, + _makeNull as _makeNull8, + _missing as _missing7, + _removeAllFromArray as _removeAllFromArray2, + _removeFromArray as _removeFromArray7, + _warn as _warn42 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rangeSelection/cellRangeFeature.ts +import { CellRangeType as CellRangeType2, _isSameRow as _isSameRow5, _last as _last15, _missing as _missing6, _setAriaSelected as _setAriaSelected2 } from "ag-grid-community"; +var CSS_CELL_RANGE_SELECTED = "ag-cell-range-selected"; +var CSS_CELL_RANGE_CHART = "ag-cell-range-chart"; +var CSS_CELL_RANGE_SINGLE_CELL = "ag-cell-range-single-cell"; +var CSS_CELL_RANGE_CHART_CATEGORY = "ag-cell-range-chart-category"; +var CSS_CELL_RANGE_HANDLE = "ag-cell-range-handle"; +var CSS_CELL_RANGE_TOP = "ag-cell-range-top"; +var CSS_CELL_RANGE_RIGHT = "ag-cell-range-right"; +var CSS_CELL_RANGE_BOTTOM = "ag-cell-range-bottom"; +var CSS_CELL_RANGE_LEFT = "ag-cell-range-left"; +function _isRangeHandleEnabled(gos) { + const selection = gos.get("cellSelection"); + const useNewAPI = selection !== void 0; + if (!useNewAPI) { + return gos.get("enableRangeHandle"); + } + return typeof selection !== "boolean" ? selection.handle?.mode === "range" : false; +} +function _isFillHandleEnabled(gos) { + const selection = gos.get("cellSelection"); + const useNewAPI = selection !== void 0; + if (!useNewAPI) { + return gos.get("enableFillHandle"); + } + return typeof selection !== "boolean" ? selection.handle?.mode === "fill" : false; +} +var CellRangeFeature = class { + constructor(beans, cellCtrl) { + this.beans = beans; + this.cellCtrl = cellCtrl; + this.rangeColorClass = null; + this.handleColorClass = null; + this.rangeSvc = beans.rangeSvc; + } + setComp(cellComp) { + this.cellComp = cellComp; + this.eGui = this.cellCtrl.eGui; + this.onCellSelectionChanged(); + } + unsetComp() { + this.beans.context.destroyBean(this.selectionHandle); + } + onCellSelectionChanged() { + const cellComp = this.cellComp; + if (!cellComp) { + return; + } + const { rangeSvc, cellCtrl, eGui } = this; + const rangeCount = rangeSvc.getCellRangeCount(cellCtrl.cellPosition); + this.rangeCount = rangeCount; + const hasChartRange = this.getHasChartRange(); + this.hasChartRange = hasChartRange; + cellComp.toggleCss(CSS_CELL_RANGE_SELECTED, rangeCount !== 0); + cellComp.toggleCss(`${CSS_CELL_RANGE_SELECTED}-1`, rangeCount === 1); + cellComp.toggleCss(`${CSS_CELL_RANGE_SELECTED}-2`, rangeCount === 2); + cellComp.toggleCss(`${CSS_CELL_RANGE_SELECTED}-3`, rangeCount === 3); + cellComp.toggleCss(`${CSS_CELL_RANGE_SELECTED}-4`, rangeCount >= 4); + cellComp.toggleCss(CSS_CELL_RANGE_CHART, hasChartRange); + _setAriaSelected2(eGui, rangeCount > 0 ? true : void 0); + cellComp.toggleCss(CSS_CELL_RANGE_SINGLE_CELL, this.isSingleCell()); + this.updateRangeBorders(); + this.refreshRangeStyleAndHandle(); + } + updateRangeBorders() { + const rangeBorders = this.getRangeBorders(); + const isSingleCell = this.isSingleCell(); + const isTop = !isSingleCell && rangeBorders.top; + const isRight = !isSingleCell && rangeBorders.right; + const isBottom = !isSingleCell && rangeBorders.bottom; + const isLeft = !isSingleCell && rangeBorders.left; + const cellComp = this.cellComp; + cellComp.toggleCss(CSS_CELL_RANGE_TOP, isTop); + cellComp.toggleCss(CSS_CELL_RANGE_RIGHT, isRight); + cellComp.toggleCss(CSS_CELL_RANGE_BOTTOM, isBottom); + cellComp.toggleCss(CSS_CELL_RANGE_LEFT, isLeft); + } + isSingleCell() { + const { rangeSvc } = this; + return this.rangeCount === 1 && !!rangeSvc && !rangeSvc.isMoreThanOneCell(); + } + getHasChartRange() { + const { rangeSvc } = this; + if (!this.rangeCount || !rangeSvc) { + return false; + } + const cellRanges = rangeSvc.getCellRanges(); + return cellRanges.length > 0 && cellRanges.every((range) => [CellRangeType2.DIMENSION, CellRangeType2.VALUE].includes(range.type)); + } + updateRangeBordersIfRangeCount() { + if (this.rangeCount > 0) { + this.updateRangeBorders(); + this.refreshRangeStyleAndHandle(); + } + } + getRangeBorders() { + const isRtl = this.beans.gos.get("enableRtl"); + let top = false; + let right = false; + let bottom = false; + let left = false; + const { + rangeSvc, + beans: { visibleCols }, + cellCtrl: { cellPosition } + } = this; + const thisCol = cellPosition.column; + const ranges = rangeSvc.getCellRanges().filter((range) => rangeSvc.isCellInSpecificRange(cellPosition, range)); + if (!ranges.length) { + return { top, right, bottom, left }; + } + let leftCol; + let rightCol; + if (isRtl) { + leftCol = visibleCols.getColAfter(thisCol); + rightCol = visibleCols.getColBefore(thisCol); + } else { + leftCol = visibleCols.getColBefore(thisCol); + rightCol = visibleCols.getColAfter(thisCol); + } + if (!leftCol) { + left = true; + } + if (!rightCol) { + right = true; + } + for (let i = 0; i < ranges.length; i++) { + if (top && right && bottom && left) { + break; + } + const range = ranges[i]; + const startRow = rangeSvc.getRangeStartRow(range); + const endRow = rangeSvc.getRangeEndRow(range); + if (!top && _isSameRow5(startRow, cellPosition)) { + top = true; + } + if (!bottom && _isSameRow5(endRow, cellPosition)) { + bottom = true; + } + if (!left && leftCol && range.columns.indexOf(leftCol) < 0) { + left = true; + } + if (!right && rightCol && range.columns.indexOf(rightCol) < 0) { + right = true; + } + } + return { top, right, bottom, left }; + } + refreshRangeStyleAndHandle() { + const { context } = this.beans; + if (context.isDestroyed()) { + return; + } + this.styleCellForRangeType(); + const rangeForHandle = this.getRangeForHandle(); + if (this.selectionHandle && !rangeForHandle) { + this.selectionHandle = context.destroyBean(this.selectionHandle); + } + if (rangeForHandle) { + this.addSelectionHandle(rangeForHandle); + } + this.refreshHandleColor(rangeForHandle); + this.cellComp.toggleCss(CSS_CELL_RANGE_HANDLE, !!this.selectionHandle); + } + styleCellForRangeType() { + if (this.hasChartRange) { + const { rangeSvc } = this; + const dimensionRange = rangeSvc.getCellRanges()[0]; + const hasCategoryRange = dimensionRange.type === CellRangeType2.DIMENSION; + const isCategoryCell = hasCategoryRange && rangeSvc.isCellInSpecificRange(this.cellCtrl.cellPosition, dimensionRange); + this.cellComp.toggleCss(CSS_CELL_RANGE_CHART_CATEGORY, isCategoryCell); + } else { + this.cellComp.toggleCss(CSS_CELL_RANGE_CHART_CATEGORY, false); + this.applyRangeColor(this.getRangeColorClass()); + } + } + applyRangeColor(nextClass) { + if (this.rangeColorClass && this.rangeColorClass !== nextClass) { + this.cellComp.toggleCss(this.rangeColorClass, false); + this.cellComp.toggleCss("ag-formula-range", false); + } + if (nextClass) { + this.cellComp.toggleCss(nextClass, true); + this.cellComp.toggleCss("ag-formula-range", nextClass.startsWith("ag-formula-range")); + } + this.rangeColorClass = nextClass ?? null; + } + getRangeColorClass() { + const { rangeSvc, rangeCount } = this; + if (!rangeSvc || !rangeCount) { + return null; + } + const ranges = rangeSvc.getCellRanges(); + for (let i = ranges.length - 1; i >= 0; i--) { + const range = ranges[i]; + const colorClass = range.colorClass; + if (!colorClass) { + continue; + } + if (rangeSvc.isCellInSpecificRange(this.cellCtrl.cellPosition, range)) { + return colorClass; + } + } + return null; + } + refreshHandleColor(rangeForHandle) { + const handleGui = this.selectionHandle?.getGui?.(); + const nextClass = rangeForHandle?.colorClass ?? null; + if (!handleGui) { + this.handleColorClass = null; + return; + } + if (this.handleColorClass && this.handleColorClass !== nextClass) { + handleGui.classList.remove(this.handleColorClass); + } + if (nextClass) { + handleGui.classList.add(nextClass); + } else if (this.handleColorClass) { + handleGui.classList.remove(this.handleColorClass); + } + this.handleColorClass = nextClass ?? null; + } + getRangeForHandle() { + const { gos, editSvc } = this.beans; + const rangeSvc = this.rangeSvc; + const allRanges = rangeSvc.getCellRanges(); + const rangesLen = allRanges.length; + if (this.rangeCount < 1 || rangesLen < 1) { + return null; + } + const isRangeSelectionEnabledWhileEditing = editSvc?.isRangeSelectionEnabledWhileEditing(); + const rangesToRefreshHandle = isRangeSelectionEnabledWhileEditing ? allRanges : [_last15(allRanges)]; + for (const cellRange of rangesToRefreshHandle) { + const { cellPosition, column } = this.cellCtrl; + const isFillHandleAvailable = _isFillHandleEnabled(gos) && !column.isSuppressFillHandle(); + const isRangeHandleAvailable = _isRangeHandleEnabled(gos); + const isCellEditing = editSvc?.isEditing(this.cellCtrl, { withOpenEditor: true }); + let handleIsAvailable = !isCellEditing && (isRangeSelectionEnabledWhileEditing || rangesLen === 1 && (isFillHandleAvailable || isRangeHandleAvailable)); + if (this.hasChartRange) { + handleIsAvailable = cellRange.type === CellRangeType2.VALUE; + } + if (handleIsAvailable && cellRange.endRow != null && rangeSvc.isContiguousRange(cellRange) && rangeSvc.isBottomRightCell(cellRange, cellPosition)) { + return cellRange; + } + } + return null; + } + addSelectionHandle(cellRange) { + const { beans } = this; + const isRangeSelectionEnabledWhileEditing = beans.editSvc?.isRangeSelectionEnabledWhileEditing(); + const cellRangeType = cellRange.type; + const selectionHandleFill = !isRangeSelectionEnabledWhileEditing && _isFillHandleEnabled(beans.gos) && _missing6(cellRangeType); + const type = selectionHandleFill ? 0 /* FILL */ : 1 /* RANGE */; + if (this.selectionHandle && this.selectionHandle.getType() !== type) { + this.selectionHandle = beans.context.destroyBean(this.selectionHandle); + } + if (!this.selectionHandle) { + const selectionHandle = beans.registry.createDynamicBean( + type === 0 /* FILL */ ? "fillHandle" : "rangeHandle", + false + ); + if (selectionHandle) { + this.selectionHandle = beans.context.createBean(selectionHandle); + } + } + this.selectionHandle?.refresh(this.cellCtrl, cellRange); + } + destroy() { + this.unsetComp(); + } +}; + +// packages/ag-grid-enterprise/src/rangeSelection/dragListenerFeature.ts +import { BeanStub as BeanStub52, _isCellSelectionEnabled } from "ag-grid-community"; +var DragListenerFeature = class extends BeanStub52 { + constructor(eContainer) { + super(); + this.eContainer = eContainer; + } + postConstruct() { + const { beans, gos, eContainer } = this; + const rangeSvc = beans.rangeSvc; + const params = { + eElement: eContainer, + onDragStart: rangeSvc.onDragStart.bind(rangeSvc), + onDragStop: rangeSvc.onDragStop.bind(rangeSvc), + onDragging: rangeSvc.onDragging.bind(rangeSvc) + }; + const dragSvc = beans.dragSvc; + const enableFeature = dragSvc.addDragSource.bind(dragSvc, params); + const disableFeature = dragSvc.removeDragSource.bind(dragSvc, params); + this.addManagedPropertyListeners(["enableRangeSelection", "cellSelection"], () => { + if (_isCellSelectionEnabled(gos)) { + enableFeature(); + } else { + disableFeature(); + } + }); + this.addDestroyFunc(disableFeature); + if (_isCellSelectionEnabled(gos)) { + enableFeature(); + } + } +}; + +// packages/ag-grid-enterprise/src/rangeSelection/headerGroupCellMouseListenerFeature.ts +import { BeanStub as BeanStub53 } from "ag-grid-community"; +var HeaderGroupCellMouseListenerFeature = class extends BeanStub53 { + constructor(column, eGui) { + super(); + this.column = column; + this.eGui = eGui; + } + postConstruct() { + this.addManagedElementListeners(this.eGui, { + click: (e) => e && this.onClick(e) + }); + } + onClick(event) { + this.beans.rangeSvc?.handleColumnSelection(this.column, event); + } +}; + +// packages/ag-grid-enterprise/src/rangeSelection/rangeHeaderHighlightFeature.ts +import { BeanStub as BeanStub54 } from "ag-grid-community"; +var RangeHeaderHighlightFeature = class extends BeanStub54 { + constructor(column, comp) { + super(); + this.column = column; + this.comp = comp; + this.columnMap = /* @__PURE__ */ new Map(); + this.isActive = false; + this.resetColumnMap(); + } + postConstruct() { + this.addManagedPropertyListener("cellSelection", () => { + this.refreshActive(); + }); + this.refreshActive(); + this.setupRangeHeaderHighlight(); + } + resetColumnMap() { + this.columnMap.clear(); + let columns; + if (this.column.isColumn) { + columns = [this.column]; + } else { + columns = this.column.getDisplayedLeafColumns(); + } + for (const column of columns) { + this.columnMap.set(column, false); + } + } + refreshActive() { + const { gos, rangeSvc } = this.beans; + const selection = gos.get("cellSelection"); + this.isActive = !!(selection && rangeSvc && typeof selection === "object" && selection.enableHeaderHighlight); + } + setupRangeHeaderHighlight() { + const listener = this.onRangeSelectionChanged.bind(this); + this.addManagedEventListeners({ + rangeSelectionChanged: listener, + columnPinned: listener, + columnMoved: listener, + columnGroupOpened: listener + }); + listener(); + } + onRangeSelectionChanged() { + if (!this.isActive) { + return; + } + this.resetColumnMap(); + const ranges = this.beans.rangeSvc.getCellRanges(); + let hasRange = false; + let isAllColumnRange = true; + for (const range of ranges) { + if (hasRange) { + break; + } + for (const column of range.columns) { + if (this.columnMap.has(column)) { + this.columnMap.set(column, true); + hasRange || (hasRange = true); + } + } + } + for (const value of Array.from(this.columnMap.values())) { + if (value === false) { + isAllColumnRange = false; + break; + } + } + this.comp.toggleCss("ag-header-range-highlight", hasRange && isAllColumnRange); + } + destroy() { + super.destroy(); + this.comp = null; + this.column = null; + } +}; + +// packages/ag-grid-enterprise/src/rangeSelection/rangeService.ts +var RangeService = class extends BeanStub55 { + constructor() { + super(...arguments); + this.beanName = "rangeSvc"; + this.rangeSelectionExtensions = []; + this.cellRanges = []; + this.bodyScrollListener = this.onBodyScroll.bind(this); + this.dragging = false; + /** When dragging ends, the current range will be used to intersect all other ranges */ + this.intersectionRange = false; + this.columnRangeSelectionCtx = {}; + } + wireBeans(beans) { + this.rowModel = beans.rowModel; + this.dragSvc = beans.dragSvc; + this.colModel = beans.colModel; + this.visibleCols = beans.visibleCols; + this.cellNavigation = beans.cellNavigation; + this.ctrlsSvc = beans.ctrlsSvc; + } + postConstruct() { + const onColumnsChanged = this.onColumnsChanged.bind(this); + const removeAllCellRanges = () => this.removeAllCellRanges(); + const refreshLastRangeStart = this.refreshLastRangeStart.bind(this); + this.addManagedEventListeners({ + newColumnsLoaded: onColumnsChanged, + columnVisible: onColumnsChanged, + columnValueChanged: onColumnsChanged, + columnPivotModeChanged: removeAllCellRanges, + columnRowGroupChanged: removeAllCellRanges, + columnPivotChanged: removeAllCellRanges, + columnGroupOpened: refreshLastRangeStart, + columnMoved: refreshLastRangeStart, + columnPinned: refreshLastRangeStart + }); + this.ctrlsSvc.whenReady(this, (p) => { + const gridBodyCtrl = p.gridBodyCtrl; + this.autoScrollService = new AutoScrollService2({ + scrollContainer: gridBodyCtrl.eBodyViewport, + scrollAxis: "xy", + getVerticalPosition: () => gridBodyCtrl.scrollFeature.getVScrollPosition().top, + setVerticalPosition: (position) => gridBodyCtrl.scrollFeature.setVerticalScrollPosition(position), + getHorizontalPosition: () => gridBodyCtrl.scrollFeature.getHScrollPosition().left, + setHorizontalPosition: (position) => gridBodyCtrl.scrollFeature.setHorizontalScrollPosition(position), + shouldSkipVerticalScroll: () => !_isDomLayout(this.gos, "normal"), + shouldSkipHorizontalScroll: () => !gridBodyCtrl.scrollFeature.isHorizontalScrollShowing() + }); + }); + } + registerRangeSelectionExtension(extension) { + if (this.rangeSelectionExtensions.includes(extension)) { + return; + } + this.rangeSelectionExtensions.push(extension); + } + unregisterRangeSelectionExtension(extension) { + _removeFromArray7(this.rangeSelectionExtensions, extension); + } + shouldSuppressRangeSelection(eventTarget) { + return this.rangeSelectionExtensions.some((extension) => extension.shouldSuppressRangeSelection?.(eventTarget)); + } + shouldSkipColumn(column) { + return this.rangeSelectionExtensions.some((extension) => extension.shouldSkipColumn?.(column)); + } + isAllColumnsSelectionCell(cellPosition) { + return this.rangeSelectionExtensions.some((extension) => extension.isAllColumnsSelectionCell?.(cellPosition)); + } + isAllColumnsRange(range, allColumns) { + return this.rangeSelectionExtensions.some((extension) => extension.isAllColumnsRange?.(range, allColumns)); + } + updateSelectionModeForCell(cellPosition) { + this.setSelectionMode(this.isAllColumnsSelectionCell(cellPosition)); + } + // Drag And Drop Target Methods + onDragStart(mouseEvent) { + const gos = this.gos; + const target = mouseEvent.target; + if (!_isCellSelectionEnabled2(gos) || _getRowCtrlForEventTarget(gos, target)?.isSuppressMouseEvent(mouseEvent)) { + return; + } + if (this.shouldSuppressRangeSelection(target)) { + return; + } + const { shiftKey } = mouseEvent; + const isMultiRange = this.isMultiRange(mouseEvent); + const extendRange = shiftKey && !!this.cellRanges?.length; + if (!isMultiRange && (!extendRange || _exists24(_last16(this.cellRanges).type))) { + this.removeAllCellRanges(true); + } + const startTarget = this.dragSvc.startTarget; + if (startTarget) { + this.updateValuesOnMove(startTarget); + } + if (!this.lastCellHovered) { + return; + } + this.dragging = true; + this.lastMouseEvent = mouseEvent; + this.intersectionRange = isMultiRange && this.getCellRangeCount(this.lastCellHovered) > 1; + if (!extendRange) { + this.setNewestRangeStartCell(this.lastCellHovered); + } + if (this.cellRanges.length > 0) { + this.draggingRange = _last16(this.cellRanges); + } else { + const mouseRowPosition = { + rowIndex: this.lastCellHovered.rowIndex, + rowPinned: this.lastCellHovered.rowPinned + }; + const columns = this.getColumnsFromModel([this.lastCellHovered.column]); + if (!columns?.length) { + return; + } + this.draggingRange = { + startRow: mouseRowPosition, + endRow: mouseRowPosition, + columns, + startColumn: this.newestRangeStartCell.column + }; + this.cellRanges.push(this.draggingRange); + } + this.ctrlsSvc.getGridBodyCtrl().eBodyViewport.addEventListener("scroll", this.bodyScrollListener, { passive: true }); + this.dispatchChangedEvent(true, false, this.draggingRange.id); + } + onDragging(mouseEvent) { + const { dragging, lastCellHovered, newestRangeStartCell, autoScrollService, cellHasChanged } = this; + if (!dragging || !mouseEvent) { + return; + } + this.updateValuesOnMove(mouseEvent.target); + this.lastMouseEvent = mouseEvent; + const isMouseAndStartInPinned = (position) => lastCellHovered && lastCellHovered.rowPinned === position && newestRangeStartCell.rowPinned === position; + const skipVerticalScroll = isMouseAndStartInPinned("top") || isMouseAndStartInPinned("bottom"); + autoScrollService.check(mouseEvent, skipVerticalScroll); + if (!cellHasChanged || !lastCellHovered) { + return; + } + const startColumn = newestRangeStartCell?.column; + const currentColumn = lastCellHovered?.column; + const columns = this.calculateColumnsBetween(startColumn, currentColumn); + if (!columns) { + return; + } + const { rowIndex, rowPinned } = lastCellHovered; + this.draggingRange.endRow = { + rowIndex, + rowPinned + }; + this.draggingRange.columns = columns; + this.dispatchChangedEvent(false, false, this.draggingRange.id); + } + onDragStop() { + if (!this.dragging) { + return; + } + const { id } = this.draggingRange; + this.autoScrollService.ensureCleared(); + this.ctrlsSvc.getGridBodyCtrl().eBodyViewport.removeEventListener("scroll", this.bodyScrollListener); + this.lastMouseEvent = null; + this.dragging = false; + this.draggingRange = void 0; + this.lastCellHovered = void 0; + if (this.intersectionRange) { + this.intersectionRange = false; + this.intersectLastRange(); + } + this.dispatchChangedEvent(false, true, id); + } + // Called for both columns loaded and column visibility events + onColumnsChanged() { + this.refreshLastRangeStart(); + const allColumns = this.visibleCols.allCols; + for (const cellRange of this.cellRanges) { + const beforeCols = cellRange.columns; + cellRange.columns = cellRange.columns.filter( + (col) => col.isVisible() && allColumns.indexOf(col) !== -1 + ); + const colsInRangeChanged = !_areEqual5(beforeCols, cellRange.columns); + if (colsInRangeChanged) { + this.dispatchChangedEvent(false, true, cellRange.id); + } + } + const countBefore = this.cellRanges.length; + this.cellRanges = this.cellRanges.filter((range) => range.columns.length > 0); + if (countBefore > this.cellRanges.length) { + this.dispatchChangedEvent(false, true); + } + } + refreshLastRangeStart() { + const lastRange = _last16(this.cellRanges); + if (!lastRange) { + return; + } + this.refreshRangeStart(lastRange); + } + isContiguousRange(cellRange) { + const rangeColumns = cellRange.columns; + if (!rangeColumns.length) { + return false; + } + const allColumns = this.visibleCols.allCols; + const allPositions = rangeColumns.map((c) => allColumns.indexOf(c)).sort((a, b) => a - b); + return _last16(allPositions) - allPositions[0] + 1 === rangeColumns.length; + } + getRangeStartRow(cellRange) { + if (cellRange.startRow && cellRange.endRow) { + return _isRowBefore4(cellRange.startRow, cellRange.endRow) ? cellRange.startRow : cellRange.endRow; + } + const pinnedTopRowCount = this.beans.pinnedRowModel?.getPinnedTopRowCount() ?? 0; + const rowPinned = pinnedTopRowCount > 0 ? "top" : null; + return { rowIndex: 0, rowPinned }; + } + getRangeEndRow(cellRange) { + if (cellRange.startRow && cellRange.endRow) { + return _isRowBefore4(cellRange.startRow, cellRange.endRow) ? cellRange.endRow : cellRange.startRow; + } + const pinnedBottomRowCount = this.beans.pinnedRowModel?.getPinnedBottomRowCount() ?? 0; + const pinnedBottom = pinnedBottomRowCount > 0; + if (pinnedBottom) { + return { + rowIndex: pinnedBottomRowCount - 1, + rowPinned: "bottom" + }; + } + return { + rowIndex: this.rowModel.getRowCount() - 1, + rowPinned: null + }; + } + getRangeRowCount(cellRange) { + const beans = this.beans; + const start = this.getRangeStartRow(cellRange); + const end = this.getRangeEndRow(cellRange); + const startIndex = _getAbsoluteRowIndex(beans, start); + const endIndex = _getAbsoluteRowIndex(beans, end); + return endIndex - startIndex + 1; + } + handleCellMouseDown(event, cell) { + const isMultiKey = event.ctrlKey || event.metaKey; + this.handleCellSelectionInput(cell, { + target: event.target, + shiftKey: event.shiftKey, + isRightClick: _interpretAsRightClick2(this.beans, event), + isMultiRange: this.isMultiRange(event), + isMultiKey, + preventDefault: () => event.preventDefault() + }); + } + handleCellKeyboardSelect(event, cell) { + const isMultiKey = event.ctrlKey || event.metaKey; + this.handleCellSelectionInput(cell, { + target: event.target, + shiftKey: event.shiftKey, + // keyboard selection should never be interpreted as a right click. + isRightClick: false, + isMultiRange: this.isMultiRangeForKeyState(isMultiKey), + isMultiKey, + preventDefault: () => event.preventDefault() + }); + } + handleCellSelectionInput(cell, params) { + const { target, shiftKey, isRightClick, isMultiRange, isMultiKey, preventDefault } = params; + if (this.shouldSuppressRangeSelection(target)) { + return; + } + const isAllColumnsCell = this.isAllColumnsSelectionCell(cell); + if (isAllColumnsCell) { + preventDefault(); + } + if (shiftKey) { + return this.extendLatestRangeToCell(cell); + } + if (isAllColumnsCell && isRightClick) { + return; + } + this.updateSelectionModeForCell(cell); + const columns = this.calculateColumnsBetween(cell.column, cell.column); + if (!columns) { + return; + } + const containingRange = isAllColumnsCell ? this.findContainingRange({ + columns, + startRow: cell, + endRow: cell + }) : void 0; + const isMultiRangeRemoval = isAllColumnsCell && !!containingRange && isMultiRange && isMultiKey; + if (isMultiRangeRemoval && containingRange) { + this.removeRowFromAllColumnsRange(cell, containingRange); + } else { + this.setRangeToCell(cell, isMultiRange); + } + } + isMultiRange(event) { + return this.isMultiRangeForKeyState(event.ctrlKey || event.metaKey); + } + isMultiRangeForKeyState(isMultiKey) { + const { editingWithRanges, allowMulti } = this.getMultiRangeContext(); + return editingWithRanges || (allowMulti ? isMultiKey : false); + } + getMultiRangeContext() { + const { gos, editSvc } = this.beans; + const editingWithRanges = !!editSvc?.isEditing() && !!editSvc?.isRangeSelectionEnabledWhileEditing(); + const suppressMultiRanges = _getSuppressMultiRanges(gos) && !editingWithRanges; + return { + editingWithRanges, + suppressMultiRanges, + allowMulti: !suppressMultiRanges + }; + } + removeRowFromAllColumnsRange(cell, containingRange) { + const { beans, cellRanges } = this; + const firstRow = _getFirstRow2(beans); + const lastRow = _getLastRow2(beans); + const startRow = this.getRangeStartRow(containingRange); + const endRow = this.getRangeEndRow(containingRange); + if (!startRow && _isSameRow6(firstRow, cell)) { + replaceEdgeRow(containingRange, _getRowBelow4(beans, firstRow), "top"); + } else if (!endRow && _isSameRow6(lastRow, cell)) { + replaceEdgeRow(containingRange, _getRowAbove2(beans, lastRow), "bottom"); + } else if (_isSameRow6(startRow, endRow)) { + _removeFromArray7(cellRanges, containingRange); + } else if (_isSameRow6(startRow, cell)) { + replaceEdgeRow(containingRange, _getRowBelow4(beans, cell), "top"); + } else if (_isSameRow6(endRow, cell)) { + replaceEdgeRow(containingRange, _getRowAbove2(beans, cell), "bottom"); + } else { + const rowAbove = _getRowAbove2(beans, cell); + const rowBelow = _getRowBelow4(beans, cell); + containingRange.startRow = startRow; + containingRange.endRow = rowAbove ?? void 0; + cellRanges.push({ + ...containingRange, + startRow: rowBelow ?? void 0, + endRow + }); + } + this.dispatchChangedEvent(true, true); + } + setRangeToCell(cell, appendRange = false) { + const { gos } = this; + if (!_isCellSelectionEnabled2(gos)) { + return; + } + this.updateSelectionModeForCell(cell); + const columns = this.calculateColumnsBetween(cell.column, cell.column); + if (!columns) { + return; + } + const { suppressMultiRanges } = this.getMultiRangeContext(); + if (suppressMultiRanges || !appendRange || _missing7(this.cellRanges)) { + this.removeAllCellRanges(true); + } + const rowForCell = { + rowIndex: cell.rowIndex, + rowPinned: cell.rowPinned + }; + const cellRange = { + startRow: rowForCell, + endRow: rowForCell, + columns, + startColumn: cell.column + }; + const startColumn = this.ensureRangeStartColumn(cellRange); + if (!startColumn) { + return; + } + this.cellRanges.push(cellRange); + this.setNewestRangeStartCell({ ...cell, column: startColumn }); + this.onDragStop(); + this.dispatchChangedEvent(true, true); + } + getRangeLastColumn(cellRange) { + const firstCol = cellRange.columns[0]; + const lastCol = _last16(cellRange.columns); + return this.newestRangeStartCell?.column === firstCol ? lastCol : firstCol; + } + extendRangeRowCountBy(cellRange, targetCount) { + const { beans } = this; + const { startRow, endRow } = cellRange; + if (!startRow || !endRow) { + return; + } + let stepsMoved = 0; + let currentRow; + const isBottomUp = _isRowBefore4(endRow, startRow); + if (isBottomUp) { + currentRow = startRow; + } else { + currentRow = endRow; + } + const stepFn = targetCount > 0 ? _getRowBelow4 : _getRowAbove2; + const stepCount = Math.abs(targetCount); + while (stepsMoved < stepCount) { + const nextRow = stepFn(beans, currentRow); + if (!nextRow) { + break; + } + currentRow = nextRow; + stepsMoved++; + } + if (stepsMoved !== stepCount) { + return; + } + const cellPosition = { + ...currentRow, + column: this.getRangeLastColumn(cellRange) + }; + this.updateRangeRowBoundary({ cellRange, boundary: isBottomUp ? "start" : "end", cellPosition }); + } + extendRangeColumnCountBy(cellRange, delta) { + const { columns } = cellRange; + if (delta === 0) { + return; + } + const allColumns = this.getColumnsFromModel(); + if (!allColumns) { + return; + } + const rangeStartColumn = this.ensureRangeStartColumn(cellRange); + if (!rangeStartColumn) { + return; + } + const lastColumn = _last16(columns); + const endColumn = rangeStartColumn === columns[0] ? lastColumn : columns[0]; + if (!lastColumn || !endColumn) { + return; + } + let startIdx = allColumns.indexOf(rangeStartColumn); + const endIdx = allColumns.indexOf(endColumn); + const isRtlRange = endIdx < startIdx; + if (isRtlRange) { + startIdx = endIdx; + } + const currentLength = columns.length; + const targetLength = currentLength + delta; + if (targetLength <= 0) { + return; + } + const newColumns = []; + for (let i = startIdx; i < startIdx + targetLength; i++) { + const col = allColumns[i]; + if (!col) { + break; + } + newColumns.push(col); + } + if (newColumns.length === targetLength) { + if (isRtlRange) { + const newColumnToFocus = _last16(newColumns); + cellRange.startColumn = newColumnToFocus; + this.focusCellOnNewColumn(cellRange, newColumnToFocus); + } + cellRange.columns = newColumns; + this.dispatchChangedEvent(true, true, cellRange.id); + } + } + extendLatestRangeToCell(cellPosition) { + if (this.isEmpty() || !this.newestRangeStartCell) { + return; + } + const cellRange = _last16(this.cellRanges); + this.updateSelectionModeForCell(cellPosition); + this.updateRangeRowBoundary({ cellRange, boundary: "end", cellPosition }); + } + extendRangeToCell(cellRange, cellPosition) { + if (!cellRange) { + return; + } + this.updateSelectionModeForCell(cellPosition); + this.updateRangeRowBoundary({ cellRange, boundary: "end", cellPosition }); + } + updateRangeRowBoundary(params) { + const { cellRange, boundary, cellPosition, silent = false } = params; + const endColumn = cellPosition.column; + const startColumn = this.ensureRangeStartColumn(cellRange); + if (!startColumn) { + return; + } + const colsToAdd = this.calculateColumnsBetween(startColumn, endColumn); + if (!colsToAdd || isLastCellOfRange(cellRange, cellPosition)) { + return; + } + if (boundary === "start") { + this.focusCellOnNewRow(cellRange, cellPosition); + } + cellRange.columns = colsToAdd; + cellRange[boundary === "start" ? "startRow" : "endRow"] = { + rowIndex: cellPosition.rowIndex, + rowPinned: cellPosition.rowPinned + }; + if (!silent) { + this.dispatchChangedEvent(true, true, cellRange.id); + } + } + getRangeEdgeColumns(cellRange) { + const allColumns = this.visibleCols.allCols; + const allIndices = cellRange.columns.map((c) => allColumns.indexOf(c)).filter((i) => i > -1).sort((a, b) => a - b); + return { + left: allColumns[allIndices[0]], + right: allColumns[_last16(allIndices)] + }; + } + // returns true if successful, false if not successful + extendLatestRangeInDirection(event) { + if (this.isEmpty() || !this.newestRangeStartCell) { + return; + } + const key = event.key; + const ctrlKey = event.ctrlKey || event.metaKey; + const lastRange = _last16(this.cellRanges); + const startCell = this.newestRangeStartCell; + const endCellIndex = lastRange.endRow.rowIndex; + const endCellFloating = lastRange.endRow.rowPinned; + const endCellColumn = this.getRangeLastColumn(lastRange); + const endCell = { column: endCellColumn, rowIndex: endCellIndex, rowPinned: endCellFloating }; + const newEndCell = this.cellNavigation.getNextCellToFocus(key, endCell, ctrlKey); + if (!newEndCell) { + return; + } + if (this.shouldSkipColumn(newEndCell.column)) { + return; + } + this.setCellRange({ + rowStartIndex: startCell.rowIndex, + rowStartPinned: startCell.rowPinned, + rowEndIndex: newEndCell.rowIndex, + rowEndPinned: newEndCell.rowPinned, + columnStart: startCell.column, + columnEnd: newEndCell.column + }); + return newEndCell; + } + setCellRange(params) { + if (!_isCellSelectionEnabled2(this.gos)) { + return; + } + this.removeAllCellRanges(true); + this.addCellRange(params); + } + setCellRanges(cellRanges) { + if (_areEqual5(this.cellRanges, cellRanges)) { + return; + } + if (!this.verifyCellRanges(this.gos)) { + return; + } + this.setSelectionMode(false); + this.removeAllCellRanges(true); + const allDataColumns = this.getColumnsFromModel(this.visibleCols.allCols) ?? []; + let hasAllColumnsRange = false; + for (const cellRange of cellRanges) { + if (cellRange.columns && cellRange.startRow) { + const columns = this.getColumnsFromModel(cellRange.columns); + if (!columns || columns.length === 0) { + continue; + } + cellRange.columns = columns; + const { startRow } = cellRange; + this.setNewestRangeStartCell({ + rowIndex: startRow.rowIndex, + rowPinned: startRow.rowPinned, + column: cellRange.columns[0] + }); + } + if (!hasAllColumnsRange && allDataColumns.length > 0 && this.isAllColumnsRange(cellRange, allDataColumns)) { + hasAllColumnsRange = true; + } + this.cellRanges.push(cellRange); + } + this.setSelectionMode(hasAllColumnsRange); + this.dispatchChangedEvent(false, true); + } + clearCellRangeCellValues(params) { + const { beans, eventSvc } = this; + const { + cellEventSource = "rangeSvc", + dispatchWrapperEvents, + wrapperEventSource = "deleteKey", + restoreSourceInBatch + } = params; + let { cellRanges } = params; + if (dispatchWrapperEvents) { + eventSvc.dispatchEvent({ + type: "cellSelectionDeleteStart", + source: wrapperEventSource + }); + eventSvc.dispatchEvent({ + type: "rangeDeleteStart", + source: wrapperEventSource + }); + } + if (!cellRanges) { + cellRanges = this.cellRanges; + } + const { valueSvc, editSvc } = beans; + const batch = !!editSvc?.isBatchEditing(); + const { changeDetectionSvc } = beans; + changeDetectionSvc?.beginDeferred(); + try { + this.forEachEditableCellInRanges(cellRanges, (rowNode, column) => { + if (restoreSourceInBatch && batch) { + editSvc?.batchResetToSourceValue({ rowNode, column }); + return; + } + const deleteValue = valueSvc.getDeleteValue(column, rowNode); + rowNode.setDataValue(column, deleteValue, cellEventSource); + }); + } finally { + changeDetectionSvc?.endDeferred(); + } + if (dispatchWrapperEvents) { + eventSvc.dispatchEvent({ + type: "cellSelectionDeleteEnd", + source: wrapperEventSource + }); + eventSvc.dispatchEvent({ + type: "rangeDeleteEnd", + source: wrapperEventSource + }); + } + } + createCellRangeFromCellRangeParams(params) { + return this.createPartialCellRangeFromRangeParams(params, false); + } + // range service can't normally support a range without columns, but charts can + createPartialCellRangeFromRangeParams(params, allowEmptyColumns) { + const { + columns: paramColumns, + columnStart, + columnEnd, + rowStartIndex, + rowStartPinned, + rowEndIndex, + rowEndPinned + } = params; + const columnInfo = this.getColumnsFromParams( + paramColumns, + columnStart, + columnEnd + ); + if (!columnInfo || !allowEmptyColumns && columnInfo.columns.length === 0) { + return; + } + const { columns, startsOnTheRight } = columnInfo; + const startRow = createRowPosition(rowStartIndex, rowStartPinned); + const endRow = createRowPosition(rowEndIndex, rowEndPinned); + return { + startRow, + endRow, + columns, + startColumn: this.getColumnFromModel(columnStart) ?? (startsOnTheRight ? _last16(columns) : columns[0]) + }; + } + addCellRange(params) { + const gos = this.gos; + if (!_isCellSelectionEnabled2(gos) || !this.verifyCellRanges(gos)) { + return; + } + this.setSelectionMode(false); + const newRange = this.createCellRangeFromCellRangeParams(params); + if (newRange) { + if (newRange.startRow) { + this.setNewestRangeStartCell({ + rowIndex: newRange.startRow.rowIndex, + rowPinned: newRange.startRow.rowPinned, + column: newRange.startColumn + }); + } + this.cellRanges.push(newRange); + this.dispatchChangedEvent(false, true, newRange.id); + return newRange; + } + } + getCellRanges() { + return this.cellRanges; + } + isEmpty() { + return this.cellRanges.length === 0; + } + isMoreThanOneCell() { + const len = this.cellRanges.length; + if (len === 0) { + return false; + } + if (len > 1) { + return true; + } + const range = this.cellRanges[0]; + const startRow = this.getRangeStartRow(range); + const endRow = this.getRangeEndRow(range); + return startRow.rowPinned !== endRow.rowPinned || startRow.rowIndex !== endRow.rowIndex || range.columns.length !== 1; + } + areAllRangesAbleToMerge() { + const rowToColumnMap = /* @__PURE__ */ new Map(); + const len = this.cellRanges.length; + if (len <= 1) { + return true; + } + for (const range of this.cellRanges) { + this.forEachRowInRange(range, (row) => { + const rowName = `${row.rowPinned || "normal"}_${row.rowIndex}`; + const columns = rowToColumnMap.get(rowName); + const currentRangeColIds = range.columns.map((col) => col.getId()); + if (columns) { + const filteredColumns = currentRangeColIds.filter((col) => columns.indexOf(col) === -1); + columns.push(...filteredColumns); + } else { + rowToColumnMap.set(rowName, currentRangeColIds); + } + }); + } + let columnsString; + for (const val of rowToColumnMap.values()) { + const currentValString = val.sort().join(); + if (columnsString === void 0) { + columnsString = currentValString; + continue; + } + if (columnsString !== currentValString) { + return false; + } + } + return true; + } + removeAllCellRanges(silent) { + if (this.isEmpty()) { + return; + } + this.onDragStop(); + this.cellRanges.length = 0; + if (!silent) { + this.dispatchChangedEvent(false, true); + } + } + isCellInAnyRange(cell) { + return this.getCellRangeCount(cell) > 0; + } + isCellInSpecificRange(cell, range) { + const columnInRange = range.columns?.includes(cell.column); + const rowInRange = this.isRowInRange(cell, range); + return columnInRange && rowInRange; + } + isColumnInAnyRange(column) { + const { beans } = this; + const firstRow = _getFirstRow2(beans); + const lastRow = _getLastRow2(beans); + if (!firstRow || !lastRow) { + return false; + } + const columns = column.isColumn ? [column] : column.getDisplayedLeafColumns(); + return this.findContainingRange({ columns, startRow: firstRow, endRow: lastRow }, true) != null; + } + findContainingRange({ columns, startRow, endRow }, matchOnly = false) { + const ranges = this.cellRanges; + for (let i = ranges.length - 1; i >= 0; i--) { + const range = ranges[i]; + const hasCols = columns.every((c) => range.columns.includes(c)); + let condition = false; + if (matchOnly) { + condition = _isSameRow6(range.startRow, startRow) && _isSameRow6(range.endRow, endRow); + } else { + const isStartBeforeOrEqual = startRow && this.isRowInRange(startRow, range); + const isEndAfterOrEqual = endRow && this.isRowInRange(endRow, range); + condition = !!isStartBeforeOrEqual && !!isEndAfterOrEqual; + } + if (hasCols && condition) { + return range; + } + } + } + isBottomRightCell(cellRange, cell) { + const allColumns = this.visibleCols.allCols; + const allPositions = cellRange.columns.map((c) => allColumns.indexOf(c)).sort((a, b) => a - b); + const { startRow, endRow } = cellRange; + const lastRow = _isRowBefore4(startRow, endRow) ? endRow : startRow; + const isRightColumn = allColumns.indexOf(cell.column) === _last16(allPositions); + const isLastRow = cell.rowIndex === lastRow.rowIndex && _makeNull8(cell.rowPinned) === _makeNull8(lastRow.rowPinned); + return isRightColumn && isLastRow; + } + // returns the number of ranges this cell is in + getCellRangeCount(cell) { + return this.cellRanges.filter((cellRange) => this.isCellInSpecificRange(cell, cellRange)).length; + } + isRowInRange(thisRow, cellRange) { + const firstRow = this.getRangeStartRow(cellRange); + const lastRow = this.getRangeEndRow(cellRange); + const equalsFirstRow = _isSameRow6(thisRow, firstRow); + const equalsLastRow = _isSameRow6(thisRow, lastRow); + if (equalsFirstRow || equalsLastRow) { + return true; + } + const afterFirstRow = !_isRowBefore4(thisRow, firstRow); + const beforeLastRow = _isRowBefore4(thisRow, lastRow); + return afterFirstRow && beforeLastRow; + } + intersectLastRange(fromMouseClick) { + const { editingWithRanges, suppressMultiRanges } = this.getMultiRangeContext(); + if (editingWithRanges || suppressMultiRanges || fromMouseClick && this.dragging || this.isEmpty()) { + return; + } + const lastRange = _last16(this.cellRanges); + const intersectionStartRow = this.getRangeStartRow(lastRange); + const intersectionEndRow = this.getRangeEndRow(lastRange); + const newRanges = []; + for (const range of this.cellRanges.slice(0, -1)) { + const startRow = this.getRangeStartRow(range); + const endRow = this.getRangeEndRow(range); + const cols = range.columns; + const intersectCols = cols.filter((col) => lastRange.columns.indexOf(col) === -1); + if (intersectCols.length === cols.length) { + newRanges.push(range); + continue; + } + if (_isRowBefore4(intersectionEndRow, startRow) || _isRowBefore4(endRow, intersectionStartRow)) { + newRanges.push(range); + continue; + } + const rangeCountBefore = newRanges.length; + if (_isRowBefore4(startRow, intersectionStartRow)) { + const top = { + columns: [...cols], + startColumn: lastRange.startColumn, + startRow: { ...startRow }, + endRow: _getRowAbove2(this.beans, intersectionStartRow) + }; + newRanges.push(top); + } + if (intersectCols.length > 0) { + const middle = { + columns: intersectCols, + startColumn: intersectCols.includes(lastRange.startColumn) ? lastRange.startColumn : intersectCols[0], + startRow: rowMax([{ ...intersectionStartRow }, { ...startRow }]), + endRow: rowMin([{ ...intersectionEndRow }, { ...endRow }]) + }; + newRanges.push(middle); + } + if (_isRowBefore4(intersectionEndRow, endRow)) { + newRanges.push({ + columns: [...cols], + startColumn: lastRange.startColumn, + startRow: _getRowBelow4(this.beans, intersectionEndRow), + endRow: { ...endRow } + }); + } + if (newRanges.length - rangeCountBefore === 1) { + newRanges[newRanges.length - 1].id = range.id; + } + } + this.cellRanges = newRanges; + if (fromMouseClick) { + this.dispatchChangedEvent(false, true); + } + } + createRangeHighlightFeature(compBean, column, headerComp) { + compBean.createManagedBean(new RangeHeaderHighlightFeature(column, headerComp)); + } + setSelectionMode(allColumns) { + this.selectionMode = allColumns ? 1 /* ALL_COLUMNS */ : 0 /* NORMAL */; + } + refreshRangeStart(cellRange) { + const { columns } = cellRange; + const startColumn = this.ensureRangeStartColumn(cellRange); + if (!startColumn) { + return; + } + const moveColInCellRange = (colToMove, moveToFront) => { + const otherCols = cellRange.columns.filter((col) => col !== colToMove); + if (colToMove) { + cellRange.startColumn = colToMove; + cellRange.columns = moveToFront ? [colToMove, ...otherCols] : [...otherCols, colToMove]; + } else { + cellRange.columns = otherCols; + } + }; + const { left, right } = this.getRangeEdgeColumns(cellRange); + const shouldMoveLeftCol = startColumn === columns[0] && startColumn !== left; + if (shouldMoveLeftCol) { + moveColInCellRange(left, true); + return; + } + const shouldMoveRightCol = startColumn === _last16(columns) && startColumn === right; + if (shouldMoveRightCol) { + moveColInCellRange(right, false); + } + } + setNewestRangeStartCell(position) { + this.newestRangeStartCell = position; + } + getColumnsFromParams(columns, columnA, columnB) { + const noColsInfo = !columns && !columnA && !columnB; + let processedColumns; + let startsOnTheRight = false; + if (noColsInfo || columns) { + processedColumns = this.getColumnsFromModel(noColsInfo ? void 0 : columns); + } else if (columnA && columnB) { + processedColumns = this.calculateColumnsBetween(columnA, columnB); + if (processedColumns?.length) { + startsOnTheRight = processedColumns[0] !== this.getColumnFromModel(columnA); + } + } + return processedColumns ? { + columns: processedColumns, + startsOnTheRight + } : void 0; + } + verifyCellRanges(gos) { + const { suppressMultiRanges } = this.getMultiRangeContext(); + const invalid = _isUsingNewCellSelectionAPI(gos) && suppressMultiRanges && this.cellRanges.length > 1; + if (invalid) { + _warn42(93); + } + return !invalid; + } + forEachRowInRange(cellRange, callback) { + const topRow = this.getRangeStartRow(cellRange); + const bottomRow = this.getRangeEndRow(cellRange); + let currentRow = topRow; + while (currentRow) { + callback(currentRow); + if (_isSameRow6(currentRow, bottomRow)) { + break; + } + currentRow = _getRowBelow4(this.beans, currentRow); + } + } + forEachEditableCellInRanges(cellRanges, callback) { + const { beans } = this; + for (const cellRange of cellRanges) { + this.forEachRowInRange(cellRange, (rowPosition) => { + const rowNode = _getRowNode7(beans, rowPosition); + if (!rowNode) { + return; + } + for (let i = 0; i < cellRange.columns.length; i++) { + const column = this.getColumnFromModel(cellRange.columns[i]); + if (!column?.isCellEditable(rowNode)) { + continue; + } + callback(rowNode, column); + } + }); + } + } + // as the user is dragging outside of the panel, the div starts to scroll, which in turn + // means we are selecting more (or less) cells, but the mouse isn't moving, so we recalculate + // the selection by mimicking a new mouse event + onBodyScroll() { + if (this.dragging && this.lastMouseEvent) { + this.onDragging(this.lastMouseEvent); + } + } + updateValuesOnMove(eventTarget) { + const cellCtrl = _getCellCtrlForEventTarget(this.gos, eventTarget); + const cell = cellCtrl?.cellPosition; + this.cellHasChanged = false; + if (!cell || this.lastCellHovered && _areCellsEqual2(cell, this.lastCellHovered)) { + return; + } + const editSvc = this.beans.editSvc; + const editing = editSvc?.isEditing(cellCtrl, { + withOpenEditor: true + }); + if (editing && !editSvc?.isRangeSelectionEnabledWhileEditing()) { + this.dragSvc.cancelDrag(eventTarget); + return; + } + if (this.lastCellHovered) { + this.cellHasChanged = true; + } + this.lastCellHovered = cell; + } + dispatchChangedEvent(started, finished, id) { + this.eventSvc.dispatchEvent({ + type: "cellSelectionChanged", + started, + finished, + id + }); + this.eventSvc.dispatchEvent({ + type: "rangeSelectionChanged", + started, + finished, + id + }); + } + getColumnFromModel(col) { + return typeof col === "string" ? this.colModel.getCol(col) : col; + } + getColumnsFromModel(cols) { + const { visibleCols, selectionMode } = this; + if (!cols || selectionMode === 1 /* ALL_COLUMNS */) { + cols = visibleCols.allCols; + } + const columns = []; + for (const col of cols) { + const column = this.getColumnFromModel(col); + if (!column || this.shouldSkipColumn(column)) { + continue; + } + columns.push(column); + } + return columns.length ? columns : void 0; + } + ensureRangeStartColumn(cellRange) { + const startColumn = this.getRangeStartColumn( + cellRange.columns, + cellRange.startColumn + ); + if (!startColumn) { + return; + } + cellRange.startColumn = startColumn; + return startColumn; + } + getRangeStartColumn(columns, preferredStartColumn) { + const firstColumn = columns[0]; + const lastColumn = _last16(columns); + if (!firstColumn || !lastColumn) { + return; + } + if (!preferredStartColumn || columns.includes(preferredStartColumn)) { + return preferredStartColumn ?? firstColumn; + } + const allColumns = this.visibleCols.allCols; + const preferredStartIndex = allColumns.indexOf(preferredStartColumn); + const firstIndex = allColumns.indexOf(firstColumn); + const lastIndex = allColumns.indexOf(lastColumn); + if (preferredStartIndex < 0 || firstIndex < 0 || lastIndex < 0) { + return firstColumn; + } + return preferredStartIndex - firstIndex <= lastIndex - preferredStartIndex ? firstColumn : lastColumn; + } + calculateColumnsBetween(columnA, columnB) { + const allColumns = this.visibleCols.allCols; + const fromColumn = this.getColumnFromModel(columnA); + const toColumn = this.getColumnFromModel(columnB); + const isSameColumn = fromColumn === toColumn; + const fromIndex = allColumns.indexOf(fromColumn); + if (fromIndex < 0) { + _warn42(178, { colId: fromColumn.getId() }); + return; + } + const toIndex = isSameColumn ? fromIndex : allColumns.indexOf(toColumn); + if (toIndex < 0) { + _warn42(178, { colId: toColumn.getId() }); + return; + } + if (isSameColumn || this.selectionMode === 1 /* ALL_COLUMNS */) { + return this.getColumnsFromModel([fromColumn]); + } + const firstIndex = Math.min(fromIndex, toIndex); + const lastIndex = firstIndex === fromIndex ? toIndex : fromIndex; + return this.getColumnsFromModel(allColumns.slice(firstIndex, lastIndex + 1)); + } + focusCellOnNewColumn(currentRange, column) { + const { focusSvc } = this.beans; + const focusedCell = focusSvc.getFocusedCell(); + if (!focusedCell) { + return; + } + if (this.isCellInSpecificRange(focusedCell, currentRange)) { + focusSvc.setFocusedCell({ + ...focusedCell, + column, + forceBrowserFocus: true, + preventScrollOnBrowserFocus: true + }); + } + } + focusCellOnNewRow(currentRange, row) { + const { focusSvc } = this.beans; + const focusedCell = focusSvc.getFocusedCell(); + if (!focusedCell) { + return; + } + if (this.isCellInSpecificRange(focusedCell, currentRange)) { + focusSvc.setFocusedCell({ + ...row, + column: focusedCell.column, + forceBrowserFocus: true, + preventScrollOnBrowserFocus: true + }); + } + } + createDragListenerFeature(eContainer) { + return new DragListenerFeature(eContainer); + } + createCellRangeFeature(ctrl) { + return new CellRangeFeature(this.beans, ctrl); + } + createHeaderGroupCellMouseListenerFeature(column, eGui) { + return new HeaderGroupCellMouseListenerFeature(column, eGui); + } + /** + * Handle a user clicking column header to (de)select one or more column of cells + * CTRL-clicking for toggling column selection + CTRL-SHIFT-clicking supported for selecting ranges of columns + */ + handleColumnSelection(clickedColumn, event) { + const { gos, beans, columnRangeSelectionCtx: ctx, cellRanges } = this; + if (!_getEnableColumnSelection(gos)) { + return; + } + const { suppressMultiRanges, editingWithRanges } = this.getMultiRangeContext(); + const hasRanges = cellRanges.length > 0; + const isMeta = event.ctrlKey || event.metaKey; + const allowToggle = !editingWithRanges || isMeta; + const firstRow = _getFirstRow2(beans); + const lastRow = _getLastRow2(beans); + if (!firstRow || !lastRow) { + return; + } + if (event.key === KeyCode31.ENTER) { + event.preventDefault(); + } + if (event.shiftKey) { + const root = ctx.root; + if (!root) { + return; + } + const column = clickedColumn.isColumn ? clickedColumn : _last16(clickedColumn.getLeafColumns()); + const range = this.findContainingRange({ columns: [root], startRow: firstRow, endRow: lastRow }, true); + if (!range) { + _removeFromArray7(cellRanges, ctx.lastCellRange); + this.selectColumns(this.calculateColumnsBetween(root, column), firstRow, lastRow); + return; + } + this.updateRangeRowBoundary({ cellRange: range, boundary: "end", cellPosition: { column, ...lastRow } }); + return; + } + if (hasRanges && (suppressMultiRanges || !isMeta && !editingWithRanges)) { + this.removeAllCellRanges(true); + } + const toggleColumns = (columns, root) => { + const foundRange = this.findContainingRange({ columns, startRow: firstRow, endRow: lastRow }, true); + if (foundRange && allowToggle) { + this.deselectColumnsFromRange(foundRange, columns); + } else { + const addedRange = this.selectColumns(columns, firstRow, lastRow); + if (addedRange) { + ctx.lastCellRange = addedRange; + } + } + ctx.root = root; + }; + if (clickedColumn.isColumn) { + toggleColumns([clickedColumn], clickedColumn); + } else { + const leafCols = clickedColumn.getDisplayedLeafColumns(); + toggleColumns(leafCols, leafCols[0]); + } + } + deselectColumnsFromRange(range, columns) { + _removeAllFromArray2(range.columns, columns); + if (columns.includes(range.startColumn)) { + range.startColumn = range.columns[0]; + } + if (range.columns.length === 0) { + _removeFromArray7(this.cellRanges, range); + } + this.dispatchChangedEvent(true, true); + } + selectColumns(columns, startRow, endRow) { + return this.addCellRange({ + columns, + columnStart: columns[0], + columnEnd: _last16(columns), + rowStartIndex: startRow.rowIndex, + rowStartPinned: startRow.rowPinned, + rowEndIndex: endRow.rowIndex, + rowEndPinned: endRow.rowPinned + }); + } +}; +function createRowPosition(rowIndex, rowPinned) { + return rowIndex != null ? { rowIndex, rowPinned } : void 0; +} +function rowMax(rows) { + let max; + for (const row of rows) { + if (max === void 0 || _isRowBefore4(max, row)) { + max = row; + } + } + return max; +} +function rowMin(rows) { + let min; + for (const row of rows) { + if (min === void 0 || _isRowBefore4(row, min)) { + min = row; + } + } + return min; +} +function isLastCellOfRange(cellRange, cell) { + const { startRow, endRow } = cellRange; + const lastRow = _isRowBefore4(startRow, endRow) ? endRow : startRow; + const isLastRow = cell.rowIndex === lastRow.rowIndex && cell.rowPinned === lastRow.rowPinned; + const rangeFirstIndexColumn = cellRange.columns[0]; + const rangeLastIndexColumn = _last16(cellRange.columns); + const lastRangeColumn = cellRange.startColumn === rangeFirstIndexColumn ? rangeLastIndexColumn : rangeFirstIndexColumn; + const isLastColumn = cell.column === lastRangeColumn; + return isLastColumn && isLastRow; +} +function replaceEdgeRow(range, row, topOrBottom) { + let key; + if (topOrBottom === "top") { + key = !range.startRow || !range.endRow || _isRowBefore4(range.startRow, range.endRow) ? "startRow" : "endRow"; + } else { + key = !range.startRow || !range.endRow || _isRowBefore4(range.startRow, range.endRow) ? "endRow" : "startRow"; + } + range[key] = row ?? void 0; +} + +// packages/ag-grid-enterprise/src/rangeSelection/rangeSelectionModule.ts +var CellSelectionModule = { + moduleName: "CellSelection", + version: VERSION, + beans: [RangeService], + dynamicBeans: { fillHandle: AgFillHandle, rangeHandle: AgRangeHandle }, + apiFunctions: { + getCellRanges, + addCellRange, + clearRangeSelection, + clearCellSelection: clearRangeSelection + }, + dependsOn: [EnterpriseCoreModule, _KeyboardNavigationModule3, _DragModule], + css: [rangeSelection_default] +}; +var RangeSelectionModule = { + moduleName: "RangeSelection", + version: VERSION, + dependsOn: [CellSelectionModule] +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/serverSideRowModelModule.ts +import { + _CsrmSsrmSharedApiModule, + _RowModelSharedApiModule, + _SharedRowSelectionModule, + _SortModule, + _SsrmInfiniteSharedApiModule, + onRowHeightChanged, + resetRowHeights +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/cellRenderers/loadingCellRenderer.ts +import { Component as Component54, RefPlaceholder as RefPlaceholder46, _createIconNoSpan as _createIconNoSpan24 } from "ag-grid-community"; +var LoadingCellRendererElement = { + tag: "div", + cls: "ag-loading", + children: [ + { tag: "span", ref: "eLoadingIcon", cls: "ag-loading-icon" }, + { tag: "span", ref: "eLoadingText", cls: "ag-loading-text" } + ] +}; +var LoadingCellRenderer = class extends Component54 { + constructor() { + super(LoadingCellRendererElement); + this.eLoadingIcon = RefPlaceholder46; + this.eLoadingText = RefPlaceholder46; + } + init(params) { + if (params.node.failedLoad) { + this.setupFailed(); + } else { + this.setupLoading(); + } + } + setupFailed() { + this.eLoadingText.textContent = this.getLocaleTextFunc()("loadingError", "ERR"); + } + setupLoading() { + const eLoadingIcon = _createIconNoSpan24("groupLoading", this.beans, null); + if (eLoadingIcon) { + this.eLoadingIcon.appendChild(eLoadingIcon); + } + this.eLoadingText.textContent = this.getLocaleTextFunc()("loadingOoo", "Loading..."); + } + refresh(_params) { + return false; + } +}; + +// packages/ag-grid-enterprise/src/cellRenderers/enterpriseCellRendererModule.ts +var LoadingCellRendererModule = { + moduleName: "LoadingCellRenderer", + version: VERSION, + userComponents: { + agLoadingCellRenderer: LoadingCellRenderer + }, + icons: { + // rotating spinner shown by the loading cell renderer + groupLoading: "loading" + }, + dependsOn: [EnterpriseCoreModule] +}; + +// packages/ag-grid-enterprise/src/pivot/pivotModule.ts +import { _ColumnGroupModule } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/pivot/pivotApi.ts +function isPivotMode(beans) { + return beans.colModel.isPivotMode(); +} +function getPivotResultColumn(beans, pivotKeys, valueColKey) { + return beans.pivotResultCols?.lookupPivotResultCol(pivotKeys, valueColKey) ?? null; +} +function setValueColumns(beans, colKeys) { + beans.valueColsSvc?.setColumns(colKeys, "api"); +} +function getValueColumns(beans) { + return beans.valueColsSvc?.columns ?? []; +} +function removeValueColumns(beans, colKeys) { + beans.valueColsSvc?.removeColumns(colKeys, "api"); +} +function addValueColumns(beans, colKeys) { + beans.valueColsSvc?.addColumns(colKeys, "api"); +} +function setPivotColumns(beans, colKeys) { + beans.pivotColsSvc?.setColumns(colKeys, "api"); +} +function removePivotColumns(beans, colKeys) { + beans.pivotColsSvc?.removeColumns(colKeys, "api"); +} +function addPivotColumns(beans, colKeys) { + beans.pivotColsSvc?.addColumns(colKeys, "api"); +} +function getPivotColumns(beans) { + return beans.pivotColsSvc?.columns ?? []; +} +function setPivotResultColumns(beans, colDefs) { + beans.pivotResultCols?.setPivotResultCols(colDefs, "api"); +} +function getPivotResultColumns(beans) { + const pivotResultCols = beans.pivotResultCols?.getPivotResultCols(); + return pivotResultCols ? pivotResultCols.list : null; +} + +// packages/ag-grid-enterprise/src/pivot/pivotColDefService.ts +import { BeanStub as BeanStub56 } from "ag-grid-community"; +var PIVOT_ROW_TOTAL_PREFIX = "PivotRowTotal_"; +var headerNameComparator = ({ headerName: a }, { headerName: b }) => { + if (a && !b) { + return 1; + } else if (!a && b) { + return -1; + } else if (!a && !b) { + return 0; + } + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } +}; +var convertToHeaderNameComparator = (comparator) => (a, b) => comparator(a.headerName, b.headerName); +var PivotColDefService = class extends BeanStub56 { + constructor() { + super(...arguments); + this.beanName = "pivotColDefSvc"; + } + wireBeans(beans) { + this.colModel = beans.colModel; + this.pivotColsSvc = beans.pivotColsSvc; + this.valueColsSvc = beans.valueColsSvc; + this.colNames = beans.colNames; + } + postConstruct() { + const getFieldSeparator = () => this.gos.get("serverSidePivotResultFieldSeparator") ?? "_"; + this.fieldSeparator = getFieldSeparator(); + this.addManagedPropertyListener("serverSidePivotResultFieldSeparator", () => { + this.fieldSeparator = getFieldSeparator(); + }); + const getPivotDefaultExpanded = () => this.gos.get("pivotDefaultExpanded"); + this.pivotDefaultExpanded = getPivotDefaultExpanded(); + this.addManagedPropertyListener("pivotDefaultExpanded", () => { + this.pivotDefaultExpanded = getPivotDefaultExpanded(); + }); + } + createPivotColumnDefs(uniqueValues) { + const pivotColumnGroupDefs = this.createPivotColumnsFromUniqueValues(uniqueValues); + function extractColDefs(input, arr = []) { + input.forEach((def) => { + if (def.children !== void 0) { + extractColDefs(def.children, arr); + } else { + arr.push(def); + } + }); + return arr; + } + const pivotColumnDefs = extractColDefs(pivotColumnGroupDefs); + this.addRowGroupTotals(pivotColumnGroupDefs, pivotColumnDefs); + this.addExpandablePivotGroups(pivotColumnGroupDefs, pivotColumnDefs); + this.addPivotTotalsToGroups(pivotColumnGroupDefs, pivotColumnDefs); + return pivotColumnGroupDefs; + } + createPivotColumnsFromUniqueValues(uniqueValues) { + const pivotColumns = this.pivotColsSvc?.columns ?? []; + const maxDepth = pivotColumns.length; + const pivotColumnGroupDefs = this.recursivelyBuildGroup( + 0, + uniqueValues, + [], + maxDepth, + pivotColumns + ); + return pivotColumnGroupDefs; + } + recursivelyBuildGroup(index, uniqueValue, pivotKeys, maxDepth, primaryPivotColumns) { + if (index >= maxDepth) { + return this.buildMeasureCols(pivotKeys); + } + const { pivotComparator } = primaryPivotColumns[index].getColDef(); + const comparator = pivotComparator ? convertToHeaderNameComparator(pivotComparator) : headerNameComparator; + const measureColumns = this.valueColsSvc?.columns; + if (measureColumns?.length === 1 && this.gos.get("removePivotHeaderRowWhenSingleValueColumn") && index === maxDepth - 1) { + const leafCols = []; + for (const key of uniqueValue.keys()) { + const newPivotKeys = [...pivotKeys, key]; + const colDef = this.createColDef(measureColumns[0], key, newPivotKeys); + colDef.columnGroupShow = "open"; + leafCols.push(colDef); + } + leafCols.sort(comparator); + return leafCols; + } + const groups = []; + for (const key of uniqueValue.keys()) { + const openByDefault = this.pivotDefaultExpanded === -1 || index < this.pivotDefaultExpanded; + const newPivotKeys = [...pivotKeys, key]; + groups.push({ + children: this.recursivelyBuildGroup( + index + 1, + uniqueValue.get(key), + newPivotKeys, + maxDepth, + primaryPivotColumns + ), + headerName: key, + pivotKeys: newPivotKeys, + columnGroupShow: "open", + openByDefault, + groupId: this.generateColumnGroupId(newPivotKeys) + }); + } + groups.sort(comparator); + return groups; + } + buildMeasureCols(pivotKeys) { + const measureColumns = this.valueColsSvc?.columns ?? []; + if (measureColumns.length === 0) { + return [this.createColDef(null, "-", pivotKeys)]; + } + return measureColumns.map((measureCol) => { + const columnName = this.colNames.getDisplayNameForColumn(measureCol, "header"); + const colDef = this.createColDef(measureCol, columnName, pivotKeys); + colDef.columnGroupShow = "open"; + return colDef; + }); + } + addExpandablePivotGroups(pivotColumnGroupDefs, pivotColumnDefs) { + const isSuppressExpand = this.gos.get("suppressExpandablePivotGroups"); + if (isSuppressExpand || this.gos.get("pivotColumnGroupTotals")) { + return; + } + const recursivelyAddSubTotals = (def, currentPivotColumnDefs, acc) => { + if ("children" in def) { + const { valueColsSvc } = this; + const { columns: valueCols = [] } = valueColsSvc ?? {}; + const childAcc = /* @__PURE__ */ new Map(); + def.children.forEach((grp) => { + recursivelyAddSubTotals(grp, currentPivotColumnDefs, childAcc); + }); + const leafGroup = !def.children.some((child) => child.children); + const hasCollapsedLeafGroup = leafGroup && valueCols.length === 1 && this.gos.get("removePivotHeaderRowWhenSingleValueColumn"); + for (const valueColumn of valueCols) { + const columnName = this.colNames.getDisplayNameForColumn(valueColumn, "header"); + const totalColDef = this.createColDef(valueColumn, columnName, def.pivotKeys); + totalColDef.pivotTotalColumnIds = childAcc.get(valueColumn.getColId()); + totalColDef.columnGroupShow = !isSuppressExpand ? "closed" : "open"; + totalColDef.aggFunc = valueColumn.getAggFunc(); + if (!leafGroup || hasCollapsedLeafGroup) { + const children = def.children; + children.push(totalColDef); + currentPivotColumnDefs.push(totalColDef); + } + } + this.merge(acc, childAcc); + return; + } + if (!def.pivotValueColumn) { + return; + } + const pivotValueColId = def.pivotValueColumn.getColId(); + const exists = acc.has(pivotValueColId); + if (exists) { + const arr = acc.get(pivotValueColId); + arr.push(def.colId); + } else { + acc.set(pivotValueColId, [def.colId]); + } + }; + pivotColumnGroupDefs.forEach((groupDef) => { + recursivelyAddSubTotals(groupDef, pivotColumnDefs, /* @__PURE__ */ new Map()); + }); + } + addPivotTotalsToGroups(pivotColumnGroupDefs, pivotColumnDefs) { + if (!this.gos.get("pivotColumnGroupTotals")) { + return; + } + const insertAfter = this.gos.get("pivotColumnGroupTotals") === "after"; + const valueCols = this.valueColsSvc?.columns; + const aggFuncs = valueCols?.map((valueCol) => valueCol.getAggFunc()); + if (!aggFuncs || aggFuncs.length < 1 || !this.sameAggFuncs(aggFuncs)) { + return; + } + if (valueCols) { + const valueColumn = valueCols[0]; + pivotColumnGroupDefs.forEach((groupDef) => { + this.recursivelyAddPivotTotal(groupDef, pivotColumnDefs, valueColumn, insertAfter); + }); + } + } + recursivelyAddPivotTotal(groupDef, pivotColumnDefs, valueColumn, insertAfter) { + const group = groupDef; + if (!group.children) { + const def = groupDef; + return def.colId ? [def.colId] : null; + } + let colIds = []; + group.children.forEach((grp) => { + const childColIds = this.recursivelyAddPivotTotal(grp, pivotColumnDefs, valueColumn, insertAfter); + if (childColIds) { + colIds = colIds.concat(childColIds); + } + }); + if (group.children.length > 1) { + const localeTextFunc = this.getLocaleTextFunc(); + const headerName = localeTextFunc("pivotColumnGroupTotals", "Total"); + const totalColDef = this.createColDef(valueColumn, headerName, groupDef.pivotKeys, true); + totalColDef.pivotTotalColumnIds = colIds; + totalColDef.aggFunc = valueColumn.getAggFunc(); + totalColDef.columnGroupShow = this.gos.get("suppressExpandablePivotGroups") ? "open" : void 0; + const children = groupDef.children; + if (insertAfter) { + children.push(totalColDef); + } else { + children.unshift(totalColDef); + } + pivotColumnDefs.push(totalColDef); + } + return colIds; + } + addRowGroupTotals(pivotColumnGroupDefs, pivotColumnDefs) { + if (!this.gos.get("pivotRowTotals")) { + return; + } + const insertAtEnd = this.gos.get("pivotRowTotals") === "after"; + const valueColumns = this.valueColsSvc?.columns ?? []; + const valueCols = valueColumns.slice(); + if (!insertAtEnd) { + valueCols.reverse(); + } + const isCreateTotalGroups = valueCols.length > 1 || !this.gos.get("removePivotHeaderRowWhenSingleValueColumn"); + for (let i = 0; i < valueCols.length; i++) { + const valueCol = valueCols[i]; + const columnName = this.colNames.getDisplayNameForColumn(valueCol, "header"); + const colDef = this.createColDef(valueCol, columnName, []); + const colIds = []; + for (let i2 = 0; i2 < pivotColumnDefs.length; i2++) { + const colDef2 = pivotColumnDefs[i2]; + if (colDef2.pivotValueColumn === valueCol) { + colIds.push(colDef2.colId); + } + } + colDef.pivotTotalColumnIds = colIds; + colDef.colId = PIVOT_ROW_TOTAL_PREFIX + colDef.colId; + const valueGroup = isCreateTotalGroups ? { + children: [colDef], + pivotKeys: [], + groupId: `${PIVOT_ROW_TOTAL_PREFIX}_pivotGroup_${valueCol.getColId()}` + } : colDef; + pivotColumnDefs.push(colDef); + if (insertAtEnd) { + pivotColumnGroupDefs.push(valueGroup); + } else { + pivotColumnGroupDefs.unshift(valueGroup); + } + } + } + /** + * Recreate a pivot colDef to update from a changed valueColumn colDef + */ + recreateColDef(colDef) { + const { + pivotValueColumn, + headerName, + pivotKeys, + pivotTotalColumnIds, + columnGroupShow, + colId, + valueGetter, + aggFunc + } = colDef; + if (!pivotValueColumn) { + return colDef; + } + const newColDef = this.createColDef(pivotValueColumn, headerName, pivotKeys, !!pivotTotalColumnIds); + newColDef.columnGroupShow = columnGroupShow; + newColDef.colId = colId; + newColDef.valueGetter = valueGetter; + newColDef.aggFunc = aggFunc; + newColDef.pivotTotalColumnIds = pivotTotalColumnIds; + this.gos.get("processPivotResultColDef")?.(newColDef); + return newColDef; + } + createColDef(valueColumn, headerName, pivotKeys, totalColumn = false) { + const colDef = {}; + if (valueColumn) { + const colDefToCopy = valueColumn.getColDef(); + Object.assign(colDef, colDefToCopy); + colDef.hide = false; + } + colDef.headerName = headerName; + colDef.colId = this.generateColumnId( + pivotKeys || [], + valueColumn && !totalColumn ? valueColumn.getColId() : "" + ); + colDef.field = colDef.colId; + colDef.valueGetter = (params) => params.data?.[params.colDef.field]; + colDef.pivotKeys = pivotKeys; + colDef.pivotValueColumn = valueColumn; + if (colDef.filter === true) { + colDef.filter = "agNumberColumnFilter"; + } + return colDef; + } + sameAggFuncs(aggFuncs) { + if (aggFuncs.length == 1) { + return true; + } + for (let i = 1; i < aggFuncs.length; i++) { + if (aggFuncs[i] !== aggFuncs[0]) { + return false; + } + } + return true; + } + merge(m1, m2) { + m2.forEach((value, key) => { + const existingList = m1.has(key) ? m1.get(key) : []; + const updatedList = [...existingList, ...value]; + m1.set(key, updatedList); + }); + } + generateColumnGroupId(pivotKeys) { + const pivotCols = (this.pivotColsSvc?.columns ?? []).map((col) => col.getColId()); + return `pivotGroup_${pivotCols.join("-")}_${pivotKeys.join("-")}`; + } + generateColumnId(pivotKeys, measureColumnId) { + const pivotCols = (this.pivotColsSvc?.columns ?? []).map((col) => col.getColId()); + return `pivot_${pivotCols.join("-")}_${pivotKeys.join("-")}_${measureColumnId}`; + } + /** + * Used by the SSRM to create secondary columns from provided fields + * @param fields + */ + createColDefsFromFields(fields) { + const uniqueValues = /* @__PURE__ */ new Map(); + for (let i = 0; i < fields.length; i++) { + const field = fields[i]; + const parts = field.split(this.fieldSeparator); + let level = uniqueValues; + for (let p = 0; p < parts.length; p++) { + const part = parts[p]; + let map = level.get(part); + if (!map) { + map = /* @__PURE__ */ new Map(); + level.set(part, map); + } + level = map; + } + } + const uniqueValuesToGroups = (id, key, uniqueValues2, depth) => { + const children = []; + for (const [key2, item] of uniqueValues2) { + const child = uniqueValuesToGroups(`${id}${this.fieldSeparator}${key2}`, key2, item, depth + 1); + children.push(child); + } + if (children.length === 0) { + const potentialAggCol = this.colModel.getColDefCol(key); + if (potentialAggCol) { + const headerName = this.colNames.getDisplayNameForColumn(potentialAggCol, "header") ?? key; + const colDef = this.createColDef(potentialAggCol, headerName, void 0, false); + colDef.colId = id; + colDef.aggFunc = potentialAggCol.getAggFunc(); + colDef.valueGetter = (params) => params.data?.[id]; + return colDef; + } + const col = { + colId: id, + headerName: key, + // this is to support using pinned rows, normally the data will be extracted from the aggData object using the colId + // however pinned rows still access the data object by field, this prevents values with dots from being treated as complex objects + valueGetter: (params) => params.data?.[id] + }; + return col; + } + const collapseSingleChildren = this.gos.get("removePivotHeaderRowWhenSingleValueColumn"); + if (collapseSingleChildren && children.length === 1 && "colId" in children[0]) { + children[0].headerName = key; + return children[0]; + } + const group = { + openByDefault: this.pivotDefaultExpanded === -1 || depth < this.pivotDefaultExpanded, + groupId: id, + headerName: key, + children + }; + return group; + }; + const res = []; + for (const [key, item] of uniqueValues) { + const col = uniqueValuesToGroups(key, key, item, 0); + res.push(col); + } + return res; + } +}; + +// packages/ag-grid-enterprise/src/pivot/pivotResultColsService.ts +import { + BeanStub as BeanStub57, + _areEqual as _areEqual6, + _createColumnTree, + _createColumnTreeWithIds, + _destroyColumnTree as _destroyColumnTree4, + _exists as _exists25, + _getColumnsFromTree +} from "ag-grid-community"; +var PivotResultColsService = class extends BeanStub57 { + constructor() { + super(...arguments); + this.beanName = "pivotResultCols"; + } + wireBeans(beans) { + this.colModel = beans.colModel; + this.visibleCols = beans.visibleCols; + } + destroy() { + _destroyColumnTree4(this.beans, this.pivotResultCols?.tree); + super.destroy(); + } + isPivotResultColsPresent() { + return this.pivotResultCols != null; + } + lookupPivotResultCol(pivotKeys, valueColKey) { + if (this.pivotResultCols == null) { + return null; + } + const valueColumnToFind = this.colModel.getColDefCol(valueColKey); + let foundColumn = null; + for (const column of this.pivotResultCols.list) { + const thisPivotKeys = column.getColDef().pivotKeys; + const pivotValueColumn = column.getColDef().pivotValueColumn; + const pivotKeyMatches = _areEqual6(thisPivotKeys, pivotKeys); + const pivotValueMatches = pivotValueColumn === valueColumnToFind; + if (pivotKeyMatches && pivotValueMatches) { + foundColumn = column; + } + } + return foundColumn; + } + getPivotResultCols() { + return this.pivotResultCols; + } + getPivotResultCol(key) { + if (!this.pivotResultCols) { + return null; + } + return this.colModel.getColFromCollection(key, this.pivotResultCols); + } + getAggregationOrderedList() { + let result = this.aggOrderedList; + if (result !== void 0) { + return result; + } + const list = this.pivotResultCols?.list; + if (!list || list.length === 0) { + this.aggOrderedList = null; + return null; + } + let hasAnyTotals = false; + for (let i = 0; i < list.length; ++i) { + if (list[i].getColDef().pivotTotalColumnIds != null) { + hasAnyTotals = true; + break; + } + } + if (!hasAnyTotals) { + result = list; + } else { + const regular = []; + const totals = []; + for (let i = 0; i < list.length; ++i) { + const col = list[i]; + if (col.getColDef().pivotTotalColumnIds != null) { + totals.push(col); + } else { + regular.push(col); + } + } + result = regular.concat(totals); + } + this.aggOrderedList = result; + return result; + } + setPivotResultCols(colDefs, source) { + this.aggOrderedList = void 0; + if (!this.colModel.ready) { + return; + } + if (colDefs == null && this.pivotResultCols == null) { + return; + } + if (colDefs) { + this.processPivotResultColDef(colDefs); + const createColTreeFunc = source === "api" ? _createColumnTree : _createColumnTreeWithIds; + const balancedTreeResult = createColTreeFunc( + this.beans, + colDefs, + false, + this.pivotResultCols?.tree || this.previousPivotResultCols || void 0, + source + ); + _destroyColumnTree4(this.beans, this.pivotResultCols?.tree, balancedTreeResult.columnTree); + const tree = balancedTreeResult.columnTree; + const treeDepth = balancedTreeResult.treeDepth; + const list = _getColumnsFromTree(tree); + const map = {}; + this.pivotResultCols = { tree, treeDepth, list, map }; + for (const col of this.pivotResultCols.list) { + this.pivotResultCols.map[col.getId()] = col; + } + const hasPreviousCols = !!this.previousPivotResultCols; + this.previousPivotResultCols = null; + this.colModel.refreshCols(!hasPreviousCols, source); + } else { + this.previousPivotResultCols = this.pivotResultCols ? this.pivotResultCols.tree : null; + this.pivotResultCols = null; + this.colModel.refreshCols(false, source); + } + this.visibleCols.refresh(source); + } + processPivotResultColDef(colDefs) { + const columnCallback = this.gos.get("processPivotResultColDef"); + const groupCallback = this.gos.get("processPivotResultColGroupDef"); + if (!columnCallback && !groupCallback) { + return void 0; + } + const searchForColDefs = (colDefs2) => { + colDefs2.forEach((abstractColDef) => { + const isGroup = _exists25(abstractColDef.children); + if (isGroup) { + const colGroupDef = abstractColDef; + if (groupCallback) { + groupCallback(colGroupDef); + } + searchForColDefs(colGroupDef.children); + } else { + const colDef = abstractColDef; + if (columnCallback) { + columnCallback(colDef); + } + } + }); + }; + if (colDefs) { + searchForColDefs(colDefs); + } + } +}; + +// packages/ag-grid-enterprise/src/pivot/pivotStage.ts +import { BeanStub as BeanStub58, _forEachChangedGroupDepthFirst as _forEachChangedGroupDepthFirst5, _jsonEquals, _missing as _missing8 } from "ag-grid-community"; +var EXCEEDED_MAX_UNIQUE_VALUES = "Exceeded maximum allowed pivot column count."; +var mapToObject = (map) => { + const obj = {}; + map.forEach((value, key) => obj[key] = value instanceof Map ? mapToObject(value) : value); + return obj; +}; +var PivotStage = class extends BeanStub58 { + constructor() { + super(...arguments); + this.beanName = "pivotStage"; + this.step = "pivot"; + this.refreshProps = [ + "removePivotHeaderRowWhenSingleValueColumn", + "pivotRowTotals", + "pivotColumnGroupTotals", + "suppressExpandablePivotGroups" + ]; + this.uniqueValues = /* @__PURE__ */ new Map(); + this.lastTimeFailed = false; + this.maxUniqueValues = -1; + this.currentUniqueCount = 0; + } + wireBeans(beans) { + this.valueSvc = beans.valueSvc; + this.colModel = beans.colModel; + this.pivotResultCols = beans.pivotResultCols; + this.rowGroupColsSvc = beans.rowGroupColsSvc; + this.valueColsSvc = beans.valueColsSvc; + this.pivotColsSvc = beans.pivotColsSvc; + this.pivotColDefSvc = beans.pivotColDefSvc; + } + /** Returns `true` if the changedPath should be deactivated (e.g. pivot columns changed). */ + execute(changedPath) { + if (this.colModel.isPivotActive()) { + return this.executePivotOn(changedPath); + } else { + return this.executePivotOff(); + } + } + executePivotOff() { + this.aggregationColumnsHashLastTime = null; + this.uniqueValues = /* @__PURE__ */ new Map(); + if (this.pivotResultCols.isPivotResultColsPresent()) { + this.pivotResultCols.setPivotResultCols(null, "rowModelUpdated"); + return true; + } + return false; + } + executePivotOn(changedPath) { + const numberOfAggregationColumns = this.valueColsSvc?.columns.length ?? 1; + const configuredMaxCols = this.gos.get("pivotMaxGeneratedColumns"); + this.maxUniqueValues = configuredMaxCols === -1 ? -1 : configuredMaxCols / numberOfAggregationColumns; + let uniqueValues; + try { + uniqueValues = this.bucketUpRowNodes(changedPath); + } catch (e) { + if (e.message === EXCEEDED_MAX_UNIQUE_VALUES) { + this.pivotResultCols.setPivotResultCols([], "rowModelUpdated"); + this.eventSvc.dispatchEvent({ + type: "pivotMaxColumnsExceeded", + message: e.message + }); + this.lastTimeFailed = true; + return false; + } + throw e; + } + const uniqueValuesChanged = this.setUniqueValues(uniqueValues); + const aggregationColumns = this.valueColsSvc?.columns ?? []; + const aggregationColumnsHash = aggregationColumns.map((column) => `${column.getId()}-${column.getColDef().headerName}`).join("#"); + const aggregationFuncsHash = aggregationColumns.map((column) => column.getAggFunc().toString()).join("#"); + const aggregationColumnsChanged = this.aggregationColumnsHashLastTime !== aggregationColumnsHash; + const aggregationFuncsChanged = this.aggregationFuncsHashLastTime !== aggregationFuncsHash; + this.aggregationColumnsHashLastTime = aggregationColumnsHash; + this.aggregationFuncsHashLastTime = aggregationFuncsHash; + const groupColumnsHash = (this.rowGroupColsSvc?.columns ?? []).map((column) => column.getId()).join("#"); + const groupColumnsChanged2 = groupColumnsHash !== this.groupColumnsHashLastTime; + this.groupColumnsHashLastTime = groupColumnsHash; + const pivotRowTotals = this.gos.get("pivotRowTotals"); + const pivotColumnGroupTotals = this.gos.get("pivotColumnGroupTotals"); + const suppressExpandablePivotGroups = this.gos.get("suppressExpandablePivotGroups"); + const removePivotHeaderRowWhenSingleValueColumn = this.gos.get("removePivotHeaderRowWhenSingleValueColumn"); + const anyGridOptionsChanged = pivotRowTotals !== this.pivotRowTotalsLastTime || pivotColumnGroupTotals !== this.pivotColumnGroupTotalsLastTime || suppressExpandablePivotGroups !== this.suppressExpandablePivotGroupsLastTime || removePivotHeaderRowWhenSingleValueColumn !== this.removePivotHeaderRowWhenSingleValueColumnLastTime; + this.pivotRowTotalsLastTime = pivotRowTotals; + this.pivotColumnGroupTotalsLastTime = pivotColumnGroupTotals; + this.suppressExpandablePivotGroupsLastTime = suppressExpandablePivotGroups; + this.removePivotHeaderRowWhenSingleValueColumnLastTime = removePivotHeaderRowWhenSingleValueColumn; + if (this.lastTimeFailed || uniqueValuesChanged || aggregationColumnsChanged || groupColumnsChanged2 || aggregationFuncsChanged || anyGridOptionsChanged) { + const pivotColumnGroupDefs = this.pivotColDefSvc.createPivotColumnDefs(this.uniqueValues); + this.pivotResultCols.setPivotResultCols(pivotColumnGroupDefs, "rowModelUpdated"); + this.lastTimeFailed = false; + return true; + } + this.lastTimeFailed = false; + return false; + } + setUniqueValues(newValues) { + const uniqueValuesChanged = !_jsonEquals(mapToObject(this.uniqueValues), mapToObject(newValues)); + if (uniqueValuesChanged) { + this.uniqueValues = newValues; + return true; + } + return false; + } + bucketUpRowNodes(changedPath) { + this.currentUniqueCount = 0; + const uniqueValues = /* @__PURE__ */ new Map(); + _forEachChangedGroupDepthFirst5( + this.beans.rowModel.rootNode, + this.beans.rowModel.hierarchical, + changedPath, + (node) => { + if (node.leafGroup) { + node.childrenMapped = null; + } + } + ); + const recursivelyBucketFilteredChildren = (node) => { + if (node.leafGroup) { + this.bucketRowNode(node, uniqueValues); + } else { + const children = node.childrenAfterFilter; + if (children) { + for (let i = 0, len = children.length; i < len; ++i) { + recursivelyBucketFilteredChildren(children[i]); + } + } + } + }; + recursivelyBucketFilteredChildren(this.beans.rowModel.rootNode); + return uniqueValues; + } + bucketRowNode(rowNode, uniqueValues) { + const pivotColumns = this.pivotColsSvc?.columns; + if (pivotColumns?.length === 0) { + rowNode.childrenMapped = null; + } else { + rowNode.childrenMapped = mapToObject( + this.bucketChildren(rowNode.childrenAfterFilter, pivotColumns, 0, uniqueValues) + ); + } + if (rowNode.sibling) { + rowNode.sibling.childrenMapped = rowNode.childrenMapped; + } + } + bucketChildren(children, pivotColumns = [], pivotIndex, uniqueValues) { + const mappedChildren = /* @__PURE__ */ new Map(); + const pivotColumn = pivotColumns[pivotIndex]; + const doesGeneratedColMaxExist = this.maxUniqueValues !== -1; + for (let i = 0, len = children.length; i < len; ++i) { + const child = children[i]; + let key = this.valueSvc.getKeyForNode(pivotColumn, child); + if (_missing8(key)) { + key = ""; + } + if (!uniqueValues.get(key)) { + this.currentUniqueCount += 1; + uniqueValues.set(key, /* @__PURE__ */ new Map()); + const hasExceededColMax = this.currentUniqueCount > this.maxUniqueValues; + if (doesGeneratedColMaxExist && hasExceededColMax) { + throw new Error(EXCEEDED_MAX_UNIQUE_VALUES); + } + } + if (!mappedChildren.has(key)) { + mappedChildren.set(key, []); + } + mappedChildren.get(key).push(child); + } + if (pivotIndex === pivotColumns.length - 1) { + return mappedChildren; + } + const result = /* @__PURE__ */ new Map(); + for (const key of mappedChildren.keys()) { + result.set( + key, + this.bucketChildren(mappedChildren.get(key), pivotColumns, pivotIndex + 1, uniqueValues.get(key)) + ); + } + return result; + } +}; + +// packages/ag-grid-enterprise/src/pivot/pivotModule.ts +var SharedPivotModule = { + moduleName: "SharedPivot", + version: VERSION, + beans: [PivotResultColsService, PivotColDefService, PivotColsSvc], + apiFunctions: { + isPivotMode, + getPivotResultColumn, + setValueColumns, + getValueColumns, + removeValueColumns, + addValueColumns, + setPivotColumns, + removePivotColumns, + addPivotColumns, + getPivotColumns, + setPivotResultColumns, + getPivotResultColumns + }, + dependsOn: [SharedRowGroupingModule, _ColumnGroupModule] +}; +var PivotModule = { + moduleName: "Pivot", + version: VERSION, + rowModels: ["clientSide"], + beans: [PivotStage], + dependsOn: [SharedPivotModule, RowGroupingModule, ClientSideRowModelHierarchyModule] +}; + +// packages/ag-grid-enterprise/src/treeData/treeGroupStrategy.ts +import { BeanStub as BeanStub59, RowNode as RowNode4, _removeFromArray as _removeFromArray8, _warn as _warn43 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/treeData/fieldAccess.ts +var fieldGetter = (path) => { + const segments = path.split("."); + if (segments.includes("__proto__")) { + return () => { + }; + } + const len = segments.length; + if (len < 2) { + return (data) => data?.[path]; + } + return (data) => { + let i = 0; + do { + data = data?.[segments[i++]]; + if (i === len) { + return data; + } + } while (typeof data === "object"); + }; +}; + +// packages/ag-grid-enterprise/src/treeData/treeGroupStrategy.ts +var FLAG_CHILDREN_CHANGED = 2147483648; +var FLAG_CHANGED = 1073741824; +var FLAG_MARKED_FILLER = 536870912; +var MASK_CHILDREN_LEN = 268435455; +var PATH_KEY_SEPARATOR = String.fromCodePoint(31, 41150, 8291); +var PATH_KEY_SEPARATOR_LEN = 3; +var TreeGroupStrategy = class extends BeanStub59 { + constructor() { + super(...arguments); + this.nestedDataGetter = null; + this.parentIdGetter = null; + this.nonLeafsById = null; + this.nodesToUnselect = null; + this.fullReload = false; + } + postConstruct() { + this.onPropChange(null); + } + onPropChange(changedProps) { + const gos = this.gos; + if (!changedProps || changedProps.has("treeDataParentIdField")) { + const parentIdField = gos.get("treeDataParentIdField"); + const getter = parentIdField ? fieldGetter(parentIdField) : null; + this.fullReload || (this.fullReload = this.parentIdGetter !== getter); + this.parentIdGetter = getter; + if (getter) { + this.nestedDataGetter = null; + } + } + if (!changedProps || changedProps.has("treeDataChildrenField")) { + const childrenField = this.parentIdGetter ? "" : gos.get("treeDataChildrenField"); + const getter = childrenField ? fieldGetter(childrenField) : null; + this.fullReload || (this.fullReload = this.nestedDataGetter !== getter); + this.nestedDataGetter = getter; + } + } + destroy() { + this.nodesToUnselect = null; + this.reset(); + super.destroy(); + } + reset() { + this.clearNonLeafs(); + this.deselectHiddenNodes(false); + this.fullReload = true; + } + clearNonLeafs() { + const fillers = this.nonLeafsById; + if (fillers) { + for (const node of fillers.values()) { + node._destroy(false); + } + fillers.clear(); + this.nonLeafsById = null; + } + } + getNonLeaf(id) { + return this.nonLeafsById?.get(id); + } + loadGroupData(node) { + const key = node.key; + if (key == null) { + node._groupData = null; + return null; + } + const groupData = {}; + node._groupData = groupData; + const groupDisplayCols = this.beans.showRowGroupCols?.columns; + if (groupDisplayCols) { + for (let i = 0, len = groupDisplayCols.length; i < len; ++i) { + groupData[groupDisplayCols[i].getColId()] = key; + } + } + return groupData; + } + execute(rootNode, params) { + if (this.fullReload) { + this.reset(); + } + const { changedRowNodes, changedPath } = params; + const fullReload = this.fullReload || !changedRowNodes && !changedPath; + const hasUpdates = !!changedRowNodes && this.flagUpdatedNodes(changedRowNodes); + if (fullReload || hasUpdates) { + this.fullReload = false; + if (this.parentIdGetter) { + this.loadSelfRef(rootNode, fullReload); + } else if (this.nestedDataGetter) { + this.loadNested(rootNode, changedRowNodes, fullReload); + } else { + this.loadDataPath(rootNode, fullReload); + } + } + const parentsChanged = this.initRowsParents(rootNode); + this.destroyFillerRows(!!params.animate); + this.initRowsChildrenSize(rootNode); + let preprocessedCount = this.preprocessRows(rootNode); + const treeChanged = parentsChanged || (preprocessedCount & FLAG_CHILDREN_CHANGED) !== 0; + preprocessedCount &= ~FLAG_CHILDREN_CHANGED; + const traverseCount = this.traverseRoot(rootNode, changedPath); + if (preprocessedCount > 0 && preprocessedCount !== traverseCount) { + this.handleCycles(rootNode); + this.traverseRoot(rootNode, changedPath); + } + rootNode.treeNodeFlags = 0; + this.deselectHiddenNodes(parentsChanged || fullReload); + return treeChanged; + } + flagUpdatedNodes(changedRowNodes) { + const { adds, updates, removals } = changedRowNodes; + let hasUpdates = removals.length > 0; + if (adds.size > 0) { + hasUpdates = true; + for (const node of adds) { + node.treeNodeFlags |= FLAG_CHANGED; + } + } + if (updates.size > 0) { + hasUpdates = true; + for (const node of updates) { + node.treeNodeFlags |= FLAG_CHANGED; + } + } + return hasUpdates; + } + initRowsParents(rootNode) { + const allLeafs = rootNode._leafs; + const allLeafsLen = allLeafs.length; + let parentsChanged = false; + for (let i = 0; i < allLeafsLen; ++i) { + if (this.initRowParent(allLeafs[i])) { + parentsChanged = true; + } + } + return parentsChanged; + } + initRowParent(current) { + let parentsChanged = false; + while (true) { + const oldParent = current.parent; + const parent = current.treeParent; + if (parent === null) { + if (oldParent) { + parentsChanged = true; + this.hideRow(current); + } + break; + } + let parentFlags = parent.treeNodeFlags + 1; + const parentChanged = oldParent !== parent; + if (parentChanged) { + parentsChanged = true; + parentFlags |= FLAG_CHANGED; + current.parent = parent; + } + if (parentChanged && oldParent) { + if (oldParent.destroyed) { + maybeExpandFromRemovedParent(parent, oldParent); + } + oldParent.treeNodeFlags |= FLAG_CHANGED; + } + if (parent.sourceRowIndex >= 0 || parent.treeNodeFlags & FLAG_MARKED_FILLER || parent.treeParent === null) { + parent.treeNodeFlags = parentFlags; + break; + } + parent.treeNodeFlags = parentFlags | FLAG_MARKED_FILLER | current.treeNodeFlags & FLAG_CHANGED; + current = parent; + } + return parentsChanged; + } + destroyFillerRows(animate) { + const nonLeafsById = this.nonLeafsById; + if (nonLeafsById) { + for (const node of nonLeafsById.values()) { + if (node.treeParent === null || (node.treeNodeFlags & MASK_CHILDREN_LEN) === 0) { + nonLeafsById.delete(node.id); + node._destroy(animate); + this.hideRow(node); + } + } + if (nonLeafsById.size === 0) { + this.nonLeafsById = null; + } + } + } + initRowsChildrenSize(rootNode) { + this.initRowChildrenSize(rootNode); + const allLeafs = rootNode._leafs; + const allLeafsLen = allLeafs.length; + for (let i = 0; i < allLeafsLen; ++i) { + this.initRowChildrenSize(allLeafs[i]); + } + const nonLeafsById = this.nonLeafsById; + if (nonLeafsById !== null) { + for (const filler of nonLeafsById.values()) { + this.initRowChildrenSize(filler); + } + } + } + initRowChildrenSize(row) { + let { childrenAfterGroup, _leafs: rowLeafs, treeNodeFlags } = row; + const oldLen = childrenAfterGroup?.length; + const len = treeNodeFlags & MASK_CHILDREN_LEN; + row.treeNodeFlags = treeNodeFlags & ~MASK_CHILDREN_LEN | ((oldLen || 0) === len ? 0 : FLAG_CHILDREN_CHANGED); + if (len === 0 && row.level >= 0) { + if (childrenAfterGroup !== null) { + row.childrenAfterGroup = null; + row.childrenAfterFilter = null; + row.childrenAfterAggFilter = null; + row.childrenAfterSort = null; + const sibling = row.sibling; + if (sibling) { + sibling.childrenAfterGroup = null; + sibling.childrenAfterFilter = null; + sibling.childrenAfterAggFilter = null; + sibling.childrenAfterSort = null; + } + } + } else if (oldLen !== len || childrenAfterGroup === rowLeafs) { + if (!childrenAfterGroup || childrenAfterGroup === rowLeafs) { + row.childrenAfterGroup = childrenAfterGroup = new Array(len); + const sibling = row.sibling; + if (sibling) { + sibling.childrenAfterGroup = childrenAfterGroup; + } + } else { + childrenAfterGroup.length = len; + } + } + } + preprocessRows(rootNode) { + const allLeafs = rootNode._leafs; + const allLeafsLen = allLeafs.length; + let preprocessedCount = 0; + let treeChanged = false; + for (let i = 0; i < allLeafsLen; ++i) { + let current = allLeafs[i]; + while (true) { + const parent = current.treeParent; + if (parent === null) { + break; + } + ++preprocessedCount; + let parentFlags = parent.treeNodeFlags; + const parentChildren = parent.childrenAfterGroup; + const indexInParent = parentFlags & MASK_CHILDREN_LEN; + parentFlags = parentFlags & ~MASK_CHILDREN_LEN | indexInParent + 1; + if (parentFlags & FLAG_CHILDREN_CHANGED || parentChildren[indexInParent] !== current) { + parentFlags |= FLAG_CHILDREN_CHANGED; + parentChildren[indexInParent] = current; + treeChanged = true; + } + parent.treeNodeFlags = parentFlags; + if (parent.data || (parent.treeNodeFlags & FLAG_MARKED_FILLER) === 0 || parent.treeParent === null) { + break; + } + parent.treeNodeFlags = parentFlags & ~FLAG_MARKED_FILLER | current.treeNodeFlags & FLAG_CHANGED; + current = parent; + } + } + return preprocessedCount | (treeChanged ? FLAG_CHILDREN_CHANGED : 0); + } + traverseRoot(rootNode, activeChangedPath) { + let traverseCount = 0; + const rootChildrenAfterGroup = rootNode.childrenAfterGroup; + for (let i = 0, len = rootChildrenAfterGroup.length; i < len; ++i) { + traverseCount += this.traverse(rootChildrenAfterGroup[i], 0, false, activeChangedPath); + } + return traverseCount & ~FLAG_CHILDREN_CHANGED; + } + /** + * After all the rows are initialized and treeParent is set and childrenAfterGroup is filled, + * we traverse the tree to finalize it + * @returns the number of leaf nodes processed, which is used to detect cycles in the tree, and a flag set if leaf children were changed. + */ + traverse(row, level, collapsed, activeChangedPath) { + const children = row.childrenAfterGroup; + const len = children?.length ?? 0; + let flags = row.treeNodeFlags; + row.treeNodeFlags = 0; + row.level = level; + if (row.group !== !!len) { + setRowNodeGroup(row, this.beans, !!len); + flags |= FLAG_CHANGED; + } else if (row.hasChildren() !== !!len) { + row.updateHasChildren(); + flags |= FLAG_CHANGED; + } + const selfChanged = (flags & (FLAG_CHANGED | FLAG_CHILDREN_CHANGED)) !== 0; + const canBeExpanded = len !== 0 || row.master; + if (!canBeExpanded) { + row._expanded = void 0; + } else { + row._expanded ?? (row._expanded = null); + } + if (collapsed && row.rowIndex !== null) { + row.clearRowTopAndRowIndex(); + } + collapsed || (collapsed = !row.expanded); + ++level; + flags &= FLAG_CHILDREN_CHANGED; + for (let i = 0; i < len; ++i) { + const child = children[i]; + const childFlags = this.traverse(child, level, collapsed, activeChangedPath); + flags = flags + (childFlags & ~FLAG_CHILDREN_CHANGED) | childFlags & FLAG_CHILDREN_CHANGED; + } + if (selfChanged) { + flags |= FLAG_CHILDREN_CHANGED; + } + if (flags & FLAG_CHILDREN_CHANGED) { + if (len > 0) { + activeChangedPath?.addRow(row); + } + row._leafs = void 0; + } + return flags + 1; + } + /** Handle cycles in a tree. Is not optimal for performance but this is an edge case that shouldn't happen as is a warning. */ + handleCycles(rootNode) { + const marked = /* @__PURE__ */ new Set(); + const mark = (row) => { + if (marked.has(row)) { + return false; + } + marked.add(row); + for (const child of row.childrenAfterGroup ?? []) { + mark(child); + } + return true; + }; + mark(rootNode); + const rootChildrenAfterGroup = rootNode.childrenAfterGroup; + rootChildrenAfterGroup.length = 0; + const allLeafs = rootNode._leafs; + for (let i = 0, allLeafsLen = allLeafs.length; i < allLeafsLen; ++i) { + const row = allLeafs[i]; + const parent = row.treeParent; + if (parent && mark(row)) { + parent.treeNodeFlags |= FLAG_CHILDREN_CHANGED | FLAG_CHANGED; + row.parent = rootNode; + const parentChildren = parent.childrenAfterGroup; + _removeFromArray8(parentChildren, row); + if (parentChildren.length === 0) { + parent.childrenAfterGroup = null; + } + rootChildrenAfterGroup.push(row); + _warn43(270, { id: row.id, parentId: parent?.id ?? "" }); + } else if (parent === rootNode) { + rootChildrenAfterGroup.push(row); + } + } + } + /** Load the tree structure for nested groups, aka children property */ + loadNested(rootNode, changedRowNodes, fullReload) { + if (!fullReload && changedRowNodes) { + for (const row of changedRowNodes.adds) { + row.key = row.id; + } + return; + } + const allLeafs = rootNode._leafs; + for (let i = 0, allLeafsLen = allLeafs.length; i < allLeafsLen; ++i) { + const row = allLeafs[i]; + const id = row.id; + if (row.key !== id) { + updateNodeKey(row, id); + } + } + } + /** Load the tree structure for self-referencing data, aka parentId field */ + loadSelfRef(rootNode, reload) { + const allLeafs = rootNode._leafs; + const allLeafsLen = allLeafs.length; + const gos = this.gos; + if (!gos.get("getRowId")) { + for (let i = 0; i < allLeafsLen; i++) { + allLeafs[i].treeParent = null; + } + return; + } + const rowModel = this.beans.rowModel; + const parentIdGetter = this.parentIdGetter; + for (let i = 0; i < allLeafsLen; i++) { + const row = allLeafs[i]; + if (reload || row.treeNodeFlags & FLAG_CHANGED || row.treeParent?.destroyed) { + let newParent; + const parentId = parentIdGetter?.(row.data); + if (parentId !== null && parentId !== void 0) { + newParent = rowModel.getRowNode(parentId); + if (!newParent) { + _warn43(271, { id: row.id, parentId }); + } + } + row.treeParent = newParent ?? rootNode; + const id = row.id; + if (row.key !== id) { + updateNodeKey(row, id); + } + } else { + row.treeParent ?? (row.treeParent = rootNode); + } + } + } + loadFlattened(rootNode) { + const allLeafs = rootNode._leafs; + for (let i = 0, allLeafsLen = allLeafs.length; i < allLeafsLen; ++i) { + const row = allLeafs[i]; + row.treeParent = rootNode; + const id = row.id; + if (row.key !== id) { + updateNodeKey(row, id); + } + } + } + /** Load the tree structure for data paths, aka getDataPath callback */ + loadDataPath(rootNode, fullReload) { + const getDataPath = this.gos.get("getDataPath"); + if (!getDataPath) { + this.loadFlattened(rootNode); + return; + } + const nodesByPath = /* @__PURE__ */ new Map(); + const paths = /* @__PURE__ */ new Map(); + let dupPaths; + if (!fullReload) { + dupPaths = this.loadExistingDataPath(rootNode, nodesByPath, paths); + } + const allLeafs = rootNode._leafs; + for (let i = 0, allLeafsLen = allLeafs.length; i < allLeafsLen; ++i) { + const node = allLeafs[i]; + if (!fullReload && node.treeParent !== null && (node.treeNodeFlags & FLAG_CHANGED) === 0) { + continue; + } + const path = getDataPath(node.data); + const pathLen = path?.length; + if (!pathLen) { + _warn43(185, { data: node.data }); + continue; + } + const key = path[pathLen - 1]; + if (node.key !== key) { + updateNodeKey(node, key); + } + const pathKey = path.join(PATH_KEY_SEPARATOR); + paths.set(node, pathKey); + const existing = nodesByPath.get(pathKey); + if (existing === void 0) { + nodesByPath.set(pathKey, node); + } else if (existing !== node) { + dupPaths = this.duplicatedPath(nodesByPath, dupPaths, existing, node, pathKey); + } + } + if (dupPaths) { + this.processDuplicatePaths(dupPaths, paths); + } + this.buildFromPaths(rootNode, nodesByPath, paths); + } + loadExistingDataPath(rootNode, nodesByPath, paths) { + let dupPaths; + const allLeafs = rootNode._leafs; + for (let i = 0, allLeafsLen = allLeafs.length; i < allLeafsLen; ++i) { + const node = allLeafs[i]; + const treeParent = node.treeParent; + if (treeParent === null || (node.treeNodeFlags & FLAG_CHANGED) !== 0) { + continue; + } + let pathKey = node.key; + let current = treeParent; + while (current && current !== rootNode && current !== node) { + pathKey = PATH_KEY_SEPARATOR + pathKey; + const existingPathKey = paths.get(current); + if (existingPathKey !== void 0) { + pathKey = existingPathKey + pathKey; + break; + } + pathKey = current.key + pathKey; + current = current.treeParent; + } + if (current !== node) { + paths.set(node, pathKey); + const existing = nodesByPath.get(pathKey); + if (existing === void 0) { + nodesByPath.set(pathKey, node); + } else if (existing !== node) { + dupPaths = this.duplicatedPath(nodesByPath, dupPaths, existing, node, pathKey); + } + } + } + return dupPaths; + } + duplicatedPath(nodesByPath, dupPaths, existing, node, pathKey) { + if (node.sourceRowIndex < existing.sourceRowIndex) { + nodesByPath.set(pathKey, node); + } + const duplicates = (dupPaths ?? (dupPaths = /* @__PURE__ */ new Map())).get(pathKey); + if (duplicates === void 0) { + dupPaths.set(pathKey, [existing, node]); + } else { + duplicates.push(node); + } + return dupPaths; + } + buildFromPaths(rootNode, nodesByPath, paths) { + const segments = new Array(48); + const allLeafs = rootNode._leafs; + for (let i = 0, allLeafsLen = allLeafs.length; i < allLeafsLen; ++i) { + const node = allLeafs[i]; + const pathKey = paths.get(node); + if (pathKey === void 0) { + continue; + } + const segmentsLen = this.splitPathKey(segments, pathKey); + let startLevel = 0; + let treeParent = rootNode; + for (let level = segmentsLen - 1; level >= 0; --level) { + const existing = nodesByPath.get(pathKey.slice(0, segments[level])); + if (existing) { + treeParent = existing; + startLevel = level + 1; + break; + } + } + if (startLevel < segmentsLen) { + treeParent = this.buildMissingFillers( + nodesByPath, + pathKey, + segments, + segmentsLen, + startLevel, + treeParent + ); + } + node.treeParent = treeParent; + } + } + /** Collect separators positions, fast string split without allocations */ + splitPathKey(segments, pathKey) { + let segmentsLen = 0; + let scanPos = 0; + const pathKeyLen = pathKey.length; + while (scanPos < pathKeyLen) { + const sepPos = pathKey.indexOf(PATH_KEY_SEPARATOR, scanPos); + if (sepPos === -1) { + break; + } + segments[segmentsLen++] = sepPos; + scanPos = sepPos + PATH_KEY_SEPARATOR_LEN; + } + return segmentsLen; + } + /** Walk forward from startLevel to segmentsLen creating missing filler nodes and return the final parent. */ + buildMissingFillers(nodesByPath, pathKey, segments, segmentsLen, level, treeParent) { + let fillerLevel = 0; + let fillerId = "row-group"; + if (treeParent.sourceRowIndex < 0 && treeParent.treeParent) { + fillerLevel = level; + fillerId = treeParent.id; + } + do { + const start = level === 0 ? 0 : segments[level - 1] + PATH_KEY_SEPARATOR_LEN; + const end = segments[level]; + const subPath = pathKey.slice(0, end); + let current = nodesByPath.get(subPath); + if (current === void 0) { + const fillerKey = start === 0 ? subPath : pathKey.slice(start, end); + fillerId = this.makeFillerIdBase(pathKey, segments, level, fillerId, fillerLevel) + fillerKey; + current = this.getOrCreateFiller(fillerKey, fillerId); + nodesByPath.set(subPath, current); + fillerLevel = level + 1; + } else if (current.sourceRowIndex < 0) { + fillerId = current.id; + fillerLevel = level + 1; + } + current.treeParent = treeParent; + treeParent = current; + ++level; + } while (level < segmentsLen); + return treeParent; + } + processDuplicatePaths(duplicatePaths, paths) { + for (const duplicates of duplicatePaths.values()) { + duplicates.sort(compareSourceRowIndex); + const len = duplicates.length; + const duplicateRowsData = new Array(len - 1); + for (let i = 1; i < len; ++i) { + const node = duplicates[i]; + paths.delete(node); + node.treeParent = null; + duplicateRowsData[i - 1] = node.data; + } + const first = duplicates[0]; + _warn43(186, { rowId: first.id, rowData: first.data, duplicateRowsData }); + } + } + getOrCreateFiller(key, id) { + const nonLeafsById = this.nonLeafsById ?? (this.nonLeafsById = /* @__PURE__ */ new Map()); + let node = nonLeafsById.get(id); + if (node === void 0) { + node = new RowNode4(this.beans); + node.id = id; + node.key = key; + node.group = true; + node.leafGroup = false; + node.rowGroupIndex = null; + nonLeafsById.set(id, node); + } + return node; + } + /** + * Build the base filler ID up to the given 'level' and include the final level separator prefix. + * Caller should append only the 'fillerKey' after this base. + * Result format: + * - With no prefix and level === 0: _ROW_ID_PREFIX_ROW_GROUP + '0-' + * - With no prefix and level > 0: _ROW_ID_PREFIX_ROW_GROUP + '0-key0-1-key1-...-(level-1)-key(level-1)-level-' + * - With prefix present: prefixId + '-level-' + */ + makeFillerIdBase(pathKey, segments, level, prefix, prefixLevel) { + while (prefixLevel < level) { + const start = prefixLevel > 0 ? segments[prefixLevel - 1] + PATH_KEY_SEPARATOR_LEN : 0; + const end = segments[prefixLevel]; + prefix += "-" + prefixLevel + "-" + pathKey.slice(start, end); + ++prefixLevel; + } + return prefix + "-" + level + "-"; + } + deselectHiddenNodes(updated) { + const selectionSvc = this.beans.selectionSvc; + const nodes = this.nodesToUnselect; + const source = "rowDataChanged"; + if (nodes) { + this.nodesToUnselect = null; + selectionSvc?.setNodesSelected({ newValue: false, nodes, suppressFinishActions: true, source }); + } + if (nodes || updated) { + selectionSvc?.updateGroupsFromChildrenSelections?.(source); + } + if (nodes) { + const selectedNodes = selectionSvc?.getSelectedNodes() ?? null; + this.eventSvc.dispatchEvent({ type: "selectionChanged", source, selectedNodes, serverSideState: null }); + } + } + hideRow(row) { + if (row.isSelected()) { + (this.nodesToUnselect ?? (this.nodesToUnselect = [])).push(row); + } + row.parent = null; + row.group = false; + row.treeParent = null; + row.treeNodeFlags = 0; + row.childrenAfterGroup = null; + row.childrenAfterFilter = null; + row.childrenAfterAggFilter = null; + row.childrenAfterSort = null; + row._leafs = void 0; + row._groupData = null; + row.aggData = null; + const sibling = row.sibling; + if (sibling) { + sibling.childrenAfterGroup = null; + sibling.childrenAfterFilter = null; + sibling.childrenAfterAggFilter = null; + sibling.childrenAfterSort = null; + } + row.updateHasChildren(); + if (row.rowIndex !== null) { + row.clearRowTopAndRowIndex(); + } + } + onShowRowGroupColsSetChanged() { + const allLeafs = this.beans.rowModel.rootNode._leafs; + if (!allLeafs) { + return; + } + for (let i = 0, len = allLeafs.length; i < len; ++i) { + allLeafs[i]._groupData = void 0; + } + const fillers = this.nonLeafsById; + if (fillers) { + for (const rowNode of fillers.values()) { + rowNode._groupData = void 0; + } + } + } +}; +var compareSourceRowIndex = (a, b) => a.sourceRowIndex - b.sourceRowIndex; +var maybeExpandFromRemovedParent = (parent, oldParent) => { + if (oldParent._expanded !== void 0 && parent._expanded === void 0 && parent.treeParent !== null && parent.sourceRowIndex < 0) { + parent._expanded = oldParent._expanded; + } +}; +var updateNodeKey = (node, key) => { + const hadData = node._groupData !== void 0; + node.key = key; + node.groupValue = key; + const sibling = node.sibling; + if (sibling) { + sibling.key = key; + } + if (hadData) { + node._groupData = void 0; + node.setData(node.data); + } +}; + +// packages/ag-grid-enterprise/src/treeData/treeDataModule.ts +var SharedTreeDataModule = { + moduleName: "SharedTreeData", + version: VERSION, + dependsOn: [EnterpriseCoreModule, SharedAggregationModule, GroupColumnModule, ChangedPathModule, StickyRowModule] +}; +var TreeDataModule = { + moduleName: "TreeData", + version: VERSION, + dynamicBeans: { treeGroupStrategy: TreeGroupStrategy }, + rowModels: ["clientSide"], + dependsOn: [SharedTreeDataModule, AggregationModule, ClientSideRowModelHierarchyModule, GroupEditModule] +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/blocks/blockUtils.ts +import { + BeanStub as BeanStub60, + RowNode as RowNode5, + _doOnce, + _exists as _exists26, + _getGroupTotalRowCallback as _getGroupTotalRowCallback3, + _getRowHeightAsNumber as _getRowHeightAsNumber2, + _getRowHeightForNode as _getRowHeightForNode2, + _warn as _warn44 +} from "ag-grid-community"; +var GROUP_MISSING_KEY_ID = "ag-Grid-MissingKey"; +var BlockUtils = class extends BeanStub60 { + constructor() { + super(...arguments); + this.beanName = "ssrmBlockUtils"; + } + wireBeans(beans) { + this.valueSvc = beans.valueSvc; + this.showRowGroupCols = beans.showRowGroupCols; + this.nodeManager = beans.ssrmNodeManager; + this.expansionSvc = beans.expansionSvc; + this.serverSideRowModel = beans.rowModel; + this.storeFactory = beans.ssrmStoreFactory; + } + createRowNode(params) { + const rowNode = new RowNode5(this.beans); + const rowHeight = params.rowHeight != null ? params.rowHeight : _getRowHeightAsNumber2(this.beans); + rowNode.setRowHeight(rowHeight); + rowNode.group = params.group; + rowNode.leafGroup = params.leafGroup; + rowNode.level = params.level; + rowNode.uiLevel = params.level; + rowNode.parent = params.parent; + rowNode.stub = true; + rowNode.__needsRefreshWhenVisible = false; + if (rowNode.group) { + rowNode.expanded = false; + rowNode.field = params.field; + rowNode.rowGroupColumn = params.rowGroupColumn; + rowNode.rowGroupIndex = params.level; + } + return rowNode; + } + destroyRowNode(rowNode, preserveStore = false) { + if (rowNode.childStore && !preserveStore) { + this.destroyBean(rowNode.childStore); + rowNode.childStore = null; + } + const sibling = rowNode.sibling; + if (sibling && !rowNode.footer) { + this.destroyRowNode(sibling, false); + } + rowNode._destroy(true); + if (rowNode.id != null) { + this.nodeManager.removeNode(rowNode); + } + } + setTreeGroupInfo(rowNode) { + rowNode.updateHasChildren(); + const getKeyFunc = this.gos.get("getServerSideGroupKey"); + const hasChildren = rowNode.hasChildren(); + if (hasChildren && getKeyFunc != null) { + rowNode.key = getKeyFunc(rowNode.data); + } + if (!hasChildren && rowNode.childStore != null) { + this.destroyBean(rowNode.childStore); + rowNode.childStore = null; + if (!rowNode.master) { + rowNode.expanded = false; + } + } + } + setRowGroupInfo(rowNode) { + rowNode.key = this.valueSvc.getValue(rowNode.rowGroupColumn, rowNode, "data"); + if (rowNode.key === null || rowNode.key === void 0) { + _doOnce(() => { + _warn44(190, { rowGroupId: rowNode.rowGroupColumn?.getId(), data: rowNode.data }); + }, "SSBlock-BadKey"); + } + const isUnbalancedGroup = this.gos.get("groupAllowUnbalanced") && rowNode.key === ""; + if (isUnbalancedGroup) { + const storeParams = this.serverSideRowModel.getParams(); + rowNode.childStore = this.createBean(this.storeFactory.createStore(storeParams, rowNode)); + } + const getGroupIncludeFooter = _getGroupTotalRowCallback3(this.beans.gos); + const doesRowShowFooter = getGroupIncludeFooter({ node: rowNode }); + if (doesRowShowFooter) { + _createRowNodeFooter(rowNode, this.beans); + if (rowNode.sibling) { + rowNode.sibling.uiLevel = rowNode.uiLevel + 1; + } + } + } + setMasterDetailInfo(rowNode) { + const isMasterFunc = this.gos.get("isRowMaster"); + if (isMasterFunc != null) { + rowNode.master = isMasterFunc(rowNode.data); + } else { + rowNode.master = true; + } + } + updateDataIntoRowNode(rowNode, data) { + rowNode.updateData(data); + if (this.gos.get("treeData")) { + this.setTreeGroupInfo(rowNode); + this.setChildCountIntoRowNode(rowNode); + this.updateRowFooter(rowNode); + } else if (rowNode.group) { + this.setChildCountIntoRowNode(rowNode); + this.updateRowFooter(rowNode); + } else if (this.gos.get("masterDetail")) { + } + } + updateRowFooter(rowNode) { + if (rowNode.footer) { + return; + } + if (rowNode.group) { + const getGroupIncludeFooter = _getGroupTotalRowCallback3(this.beans.gos); + const shouldRowShowFooter = getGroupIncludeFooter({ node: rowNode }); + if (shouldRowShowFooter && !rowNode.sibling) { + _createRowNodeFooter(rowNode, this.beans); + return; + } + } + if (rowNode.sibling) { + _destroyRowNodeFooter(rowNode); + } + } + setDataIntoRowNode(rowNode, data, defaultId, cachedRowHeight) { + rowNode.stub = false; + const treeData = this.gos.get("treeData"); + rowNode.setDataAndId(data, defaultId); + const group = rowNode.group; + if ((treeData || !group) && this.gos.get("masterDetail")) { + this.setMasterDetailInfo(rowNode); + } + if (treeData) { + this.setTreeGroupInfo(rowNode); + } else if (group) { + this.setRowGroupInfo(rowNode); + } + if (treeData || group) { + this.setGroupDataIntoRowNode(rowNode); + this.setChildCountIntoRowNode(rowNode); + } + if (_exists26(data)) { + rowNode.setRowHeight(_getRowHeightForNode2(this.beans, rowNode, false, cachedRowHeight).height); + rowNode.sibling?.setRowHeight( + _getRowHeightForNode2(this.beans, rowNode.sibling, false, cachedRowHeight).height + ); + } + } + setChildCountIntoRowNode(rowNode) { + const getChildCount = this.gos.get("getChildCount"); + if (getChildCount) { + rowNode.setAllChildrenCount(getChildCount(rowNode.data)); + } + } + setGroupDataIntoRowNode(rowNode) { + const key = rowNode.key; + rowNode.groupValue = key; + if (rowNode.sibling) { + rowNode.sibling.groupValue = key; + } + const groupDisplayCols = this.showRowGroupCols?.columns; + if (!groupDisplayCols) { + return; + } + const usingTreeData = this.gos.get("treeData"); + for (const col of groupDisplayCols) { + let groupData = rowNode._groupData; + if (!groupData) { + groupData = {}; + rowNode._groupData = groupData; + } + if (usingTreeData) { + groupData[col.getColId()] = key; + } else if (col.isRowGroupDisplayed(rowNode.rowGroupColumn.getId())) { + const groupValue = this.valueSvc.getValue(rowNode.rowGroupColumn, rowNode, "data"); + groupData[col.getColId()] = groupValue; + } + } + } + clearDisplayIndex(rowNode) { + rowNode.clearRowTopAndRowIndex(); + const hasChildStore = rowNode.hasChildren() && !!rowNode.childStore; + if (hasChildStore) { + rowNode.childStore?.clearDisplayIndexes(); + } + const hasDetailNode = rowNode.master && rowNode.detailNode; + if (hasDetailNode) { + rowNode.detailNode?.clearRowTopAndRowIndex(); + } + } + setDisplayIndex(rowNode, displayIndexSeq, nextRowTop, uiLevel) { + const isUnbalancedGroup = this.gos.get("groupAllowUnbalanced") && rowNode.group && rowNode.key === ""; + const isHiddenOpenGroup = this.gos.get("groupHideOpenParents") && rowNode.group && rowNode.expanded; + if (isHiddenOpenGroup || isUnbalancedGroup) { + rowNode.setRowIndex(null); + rowNode.setRowTop(null); + } else { + rowNode.setRowIndex(displayIndexSeq.value++); + rowNode.setRowTop(nextRowTop.value); + nextRowTop.value += rowNode.rowHeight; + } + rowNode.setUiLevel(uiLevel); + if (rowNode.footer) { + return; + } + const hasDetailRow = rowNode.master; + if (hasDetailRow) { + if (rowNode.expanded && rowNode.detailNode) { + rowNode.detailNode.setRowIndex(displayIndexSeq.value++); + rowNode.detailNode.setRowTop(nextRowTop.value); + nextRowTop.value += rowNode.detailNode.rowHeight; + } else if (rowNode.detailNode) { + rowNode.detailNode.clearRowTopAndRowIndex(); + } + } + const hasChildStore = rowNode.hasChildren() && !!rowNode.childStore; + if (hasChildStore) { + const childStore = rowNode.childStore; + if (rowNode.expanded || isUnbalancedGroup) { + childStore.setDisplayIndexes(displayIndexSeq, nextRowTop, isUnbalancedGroup ? uiLevel : uiLevel + 1); + } else { + childStore.clearDisplayIndexes(); + } + } + } + extractRowBounds(rowNode, index) { + const extractRowBounds = (currentRowNode) => ({ + rowHeight: currentRowNode.rowHeight, + rowTop: currentRowNode.rowTop + }); + if (rowNode.rowIndex === index) { + return extractRowBounds(rowNode); + } + if (rowNode.hasChildren() && rowNode.expanded && !!rowNode.childStore) { + const childStore = rowNode.childStore; + if (childStore.isDisplayIndexInStore(index)) { + return childStore.getRowBounds(index); + } + } else if (rowNode.master && rowNode.expanded && rowNode.detailNode) { + if (rowNode.detailNode.rowIndex === index) { + return extractRowBounds(rowNode.detailNode); + } + } + } + isPixelInNodeRange(node, pixel) { + if (!_exists26(node.rowTop) || !_exists26(node.rowHeight)) { + return false; + } + return pixel >= node.rowTop && pixel < node.rowTop + node.rowHeight; + } + getIndexAtPixel(rowNode, pixel) { + if (this.isPixelInNodeRange(rowNode, pixel)) { + return rowNode.rowIndex; + } + const expandedMasterRow = rowNode.master && rowNode.expanded; + const detailNode = rowNode.detailNode; + if (expandedMasterRow && detailNode && this.isPixelInNodeRange(detailNode, pixel)) { + return detailNode.rowIndex; + } + if (rowNode.hasChildren() && rowNode.expanded && !!rowNode.childStore) { + const childStore = rowNode.childStore; + if (childStore.isPixelInRange(pixel)) { + return childStore.getRowIndexAtPixel(pixel); + } + } + return null; + } + createNodeIdPrefix(parentRowNode) { + const parts = []; + let rowNode = parentRowNode; + while (rowNode && rowNode.level >= 0) { + if (rowNode.key === "") { + parts.push(GROUP_MISSING_KEY_ID); + } else { + parts.push(rowNode.key); + } + rowNode = rowNode.parent; + } + if (parts.length > 0) { + return parts.reverse().join("-"); + } + return void 0; + } + checkOpenByDefault(rowNode) { + const expanded = !!this.expansionSvc?.isNodeExpanded(rowNode); + const oldExpanded = rowNode._expanded; + if (!!oldExpanded !== expanded) { + rowNode.setExpanded(expanded); + } else if (oldExpanded === void 0) { + rowNode._expanded = expanded; + } + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/listeners/expandListener.ts +import { BeanStub as BeanStub61, _isServerSideRowModel as _isServerSideRowModel4 } from "ag-grid-community"; +var ExpandListener = class extends BeanStub61 { + constructor() { + super(...arguments); + this.beanName = "ssrmExpandListener"; + } + postConstruct() { + if (!_isServerSideRowModel4(this.gos)) { + return; + } + this.addManagedEventListeners({ rowExpansionStateChanged: this.onRowExpandStateChanged.bind(this) }); + } + onRowExpandStateChanged() { + const beans = this.beans; + const expansionSvx = beans.expansionSvc; + beans.rowModel.forEachNode((rowNode) => { + expansionSvx.updateExpandedState(rowNode); + }); + this.eventSvc.dispatchEvent({ type: "storeUpdated" }); + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/listeners/filterListener.ts +import { BeanStub as BeanStub62, _isServerSideRowModel as _isServerSideRowModel5, _jsonEquals as _jsonEquals2 } from "ag-grid-community"; +var FilterListener = class extends BeanStub62 { + constructor() { + super(...arguments); + this.beanName = "ssrmFilterListener"; + } + wireBeans(beans) { + this.serverSideRowModel = beans.rowModel; + this.filterManager = beans.filterManager; + this.listenerUtils = beans.ssrmListenerUtils; + } + postConstruct() { + if (!_isServerSideRowModel5(this.gos)) { + return; + } + this.addManagedEventListeners({ + advancedFilterEnabledChanged: () => this.onFilterChanged(true), + filterChanged: () => this.onFilterChanged() + }); + } + onFilterChanged(advancedFilterEnabledChanged) { + const storeParams = this.serverSideRowModel.getParams(); + if (!storeParams) { + return; + } + const oldModel = storeParams.filterModel; + let newModel; + let changedColumns; + if (this.filterManager?.isAdvFilterEnabled()) { + newModel = this.filterManager.getAdvFilterModel(); + const oldColumns = advancedFilterEnabledChanged ? Object.keys(oldModel ?? {}) : this.getAdvancedFilterColumns(oldModel); + const newColumns = this.getAdvancedFilterColumns(newModel); + for (const column of oldColumns) { + newColumns.add(column); + } + changedColumns = Array.from(newColumns); + } else { + newModel = this.filterManager?.getFilterModel() ?? {}; + if (advancedFilterEnabledChanged) { + const oldColumns = this.getAdvancedFilterColumns(oldModel); + for (const column of Object.keys(newModel)) { + oldColumns.add(column); + } + changedColumns = Array.from(oldColumns); + } else { + changedColumns = this.findChangedColumns(oldModel, newModel); + } + } + const valueColChanged = this.listenerUtils.isSortingWithValueColumn(changedColumns); + const secondaryColChanged = this.listenerUtils.isSortingWithSecondaryColumn(changedColumns); + const params = { + valueColChanged, + secondaryColChanged, + changedColumns + }; + this.serverSideRowModel.refreshAfterFilter(newModel, params); + } + findChangedColumns(oldModel, newModel) { + const allColKeysMap = {}; + for (const key of Object.keys(oldModel)) { + allColKeysMap[key] = true; + } + for (const key of Object.keys(newModel)) { + allColKeysMap[key] = true; + } + const res = []; + for (const key of Object.keys(allColKeysMap)) { + const filterChanged = !_jsonEquals2(oldModel[key], newModel[key]); + if (filterChanged) { + res.push(key); + } + } + return res; + } + getAdvancedFilterColumns(model) { + const columns = /* @__PURE__ */ new Set(); + if (!model) { + return columns; + } + const processAdvancedFilterModel = (filterModel) => { + if (filterModel.filterType === "join") { + for (const condition of filterModel.conditions) { + processAdvancedFilterModel(condition); + } + } else { + columns.add(filterModel.colId); + } + }; + processAdvancedFilterModel(model); + return columns; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/listeners/listenerUtils.ts +import { BeanStub as BeanStub63 } from "ag-grid-community"; +var ListenerUtils = class extends BeanStub63 { + constructor() { + super(...arguments); + this.beanName = "ssrmListenerUtils"; + } + wireBeans(beans) { + this.pivotResultCols = beans.pivotResultCols; + this.valueColsSvc = beans.valueColsSvc; + } + isSortingWithValueColumn(changedColumnsInSort) { + const valueColIds = (this.valueColsSvc?.columns ?? []).map((col) => col.getColId()); + for (let i = 0; i < changedColumnsInSort.length; i++) { + if (valueColIds.indexOf(changedColumnsInSort[i]) > -1) { + return true; + } + } + return false; + } + isSortingWithSecondaryColumn(changedColumnsInSort) { + const pivotResultCols = this.pivotResultCols?.getPivotResultCols(); + if (!pivotResultCols) { + return false; + } + const secondaryColIds = pivotResultCols.list.map((col) => col.getColId()); + for (let i = 0; i < changedColumnsInSort.length; i++) { + if (secondaryColIds.indexOf(changedColumnsInSort[i]) > -1) { + return true; + } + } + return false; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/listeners/sortListener.ts +import { BeanStub as BeanStub64, _isServerSideRowModel as _isServerSideRowModel6 } from "ag-grid-community"; +var SortListener = class extends BeanStub64 { + constructor() { + super(...arguments); + this.beanName = "ssrmSortSvc"; + } + wireBeans(beans) { + this.sortSvc = beans.sortSvc; + this.serverSideRowModel = beans.rowModel; + this.listenerUtils = beans.ssrmListenerUtils; + } + postConstruct() { + if (!_isServerSideRowModel6(this.gos)) { + return; + } + this.addManagedEventListeners({ sortChanged: this.onSortChanged.bind(this) }); + } + onSortChanged() { + const storeParams = this.serverSideRowModel.getParams(); + if (!storeParams) { + return; + } + const newSortModel = this.sortSvc.getSortModel(); + const oldSortModel = storeParams.sortModel; + const changedColumns = this.findChangedColumnsInSort(newSortModel, oldSortModel); + const valueColChanged = this.listenerUtils.isSortingWithValueColumn(changedColumns); + const secondaryColChanged = this.listenerUtils.isSortingWithSecondaryColumn(changedColumns); + const params = { + valueColChanged, + secondaryColChanged, + changedColumns + }; + this.serverSideRowModel.refreshAfterSort(newSortModel, params); + } + // returns back all the cols that were effected by the sorting. eg if we were sorting by col A, + // and now we are sorting by col B, the list of impacted cols should be A and B. so if a cache + // is impacted by sorting on A or B then it needs to be refreshed. this includes where the cache + // was previously sorted by A and then the A sort now needs to be cleared. + findChangedColumnsInSort(newSortModel, oldSortModel) { + let allColsInBothSorts = []; + for (const sortModel of [newSortModel, oldSortModel]) { + if (sortModel) { + const ids = sortModel.map((sm) => sm.colId); + allColsInBothSorts = allColsInBothSorts.concat(ids); + } + } + const differentSorts = (oldSortItem, newSortItem) => { + const oldSort = oldSortItem ? oldSortItem.sort : null; + const newSort = newSortItem ? newSortItem.sort : null; + return oldSort !== newSort; + }; + const differentIndexes = (oldSortItem, newSortItem) => { + const oldIndex = oldSortItem ? oldSortModel.indexOf(oldSortItem) : -1; + const newIndex = newSortItem ? newSortModel.indexOf(newSortItem) : -1; + return oldIndex !== newIndex; + }; + return allColsInBothSorts.filter((colId) => { + const oldSortItem = oldSortModel.find((sm) => sm.colId === colId); + const newSortItem = newSortModel.find((sm) => sm.colId === colId); + return differentSorts(oldSortItem, newSortItem) || differentIndexes(oldSortItem, newSortItem); + }); + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/nodeManager.ts +import { BeanStub as BeanStub65, _warn as _warn45 } from "ag-grid-community"; +var NodeManager = class extends BeanStub65 { + constructor() { + super(...arguments); + this.beanName = "ssrmNodeManager"; + this.rowNodes = /* @__PURE__ */ new Map(); + } + addRowNode(rowNode) { + const id = rowNode.id; + if (this.rowNodes.has(id)) { + _warn45(187, { + rowId: id, + firstData: this.rowNodes.get(id).data, + secondData: rowNode.data + }); + } + this.rowNodes.set(id, rowNode); + } + removeNode(rowNode) { + const id = rowNode.id; + this.rowNodes.delete(id); + } + destroy() { + this.clear(); + super.destroy(); + } + clear() { + this.rowNodes.clear(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/serverSideRowModel.ts +import { + BeanStub as BeanStub66, + RowNode as RowNode6, + _debounce as _debounce6, + _getRowHeightAsNumber as _getRowHeightAsNumber3, + _getRowHeightForNode as _getRowHeightForNode3, + _isGetRowHeightFunction, + _isRowSelection as _isRowSelection2, + _jsonEquals as _jsonEquals3, + _warn as _warn46 +} from "ag-grid-community"; +var ServerSideRowModel = class extends BeanStub66 { + constructor() { + super(...arguments); + this.beanName = "rowModel"; + this.hierarchical = true; + this.started = false; + this.managingPivotResultColumns = false; + this.onRowHeightChanged_debounced = _debounce6(this, this.onRowHeightChanged.bind(this), 100); + } + wireBeans(beans) { + this.colModel = beans.colModel; + this.colNames = beans.colNames; + this.pivotResultCols = beans.pivotResultCols; + this.rowGroupColsSvc = beans.rowGroupColsSvc; + this.pivotColsSvc = beans.pivotColsSvc; + this.valueColsSvc = beans.valueColsSvc; + this.filterManager = beans.filterManager; + this.sortSvc = beans.sortSvc; + this.rowRenderer = beans.rowRenderer; + this.nodeManager = beans.ssrmNodeManager; + this.storeFactory = beans.ssrmStoreFactory; + this.pivotColDefSvc = beans.pivotColDefSvc; + } + // we don't implement as lazy row heights is not supported in this row model + ensureRowHeightsValid() { + return false; + } + start() { + this.started = true; + this.updateDatasource(); + } + destroyDatasource() { + if (!this.datasource) { + return; + } + if (this.datasource.destroy) { + this.datasource.destroy(); + } + this.rowRenderer.datasourceChanged(); + this.datasource = void 0; + } + postConstruct() { + const resetListener = this.resetRootStore.bind(this); + this.addManagedEventListeners({ + newColumnsLoaded: this.onColumnEverything.bind(this), + storeUpdated: this.onStoreUpdated.bind(this), + columnValueChanged: resetListener, + columnPivotChanged: resetListener, + columnRowGroupChanged: resetListener, + columnPivotModeChanged: resetListener + }); + this.addManagedPropertyListeners( + [ + /** + * Following properties omitted as they are likely to come with undesired side effects. + * 'getRowId', 'isRowMaster', 'getRowHeight', 'isServerSideGroup', 'getServerSideGroupKey', + * */ + "masterDetail", + "treeData", + "removePivotHeaderRowWhenSingleValueColumn", + "cacheBlockSize" + ], + resetListener + ); + this.addManagedPropertyListeners(["groupAllowUnbalanced", "groupTotalRow"], () => this.onStoreUpdated()); + this.addManagedPropertyListener("rowHeight", () => this.resetRowHeights()); + this.verifyProps(); + this.addManagedPropertyListener("serverSideDatasource", () => this.updateDatasource()); + } + updateDatasource() { + const datasource = this.gos.get("serverSideDatasource"); + if (datasource) { + this.setDatasource(datasource); + } + } + verifyProps() { + if (_isRowSelection2(this.gos) && !this.gos.exists("getRowId")) { + _warn46(188, { feature: "selection" }); + } + } + setDatasource(datasource) { + if (!this.started) { + return; + } + this.destroyDatasource(); + this.datasource = datasource; + this.resetRootStore(); + } + applyRowData(rowDataParams, startRow, route) { + const rootStore = this.getRootStore(); + if (!rootStore) { + return; + } + const storeToExecuteOn = rootStore.getChildStore(route); + if (!storeToExecuteOn) { + return; + } + storeToExecuteOn.applyRowData(rowDataParams, startRow, rowDataParams.rowData.length); + } + isLastRowIndexKnown() { + const cache = this.getRootStore(); + if (!cache) { + return false; + } + return cache.isLastRowIndexKnown(); + } + onColumnEverything() { + if (!this.storeParams) { + this.resetRootStore(); + return; + } + const rowGroupColumnVos = this.columnsToValueObjects(this.rowGroupColsSvc?.columns); + const valueColumnVos = this.columnsToValueObjects(this.valueColsSvc?.columns); + const pivotColumnVos = this.columnsToValueObjects(this.pivotColsSvc?.columns); + const areColsSame = (params) => { + const oldColsMap = {}; + for (const col of params.oldCols) { + oldColsMap[col.id] = col; + } + const allColsUnchanged = params.newCols.every((col) => { + const equivalentCol = oldColsMap[col.id]; + if (equivalentCol) { + delete oldColsMap[col.id]; + } + return equivalentCol && equivalentCol.field === col.field && equivalentCol.aggFunc === col.aggFunc; + }); + const missingCols = !params.allowRemovedColumns && !!Object.values(oldColsMap).length; + return allColsUnchanged && !missingCols; + }; + const sortModelDifferent = !_jsonEquals3(this.storeParams.sortModel, this.sortSvc?.getSortModel() ?? []); + const rowGroupDifferent = !areColsSame({ + oldCols: this.storeParams.rowGroupCols, + newCols: rowGroupColumnVos + }); + const pivotDifferent = !areColsSame({ + oldCols: this.storeParams.pivotCols, + newCols: pivotColumnVos + }); + const valuesDifferent = !!rowGroupColumnVos?.length && !areColsSame({ + oldCols: this.storeParams.valueCols, + newCols: valueColumnVos, + allowRemovedColumns: true + }); + const resetRequired = sortModelDifferent || rowGroupDifferent || pivotDifferent || valuesDifferent; + if (resetRequired) { + this.resetRootStore(); + } else { + const newParams = this.createStoreParams(); + this.storeParams.rowGroupCols = newParams.rowGroupCols; + this.storeParams.pivotCols = newParams.pivotCols; + this.storeParams.valueCols = newParams.valueCols; + } + } + destroyRootStore() { + if (!this.rootNode?.childStore) { + return; + } + this.rootNode.childStore = this.destroyBean(this.rootNode.childStore); + this.nodeManager.clear(); + } + refreshAfterSort(newSortModel, params) { + if (this.storeParams) { + this.storeParams.sortModel = newSortModel; + } + const rootStore = this.getRootStore(); + if (!rootStore) { + return; + } + rootStore.refreshAfterSort(params); + this.onStoreUpdated(); + } + generateSecondaryColumns(pivotFields) { + if (!this.pivotColDefSvc) { + this.gos.assertModuleRegistered("SharedPivot", 2); + return; + } + const pivotColumnGroupDefs = this.pivotColDefSvc.createColDefsFromFields(pivotFields); + this.managingPivotResultColumns = true; + this.pivotResultCols?.setPivotResultCols(pivotColumnGroupDefs, "rowModelUpdated"); + } + resetRowHeights() { + const atLeastOne = this.resetRowHeightsForAllRowNodes(); + const rootNodeHeight = _getRowHeightForNode3(this.beans, this.rootNode); + this.rootNode.setRowHeight(rootNodeHeight.height, rootNodeHeight.estimated); + if (this.rootNode.sibling) { + const rootNodeSibling = _getRowHeightForNode3(this.beans, this.rootNode.sibling); + this.rootNode.sibling.setRowHeight(rootNodeSibling.height, rootNodeSibling.estimated); + } + if (atLeastOne) { + this.onRowHeightChanged(); + } + } + resetRowHeightsForAllRowNodes() { + let atLeastOne = false; + this.forEachNode((rowNode) => { + const rowHeightForNode = _getRowHeightForNode3(this.beans, rowNode); + rowNode.setRowHeight(rowHeightForNode.height, rowHeightForNode.estimated); + const detailNode = rowNode.detailNode; + if (detailNode) { + const detailRowHeight = _getRowHeightForNode3(this.beans, detailNode); + detailNode.setRowHeight(detailRowHeight.height, detailRowHeight.estimated); + } + if (rowNode.sibling) { + const siblingRowHeight = _getRowHeightForNode3(this.beans, rowNode.sibling); + detailNode?.setRowHeight(siblingRowHeight.height, siblingRowHeight.estimated); + } + atLeastOne = true; + }); + return atLeastOne; + } + resetRootStore() { + this.destroyRootStore(); + this.rootNode = new RowNode6(this.beans); + this.rootNode.group = true; + this.rootNode.level = -1; + if (this.datasource) { + this.storeParams = this.createStoreParams(); + this.rootNode.childStore = this.createBean(this.storeFactory.createStore(this.storeParams, this.rootNode)); + this.updateRowIndexesAndBounds(); + } + if (this.managingPivotResultColumns) { + this.pivotResultCols?.setPivotResultCols(null, "api"); + this.managingPivotResultColumns = false; + } + this.dispatchModelUpdated(true); + } + columnsToValueObjects(columns = []) { + return columns.map( + (col) => ({ + id: col.getId(), + aggFunc: col.getAggFunc(), + displayName: this.colNames.getDisplayNameForColumn(col, "model"), + field: col.getColDef().field + }) + ); + } + createStoreParams() { + const rowGroupColumnVos = this.columnsToValueObjects(this.rowGroupColsSvc?.columns); + const valueColumnVos = this.columnsToValueObjects(this.valueColsSvc?.columns); + const pivotColumnVos = this.columnsToValueObjects(this.pivotColsSvc?.columns); + const dynamicRowHeight = _isGetRowHeightFunction(this.gos); + const params = { + // the columns the user has grouped and aggregated by + valueCols: valueColumnVos, + rowGroupCols: rowGroupColumnVos, + pivotCols: pivotColumnVos, + pivotMode: this.colModel.isPivotMode(), + // sort and filter model + filterModel: this.filterManager?.isAdvFilterEnabled() ? this.filterManager?.getAdvFilterModel() : this.filterManager?.getFilterModel() ?? {}, + sortModel: this.sortSvc?.getSortModel() ?? [], + datasource: this.datasource, + lastAccessedSequence: { value: 0 }, + // blockSize: blockSize == null ? 100 : blockSize, + dynamicRowHeight + }; + return params; + } + getParams() { + return this.storeParams; + } + dispatchModelUpdated(reset = false) { + this.eventSvc.dispatchEvent({ + type: "modelUpdated", + animate: !reset, + keepRenderedRows: !reset, + newPage: false, + newData: false + }); + } + onStoreUpdated() { + this.updateRowIndexesAndBounds(); + this.dispatchModelUpdated(); + } + onRowHeightChanged() { + this.updateRowIndexesAndBounds(); + this.dispatchModelUpdated(); + } + updateRowIndexesAndBounds() { + const rootStore = this.getRootStore(); + if (!rootStore) { + return; + } + rootStore.setDisplayIndexes({ value: 0 }, { value: 0 }, 0); + } + retryLoads() { + const rootStore = this.getRootStore(); + if (!rootStore) { + return; + } + rootStore.retryLoads(); + this.onStoreUpdated(); + } + getRow(index) { + const rootStore = this.getRootStore(); + if (!rootStore) { + return void 0; + } + return rootStore.getRowUsingDisplayIndex(index); + } + refreshAfterFilter(newFilterModel, params) { + if (this.storeParams) { + this.storeParams.filterModel = newFilterModel; + } + const rootStore = this.getRootStore(); + if (!rootStore) { + return; + } + rootStore.refreshAfterFilter(params); + this.onStoreUpdated(); + } + getRootStore() { + return this.rootNode?.childStore; + } + getRowCount() { + const rootStore = this.getRootStore(); + if (!rootStore) { + return 0; + } + return rootStore.getDisplayIndexEnd(); + } + getTopLevelRowCount() { + const rootStore = this.getRootStore(); + if (!rootStore) { + return 1; + } + return rootStore.getRowCount(); + } + getTopLevelRowDisplayedIndex(topLevelIndex) { + const rootStore = this.getRootStore(); + if (!rootStore) { + return topLevelIndex; + } + return rootStore.getTopLevelRowDisplayedIndex(topLevelIndex); + } + getRowBounds(index) { + const rootStore = this.getRootStore(); + if (!rootStore) { + const rowHeight = _getRowHeightAsNumber3(this.beans); + return { + rowTop: 0, + rowHeight + }; + } + return rootStore.getRowBounds(index); + } + getBlockStates() { + const root = this.getRootStore(); + if (!root) { + return void 0; + } + const states = {}; + root.forEachStoreDeep((store) => { + const blockStates = store.getBlockStates(); + for (const block of Object.keys(blockStates)) { + states[block] = blockStates[block]; + } + }); + return states; + } + getRowIndexAtPixel(pixel) { + const rootStore = this.getRootStore(); + if (pixel <= 0 || !rootStore) { + return 0; + } + return rootStore.getRowIndexAtPixel(pixel); + } + isEmpty() { + return false; + } + getOverlayType() { + const rootStore = this.getRootStore(); + if (rootStore?.getDisplayIndexEnd() === 0) { + return this.filterManager?.isAnyFilterPresent() ? "noMatchingRows" : "noRows"; + } + return null; + } + isRowsToRender() { + return this.getRootStore() != null && this.getRowCount() > 0; + } + getType() { + return "serverSide"; + } + forEachNode(callback) { + const rootStore = this.getRootStore(); + if (!rootStore) { + return; + } + rootStore.forEachNodeDeep(callback); + } + forEachDisplayedNode(callback) { + const wrappedCallback = (node, index) => { + if (node.stub || !node.displayed) { + return; + } + callback(node, index); + }; + this.forEachNode(wrappedCallback); + } + forEachNodeAfterFilterAndSort(callback, includeFooterNodes = false) { + const rootStore = this.getRootStore(); + if (!rootStore) { + return; + } + rootStore.forEachNodeDeepAfterFilterAndSort(callback, void 0, includeFooterNodes); + } + /** @returns false if store hasn't started */ + executeOnStore(route, callback) { + if (!this.started) { + return false; + } + const rootStore = this.getRootStore(); + if (!rootStore) { + return true; + } + const storeToExecuteOn = rootStore.getChildStore(route); + if (storeToExecuteOn) { + callback(storeToExecuteOn); + } + return true; + } + refreshStore(params = {}) { + const route = params.route ? params.route : []; + this.executeOnStore(route, (store) => store.refreshStore(params.purge == true)); + } + getStoreState() { + const res = []; + const rootStore = this.getRootStore(); + if (rootStore) { + rootStore.addStoreStates(res); + } + return res; + } + getNodesInRangeForSelection(firstInRange, lastInRange) { + const startIndex = firstInRange.rowIndex; + const endIndex = lastInRange.rowIndex; + if (startIndex === null && endIndex === null) { + return []; + } + if (endIndex === null) { + return firstInRange ? [firstInRange] : []; + } + if (startIndex === null) { + return [lastInRange]; + } + const nodeRange = []; + const [firstIndex, lastIndex] = [startIndex, endIndex].sort((a, b) => a - b); + this.forEachNode((node) => { + const thisRowIndex = node.rowIndex; + if (thisRowIndex == null || node.stub) { + return; + } + if (thisRowIndex >= firstIndex && thisRowIndex <= lastIndex) { + nodeRange.push(node); + } + }); + if (nodeRange.length !== lastIndex - firstIndex + 1) { + return null; + } + return nodeRange; + } + getRowNode(id) { + let result; + this.forEachNode((rowNode) => { + if (rowNode.id === id) { + result = rowNode; + } + if (rowNode.detailNode && rowNode.detailNode.id === id) { + result = rowNode.detailNode; + } + }); + return result; + } + isRowPresent(rowNode) { + const foundRowNode = this.getRowNode(rowNode.id); + return !!foundRowNode; + } + setRowCount(rowCount, lastRowIndexKnown) { + const rootStore = this.getRootStore(); + if (!rootStore) { + return; + } + rootStore.setRowCount(rowCount, lastRowIndexKnown); + } + destroy() { + this.destroyDatasource(); + this.destroyRootStore(); + super.destroy(); + } + /** + * @deprecated v33.1 + */ + onRowHeightChangedDebounced() { + this.onRowHeightChanged_debounced(); + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/serverSideRowModelApi.ts +import { _getServerSideRowModel, _warn as _warn47 } from "ag-grid-community"; +function getServerSideSelectionState(beans) { + return beans.selectionSvc?.getSelectionState() ?? null; +} +function setServerSideSelectionState(beans, state) { + beans.selectionSvc?.setSelectionState(state, "api"); +} +function applyServerSideTransaction(beans, transaction) { + return beans.ssrmTxnManager?.applyTransaction(transaction); +} +function applyServerSideRowData(beans, params) { + const startRow = params.startRow ?? 0; + const route = params.route ?? []; + if (startRow < 0) { + _warn47(189, { startRow }); + return; + } + _getServerSideRowModel(beans)?.applyRowData(params.successParams, startRow, route); +} +function applyServerSideTransactionAsync(beans, transaction, callback) { + return beans.ssrmTxnManager?.applyTransactionAsync(transaction, callback); +} +function retryServerSideLoads(beans) { + _getServerSideRowModel(beans)?.retryLoads(); +} +function flushServerSideAsyncTransactions(beans) { + return beans.ssrmTxnManager?.flushAsyncTransactions(); +} +function refreshServerSide(beans, params) { + _getServerSideRowModel(beans)?.refreshStore(params); +} +function getServerSideGroupLevelState(beans) { + return _getServerSideRowModel(beans)?.getStoreState() ?? []; +} + +// packages/ag-grid-enterprise/src/serverSideRowModel/services/serverSideExpansionService.ts +import { RowNode as RowNode7, _exists as _exists27, _getRowHeightForNode as _getRowHeightForNode4 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/serverSideRowModel/services/expansion/strategies/defaultStrategy.ts +import { BeanStub as BeanStub67 } from "ag-grid-community"; +var ExpandStrategy = class extends BeanStub67 { + constructor() { + super(...arguments); + this.name = "expand"; + this.expanded = /* @__PURE__ */ new Set(); + this.collapsed = /* @__PURE__ */ new Set(); + this.initialState = /* @__PURE__ */ new Map(); + } + /** + * Set the expanded and collapsed rows. + * @param expandedRows the rows to expand + * @param touchedRows the rows that have been touched + */ + setExpandedState({ expandedRowGroupIds, collapsedRowGroupIds }) { + this.expanded = new Set(expandedRowGroupIds); + this.collapsed = new Set(collapsedRowGroupIds); + for (const node of this.expanded) { + this.initialState.set(node, false); + } + for (const node of this.collapsed) { + this.initialState.set(node, true); + } + } + /** + * Get the serializable expanded state + * @returns an object containing the expanded and collapsed rows + */ + getExpandedState() { + return { + expandedRowGroupIds: Array.from(this.expanded), + collapsedRowGroupIds: Array.from(this.collapsed) + }; + } + /** + * Set the expanded state for a row. + * @param row the row to expand/collapse + * @param expanded true to expand the row, false to collapse it + */ + setRowExpanded(row, expanded) { + const id = row.id; + const stateIsDefault = this.initialState.get(id) === expanded; + if (expanded) { + this.collapsed.delete(id); + if (!stateIsDefault) { + this.expanded.add(id); + } + return; + } + this.expanded.delete(id); + if (!stateIsDefault) { + this.collapsed.add(id); + } + } + /** + * Check if a row is expanded. + * @param rowId the row id to check + * @returns true if the row is expanded + */ + isRowExpanded(node) { + const rowId = node.id; + if (this.expanded.has(rowId)) { + return true; + } + if (this.collapsed.has(rowId)) { + return false; + } + const initialVal = this.initialState.get(rowId); + if (initialVal != null) { + return initialVal; + } + const initial = this.getInitialRowState(node); + this.initialState.set(rowId, initial); + return initial; + } + /** + * This is different from just checking expandedState.isExpanded(rowNode.id), + * as this correctly prioritizes user interaction over the user-defined initial state. + * Plus sanity checks that the rowNode is actually expandable. + */ + getInitialRowState(rowNode) { + if (!rowNode.isExpandable()) { + return false; + } + const userFunc = this.gos.getCallback("isServerSideGroupOpenByDefault"); + if (!userFunc) { + return false; + } + const params = { + data: rowNode.data, + rowNode + }; + return userFunc(params); + } + /** + * if the row is expanded or has been collapsed intentionally, do not apply initial state. + * @param rowId the row id to check + * @returns true if the row has been toggled + */ + isRowInitialised(rowId) { + return this.initialState.has(rowId); + } + /** + * Expand or collapse all loaded rows. + * @param expanded true to expand all rows, false to collapse all rows + */ + expandAll(expanded) { + this.beans.rowModel.forEachNode((node) => { + this.setRowExpanded(node, expanded); + }); + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/services/expansion/strategies/expandAllStrategy.ts +import { BeanStub as BeanStub68 } from "ag-grid-community"; +var ExpandAllStrategy = class extends BeanStub68 { + constructor() { + super(...arguments); + this.name = "expandAll"; + this.allExpanded = void 0; + this.flipped = /* @__PURE__ */ new Set(); + } + setExpandedState(state) { + this.allExpanded = state.expandAll; + this.flipped = new Set(state.invertedRowGroupIds); + } + getExpandedState() { + return { + expandAll: this.allExpanded, + invertedRowGroupIds: Array.from(this.flipped) + }; + } + setRowExpanded(row, expanded) { + const id = row.id; + if (expanded === this.allExpanded) { + this.flipped.delete(id); + return; + } + this.flipped.add(id); + } + isRowExpanded(node) { + const rowId = node.id; + return this.allExpanded !== this.flipped.has(rowId); + } + isRowInitialised() { + return true; + } + expandAll(expanded) { + this.allExpanded = expanded; + this.flipped.clear(); + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/services/serverSideExpansionService.ts +var ServerSideExpansionService = class extends BaseExpansionService { + constructor() { + super(...arguments); + this.beanName = "expansionSvc"; + } + wireBeans(beans) { + this.serverSideRowModel = beans.rowModel; + this.storeFactory = beans.ssrmStoreFactory; + } + setStrategy(strategy) { + this.destroyBean(this.strategy); + this.strategy = this.createManagedBean(strategy); + } + postConstruct() { + const setDefaultExpand = () => { + this.setStrategy(new ExpandStrategy()); + }; + this.addManagedEventListeners({ + // when row grouping / pivot changes, the old expand all state is no longer valid as rows changed + columnRowGroupChanged: setDefaultExpand, + columnPivotChanged: setDefaultExpand, + columnPivotModeChanged: setDefaultExpand + }); + this.addManagedPropertyListener("ssrmExpandAllAffectsAllRows", (p) => { + if (!p.currentValue) { + this.setStrategy(new ExpandStrategy()); + this.updateAllNodes(); + this.dispatchStateUpdatedEvent(); + } + }); + setDefaultExpand(); + } + setExpansionState(state) { + const isExpandAllState = "expandAll" in state; + const isExpandAllStrategy = this.isExpandAllStrategy(this.strategy); + if (isExpandAllState !== isExpandAllStrategy) { + this.setStrategy(isExpandAllState ? new ExpandAllStrategy() : new ExpandStrategy()); + } + this.strategy.setExpandedState(state); + this.dispatchStateUpdatedEvent(); + this.updateAllNodes(); + } + getExpansionState() { + return this.strategy.getExpandedState(); + } + /** + * Updates all nodes to the correct expanded/collapsed state. + */ + updateAllNodes() { + this.serverSideRowModel.forEachNode((node) => { + super.setExpanded(node, this.isNodeExpanded(node)); + }); + } + isExpanded(rowNode) { + let value = rowNode._expanded; + if (value === null) { + value = this.defaultExpanded(rowNode); + rowNode._expanded = value; + } + return value; + } + isNodeExpanded(node) { + return this.strategy.isRowExpanded(node); + } + setExpanded(node, expanded, e, _) { + this.strategy.setRowExpanded(node, expanded); + super.setExpanded(node, expanded, e); + this.dispatchStateUpdatedEvent(); + this.updateExpandedState(node); + } + resetExpansion() { + this.setStrategy(new ExpandStrategy()); + this.updateAllNodes(); + this.dispatchStateUpdatedEvent(); + } + expandAll(expanded) { + const ssrmExpandAllAffectsAllRows = this.beans.gos.get("ssrmExpandAllAffectsAllRows"); + const shouldUseExpandAllStrategy = !this.isExpandAllStrategy(this.strategy) && ssrmExpandAllAffectsAllRows; + if (shouldUseExpandAllStrategy) { + this.setStrategy(new ExpandAllStrategy()); + } + this.strategy.expandAll(expanded); + this.updateAllNodes(); + this.dispatchStateUpdatedEvent(); + this.beans.eventSvc.dispatchEvent({ + type: "expandOrCollapseAll", + source: expanded ? "expandAll" : "collapseAll" + }); + } + isExpandAllStrategy(strategy) { + return strategy.name === "expandAll"; + } + onGroupExpandedOrCollapsed() { + } + setDetailsExpansionState(detailGridApi) { + const { gos: masterGos } = this.beans; + if (!masterGos.get("ssrmExpandAllAffectsAllRows")) { + return; + } + const masterExpansionState = this.getExpansionState(); + const isInitial = masterExpansionState.expandAll === void 0; + if (isInitial) { + return; + } + const allExpanded = masterExpansionState.expandAll && masterExpansionState.invertedRowGroupIds.length === 0; + const allCollapsed = !masterExpansionState.expandAll && masterExpansionState.invertedRowGroupIds.length === 0; + if (allCollapsed === allExpanded) { + return; + } + return allExpanded ? detailGridApi.expandAll() : detailGridApi.collapseAll(); + } + dispatchExpandedEvent(event) { + this.eventSvc.dispatchEvent(event); + this.beans.rowRenderer.refreshRowByNode(event.node); + } + updateExpandedState(rowNode) { + const oldChildStore = rowNode.childStore; + if (rowNode.expanded) { + if (rowNode.master && !rowNode.detailNode) { + rowNode.detailNode = this.createDetailNode(rowNode); + } + if (!oldChildStore && rowNode.hasChildren()) { + const storeParams = this.serverSideRowModel.getParams(); + rowNode.childStore = this.createBean(this.storeFactory.createStore(storeParams, rowNode)); + } + } else if (oldChildStore && this.gos.get("purgeClosedRowNodes")) { + rowNode.childStore = this.destroyBean(oldChildStore); + } + } + createDetailNode(masterNode) { + const detailNode = new RowNode7(this.beans); + detailNode.detail = true; + detailNode.selectable = false; + detailNode.parent = masterNode; + if (_exists27(masterNode.id)) { + detailNode.id = "detail_" + masterNode.id; + } + detailNode.data = masterNode.data; + detailNode.level = masterNode.level + 1; + const defaultDetailRowHeight = 200; + const rowHeight = _getRowHeightForNode4(this.beans, detailNode).height; + detailNode.rowHeight = rowHeight ? rowHeight : defaultDetailRowHeight; + return detailNode; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/services/serverSideSelectionService.ts +import { + BaseSelectionService, + _error as _error8, + _getGroupSelectsDescendants, + _getRowSelectionMode, + _isMultiRowSelection as _isMultiRowSelection3, + _isRowSelection as _isRowSelection3, + _isUsingNewRowSelectionAPI as _isUsingNewRowSelectionAPI2, + _warn as _warn50 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/serverSideRowModel/services/selection/strategies/defaultStrategy.ts +import { BeanStub as BeanStub69, _error as _error6, _isMultiRowSelection, _isUsingNewRowSelectionAPI, _warn as _warn48 } from "ag-grid-community"; +var DefaultStrategy = class extends BeanStub69 { + constructor(selectionCtx) { + super(); + this.selectionCtx = selectionCtx; + this.selectedState = { selectAll: false, toggledNodes: /* @__PURE__ */ new Set() }; + /** + * Whether select-all functionality has ever been used. Used only to print warnings in `getSelectedNodes` for users. + * We print a warning even if not currently selecting all because we want users to be aware of the potential + * for unexpected behaviour when these two features are used together. + */ + this.selectAllUsed = false; + /** This is to prevent regressions, default selectionSvc retains reference of selected nodes. */ + this.selectedNodes = {}; + } + getSelectedState() { + return { + selectAll: this.selectedState.selectAll, + toggledNodes: [...this.selectedState.toggledNodes] + }; + } + setSelectedState(state) { + if (typeof state !== "object") { + _error6(116); + return; + } + if (!("selectAll" in state)) { + _error6(116); + return; + } + if (typeof state.selectAll !== "boolean") { + _error6(117); + return; + } + if (!("toggledNodes" in state) || !Array.isArray(state.toggledNodes)) { + return _warn48(197); + } + const newState = { + selectAll: state.selectAll, + toggledNodes: /* @__PURE__ */ new Set() + }; + state.toggledNodes.forEach((key) => { + if (typeof key === "string") { + newState.toggledNodes.add(key); + } else { + _warn48(196, { key }); + } + }); + const isSelectingMultipleRows = newState.selectAll || newState.toggledNodes.size > 1; + if (_isUsingNewRowSelectionAPI(this.gos) && !_isMultiRowSelection(this.gos) && isSelectingMultipleRows) { + _warn48(130); + return; + } + this.selectedState = newState; + } + deleteSelectionStateFromParent(parentPath, removedNodeIds) { + if (this.selectedState.toggledNodes.size === 0) { + return false; + } + let anyNodesToggled = false; + for (const id of removedNodeIds) { + if (this.selectedState.toggledNodes.delete(id)) { + anyNodesToggled = true; + } + } + return anyNodesToggled; + } + setNodesSelected(params) { + const { nodes, clearSelection, newValue, source } = params; + if (nodes.length === 0) { + return 0; + } + const onlyThisNode = clearSelection && newValue; + if (!_isMultiRowSelection(this.gos) || onlyThisNode) { + if (nodes.length > 1) { + _error6(130); + return 0; + } + const rowNode = nodes[0]; + const node = rowNode.footer ? rowNode.sibling : rowNode; + if (newValue && node.selectable) { + this.selectedNodes = { [node.id]: node }; + this.selectedState = { + selectAll: false, + toggledNodes: /* @__PURE__ */ new Set([node.id]) + }; + } else { + this.selectedNodes = {}; + this.selectedState = { + selectAll: false, + toggledNodes: /* @__PURE__ */ new Set() + }; + } + return 1; + } + const updateNodeState = (rowNode, value = newValue) => { + const node = rowNode.footer ? rowNode.sibling : rowNode; + if (value && node.selectable) { + this.selectedNodes[node.id] = node; + } else { + delete this.selectedNodes[node.id]; + } + const doesNodeConform = value === this.selectedState.selectAll; + if (doesNodeConform || !node.selectable) { + this.selectedState.toggledNodes.delete(node.id); + } else { + this.selectedState.toggledNodes.add(node.id); + } + }; + for (const node of nodes) { + updateNodeState(node); + } + if (nodes.length === 1 && source === "api") { + this.selectionCtx.setRoot(nodes[0].footer ? nodes[0].sibling : nodes[0]); + } + return 1; + } + processNewRow(node) { + if (this.selectedNodes[node.id]) { + this.selectedNodes[node.id] = node; + } + } + isNodeSelected(node) { + const isToggled = this.selectedState.toggledNodes.has(node.id); + return this.selectedState.selectAll ? !isToggled : isToggled; + } + getSelectedNodes(nullWhenSelectAll = false, warnWhenSelectAll = true) { + const { + selectedState: { selectAll }, + selectedNodes, + selectAllUsed + } = this; + if (warnWhenSelectAll && selectAllUsed) { + _warn48(199); + } + return nullWhenSelectAll && selectAll ? null : Object.values(selectedNodes); + } + getSelectedRows() { + return (this.getSelectedNodes() ?? []).map((node) => node.data); + } + getSelectionCount() { + if (this.selectedState.selectAll) { + return -1; + } + return this.selectedState.toggledNodes.size; + } + isEmpty() { + return !this.selectedState.selectAll && !this.selectedState.toggledNodes?.size; + } + selectAllRowNodes() { + this.reset(true); + } + deselectAllRowNodes() { + this.reset(false); + } + reset(selectAll) { + this.selectedState = { selectAll, toggledNodes: /* @__PURE__ */ new Set() }; + this.selectedNodes = {}; + this.selectAllUsed || (this.selectAllUsed = selectAll); + } + getSelectAllState() { + if (this.selectedState.selectAll) { + if (this.selectedState.toggledNodes.size > 0) { + return null; + } + return true; + } + if (this.selectedState.toggledNodes.size > 0) { + return null; + } + return false; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/services/selection/strategies/groupSelectsChildrenStrategy.ts +import { BeanStub as BeanStub70, _error as _error7, _isMultiRowSelection as _isMultiRowSelection2, _warn as _warn49 } from "ag-grid-community"; +var GroupSelectsChildrenStrategy = class extends BeanStub70 { + constructor(selectionCtx) { + super(); + this.selectionCtx = selectionCtx; + this.selectedState = { selectAllChildren: false, toggledNodes: /* @__PURE__ */ new Map() }; + } + wireBeans(beans) { + this.rowModel = beans.rowModel; + this.rowGroupColsSvc = beans.rowGroupColsSvc; + this.filterManager = beans.filterManager; + this.selectionSvc = beans.selectionSvc; + } + postConstruct() { + this.addManagedEventListeners({ + // if model has updated, a store may now be fully loaded to clean up indeterminate states + modelUpdated: () => this.removeRedundantState(), + // when the grouping changes, the state no longer makes sense, so reset the state. + columnRowGroupChanged: () => this.selectionSvc.reset("rowGroupChanged") + }); + } + getSelectedState() { + const { gos, rowGroupColsSvc, selectedState } = this; + const treeData = gos.get("treeData"); + const recursivelySerializeState = (state, level, nodeId) => { + const normalisedState = { + nodeId + }; + if (treeData || rowGroupColsSvc && level <= rowGroupColsSvc.columns.length) { + normalisedState.selectAllChildren = state.selectAllChildren; + } + if (state.toggledNodes.size) { + const toggledNodes = []; + state.toggledNodes.forEach((value, key) => { + const newState = recursivelySerializeState(value, level + 1, key); + toggledNodes.push(newState); + }); + normalisedState.toggledNodes = toggledNodes; + } + return normalisedState; + }; + return recursivelySerializeState(selectedState, 0); + } + setSelectedState(state) { + if ("selectAll" in state) { + _error7(111); + return; + } + const recursivelyDeserializeState = (normalisedState, parentSelected) => { + if (typeof normalisedState !== "object") { + _error7(243); + throw new Error(); + } + if ("selectAllChildren" in normalisedState && typeof normalisedState.selectAllChildren !== "boolean") { + _error7(244); + throw new Error(); + } + if ("toggledNodes" in normalisedState) { + if (!Array.isArray(normalisedState.toggledNodes)) { + _error7(245); + throw new Error(); + } + const allHaveIds = normalisedState.toggledNodes.every( + (innerState) => typeof innerState === "object" && "nodeId" in innerState && typeof innerState.nodeId === "string" + ); + if (!allHaveIds) { + _error7(246); + throw new Error(); + } + } + const isThisNodeSelected = normalisedState.selectAllChildren ?? !parentSelected; + const convertedChildren = normalisedState.toggledNodes?.map((innerState) => [ + innerState.nodeId, + recursivelyDeserializeState(innerState, isThisNodeSelected) + ]); + const doesRedundantStateExist = convertedChildren?.some( + ([, innerState]) => isThisNodeSelected === innerState.selectAllChildren && innerState.toggledNodes.size === 0 + ); + if (doesRedundantStateExist) { + _error7(247); + throw new Error(); + } + return { + selectAllChildren: isThisNodeSelected, + toggledNodes: new Map(convertedChildren) + }; + }; + try { + this.selectedState = recursivelyDeserializeState(state, !!state.selectAllChildren); + } catch (e) { + } + } + deleteSelectionStateFromParent(parentRoute, removedNodeIds) { + let parentState = this.selectedState; + const remainingRoute = [...parentRoute]; + while (parentState && remainingRoute.length) { + parentState = parentState.toggledNodes.get(remainingRoute.pop()); + } + if (!parentState) { + return false; + } + let anyStateChanged = false; + for (const id of removedNodeIds) { + if (parentState?.toggledNodes.delete(id)) { + anyStateChanged = true; + } + } + if (anyStateChanged) { + this.removeRedundantState(); + } + return anyStateChanged; + } + setNodesSelected({ nodes, newValue, clearSelection, source }) { + if (nodes.length === 0) { + return 0; + } + const onlyThisNode = clearSelection && newValue; + if (!_isMultiRowSelection2(this.gos) || onlyThisNode) { + if (nodes.length > 1) { + _error7(130); + return 0; + } + this.deselectAllRowNodes(); + } + for (const rowNode of nodes) { + const node = rowNode.footer ? rowNode.sibling : rowNode; + const idPathToNode = this.getRouteToNode(node); + this.recursivelySelectNode(idPathToNode, this.selectedState, newValue); + } + this.removeRedundantState(); + if (nodes.length === 1 && source === "api") { + this.selectionCtx.setRoot(nodes[0].footer ? nodes[0].sibling : nodes[0]); + } + return 1; + } + isNodeSelected(node) { + const path = this.getRouteToNode(node); + return this.isNodePathSelected(path, this.selectedState); + } + isNodePathSelected([nextNode, ...nodes], state) { + if (nodes.length === 0) { + const isToggled = state.toggledNodes.has(nextNode.id); + if (nextNode.hasChildren()) { + const groupState = state.toggledNodes.get(nextNode.id); + if (groupState?.toggledNodes.size) { + return void 0; + } + } + return state.selectAllChildren ? !isToggled : isToggled; + } + if (state.toggledNodes.has(nextNode.id)) { + const nextState = state.toggledNodes.get(nextNode.id); + if (nextState) { + return this.isNodePathSelected(nodes, nextState); + } + } + return state.selectAllChildren; + } + getRouteToNode(node) { + const pathToNode = []; + let tempNode = node; + while (tempNode.parent) { + pathToNode.push(tempNode); + tempNode = tempNode.parent; + } + return pathToNode.reverse(); + } + removeRedundantState() { + if (this.filterManager?.isAnyFilterPresent()) { + return; + } + const forEachNodeStateDepthFirst = (state = this.selectedState, thisKey, parentState) => { + state.toggledNodes.forEach((value, key) => { + forEachNodeStateDepthFirst(value, key, state); + }); + if (thisKey) { + const thisRow = this.rowModel.getRowNode(thisKey); + const thisRowStore = thisRow?.childStore; + const isStoreSizeKnown = thisRowStore?.isLastRowIndexKnown(); + if (isStoreSizeKnown) { + const possibleAllNodesToggled = state.toggledNodes.size >= thisRowStore.getRowCount(); + if (possibleAllNodesToggled) { + for (const childState of state.toggledNodes.entries()) { + const [key, value] = childState; + if (value.toggledNodes.size > 0) { + return; + } + const rowDoesNotExist = !this.rowModel.getRowNode(key); + if (rowDoesNotExist) { + return; + } + } + state.selectAllChildren = !state.selectAllChildren; + state.toggledNodes.clear(); + } + } + } + const hasNoToggledRows = state.toggledNodes.size === 0; + const isIdenticalToParent = parentState?.selectAllChildren === state.selectAllChildren; + if (hasNoToggledRows && isIdenticalToParent) { + parentState?.toggledNodes.delete(thisKey); + } + }; + forEachNodeStateDepthFirst(); + } + recursivelySelectNode([nextNode, ...nodes], selectedState, newValue) { + if (!nextNode) { + return; + } + const isLastNode = !nodes.length; + if (isLastNode) { + const isNodeSelectable = nextNode.selectable; + const doesNodeConform = selectedState.selectAllChildren === newValue; + if (doesNodeConform || !isNodeSelectable) { + selectedState.toggledNodes.delete(nextNode.id); + return; + } + const newState = { + selectAllChildren: newValue, + toggledNodes: /* @__PURE__ */ new Map() + }; + selectedState.toggledNodes.set(nextNode.id, newState); + return; + } + const doesStateAlreadyExist = selectedState.toggledNodes.has(nextNode.id); + const childState = selectedState.toggledNodes.get(nextNode.id) ?? { + selectAllChildren: selectedState.selectAllChildren, + toggledNodes: /* @__PURE__ */ new Map() + }; + if (!doesStateAlreadyExist) { + selectedState.toggledNodes.set(nextNode.id, childState); + } + this.recursivelySelectNode(nodes, childState, newValue); + if (selectedState.selectAllChildren === childState.selectAllChildren && childState.toggledNodes.size === 0) { + selectedState.toggledNodes.delete(nextNode.id); + } + } + getSelectedNodes(nullWhenSelectAll = false) { + _warn49(202); + if (this.selectedState.selectAllChildren && nullWhenSelectAll) { + return null; + } + const selectedNodes = []; + this.rowModel.forEachNode((node) => { + if (node.isSelected()) { + selectedNodes.push(node); + } + }); + return selectedNodes; + } + processNewRow() { + } + getSelectedRows() { + return this.getSelectedNodes()?.map((node) => node.data) ?? []; + } + getSelectionCount() { + return -1; + } + isEmpty() { + return !this.selectedState.selectAllChildren && !this.selectedState.toggledNodes?.size; + } + selectAllRowNodes() { + this.reset(true); + } + deselectAllRowNodes() { + this.reset(false); + } + reset(selectAllChildren2) { + this.selectedState = { selectAllChildren: selectAllChildren2, toggledNodes: /* @__PURE__ */ new Map() }; + } + getSelectAllState() { + if (this.selectedState.selectAllChildren) { + if (this.selectedState.toggledNodes.size > 0) { + return null; + } + return true; + } + if (this.selectedState.toggledNodes.size > 0) { + return null; + } + return false; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/services/serverSideSelectionService.ts +var ServerSideSelectionService = class extends BaseSelectionService { + constructor() { + super(...arguments); + this.beanName = "selectionSvc"; + } + postConstruct() { + super.postConstruct(); + this.addManagedPropertyListeners(["groupSelectsChildren", "rowSelection"], () => { + const groupSelectsChildren2 = _getGroupSelectsDescendants(this.gos); + const Strategy2 = groupSelectsChildren2 && this.selectionStrategy instanceof DefaultStrategy ? GroupSelectsChildrenStrategy : !groupSelectsChildren2 && this.selectionStrategy instanceof GroupSelectsChildrenStrategy ? DefaultStrategy : void 0; + if (Strategy2) { + this.destroyBean(this.selectionStrategy); + this.selectionStrategy = this.createManagedBean(new Strategy2(this.selectionCtx)); + this.shotgunResetNodeSelectionState(); + this.dispatchSelectionChanged("api"); + } + }); + this.addManagedPropertyListeners(["rowSelection"], () => { + const rowSelection = _getRowSelectionMode(this.gos); + if (rowSelection !== this.selectionMode) { + this.selectionMode = rowSelection; + this.deselectAllRowNodes({ source: "api" }); + } + }); + this.selectionMode = _getRowSelectionMode(this.gos); + const groupSelectsChildren = _getGroupSelectsDescendants(this.gos); + const Strategy = !groupSelectsChildren ? DefaultStrategy : GroupSelectsChildrenStrategy; + this.selectionStrategy = this.createManagedBean(new Strategy(this.selectionCtx)); + } + handleSelectionEvent(event, rowNode, source) { + if (this.isRowSelectionBlocked(rowNode)) { + return 0; + } + let updatedRows = 0; + const selection = this.inferNodeSelections(rowNode, event.shiftKey, event.metaKey || event.ctrlKey, source); + if (selection == null) { + return 0; + } + this.selectionCtx.selectAll = false; + if ("select" in selection) { + if (selection.reset) { + this.selectionStrategy.deselectAllRowNodes({ source: "api" }); + } else { + this.selectionStrategy.setNodesSelected({ nodes: selection.deselect, newValue: false, source }); + } + updatedRows = this.selectionStrategy.setNodesSelected({ nodes: selection.select, newValue: true, source }); + } else { + updatedRows = this.selectionStrategy.setNodesSelected({ + nodes: [selection.node], + newValue: selection.newValue, + clearSelection: selection.clearSelection, + event, + source + }); + } + this.shotgunResetNodeSelectionState(source); + this.dispatchSelectionChanged(source); + return updatedRows; + } + getSelectionState() { + return this.selectionStrategy.getSelectedState(); + } + setSelectionState(state, source) { + if (!_isRowSelection3(this.gos)) { + if (state) { + _warn50(132); + } + return; + } + if (Array.isArray(state)) { + return; + } + if (state) { + this.selectionStrategy.setSelectedState(state); + this.shotgunResetNodeSelectionState(); + this.dispatchSelectionChanged(source); + } else { + this.deselectAllRowNodes({ source }); + } + } + setNodesSelected(params) { + if (!_isRowSelection3(this.gos) && params.newValue) { + _warn50(132); + return 0; + } + const { nodes, ...otherParams } = params; + if (nodes.length > 1 && this.selectionMode !== "multiRow") { + _warn50(130); + return 0; + } + const adjustedParams = { + nodes: nodes.filter((node) => node.selectable), + ...otherParams + }; + if (!adjustedParams.nodes.length) { + return 0; + } + const changedNodes = this.selectionStrategy.setNodesSelected(adjustedParams); + this.shotgunResetNodeSelectionState(adjustedParams.source); + this.dispatchSelectionChanged(adjustedParams.source); + return changedNodes; + } + /** + * Deletes the selection state for a set of nodes, for use after deleting nodes via + * transaction. As this is designed for transactions, all nodes should belong to the same group. + */ + deleteSelectionStateFromParent(storeRoute, removedNodeIds) { + const stateChanged = this.selectionStrategy.deleteSelectionStateFromParent(storeRoute, removedNodeIds); + if (!stateChanged) { + return; + } + this.shotgunResetNodeSelectionState(); + this.dispatchSelectionChanged("api"); + } + shotgunResetNodeSelectionState(source) { + this.beans.rowModel.forEachNode((node) => { + if (node.stub) { + return; + } + const isNodeSelected = this.selectionStrategy.isNodeSelected(node); + if (isNodeSelected !== node.isSelected()) { + this.selectRowNode(node, isNodeSelected, void 0, source); + } + }); + } + getSelectedNodes() { + return this.selectionStrategy.getSelectedNodes() ?? []; + } + getSelectedRows() { + return this.selectionStrategy.getSelectedRows(); + } + getSelectionCount() { + return this.selectionStrategy.getSelectionCount(); + } + syncInRowNode(rowNode) { + this.selectionStrategy.processNewRow(rowNode); + const isNodeSelected = this.selectionStrategy.isNodeSelected(rowNode); + if (isNodeSelected != false && !rowNode.selectable) { + this.selectionStrategy.setNodesSelected({ + nodes: [rowNode], + newValue: false, + source: "api" + }); + this.shotgunResetNodeSelectionState(); + this.dispatchSelectionChanged("api"); + return; + } + rowNode.__selected = isNodeSelected; + } + reset() { + this.selectionStrategy.deselectAllRowNodes({ source: "api" }); + this.selectionCtx.reset(); + } + isEmpty() { + return this.selectionStrategy.isEmpty(); + } + hasNodesToSelect() { + return true; + } + selectAllRowNodes(params) { + if (!_isRowSelection3(this.gos)) { + _warn50(132); + return; + } + validateSelectionParameters(params); + if (_isUsingNewRowSelectionAPI2(this.gos) && !_isMultiRowSelection3(this.gos)) { + return _warn50(130); + } + this.selectionStrategy.selectAllRowNodes(params); + this.selectionCtx.selectAll = true; + this.beans.rowModel.forEachNode((node) => { + if (node.stub) { + return; + } + this.selectRowNode(node, true, void 0, params.source); + }); + this.dispatchSelectionChanged(params.source); + } + deselectAllRowNodes(params) { + validateSelectionParameters(params); + this.selectionStrategy.deselectAllRowNodes(params); + this.selectionCtx.selectAll = false; + this.beans.rowModel.forEachNode((node) => { + if (node.stub) { + return; + } + this.selectRowNode(node, false, void 0, params.source); + }); + this.dispatchSelectionChanged(params.source); + } + getSelectAllState(selectAll) { + return this.selectionStrategy.getSelectAllState(selectAll); + } + // used by CSRM + getBestCostNodeSelection() { + return _warn50(194, { method: "getBestCostNodeSelection" }); + } + /** + * Updates the selectable state for a node by invoking isRowSelectable callback. + * If the node is not selectable, it will be deselected. + * + * Callers: + * - property isRowSelectable changed + * - after grouping / treeData + */ + updateSelectable() { + if (!_isRowSelection3(this.gos)) { + return; + } + const nodesToDeselect = []; + this.beans.rowModel.forEachNode((node) => { + const rowSelectable = this.updateRowSelectable(node, true); + if (!rowSelectable && node.isSelected()) { + nodesToDeselect.push(node); + } + }); + if (nodesToDeselect.length) { + this.setNodesSelected({ + nodes: nodesToDeselect, + newValue: false, + source: "selectableChanged" + }); + } + } + dispatchSelectionChanged(source) { + this.eventSvc.dispatchEvent({ + type: "selectionChanged", + source, + selectedNodes: this.selectionStrategy instanceof GroupSelectsChildrenStrategy ? null : this.selectionStrategy.getSelectedNodes(true, false), + serverSideState: this.getSelectionState() + }); + } + updateSelectableAfterGrouping() { + return _error8(194, { method: "updateSelectableAfterGrouping" }); + } + refreshMasterNodeState() { + } + setDetailSelectionState() { + return; + } +}; +function validateSelectionParameters({ selectAll }) { + if (selectAll === "filtered" || selectAll === "currentPage") { + _warn50(195, { justCurrentPage: selectAll === "currentPage" }); + } +} + +// packages/ag-grid-enterprise/src/serverSideRowModel/services/ssrmRowChildrenService.ts +import { BeanStub as BeanStub71 } from "ag-grid-community"; +var SsrmRowChildrenService = class extends BeanStub71 { + constructor() { + super(...arguments); + this.beanName = "rowChildrenSvc"; + } + getHasChildrenValue(rowNode) { + const isTreeData = this.gos.get("treeData"); + const isGroupFunc = this.gos.get("isServerSideGroup"); + return !rowNode.stub && !rowNode.footer && (isTreeData ? !!isGroupFunc && isGroupFunc(rowNode.data) : !!rowNode.group); + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/stores/lazy/lazyBlockLoadingService.ts +import { BeanStub as BeanStub72, _addGridCommonParams as _addGridCommonParams25, _getMaxConcurrentDatasourceRequests } from "ag-grid-community"; +var LazyBlockLoadingService = class extends BeanStub72 { + constructor() { + super(...arguments); + this.beanName = "lazyBlockLoadingSvc"; + this.outboundRequests = 0; + // a map of caches to loading nodes + this.cacheLoadingNodesMap = /* @__PURE__ */ new Map(); + // if a check is queued to happen this cycle + this.isCheckQueued = false; + // this is cached for blockLoadDebounce + this.nextBlockToLoad = void 0; + } + wireBeans(beans) { + this.rowRenderer = beans.rowRenderer; + this.rowModel = beans.rowModel; + } + postConstruct() { + this.maxOutboundRequests = _getMaxConcurrentDatasourceRequests(this.gos); + } + subscribe(cache) { + this.cacheLoadingNodesMap.set(cache, /* @__PURE__ */ new Set()); + } + unsubscribe(cache) { + this.cacheLoadingNodesMap.delete(cache); + } + /** + * Queues a microtask to check if any blocks need to be loaded. + */ + queueLoadCheck() { + if (this.isCheckQueued) { + return; + } + this.isCheckQueued = true; + setTimeout(() => { + this.queueLoadAction(); + this.isCheckQueued = false; + }); + } + onLoadComplete() { + this.outboundRequests -= 1; + this.queueLoadCheck(); + } + hasAvailableLoadBandwidth() { + if (this.maxOutboundRequests === void 0) { + return true; + } + return this.outboundRequests < this.maxOutboundRequests; + } + queueLoadAction() { + const nextBlockToLoad = this.getBlockToLoad(); + if (!nextBlockToLoad) { + return; + } + const isSameBlock = this.nextBlockToLoad && this.nextBlockToLoad.cache === nextBlockToLoad.cache && this.nextBlockToLoad.index === nextBlockToLoad.index; + if (isSameBlock) { + return; + } + if (!this.nextBlockToLoad || !isSameBlock) { + this.nextBlockToLoad = nextBlockToLoad; + window.clearTimeout(this.loaderTimeout); + const startRow = Number(this.nextBlockToLoad.index); + const cache = this.nextBlockToLoad.cache; + const endRow = nextBlockToLoad.index + nextBlockToLoad.cache.getBlockSize(); + this.loaderTimeout = window.setTimeout(() => { + if (!cache.isAlive()) { + return; + } + this.loaderTimeout = void 0; + this.attemptLoad(cache, startRow, endRow); + this.nextBlockToLoad = void 0; + }, this.gos.get("blockLoadDebounceMillis")); + } + } + attemptLoad(cache, start, end) { + const hasBandwidth = this.hasAvailableLoadBandwidth(); + if (!hasBandwidth) { + return; + } + this.executeLoad(cache, start, end); + this.queueLoadCheck(); + } + executeLoad(cache, startRow, endRow) { + const ssrmParams = cache.getSsrmParams(); + const request = { + startRow, + endRow, + rowGroupCols: ssrmParams.rowGroupCols, + valueCols: ssrmParams.valueCols, + pivotCols: ssrmParams.pivotCols, + pivotMode: ssrmParams.pivotMode, + groupKeys: cache.store.getParentNode().getRoute() ?? [], + filterModel: ssrmParams.filterModel, + sortModel: ssrmParams.sortModel + }; + const loadingNodes = this.cacheLoadingNodesMap.get(cache); + const removeNodesFromLoadingMap = () => { + for (let i = 0; i < endRow - startRow; i++) { + loadingNodes.delete(startRow + i); + } + }; + const addNodesToLoadingMap = () => { + for (let i = 0; i < endRow - startRow; i++) { + loadingNodes.add(startRow + i); + } + }; + const success = (params2) => { + this.onLoadComplete(); + cache.onLoadSuccess(startRow, endRow - startRow, params2); + removeNodesFromLoadingMap(); + }; + const fail = () => { + this.onLoadComplete(); + cache.onLoadFailed(startRow, endRow - startRow); + removeNodesFromLoadingMap(); + }; + const params = _addGridCommonParams25(this.gos, { + request, + success, + fail, + parentNode: cache.store.getParentNode() + }); + addNodesToLoadingMap(); + this.outboundRequests += 1; + cache.getSsrmParams().datasource?.getRows(params); + } + getBlockToLoad() { + const firstRowInViewport = this.rowRenderer.firstRenderedRow; + const lastRowInViewport = this.rowRenderer.lastRenderedRow; + for (let i = firstRowInViewport; i <= lastRowInViewport; i++) { + const row = this.rowModel.getRow(i); + if (!row) { + continue; + } + const store = row.parent?.childStore; + if (!store) { + continue; + } + const cache = store.getCache(); + const lazyNode = cache.getNodes().getBy("node", row); + if (!lazyNode) { + continue; + } + const loadingNodes = this.cacheLoadingNodesMap.get(cache); + if (loadingNodes?.has(lazyNode.index)) { + continue; + } + if (row.__needsRefreshWhenVisible || row.stub && !row.failedLoad) { + return { + cache, + index: cache.getBlockStartIndex(lazyNode.index) + }; + } + } + let cacheToRefresh = null; + let nodeToRefresh = null; + let nodeToRefreshDist = Number.MAX_SAFE_INTEGER; + for (const cache of this.cacheLoadingNodesMap.keys()) { + const nodesToRefresh = cache.getNodesToRefresh(); + nodesToRefresh.forEach((node) => { + if (node.rowIndex == null) { + nodeToRefresh = node; + cacheToRefresh = cache; + return; + } + const lazyNode = cache.getNodes().getBy("node", node); + if (!lazyNode) { + return; + } + const loadingNodes = this.cacheLoadingNodesMap.get(cache); + if (loadingNodes?.has(lazyNode.index)) { + return; + } + const distToViewportTop = Math.abs(firstRowInViewport - node.rowIndex); + const distToViewportBottom = Math.abs(node.rowIndex - lastRowInViewport); + if (distToViewportTop < nodeToRefreshDist) { + nodeToRefresh = node; + nodeToRefreshDist = distToViewportTop; + cacheToRefresh = cache; + } + if (distToViewportBottom < nodeToRefreshDist) { + nodeToRefresh = node; + nodeToRefreshDist = distToViewportBottom; + cacheToRefresh = cache; + } + }); + } + if (!cacheToRefresh) { + return void 0; + } + const lazyCache = cacheToRefresh; + const lazyIndex = lazyCache.getNodes().getBy("node", nodeToRefresh)?.index; + return lazyIndex == null ? void 0 : { + cache: lazyCache, + index: lazyCache.getBlockStartIndex(lazyIndex) + }; + } + isRowLoading(cache, index) { + return this.cacheLoadingNodesMap.get(cache)?.has(index) ?? false; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/stores/storeFactory.ts +import { BeanStub as BeanStub75, _warn as _warn53 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/serverSideRowModel/stores/lazy/lazyStore.ts +import { + BeanStub as BeanStub74, + ServerSideTransactionResultStatus, + _getGroupTotalRowCallback as _getGroupTotalRowCallback4, + _getRowHeightAsNumber as _getRowHeightAsNumber5, + _getRowIdCallback as _getRowIdCallback3, + _warn as _warn52 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/serverSideRowModel/stores/lazy/lazyCache.ts +import { BeanStub as BeanStub73, _getRowHeightAsNumber as _getRowHeightAsNumber4, _getRowIdCallback as _getRowIdCallback2, _warn as _warn51 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/serverSideRowModel/stores/lazy/multiIndexMap.ts +var MultiIndexMap = class { + constructor(...indexes) { + this.indexes = indexes; + this.maps = new Map(this.indexes.map((index) => [index, /* @__PURE__ */ new Map()])); + } + getSize() { + return this.maps.get(this.indexes[0]).size; + } + getBy(index, key) { + const map = this.maps.get(index); + return map.get(key); + } + set(item) { + for (const index of this.indexes) { + const map = this.maps.get(index); + map.set(item[index], item); + } + } + delete(item) { + for (const index of this.indexes) { + const map = this.maps.get(index); + map.delete(item[index]); + } + } + clear() { + this.maps.forEach((map) => map.clear()); + } + getIterator(index) { + const map = this.maps.get(index); + return map.values(); + } + forEach(callback) { + const iterator = this.getIterator(this.indexes[0]); + let pointer; + while (pointer = iterator.next()) { + if (pointer.done) { + break; + } + callback(pointer.value); + } + } + find(callback) { + const iterator = this.getIterator(this.indexes[0]); + let pointer; + while (pointer = iterator.next()) { + if (pointer.done) { + break; + } + if (callback(pointer.value)) { + return pointer.value; + } + } + } + filter(predicate) { + const iterator = this.getIterator(this.indexes[0]); + let pointer; + const result = []; + while (pointer = iterator.next()) { + if (pointer.done) { + break; + } + if (predicate(pointer.value)) { + result.push(pointer.value); + } + } + return result; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/stores/lazy/lazyCache.ts +var DEFAULT_BLOCK_SIZE = 100; +var LazyCache = class extends BeanStub73 { + constructor(store, numberOfRows, isLastRowKnown, storeParams) { + super(); + /** + * Indicates whether this is still the live dataset for this store (used for ignoring old requests after purge) + */ + this.live = true; + /** + * A cache of removed group nodes, this is retained for preserving group + * state when the node moves in and out of the cache. Generally caused by + * rows moving blocks. + */ + this.removedNodeCache = /* @__PURE__ */ new Map(); + this.store = store; + this.numberOfRows = numberOfRows; + this.isLastRowKnown = isLastRowKnown; + this.storeParams = storeParams; + } + wireBeans(beans) { + this.rowRenderer = beans.rowRenderer; + this.blockUtils = beans.ssrmBlockUtils; + this.focusSvc = beans.focusSvc; + this.nodeManager = beans.ssrmNodeManager; + this.serverSideRowModel = beans.rowModel; + this.rowNodeSorter = beans.rowNodeSorter; + this.sortSvc = beans.sortSvc; + this.lazyBlockLoadingSvc = beans.lazyBlockLoadingSvc; + this.colModel = beans.colModel; + } + postConstruct() { + this.lazyBlockLoadingSvc.subscribe(this); + this.nodeMap = new MultiIndexMap("index", "id", "node"); + this.nodeDisplayIndexMap = /* @__PURE__ */ new Map(); + this.nodesToRefresh = /* @__PURE__ */ new Set(); + const { blockUtils, gos, store } = this; + this.defaultNodeIdPrefix = blockUtils.createNodeIdPrefix(store.getParentNode()); + this.getRowIdFunc = _getRowIdCallback2(gos); + this.isMasterDetail = gos.get("masterDetail"); + } + destroy() { + this.lazyBlockLoadingSvc.unsubscribe(this); + this.numberOfRows = 0; + this.nodeMap.forEach((node) => this.blockUtils.destroyRowNode(node.node)); + this.nodeMap.clear(); + this.nodeDisplayIndexMap.clear(); + this.nodesToRefresh.clear(); + this.live = false; + super.destroy(); + } + /** + * Get the row node for a specific display index from this store + * @param displayIndex the display index of the node to find + * @returns undefined if the node is not in the store bounds, otherwise will always return a node + */ + getRowByDisplayIndex(displayIndex) { + if (!this.store.isDisplayIndexInStore(displayIndex)) { + return void 0; + } + const node = this.nodeDisplayIndexMap.get(displayIndex); + if (node) { + if (node.stub || node.__needsRefreshWhenVisible) { + this.lazyBlockLoadingSvc.queueLoadCheck(); + } + return node; + } + const hideOpenGroups = this.gos.get("groupHideOpenParents") || this.gos.get("groupAllowUnbalanced"); + if (hideOpenGroups) { + const nextParent = this.nodeMap.find( + (lazyNode) => !!lazyNode.node.childStore?.isDisplayIndexInStore(displayIndex) + ); + if (nextParent) { + return nextParent.node.childStore?.getRowUsingDisplayIndex(displayIndex); + } + } + if (displayIndex === this.store.getDisplayIndexStart()) { + return this.createStubNode(0, displayIndex); + } + const contiguouslyPreviousNode = this.nodeDisplayIndexMap.get(displayIndex - 1); + if (contiguouslyPreviousNode) { + if (this.isMasterDetail && contiguouslyPreviousNode.master && contiguouslyPreviousNode.expanded) { + return contiguouslyPreviousNode.detailNode; + } + if (contiguouslyPreviousNode.expanded && contiguouslyPreviousNode.childStore?.isDisplayIndexInStore(displayIndex)) { + return contiguouslyPreviousNode.childStore?.getRowUsingDisplayIndex( + displayIndex + ); + } + const lazyCacheNode = this.nodeMap.getBy("node", contiguouslyPreviousNode); + return this.createStubNode(lazyCacheNode.index + 1, displayIndex); + } + const adjacentNodes = this.getSurroundingNodesByDisplayIndex(displayIndex); + if (adjacentNodes == null) { + const storeIndexFromEndIndex2 = this.store.getRowCount() - (this.store.getDisplayIndexEnd() - displayIndex); + return this.createStubNode(storeIndexFromEndIndex2, displayIndex); + } + const { previousNode, nextNode } = adjacentNodes; + if (previousNode?.node.expanded && previousNode.node.childStore?.isDisplayIndexInStore(displayIndex)) { + return previousNode.node.childStore?.getRowUsingDisplayIndex(displayIndex); + } + if (nextNode) { + const displayIndexDiff = nextNode.node.rowIndex - displayIndex; + const newStoreIndex = nextNode.index - displayIndexDiff; + return this.createStubNode(newStoreIndex, displayIndex); + } + const storeIndexFromEndIndex = this.store.getRowCount() - (this.store.getDisplayIndexEnd() - displayIndex); + return this.createStubNode(storeIndexFromEndIndex, displayIndex); + } + /** + * Used for creating and positioning a stub node without firing a store updated event + */ + createStubNode(storeIndex, displayIndex) { + const rowBounds = this.store.getRowBounds(displayIndex); + const newNode = this.createRowAtIndex(storeIndex, null, (node) => { + node.setRowIndex(displayIndex); + node.setRowTop(rowBounds.rowTop); + this.nodeDisplayIndexMap.set(displayIndex, node); + }); + if (storeIndex === 0 && this.gos.get("groupHideOpenParents")) { + const parentGroupData = this.store.getParentNode().groupData; + if (parentGroupData) { + for (const key of Object.keys(parentGroupData)) { + setRowNodeGroupValue(newNode, this.colModel, key, parentGroupData[key]); + } + } + } + this.lazyBlockLoadingSvc.queueLoadCheck(); + return newNode; + } + /** + * @param index The row index relative to this store + * @returns A rowNode at the given store index + */ + getRowByStoreIndex(index) { + return this.nodeMap.getBy("index", index)?.node; + } + /** + * Given a number of rows, skips through the given sequence & row top reference (using default row height) + * @param numberOfRowsToSkip number of rows to skip over in the given sequence + * @param displayIndexSeq the sequence in which to skip + * @param nextRowTop the row top reference in which to skip + */ + skipDisplayIndexes(numberOfRowsToSkip, displayIndexSeq, nextRowTop) { + if (numberOfRowsToSkip === 0) { + return; + } + const defaultRowHeight = _getRowHeightAsNumber4(this.beans); + displayIndexSeq.value += numberOfRowsToSkip; + nextRowTop.value += numberOfRowsToSkip * defaultRowHeight; + } + /** + * @param displayIndexSeq the number sequence for generating the display index of each row + * @param nextRowTop an object containing the next row top value intended to be modified by ref per row + */ + setDisplayIndexes(displayIndexSeq, nextRowTop, uiLevel) { + this.nodeDisplayIndexMap.clear(); + const orderedMap = {}; + this.nodeMap.forEach((lazyNode) => { + orderedMap[lazyNode.index] = lazyNode.node; + }); + let lastIndex = -1; + for (const stringIndex of Object.keys(orderedMap)) { + const node = orderedMap[stringIndex]; + const numericIndex = Number(stringIndex); + const numberOfRowsToSkip2 = numericIndex - 1 - lastIndex; + this.skipDisplayIndexes(numberOfRowsToSkip2, displayIndexSeq, nextRowTop); + const isFirstChild = numericIndex === 0; + if (node.firstChild !== isFirstChild) { + node.firstChild = isFirstChild; + node.dispatchRowEvent("firstChildChanged"); + } + if (isFirstChild && this.gos.get("groupHideOpenParents")) { + const parentGroupData = this.store.getParentNode().groupData; + if (parentGroupData) { + for (const key of Object.keys(parentGroupData)) { + setRowNodeGroupValue(node, this.colModel, key, isFirstChild ? parentGroupData[key] : void 0); + } + } + } + this.blockUtils.setDisplayIndex(node, displayIndexSeq, nextRowTop, uiLevel); + if (node.rowIndex != null) { + this.nodeDisplayIndexMap.set(node.rowIndex, node); + } + lastIndex = numericIndex; + } + const numberOfRowsToSkip = this.numberOfRows - 1 - lastIndex; + this.skipDisplayIndexes(numberOfRowsToSkip, displayIndexSeq, nextRowTop); + this.purgeExcessRows(); + } + getRowCount() { + return this.numberOfRows; + } + setRowCount(rowCount, isLastRowIndexKnown) { + this.numberOfRows = rowCount; + if (isLastRowIndexKnown != null) { + this.isLastRowKnown = isLastRowIndexKnown; + if (isLastRowIndexKnown === false) { + this.numberOfRows += 1; + } + } + this.fireStoreUpdatedEvent(); + } + getNodes() { + return this.nodeMap; + } + getNodeCachedByDisplayIndex(displayIndex) { + return this.nodeDisplayIndexMap.get(displayIndex) ?? null; + } + getNodesToRefresh() { + return this.nodesToRefresh; + } + /** + * @returns the previous and next loaded row nodes surrounding the given display index + */ + getSurroundingNodesByDisplayIndex(displayIndex) { + let nextNode; + let previousNode; + this.nodeMap.forEach((lazyNode) => { + if (displayIndex > lazyNode.node.rowIndex) { + if (previousNode == null || previousNode.node.rowIndex < lazyNode.node.rowIndex) { + previousNode = lazyNode; + } + return; + } + if (nextNode == null || nextNode.node.rowIndex > lazyNode.node.rowIndex) { + nextNode = lazyNode; + } + }); + if (!previousNode && !nextNode) { + return null; + } + return { previousNode, nextNode }; + } + /** + * Get or calculate the display index for a given store index + * @param storeIndex the rows index within this store + * @returns the rows visible display index relative to the grid + */ + getDisplayIndexFromStoreIndex(storeIndex) { + const nodeAtIndex = this.nodeMap.getBy("index", storeIndex); + if (nodeAtIndex) { + return nodeAtIndex.node.rowIndex; + } + let nextNode; + let previousNode; + this.nodeMap.forEach((lazyNode) => { + if (storeIndex > lazyNode.index) { + if (previousNode == null || previousNode.index < lazyNode.index) { + previousNode = lazyNode; + } + return; + } + if (nextNode == null || nextNode.index > lazyNode.index) { + nextNode = lazyNode; + } + }); + if (!nextNode) { + return this.store.getDisplayIndexEnd() - (this.numberOfRows - storeIndex); + } + if (!previousNode) { + return this.store.getDisplayIndexStart() + storeIndex; + } + const storeIndexDiff = storeIndex - previousNode.index; + const previousDisplayIndex = previousNode.node.childStore?.getDisplayIndexEnd() ?? previousNode.node.rowIndex; + return previousDisplayIndex + storeIndexDiff; + } + /** + * Creates a new row and inserts it at the given index + * @param atStoreIndex the node index relative to this store + * @param data the data object to populate the node with + * @returns the new row node + */ + createRowAtIndex(atStoreIndex, data, createNodeCallback) { + const lazyNode = this.nodeMap.getBy("index", atStoreIndex); + if (lazyNode) { + const { node } = lazyNode; + node.__needsRefreshWhenVisible = false; + if (this.doesNodeMatch(data, node)) { + this.blockUtils.updateDataIntoRowNode(node, data); + this.nodesToRefresh.delete(node); + return node; + } + if (this.getRowIdFunc == null && node.hasChildren() && node.expanded) { + this.nodesToRefresh.delete(node); + return node; + } + this.destroyRowAtIndex(atStoreIndex); + } + if (data && this.getRowIdFunc != null) { + const id = this.getRowId(data); + const deletedNode = id && this.removedNodeCache?.get(id); + if (deletedNode) { + this.removedNodeCache?.delete(id); + this.blockUtils.updateDataIntoRowNode(deletedNode, data); + this.nodeMap.set({ + id: deletedNode.id, + node: deletedNode, + index: atStoreIndex + }); + this.nodesToRefresh.delete(deletedNode); + deletedNode.__needsRefreshWhenVisible = false; + return deletedNode; + } + const lazyNode2 = this.nodeMap.getBy("id", id); + if (lazyNode2) { + this.nodeMap.delete(lazyNode2); + const { node, index } = lazyNode2; + this.blockUtils.updateDataIntoRowNode(node, data); + this.nodeMap.set({ + id: node.id, + node, + index: atStoreIndex + }); + this.nodesToRefresh.delete(node); + node.__needsRefreshWhenVisible = false; + if (this.getBlockStartIndex(index) === this.getBlockStartIndex(atStoreIndex)) { + return node; + } + this.markBlockForVerify(index); + return node; + } + } + const newNode = this.blockUtils.createRowNode(this.store.getRowDetails()); + if (data != null) { + const defaultId = this.getPrefixedId(this.store.getIdSequence().value++); + this.blockUtils.setDataIntoRowNode(newNode, data, defaultId, void 0); + this.blockUtils.checkOpenByDefault(newNode); + this.nodeManager.addRowNode(newNode); + } + this.nodeMap.set({ + id: newNode.id, + node: newNode, + index: atStoreIndex + }); + if (createNodeCallback) { + createNodeCallback(newNode); + } + return newNode; + } + getBlockStates() { + const blockCounts = {}; + const blockStates = {}; + this.nodeMap.forEach(({ node, index }) => { + const blockStart = this.getBlockStartIndex(index); + if (!node.stub && !node.failedLoad) { + blockCounts[blockStart] = (blockCounts[blockStart] ?? 0) + 1; + } + let rowState = "loaded"; + if (node.failedLoad) { + rowState = "failed"; + } else if (this.lazyBlockLoadingSvc.isRowLoading(this, blockStart)) { + rowState = "loading"; + } else if (this.nodesToRefresh.has(node) || node.stub) { + rowState = "needsLoading"; + } + if (!blockStates[blockStart]) { + blockStates[blockStart] = /* @__PURE__ */ new Set(); + } + blockStates[blockStart].add(rowState); + }); + const statePriorityMap = { + loading: 4, + failed: 3, + needsLoading: 2, + loaded: 1 + }; + const blockPrefix = this.blockUtils.createNodeIdPrefix(this.store.getParentNode()); + const results = {}; + for (const blockStart of Object.keys(blockStates)) { + const sortedStates = [...blockStates[blockStart]].sort( + (a, b) => (statePriorityMap[a] ?? 0) - (statePriorityMap[b] ?? 0) + ); + const priorityState = sortedStates[0]; + const blockNumber = Number(blockStart) / this.getBlockSize(); + const blockId = blockPrefix ? `${blockPrefix}-${blockNumber}` : String(blockNumber); + results[blockId] = { + blockNumber, + startRow: Number(blockStart), + endRow: Number(blockStart) + this.getBlockSize(), + pageStatus: priorityState, + loadedRowCount: blockCounts[blockStart] ?? 0 + }; + } + return results; + } + destroyRowAtIndex(atStoreIndex) { + const lazyNode = this.nodeMap.getBy("index", atStoreIndex); + if (!lazyNode) { + return; + } + this.nodeMap.delete(lazyNode); + this.nodeDisplayIndexMap.delete(lazyNode.node.rowIndex); + if (this.nodesToRefresh.size > 0) { + this.removedNodeCache.set(lazyNode.node.id, lazyNode.node); + } else { + this.blockUtils.destroyRowNode(lazyNode.node); + } + this.nodesToRefresh.delete(lazyNode.node); + } + getSsrmParams() { + return this.store.getSsrmParams(); + } + /** + * @param id the base id to be prefixed + * @returns a node id with prefix if required + */ + getPrefixedId(id) { + if (this.defaultNodeIdPrefix) { + return this.defaultNodeIdPrefix + "-" + id; + } else { + return id.toString(); + } + } + markBlockForVerify(rowIndex) { + const [start, end] = this.getBlockBounds(rowIndex); + const lazyNodesInRange = this.nodeMap.filter((lazyNode) => lazyNode.index >= start && lazyNode.index < end); + lazyNodesInRange.forEach(({ node }) => { + node.__needsRefreshWhenVisible = true; + }); + } + doesNodeMatch(data, node) { + if (node.stub) { + return false; + } + const id = this.getRowId(data); + return id === null ? node.data === data : node.id === id; + } + /** + * Deletes any stub nodes not within the given range + */ + purgeStubsOutsideOfViewport() { + const { firstRenderedRow, lastRenderedRow } = this.rowRenderer; + const firstRowBlockStart = this.getBlockStartIndex(firstRenderedRow); + const [, lastRowBlockEnd] = this.getBlockBounds(lastRenderedRow); + this.nodeMap.forEach((lazyNode) => { + if (this.lazyBlockLoadingSvc.isRowLoading(this, lazyNode.index) || lazyNode.node.failedLoad) { + return; + } + if (lazyNode.node.stub && (lazyNode.index < firstRowBlockStart || lazyNode.index > lastRowBlockEnd)) { + this.destroyRowAtIndex(lazyNode.index); + } + }); + } + getBlocksDistanceFromRow(nodes, otherDisplayIndex) { + const blockDistanceToMiddle = {}; + nodes.forEach(({ node, index }) => { + const [blockStart, blockEnd] = this.getBlockBounds(index); + if (blockStart in blockDistanceToMiddle) { + return; + } + const distStart = Math.abs(node.rowIndex - otherDisplayIndex); + let distEnd; + const lastLazyNode = this.nodeMap.getBy("index", [blockEnd - 1]); + if (lastLazyNode) { + distEnd = Math.abs(lastLazyNode.node.rowIndex - otherDisplayIndex); + } + const farthest = distEnd == null || distStart < distEnd ? distStart : distEnd; + blockDistanceToMiddle[blockStart] = farthest; + }); + return Object.entries(blockDistanceToMiddle); + } + purgeExcessRows() { + this.purgeStubsOutsideOfViewport(); + if (this.store.getDisplayIndexEnd() == null || this.storeParams.maxBlocksInCache == null) { + return; + } + const { firstRenderedRow, lastRenderedRow } = this.rowRenderer; + const allLoadedBlocks = /* @__PURE__ */ new Set(); + const blocksInViewport = /* @__PURE__ */ new Set(); + this.nodeMap.forEach(({ index, node }) => { + const blockStart = this.getBlockStartIndex(index); + allLoadedBlocks.add(blockStart); + const isInViewport = node.rowIndex >= firstRenderedRow && node.rowIndex <= lastRenderedRow; + if (isInViewport) { + blocksInViewport.add(blockStart); + } + }); + const numberOfBlocksToRetain = Math.max(blocksInViewport.size, this.storeParams.maxBlocksInCache ?? 0); + const loadedBlockCount = allLoadedBlocks.size; + const blocksToRemove = loadedBlockCount - numberOfBlocksToRetain; + if (blocksToRemove <= 0) { + return; + } + let firstRowBlockStart = Number.MAX_SAFE_INTEGER; + let lastRowBlockStart = Number.MIN_SAFE_INTEGER; + blocksInViewport.forEach((blockStart) => { + if (firstRowBlockStart > blockStart) { + firstRowBlockStart = blockStart; + } + if (lastRowBlockStart < blockStart) { + lastRowBlockStart = blockStart; + } + }); + const disposableNodes = this.nodeMap.filter(({ node, index }) => { + const rowBlockStart = this.getBlockStartIndex(index); + const rowBlockInViewport = rowBlockStart >= firstRowBlockStart && rowBlockStart <= lastRowBlockStart; + return !rowBlockInViewport && !this.isNodeCached(node); + }); + if (disposableNodes.length === 0) { + return; + } + const midViewportRow = firstRenderedRow + (lastRenderedRow - firstRenderedRow) / 2; + const blockDistanceArray = this.getBlocksDistanceFromRow(disposableNodes, midViewportRow); + const blockSize = this.getBlockSize(); + blockDistanceArray.sort((a, b) => Math.sign(b[1] - a[1])); + for (let i = 0; i < Math.min(blocksToRemove, blockDistanceArray.length); i++) { + const blockStart = Number(blockDistanceArray[i][0]); + for (let x = blockStart; x < blockStart + blockSize; x++) { + const lazyNode = this.nodeMap.getBy("index", x); + if (!lazyNode || this.isNodeCached(lazyNode.node)) { + continue; + } + this.destroyRowAtIndex(x); + } + } + } + isNodeFocused(node) { + const focusedCell = this.focusSvc.getFocusCellToUseAfterRefresh(); + if (!focusedCell) { + return false; + } + if (focusedCell.rowPinned != null) { + return false; + } + const hasFocus = focusedCell.rowIndex === node.rowIndex; + return hasFocus; + } + isNodeCached(node) { + const isExpandedGroup = node.isExpandable() && node.expanded; + const isUnbalancedNode = this.gos.get("groupAllowUnbalanced") && node.key === ""; + const isEditing = !!this.beans.editSvc?.isRowEditing(node); + return isExpandedGroup || this.isNodeFocused(node) || isUnbalancedNode || isEditing; + } + extractDuplicateIds(rows) { + if (this.getRowIdFunc == null) { + return []; + } + const newIds = /* @__PURE__ */ new Set(); + const duplicates = /* @__PURE__ */ new Set(); + rows.forEach((data) => { + const id = this.getRowId(data); + if (newIds.has(id)) { + duplicates.add(id); + return; + } + newIds.add(id); + }); + return [...duplicates]; + } + onLoadSuccess(firstRowIndex, numberOfRowsExpected, response) { + if (!this.live) { + return; + } + const info = response.groupLevelInfo; + this.store.setStoreInfo(info); + if (this.getRowIdFunc != null) { + const duplicates = this.extractDuplicateIds(response.rowData); + if (duplicates.length > 0) { + const duplicateIdText = duplicates.join(", "); + _warn51(205, { duplicateIdText }); + this.onLoadFailed(firstRowIndex, numberOfRowsExpected); + return; + } + } + if (response.pivotResultFields) { + this.serverSideRowModel.generateSecondaryColumns(response.pivotResultFields); + } + const wasRefreshing = this.nodesToRefresh.size > 0; + response.rowData.forEach((data, responseRowIndex) => { + const rowIndex = firstRowIndex + responseRowIndex; + const nodeFromCache = this.nodeMap.getBy("index", rowIndex); + if (nodeFromCache?.node?.stub) { + this.createRowAtIndex(rowIndex, data); + return; + } + if (nodeFromCache && this.doesNodeMatch(data, nodeFromCache.node)) { + this.blockUtils.updateDataIntoRowNode(nodeFromCache.node, data); + this.nodesToRefresh.delete(nodeFromCache.node); + nodeFromCache.node.__needsRefreshWhenVisible = false; + return; + } + this.createRowAtIndex(rowIndex, data); + }); + if (response.rowCount != void 0 && response.rowCount !== -1) { + this.numberOfRows = response.rowCount; + this.isLastRowKnown = true; + } else if (numberOfRowsExpected > response.rowData.length) { + this.numberOfRows = firstRowIndex + response.rowData.length; + this.isLastRowKnown = true; + } else if (!this.isLastRowKnown) { + const lastInferredRow = firstRowIndex + response.rowData.length + 1; + if (lastInferredRow > this.numberOfRows) { + this.numberOfRows = lastInferredRow; + } + } + if (this.isLastRowKnown) { + const lazyNodesAfterStoreEnd = this.nodeMap.filter((lazyNode) => lazyNode.index >= this.numberOfRows); + lazyNodesAfterStoreEnd.forEach((lazyNode) => this.destroyRowAtIndex(lazyNode.index)); + } + this.fireStoreUpdatedEvent(); + const finishedRefreshing = this.nodesToRefresh.size === 0; + if (wasRefreshing && finishedRefreshing) { + this.fireRefreshFinishedEvent(); + } + } + fireRefreshFinishedEvent() { + const finishedRefreshing = this.nodesToRefresh.size === 0; + if (!finishedRefreshing) { + return; + } + this.removedNodeCache.forEach((node) => { + this.blockUtils.destroyRowNode(node); + }); + this.removedNodeCache = /* @__PURE__ */ new Map(); + this.store.fireRefreshFinishedEvent(); + } + /** + * @returns true if all rows are loaded + */ + isStoreFullyLoaded() { + const knowsSize = this.isLastRowKnown; + const hasCorrectRowCount = this.nodeMap.getSize() === this.numberOfRows; + if (!knowsSize || !hasCorrectRowCount) { + return; + } + if (this.nodesToRefresh.size > 0) { + return; + } + let index = -1; + const firstOutOfPlaceNode = this.nodeMap.find((lazyNode) => { + index += 1; + if (lazyNode.index !== index) { + return true; + } + if (lazyNode.node.__needsRefreshWhenVisible) { + return true; + } + if (lazyNode.node.stub) { + return true; + } + return false; + }); + return firstOutOfPlaceNode == null; + } + isLastRowIndexKnown() { + return this.isLastRowKnown; + } + onLoadFailed(firstRowIndex, numberOfRowsExpected) { + if (!this.live) { + return; + } + const wasRefreshing = this.nodesToRefresh.size > 0; + for (let i = firstRowIndex; i < firstRowIndex + numberOfRowsExpected && i < this.getRowCount(); i++) { + let { node } = this.nodeMap.getBy("index", i) ?? {}; + if (node) { + this.nodesToRefresh.delete(node); + } + if (!node?.stub) { + if (node && !node.stub) { + this.destroyRowAtIndex(i); + } + node = this.createRowAtIndex(i); + } + node.__needsRefreshWhenVisible = false; + node.failedLoad = true; + } + const finishedRefreshing = this.nodesToRefresh.size === 0; + if (wasRefreshing && finishedRefreshing) { + this.fireRefreshFinishedEvent(); + } + this.fireStoreUpdatedEvent(); + } + markNodesForRefresh() { + this.nodeMap.forEach((lazyNode) => { + if (lazyNode.node.stub && !lazyNode.node.failedLoad) { + return; + } + this.nodesToRefresh.add(lazyNode.node); + }); + this.lazyBlockLoadingSvc.queueLoadCheck(); + if (this.isLastRowKnown && this.numberOfRows === 0) { + this.numberOfRows = 1; + this.isLastRowKnown = false; + this.fireStoreUpdatedEvent(); + } + } + isNodeInCache(id) { + return !!this.nodeMap.getBy("id", id); + } + // gets called 1) row count changed 2) cache purged 3) items inserted + fireStoreUpdatedEvent() { + if (!this.live) { + return; + } + this.store.fireStoreUpdatedEvent(); + } + getRowId(data) { + if (this.getRowIdFunc == null) { + return null; + } + const { level } = this.store.getRowDetails(); + const parentKeys = this.store.getParentNode().getRoute() ?? []; + return this.getRowIdFunc({ + data, + parentKeys: parentKeys.length > 0 ? parentKeys : void 0, + level + }); + } + getOrderedNodeMap() { + const obj = {}; + this.nodeMap.forEach((node) => obj[node.index] = node); + return obj; + } + clearDisplayIndexes() { + this.nodeDisplayIndexMap.clear(); + } + /** + * Client side sorting + */ + clientSideSortRows() { + const sortOptions = this.sortSvc?.getSortOptions() ?? []; + const isAnySort = sortOptions.some((opt) => opt.sort != null); + const rowNodeSorter = this.rowNodeSorter; + if (!isAnySort || !rowNodeSorter) { + return; + } + const allNodes = new Array(this.nodeMap.getSize()); + const nodesMap = this.nodeMap; + nodesMap.forEach((lazyNode) => allNodes[lazyNode.index] = lazyNode.node); + nodesMap.clear(); + const sortedNodes = rowNodeSorter.doFullSortInPlace(allNodes, sortOptions); + for (let i = 0, len = sortedNodes.length; i < len; ++i) { + const node = sortedNodes[i]; + nodesMap.set({ id: node.id, node, index: i }); + } + } + /** + * Transaction Support here + */ + updateRowNodes(updates) { + const updatedNodes = []; + updates.forEach((data) => { + const id = this.getRowId(data); + const lazyNode = this.nodeMap.getBy("id", id); + if (lazyNode) { + this.blockUtils.updateDataIntoRowNode(lazyNode.node, data); + updatedNodes.push(lazyNode.node); + } + }); + return updatedNodes; + } + insertRowNodes(inserts, indexToAdd) { + const realRowCount = this.store.getRowCount() - (this.store.getParentNode().sibling ? 1 : 0); + const addIndex = indexToAdd == null && this.isLastRowKnown ? realRowCount : indexToAdd; + if (addIndex == null || realRowCount < addIndex) { + return []; + } + const uniqueInsertsMap = {}; + inserts.forEach((data) => { + const dataId = this.getRowId(data); + if (dataId && this.isNodeInCache(dataId)) { + return; + } + uniqueInsertsMap[dataId] = data; + }); + const uniqueInserts = Object.values(uniqueInsertsMap); + const numberOfInserts = uniqueInserts.length; + if (numberOfInserts === 0) { + return []; + } + const nodesToMove = this.nodeMap.filter((node) => node.index >= addIndex); + nodesToMove.forEach((lazyNode) => this.nodeMap.delete(lazyNode)); + nodesToMove.forEach((lazyNode) => { + this.nodeMap.set({ + node: lazyNode.node, + index: lazyNode.index + numberOfInserts, + id: lazyNode.id + }); + }); + this.numberOfRows += numberOfInserts; + return uniqueInserts.map( + (data, uniqueInsertOffset) => this.createRowAtIndex(addIndex + uniqueInsertOffset, data) + ); + } + removeRowNodes(idsToRemove, newRowCount) { + const removedNodes = []; + const nodesToVerify = []; + let deletedNodeCount = 0; + const remainingIdsToRemove = [...idsToRemove]; + const allNodes = this.getOrderedNodeMap(); + let contiguousIndex = -1; + for (const stringIndex of Object.keys(allNodes)) { + contiguousIndex += 1; + const node = allNodes[stringIndex]; + const matchIndex = remainingIdsToRemove.findIndex((idToRemove) => idToRemove === node.id); + if (matchIndex !== -1) { + remainingIdsToRemove.splice(matchIndex, 1); + this.destroyRowAtIndex(Number(stringIndex)); + removedNodes.push(node.node); + deletedNodeCount += 1; + continue; + } + if (deletedNodeCount === 0) { + continue; + } + const numericStoreIndex = Number(stringIndex); + if (contiguousIndex !== numericStoreIndex) { + nodesToVerify.push(node.node); + } + this.nodeMap.delete(node); + this.nodeMap.set({ + id: node.id, + node: node.node, + index: numericStoreIndex - deletedNodeCount + }); + } + const isNewRowCountValid = newRowCount != null && newRowCount >= 0; + if (isNewRowCountValid) { + this.numberOfRows = newRowCount; + this.isLastRowKnown = true; + } else { + this.numberOfRows -= deletedNodeCount; + } + if (remainingIdsToRemove.length > 0 && nodesToVerify.length > 0) { + nodesToVerify.forEach((node) => node.__needsRefreshWhenVisible = true); + this.lazyBlockLoadingSvc.queueLoadCheck(); + } + return removedNodes; + } + /** + * Return the block size configured for this cache + */ + getBlockSize() { + return this.storeParams.cacheBlockSize || DEFAULT_BLOCK_SIZE; + } + /** + * Get the start index of the loading block for a given index + */ + getBlockStartIndex(storeIndex) { + const blockSize = this.getBlockSize(); + return storeIndex - storeIndex % blockSize; + } + /** + * Get the start and end index of a block, given a row store index + */ + getBlockBounds(storeIndex) { + const startOfBlock = this.getBlockStartIndex(storeIndex); + const blockSize = this.getBlockSize(); + return [startOfBlock, startOfBlock + blockSize]; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/stores/lazy/lazyStore.ts +var LazyStore = class extends BeanStub74 { + constructor(ssrmParams, storeParams, parentRowNode) { + super(); + this.idSequence = { value: 0 }; + this.ssrmParams = ssrmParams; + this.parentRowNode = parentRowNode; + this.storeParams = storeParams; + this.level = parentRowNode.level + 1; + this.group = ssrmParams.rowGroupCols ? this.level < ssrmParams.rowGroupCols.length : false; + this.leafGroup = ssrmParams.rowGroupCols ? this.level === ssrmParams.rowGroupCols.length - 1 : false; + this.info = {}; + } + wireBeans(beans) { + this.blockUtils = beans.ssrmBlockUtils; + this.storeUtils = beans.ssrmStoreUtils; + this.selectionSvc = beans.selectionSvc; + this.rowGroupColsSvc = beans.rowGroupColsSvc; + } + postConstruct() { + let numberOfRows = 1; + if (this.level === 0) { + numberOfRows = this.storeUtils.getServerSideInitialRowCount() ?? 1; + this.eventSvc.dispatchEventOnce({ + type: "rowCountReady" + }); + } + this.cache = this.createManagedBean(new LazyCache(this, numberOfRows, false, this.storeParams)); + const usingTreeData = this.gos.get("treeData"); + if (!usingTreeData && this.group && this.rowGroupColsSvc) { + const groupColVo = this.ssrmParams.rowGroupCols[this.level]; + this.groupField = groupColVo.field; + this.rowGroupColumn = this.rowGroupColsSvc.columns[this.level]; + } + } + destroy() { + this.displayIndexStart = void 0; + this.displayIndexEnd = void 0; + this.destroyBean(this.cache); + super.destroy(); + } + /** + * Given a server response, ingest the rows outside of the data source lifecycle. + * + * @param rowDataParams the server response containing the rows to ingest + * @param startRow the index to start ingesting rows + * @param expectedRows the expected number of rows in the response (used to determine if the last row index is known) + */ + applyRowData(rowDataParams, startRow, expectedRows) { + this.cache.onLoadSuccess(startRow, expectedRows, rowDataParams); + } + /** + * Applies a given transaction to the data set within this store + * + * @param transaction an object containing delta instructions determining the changes to apply to this store + * @returns an object determining the status of this transaction and effected nodes + */ + applyTransaction(transaction) { + const idFunc = _getRowIdCallback3(this.gos); + if (!idFunc) { + _warn52(206); + return { + status: ServerSideTransactionResultStatus.Cancelled + }; + } + const applyCallback = this.gos.getCallback("isApplyServerSideTransaction"); + if (applyCallback) { + const params = { + transaction, + parentNode: this.parentRowNode, + groupLevelInfo: this.info + }; + const apply = applyCallback(params); + if (!apply) { + return { status: ServerSideTransactionResultStatus.Cancelled }; + } + } + const allRowsLoaded = this.cache.isStoreFullyLoaded(); + let updatedNodes = void 0; + if (transaction.update?.length) { + updatedNodes = this.cache.updateRowNodes(transaction.update); + } + let insertedNodes = void 0; + if (transaction.add?.length) { + let addIndex = transaction.addIndex; + if (addIndex != null && addIndex < 0) { + addIndex = void 0; + } + insertedNodes = this.cache.insertRowNodes(transaction.add, addIndex); + } + let removedNodes = void 0; + if (transaction.remove?.length) { + const allIdsToRemove = transaction.remove.map( + (data) => idFunc({ level: this.level, parentKeys: this.parentRowNode.getRoute() ?? [], data }) + ); + const allUniqueIdsToRemove = [...new Set(allIdsToRemove)]; + removedNodes = this.cache.removeRowNodes(allUniqueIdsToRemove, transaction.rowCount); + } + const isClientSideSortingEnabled = this.gos.get("serverSideEnableClientSideSort"); + const isUpdateOrAdd = updatedNodes?.length || insertedNodes?.length; + const isClientSideSort = allRowsLoaded && isClientSideSortingEnabled; + if (isClientSideSort && isUpdateOrAdd) { + this.cache.clientSideSortRows(); + } + this.updateSelectionAfterTransaction(updatedNodes, removedNodes); + return { + status: ServerSideTransactionResultStatus.Applied, + update: updatedNodes, + add: insertedNodes, + remove: removedNodes + }; + } + updateSelectionAfterTransaction(updatedNodes, removedNodes) { + if (!this.selectionSvc) { + return; + } + const nodesToDeselect = []; + for (const node of updatedNodes ?? []) { + if (node.isSelected() && !node.selectable) { + nodesToDeselect.push(node); + } + } + for (const node of removedNodes ?? []) { + if (node.isSelected()) { + nodesToDeselect.push(node); + } + } + if (nodesToDeselect.length) { + this.selectionSvc.setNodesSelected({ + newValue: false, + clearSelection: false, + nodes: nodesToDeselect, + source: "rowDataChanged" + }); + } + } + /** + * Clear the display indexes, used for fading rows out when stores are not being destroyed + */ + clearDisplayIndexes() { + this.displayIndexStart = void 0; + this.displayIndexEnd = void 0; + this.cache.getNodes().forEach((lazyNode) => this.blockUtils.clearDisplayIndex(lazyNode.node)); + if (this.parentRowNode.sibling) { + this.blockUtils.clearDisplayIndex(this.parentRowNode.sibling); + } + this.cache.clearDisplayIndexes(); + } + /** + * @returns an index representing the last sequentially displayed row in the grid for this store + */ + getDisplayIndexStart() { + return this.displayIndexStart; + } + /** + * @returns the index representing one after the last sequentially displayed row in the grid for this store + */ + getDisplayIndexEnd() { + return this.displayIndexEnd; + } + /** + * @returns the virtual size of this store + */ + getRowCount() { + if (this.parentRowNode.sibling) { + return this.cache.getRowCount() + 1; + } + return this.cache.getRowCount(); + } + /** + * Sets the current row count of the store, and whether the last row index is known + */ + setRowCount(rowCount, isLastRowIndexKnown) { + this.cache.setRowCount(rowCount, isLastRowIndexKnown); + } + /** + * Given a display index, returns whether that row is within this store or a child store of this store + * + * @param displayIndex the visible index of a row + * @returns whether or not the row exists within this store + */ + isDisplayIndexInStore(displayIndex) { + if (this.cache.getRowCount() === 0) { + return false; + } + return this.displayIndexStart <= displayIndex && displayIndex < this.getDisplayIndexEnd(); + } + /** + * Recursively sets up the display indexes and top position of every node belonging to this store. + * + * Called after a row height changes, or a store updated event. + * + * @param displayIndexSeq the number sequence for generating the display index of each row + * @param nextRowTop an object containing the next row top value intended to be modified by ref per row + */ + setDisplayIndexes(displayIndexSeq, nextRowTop, uiLevel) { + this.displayIndexStart = displayIndexSeq.value; + this.topPx = nextRowTop.value; + const footerNode = this.parentRowNode.level > -1 && _getGroupTotalRowCallback4(this.gos)({ node: this.parentRowNode }); + if (!footerNode) { + _destroyRowNodeFooter(this.parentRowNode); + } + if (footerNode === "top") { + _createRowNodeFooter(this.parentRowNode, this.beans); + this.blockUtils.setDisplayIndex(this.parentRowNode.sibling, displayIndexSeq, nextRowTop, uiLevel); + } + this.cache.setDisplayIndexes(displayIndexSeq, nextRowTop, uiLevel); + if (footerNode === "bottom") { + _createRowNodeFooter(this.parentRowNode, this.beans); + this.blockUtils.setDisplayIndex(this.parentRowNode.sibling, displayIndexSeq, nextRowTop, uiLevel); + } + this.displayIndexEnd = displayIndexSeq.value; + this.heightPx = nextRowTop.value - this.topPx; + } + /** + * Recursively applies a provided function to every node + * + * For the purpose of exclusively server side filtered stores, this is the same as getNodes().forEachDeepAfterFilterAndSort + */ + forEachStoreDeep(callback, sequence = { value: 0 }) { + callback(this, sequence.value++); + this.cache.getNodes().forEach((lazyNode) => { + const childCache = lazyNode.node.childStore; + if (childCache) { + childCache.forEachStoreDeep(callback, sequence); + } + }); + } + /** + * Recursively applies a provided function to every node + * + * For the purpose of exclusively server side filtered stores, this is the same as getNodes().forEachDeepAfterFilterAndSort + */ + forEachNodeDeep(callback, sequence = { value: 0 }) { + this.cache.getNodes().forEach((lazyNode) => { + callback(lazyNode.node, sequence.value++); + const childCache = lazyNode.node.childStore; + if (childCache) { + childCache.forEachNodeDeep(callback, sequence); + } + }); + } + /** + * Recursively applies a provided function to every node + * + * For the purpose of exclusively server side filtered stores, this is the same as getNodes().forEachDeep + */ + forEachNodeDeepAfterFilterAndSort(callback, sequence = { value: 0 }, includeFooterNodes = false) { + const footerNode = this.parentRowNode.level > -1 && _getGroupTotalRowCallback4(this.gos)({ node: this.parentRowNode }); + if (footerNode === "top") { + callback(this.parentRowNode.sibling, sequence.value++); + } + const orderedNodes = this.cache.getOrderedNodeMap(); + for (const lazyNode of Object.values(orderedNodes)) { + callback(lazyNode.node, sequence.value++); + const childCache = lazyNode.node.childStore; + if (childCache) { + childCache.forEachNodeDeepAfterFilterAndSort(callback, sequence, includeFooterNodes); + } + } + if (footerNode === "bottom") { + callback(this.parentRowNode.sibling, sequence.value++); + } + } + /** + * Removes the failed status from all nodes, and marks them as stub to encourage reloading + */ + retryLoads() { + this.cache.getNodes().forEach(({ node }) => { + if (node.failedLoad) { + node.failedLoad = false; + node.__needsRefreshWhenVisible = true; + node.stub = true; + } + }); + this.forEachChildStoreShallow((store) => store.retryLoads()); + this.fireStoreUpdatedEvent(); + } + /** + * Given a display index, returns the row at that location. + * + * @param displayRowIndex the displayed index within the grid to search for + * @returns the row node if the display index falls within the store, if it didn't exist this will create a new stub to return + */ + getRowUsingDisplayIndex(displayRowIndex) { + if (this.parentRowNode.sibling && displayRowIndex === this.parentRowNode.sibling.rowIndex) { + return this.parentRowNode.sibling; + } + return this.cache.getRowByDisplayIndex(displayRowIndex); + } + /** + * Given a display index, returns the row top and height for the row at that index. + * + * @param displayIndex the display index of the node + * @returns an object containing the rowTop and rowHeight of the node at the given displayIndex + */ + getRowBounds(displayIndex) { + if (!this.isDisplayIndexInStore(displayIndex)) { + return null; + } + const thisNode = this.cache.getNodeCachedByDisplayIndex(displayIndex); + if (thisNode) { + const boundsFromRow = this.blockUtils.extractRowBounds(thisNode, displayIndex); + if (boundsFromRow) { + return boundsFromRow; + } + } + const { previousNode, nextNode } = this.cache.getSurroundingNodesByDisplayIndex(displayIndex) ?? {}; + if (previousNode) { + const boundsFromRow = this.blockUtils.extractRowBounds(previousNode.node, displayIndex); + if (boundsFromRow != null) { + return boundsFromRow; + } + } + const defaultRowHeight = _getRowHeightAsNumber5(this.beans); + if (nextNode) { + const numberOfRowDiff2 = (nextNode.node.rowIndex - displayIndex) * defaultRowHeight; + return { + rowTop: nextNode.node.rowTop - numberOfRowDiff2, + rowHeight: defaultRowHeight + }; + } + const lastTop = this.topPx + this.heightPx; + const numberOfRowDiff = (this.getDisplayIndexEnd() - displayIndex) * defaultRowHeight; + return { + rowTop: lastTop - numberOfRowDiff, + rowHeight: defaultRowHeight + }; + } + /** + * Given a vertical pixel, determines whether this store contains a row at that pixel + * + * @param pixel a vertical pixel position from the grid + * @returns whether that pixel points to a virtual space belonging to this store + */ + isPixelInRange(pixel) { + return pixel >= this.topPx && pixel < this.topPx + this.heightPx; + } + /** + * Given a vertical pixel, returns the row existing at that pixel location + * + * @param pixel a vertical pixel position from the grid + * @returns the display index at the given pixel location + */ + getRowIndexAtPixel(pixel) { + if (pixel < this.topPx) { + return this.getDisplayIndexStart(); + } + if (pixel >= this.topPx + this.heightPx) { + return this.getDisplayIndexEnd() - 1; + } + if (this.parentRowNode.sibling && pixel > this.parentRowNode.sibling.rowTop && pixel < this.parentRowNode.sibling.rowTop + this.parentRowNode.sibling.rowHeight) { + return this.parentRowNode.sibling.rowIndex; + } + let distToPreviousNodeTop = Number.MAX_SAFE_INTEGER; + let previousNode = null; + let distToNextNodeTop = Number.MAX_SAFE_INTEGER; + let nextNode = null; + this.cache.getNodes().forEach(({ node }) => { + const distBetween = Math.abs(pixel - node.rowTop); + if (node.rowTop < pixel) { + if (distBetween < distToPreviousNodeTop) { + distToPreviousNodeTop = distBetween; + previousNode = node; + } + return; + } + if (distBetween < distToNextNodeTop) { + distToNextNodeTop = distBetween; + nextNode = node; + } + }); + previousNode = previousNode; + nextNode = nextNode; + if (previousNode) { + const indexOfRow = this.blockUtils.getIndexAtPixel(previousNode, pixel); + if (indexOfRow != null) { + return indexOfRow; + } + } + const defaultRowHeight = _getRowHeightAsNumber5(this.beans); + if (nextNode) { + const nextTop2 = nextNode.rowTop; + const numberOfRowDiff2 = Math.ceil((nextTop2 - pixel) / defaultRowHeight); + return nextNode.rowIndex - numberOfRowDiff2; + } + const nextTop = this.topPx + this.heightPx; + const numberOfRowDiff = Math.floor((nextTop - pixel) / defaultRowHeight); + return this.getDisplayIndexEnd() - numberOfRowDiff; + } + /** + * Given a path of group keys, returns the child store for that group. + * + * @param keys the grouping path to the desired store + * @returns the child store for the given keys, or null if not found + */ + getChildStore(keys) { + return this.storeUtils.getChildStore(keys, this, (key) => { + const lazyNode = this.cache.getNodes().find((lazyNode2) => lazyNode2.node.key == key); + if (!lazyNode) { + return null; + } + return lazyNode.node; + }); + } + /** + * Executes a provided callback on each child store belonging to this store + * + * @param cb the callback to execute + */ + forEachChildStoreShallow(cb) { + this.cache.getNodes().forEach(({ node }) => { + if (node.childStore) { + cb(node.childStore); + } + }); + } + /** + * Executes after a change to sorting, determines recursively whether this store or a child requires refreshed. + * + * If a purge refresh occurs, the row count is preserved. + * + * @param params a set of properties pertaining to the sort changes + */ + refreshAfterSort(params) { + const serverSortsAllLevels = this.storeUtils.isServerSideSortAllLevels(); + if (serverSortsAllLevels || this.storeUtils.isServerRefreshNeeded(this.parentRowNode, this.ssrmParams.rowGroupCols, params)) { + const allRowsLoaded = this.cache.isStoreFullyLoaded(); + const isClientSideSortingEnabled = this.gos.get("serverSideEnableClientSideSort"); + const isClientSideSort = allRowsLoaded && isClientSideSortingEnabled; + if (!isClientSideSort) { + const oldCount = this.cache.getRowCount(); + const lastKnown = this.cache.isLastRowIndexKnown(); + this.destroyBean(this.cache); + this.cache = this.createManagedBean(new LazyCache(this, oldCount, lastKnown, this.storeParams)); + return; + } + this.cache.clientSideSortRows(); + } + this.forEachChildStoreShallow((store) => store.refreshAfterSort(params)); + } + /** + * Executes after a change to filtering, determines recursively whether this store or a child requires refreshed. + * + * If a refresh occurs, the row count is reset. + * + * @param params a set of properties pertaining to the filter changes + */ + refreshAfterFilter(params) { + const serverFiltersAllLevels = !this.storeUtils.isServerSideOnlyRefreshFilteredGroups(); + if (serverFiltersAllLevels || this.storeUtils.isServerRefreshNeeded(this.parentRowNode, this.ssrmParams.rowGroupCols, params)) { + this.refreshStore(true); + return; + } + this.forEachChildStoreShallow((store) => store.refreshAfterFilter(params)); + } + /** + * Marks all existing nodes as requiring reloaded, and triggers a load check + * + * @param purge whether to remove all nodes and data in favour of stub nodes + */ + refreshStore(purge) { + if (purge) { + this.destroyBean(this.cache); + this.cache = this.createManagedBean(new LazyCache(this, 1, false, this.storeParams)); + this.fireStoreUpdatedEvent(); + return; + } + this.cache.markNodesForRefresh(); + } + /** + * Used for pagination, given a local/store index, returns the display index of that row + * + * @param topLevelIndex the store index of a row + * @returns the display index for the given store index + */ + getTopLevelRowDisplayedIndex(topLevelIndex) { + const displayIndex = this.cache.getDisplayIndexFromStoreIndex(topLevelIndex); + return displayIndex ?? topLevelIndex; + } + /** + * Used for pagination to determine if the last page is known, and for aria to determine if the last grid row is known + * + * @returns whether the last index of this store is known, or if lazy loading still required + */ + isLastRowIndexKnown() { + return this.cache.isLastRowIndexKnown(); + } + /** + * Used by the selection service to select a range of nodes + * + * @param firstInRange the first node in the range to find + * @param lastInRange the last node in the range to find + * @returns a range of nodes between firstInRange and lastInRange inclusive + */ + getRowNodesInRange(firstInRange, lastInRange) { + return this.cache.getNodes().filter(({ node }) => { + return node.rowIndex >= firstInRange.rowIndex && node.rowIndex <= lastInRange.rowIndex; + }).map(({ node }) => node); + } + /** + * Mutates a given array to add this stores state, and recursively add all the children store states. + * + * @param result a mutable results array + */ + addStoreStates(result) { + result.push({ + route: this.parentRowNode.getRoute() ?? [], + rowCount: this.getRowCount(), + lastRowIndexKnown: this.isLastRowIndexKnown(), + info: this.info, + maxBlocksInCache: this.storeParams.maxBlocksInCache, + cacheBlockSize: this.storeParams.cacheBlockSize + }); + this.forEachChildStoreShallow((childStore) => childStore.addStoreStates(result)); + } + getIdSequence() { + return this.idSequence; + } + getParentNode() { + return this.parentRowNode; + } + getRowDetails() { + return { + field: this.groupField, + group: this.group, + leafGroup: this.leafGroup, + level: this.level, + parent: this.parentRowNode, + rowGroupColumn: this.rowGroupColumn + }; + } + getSsrmParams() { + return this.ssrmParams; + } + setStoreInfo(info) { + if (info) { + Object.assign(this.info, info); + } + } + // gets called 1) row count changed 2) cache purged + fireStoreUpdatedEvent() { + this.eventSvc.dispatchEvent({ + type: "storeUpdated" + }); + } + // gets called when row data updated, and no more refreshing needed + fireRefreshFinishedEvent() { + this.eventSvc.dispatchEvent({ + type: "storeRefreshed", + route: this.parentRowNode.getRoute() + }); + } + getBlockStates() { + return this.cache.getBlockStates(); + } + getStoreBounds() { + return { + topPx: this.topPx, + heightPx: this.heightPx + }; + } + getCache() { + return this.cache; + } + getFirstNode() { + const firstNode = this.cache.getNodes().getBy("index", 0); + return firstNode?.node ?? null; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/stores/storeFactory.ts +var StoreFactory = class extends BeanStub75 { + constructor() { + super(...arguments); + this.beanName = "ssrmStoreFactory"; + } + wireBeans(beans) { + this.colModel = beans.colModel; + this.rowGroupColsSvc = beans.rowGroupColsSvc; + this.pivotColsSvc = beans.pivotColsSvc; + this.rowAutoHeight = beans.rowAutoHeight; + } + createStore(ssrmParams, parentNode) { + const storeParams = this.getStoreParams(ssrmParams, parentNode); + return new LazyStore(ssrmParams, storeParams, parentNode); + } + getStoreParams(ssrmParams, parentNode) { + const userStoreParams = this.getLevelSpecificParams(parentNode); + const cacheBlockSize = this.getBlockSize(userStoreParams); + const maxBlocksInCache = this.getMaxBlocksInCache(ssrmParams, userStoreParams); + const storeParams = { + cacheBlockSize, + maxBlocksInCache + }; + return storeParams; + } + getMaxBlocksInCache(ssrmParams, userStoreParams) { + const maxBlocksInCache = userStoreParams?.maxBlocksInCache != null ? userStoreParams.maxBlocksInCache : this.gos.get("maxBlocksInCache"); + const maxBlocksActive = maxBlocksInCache != null && maxBlocksInCache >= 0; + if (!maxBlocksActive) { + return; + } + if (ssrmParams.dynamicRowHeight) { + _warn53(203); + return; + } + if (this.rowAutoHeight?.active) { + _warn53(204); + return void 0; + } + return maxBlocksInCache; + } + getBlockSize(userStoreParams) { + const blockSize = userStoreParams?.cacheBlockSize != null ? userStoreParams.cacheBlockSize : this.gos.get("cacheBlockSize"); + if (blockSize != null && blockSize > 0) { + return blockSize; + } else { + return 100; + } + } + getLevelSpecificParams(parentNode) { + const callback = this.gos.getCallback("getServerSideGroupLevelParams"); + if (!callback) { + return void 0; + } + const params = { + level: parentNode.level + 1, + parentRowNode: parentNode.level >= 0 ? parentNode : void 0, + rowGroupColumns: this.rowGroupColsSvc?.columns ?? [], + pivotColumns: this.pivotColsSvc?.columns ?? [], + pivotMode: this.colModel.isPivotMode() + }; + const res = callback(params); + return res; + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/stores/storeUtils.ts +import { BeanStub as BeanStub76, _isServerSideRowModel as _isServerSideRowModel7 } from "ag-grid-community"; +var StoreUtils = class extends BeanStub76 { + constructor() { + super(...arguments); + this.beanName = "ssrmStoreUtils"; + } + wireBeans(beans) { + this.colModel = beans.colModel; + this.serverSideRowModel = beans.rowModel; + this.storeFactory = beans.ssrmStoreFactory; + } + getChildStore(keys, currentCache, findNodeFunc) { + if (!keys?.length) { + return currentCache; + } + const nextKey = keys[0]; + const nextNode = findNodeFunc(nextKey); + if (nextNode) { + if (keys.length === 1 && !nextNode.childStore) { + const storeParams = this.serverSideRowModel.getParams(); + nextNode.childStore = this.createBean(this.storeFactory.createStore(storeParams, nextNode)); + } + const keyListForNextLevel = keys.slice(1, keys.length); + const nextStore = nextNode.childStore; + return nextStore ? nextStore.getChildStore(keyListForNextLevel) : null; + } + return null; + } + isServerRefreshNeeded(parentRowNode, rowGroupCols, params) { + if (params.valueColChanged || params.secondaryColChanged) { + return true; + } + const level = parentRowNode.level + 1; + const grouping = level < rowGroupCols.length; + const leafNodes = !grouping; + if (leafNodes) { + return true; + } + const colIdThisGroup = rowGroupCols[level].id; + const actionOnThisGroup = params.changedColumns.indexOf(colIdThisGroup) > -1; + if (actionOnThisGroup) { + return true; + } + const allCols = this.colModel.getCols(); + const affectedGroupCols = allCols.filter((col) => col.getColDef().showRowGroup && params.changedColumns.includes(col.getId())).map((col) => col.getColDef().showRowGroup).some((group) => group === true || group === colIdThisGroup); + return affectedGroupCols; + } + getServerSideInitialRowCount() { + return this.gos.get("serverSideInitialRowCount"); + } + isServerSideSortAllLevels() { + return this.gos.get("serverSideSortAllLevels") && _isServerSideRowModel7(this.gos); + } + isServerSideOnlyRefreshFilteredGroups() { + return this.gos.get("serverSideOnlyRefreshFilteredGroups") && _isServerSideRowModel7(this.gos); + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/transactionManager.ts +import { BeanStub as BeanStub77, ServerSideTransactionResultStatus as ServerSideTransactionResultStatus2 } from "ag-grid-community"; +var TransactionManager = class extends BeanStub77 { + constructor() { + super(...arguments); + this.beanName = "ssrmTxnManager"; + this.asyncTransactions = []; + } + wireBeans(beans) { + this.valueCache = beans.valueCache; + this.serverSideRowModel = beans.rowModel; + this.selectionSvc = beans.selectionSvc; + } + applyTransactionAsync(transaction, callback) { + if (this.asyncTransactionsTimeout == null) { + this.scheduleExecuteAsync(); + } + this.asyncTransactions.push({ transaction, callback }); + } + scheduleExecuteAsync() { + const waitMillis = this.gos.get("asyncTransactionWaitMillis"); + this.asyncTransactionsTimeout = window.setTimeout(() => { + this.executeAsyncTransactions(); + }, waitMillis); + } + executeAsyncTransactions() { + if (!this.asyncTransactions) { + return; + } + const resultFuncs = []; + const resultsForEvent = []; + const transactionsToRetry = []; + let atLeastOneTransactionApplied = false; + for (const txWrapper of this.asyncTransactions) { + let result; + const hasStarted = this.serverSideRowModel.executeOnStore(txWrapper.transaction.route, (cache) => { + result = cache.applyTransaction(txWrapper.transaction); + }); + if (!hasStarted) { + result = { status: ServerSideTransactionResultStatus2.StoreNotStarted }; + } else if (result == void 0) { + result = { status: ServerSideTransactionResultStatus2.StoreNotFound }; + } + resultsForEvent.push(result); + const retryTransaction = result.status == ServerSideTransactionResultStatus2.StoreLoading; + if (retryTransaction) { + transactionsToRetry.push(txWrapper); + continue; + } + if (txWrapper.callback) { + resultFuncs.push(() => txWrapper.callback(result)); + } + if (result.status === ServerSideTransactionResultStatus2.Applied) { + atLeastOneTransactionApplied = true; + } + } + if (resultFuncs.length > 0) { + window.setTimeout(() => { + for (const func of resultFuncs) { + func(); + } + }, 0); + } + this.asyncTransactionsTimeout = void 0; + this.asyncTransactions = transactionsToRetry; + if (atLeastOneTransactionApplied) { + this.valueCache?.onDataChanged(); + this.eventSvc.dispatchEvent({ type: "storeUpdated" }); + } + if (resultsForEvent.length > 0) { + this.eventSvc.dispatchEvent({ + type: "asyncTransactionsFlushed", + results: resultsForEvent + }); + } + } + flushAsyncTransactions() { + if (this.asyncTransactionsTimeout != null) { + clearTimeout(this.asyncTransactionsTimeout); + } + this.executeAsyncTransactions(); + } + applyTransaction(transaction) { + let res; + const hasStarted = this.serverSideRowModel.executeOnStore(transaction.route, (store) => { + res = store.applyTransaction(transaction); + }); + if (!hasStarted) { + return { status: ServerSideTransactionResultStatus2.StoreNotStarted }; + } else if (res) { + this.valueCache?.onDataChanged(); + if (res.remove && this.selectionSvc) { + const removedRowIds = res.remove.map((row) => row.id); + this.selectionSvc.deleteSelectionStateFromParent(transaction.route || [], removedRowIds); + } + this.eventSvc.dispatchEvent({ type: "storeUpdated" }); + return res; + } else { + return { status: ServerSideTransactionResultStatus2.StoreNotFound }; + } + } +}; + +// packages/ag-grid-enterprise/src/serverSideRowModel/serverSideRowModelModule.ts +var ServerSideRowModelModule = { + moduleName: "ServerSideRowModel", + version: VERSION, + rowModels: ["serverSide"], + beans: [ + ServerSideRowModel, + ExpandListener, + StoreUtils, + BlockUtils, + NodeManager, + TransactionManager, + FilterListener, + StoreFactory, + ListenerUtils, + ServerSideSelectionService, + LazyBlockLoadingService, + SsrmRowChildrenService, + ServerSideExpansionService, + SortListener + ], + dependsOn: [ + EnterpriseCoreModule, + _SortModule, + _SharedRowSelectionModule, + SharedPivotModule, + SharedTreeDataModule, + LoadingCellRendererModule + ] +}; +var ServerSideRowModelApiModule = { + moduleName: "ServerSideRowModelApi", + version: VERSION, + apiFunctions: { + getServerSideSelectionState, + setServerSideSelectionState, + applyServerSideTransaction, + applyServerSideTransactionAsync, + applyServerSideRowData, + retryServerSideLoads, + flushServerSideAsyncTransactions, + refreshServerSide, + getServerSideGroupLevelState, + resetRowHeights, + onRowHeightChanged + }, + dependsOn: [EnterpriseCoreModule, _RowModelSharedApiModule, _CsrmSsrmSharedApiModule, _SsrmInfiniteSharedApiModule] +}; + +// packages/ag-grid-enterprise/src/formula/editor/formulaCellEditor.ts +import { AgAbstractCellEditor as AgAbstractCellEditor2, KeyCode as KeyCode33, RefPlaceholder as RefPlaceholder47, _isBrowserSafari as _isBrowserSafari2, _placeCaretAtEnd as _placeCaretAtEnd2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/agFormulaInputField.ts +import { AgContentEditableField, _createElement as _createElement16, _getDocument as _getDocument6, _getWindow, _placeCaretAtEnd } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/formula/refUtils.ts +var CELL_OR_RANGE_REGEX = /\$?[A-Za-z]+\$?[0-9]+(?::\$?[A-Za-z]+\$?[0-9]+)?/g; +var FULL_CELL_OR_RANGE_REGEX = /^(\$?)([A-Za-z]+)(\$?)([0-9]+)(?::(\$?)([A-Za-z]+)(\$?)([0-9]+))?$/; +var WORD_CHAR_REGEX = /[A-Za-z0-9]/; +var isFormulaIdentChar = (char) => { + return !!char && WORD_CHAR_REGEX.test(char); +}; +var isFormulaIdentStart = (char) => { + return !!char && /[A-Za-z]/.test(char); +}; +var isWordChar = (char) => { + return isFormulaIdentChar(char ?? void 0); +}; +var isStandaloneRefToken = (text, matchIndex, ref) => { + const prevChar = matchIndex > 0 ? text[matchIndex - 1] : null; + if (isWordChar(prevChar)) { + return false; + } + if (ref.endsWith(":")) { + return true; + } + const nextIndex = matchIndex + ref.length; + const nextChar = nextIndex < text.length ? text[nextIndex] : null; + return !isWordChar(nextChar); +}; +var parseA1Ref = (ref, options = {}) => { + const allowTrailingColon = options.allowTrailingColon ?? false; + const normalizedRef = allowTrailingColon && ref.endsWith(":") ? ref.slice(0, -1) : ref; + const match = FULL_CELL_OR_RANGE_REGEX.exec(normalizedRef); + if (!match) { + return null; + } + const [, absCol1, col1, absRow1, row1, absCol2, col2, absRow2, row2] = match; + const hasEnd = !!(col2 && row2); + return { + startCol: col1, + startRow: row1, + startColAbsolute: absCol1 === "$", + startRowAbsolute: absRow1 === "$", + ...hasEnd ? { + endCol: col2, + endRow: row2, + endColAbsolute: absCol2 === "$", + endRowAbsolute: absRow2 === "$" + } : null + }; +}; +var getRefTokenMatches = (text) => { + const matches = []; + let match; + let index = 0; + CELL_OR_RANGE_REGEX.lastIndex = 0; + while ((match = CELL_OR_RANGE_REGEX.exec(text)) != null) { + let ref = match[0]; + const start = match.index ?? 0; + const endIndex = start + ref.length; + if (endIndex < text.length && text[endIndex] === ":") { + ref += ":"; + } + if (!isStandaloneRefToken(text, start, ref)) { + continue; + } + matches.push({ ref, start, end: start + ref.length, index }); + index += 1; + } + return matches; +}; + +// packages/ag-grid-enterprise/src/widgets/agFormulaInputField.css +var agFormulaInputField_default = ".ag-formula-token{line-height:var(--ag-line-height,1.6)}.ag-formula-token-color-1{color:var(--ag-formula-token-1-color)}.ag-formula-token-color-2{color:var(--ag-formula-token-2-color)}.ag-formula-token-color-3{color:var(--ag-formula-token-3-color)}.ag-formula-token-color-4{color:var(--ag-formula-token-4-color)}.ag-formula-token-color-5{color:var(--ag-formula-token-5-color)}.ag-formula-token-color-6{color:var(--ag-formula-token-6-color)}.ag-formula-token-color-7{color:var(--ag-formula-token-7-color)}.ag-formula-range-color-1{--ag-range-selection-border-color:var(--ag-formula-token-1-color);--ag-range-selection-background-color:var(--ag-formula-token-1-background-color)}.ag-formula-range-color-2{--ag-range-selection-border-color:var(--ag-formula-token-2-color);--ag-range-selection-background-color:var(--ag-formula-token-2-background-color)}.ag-formula-range-color-3{--ag-range-selection-border-color:var(--ag-formula-token-3-color);--ag-range-selection-background-color:var(--ag-formula-token-3-background-color)}.ag-formula-range-color-4{--ag-range-selection-border-color:var(--ag-formula-token-4-color);--ag-range-selection-background-color:var(--ag-formula-token-4-background-color)}.ag-formula-range-color-5{--ag-range-selection-border-color:var(--ag-formula-token-5-color);--ag-range-selection-background-color:var(--ag-formula-token-5-background-color)}.ag-formula-range-color-6{--ag-range-selection-border-color:var(--ag-formula-token-6-color);--ag-range-selection-background-color:var(--ag-formula-token-6-background-color)}.ag-formula-range-color-7{--ag-range-selection-border-color:var(--ag-formula-token-7-color);--ag-range-selection-background-color:var(--ag-formula-token-7-background-color)}.ag-fill-handle.ag-formula-range-color-1,.ag-range-handle.ag-formula-range-color-1{background-color:var(--ag-formula-token-1-color)}.ag-fill-handle.ag-formula-range-color-2,.ag-range-handle.ag-formula-range-color-2{background-color:var(--ag-formula-token-2-color)}.ag-fill-handle.ag-formula-range-color-3,.ag-range-handle.ag-formula-range-color-3{background-color:var(--ag-formula-token-3-color)}.ag-fill-handle.ag-formula-range-color-4,.ag-range-handle.ag-formula-range-color-4{background-color:var(--ag-formula-token-4-color)}.ag-fill-handle.ag-formula-range-color-5,.ag-range-handle.ag-formula-range-color-5{background-color:var(--ag-formula-token-5-color)}.ag-fill-handle.ag-formula-range-color-6,.ag-range-handle.ag-formula-range-color-6{background-color:var(--ag-formula-token-6-color)}"; + +// packages/ag-grid-enterprise/src/widgets/formulaInputAutocompleteFeature.ts +import { BeanStub as BeanStub78, KeyCode as KeyCode32, _getDocument as _getDocument5 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/widgets/formulaInputTokenUtils.ts +var TOKEN_INSERT_AFTER_CHARS = /* @__PURE__ */ new Set(["=", "+", "-", "*", "/", "^", ",", "(", ";", "<", ">", "&"]); +var getPreviousNonSpaceChar = (value, offset) => { + for (let i = offset - 1; i >= 0; i--) { + const char = value[i]; + if (char != null && char.trim() !== "") { + return char; + } + } + return null; +}; + +// packages/ag-grid-enterprise/src/widgets/formulaRangeUtils.ts +import { isSpecialCol as isSpecialCol3 } from "ag-grid-community"; +var FORMULA_TOKEN_COLOR_CLASS = "ag-formula-token-color"; +var FORMULA_RANGE_COLOR_CLASS = "ag-formula-range-color"; +var getColorClassesForRef = (_ref, colorIndexOverride) => { + const index = colorIndexOverride ?? 0; + return { + tokenClass: `${FORMULA_TOKEN_COLOR_CLASS}-${index + 1}`, + rangeClass: `${FORMULA_RANGE_COLOR_CLASS}-${index + 1}`, + colorIndex: index + }; +}; +var getRangeColorIndexFromClass = (colorClass) => { + if (!colorClass) { + return null; + } + const match = /ag-formula-range-color-(\d+)/.exec(colorClass); + if (!match) { + return null; + } + const parsed = parseInt(match[1], 10); + return Number.isFinite(parsed) ? parsed - 1 : null; +}; +var tagRangeWithFormulaColor = (range, ref, colorIndex) => { + if (!range) { + return; + } + const { rangeClass } = getColorClassesForRef(ref, colorIndex); + range.colorClass = rangeClass; +}; +var getCellRangeParams = (beans, ref) => { + const parsed = parseA1Ref(ref, { allowTrailingColon: true }); + if (!parsed) { + return null; + } + const { formula } = beans; + const { startCol, startRow, endCol, endRow } = parsed; + const startColRef = startCol; + const endColRef = endCol ?? startCol; + const startColMatch = formula?.getColByRef(startColRef); + const endColMatch = formula?.getColByRef(endColRef); + if (!startColMatch || !endColMatch) { + return null; + } + const rowStartIndex = parseInt(startRow, 10) - 1; + const rowEndIndex = endRow ? parseInt(endRow, 10) - 1 : rowStartIndex; + if (rowStartIndex < 0 || rowEndIndex < 0) { + return null; + } + const rowModel = beans.rowModel; + if (!rowModel?.getFormulaRow(rowStartIndex) || !rowModel.getFormulaRow(rowEndIndex)) { + return null; + } + return { + rowStartIndex, + rowEndIndex, + columnStart: startColMatch, + columnEnd: endColMatch + }; +}; +var getLatestRangeRef = (beans) => { + const ranges = beans.rangeSvc?.getCellRanges(); + const latest = ranges?.length ? ranges[ranges.length - 1] : null; + if (!latest) { + return null; + } + return rangeToRef(beans, latest); +}; +var rangeToRef = (beans, range) => { + const { rangeSvc, formula } = beans; + if (!rangeSvc || !formula) { + return null; + } + const startRow = rangeSvc.getRangeStartRow(range); + const endRow = rangeSvc.getRangeEndRow(range); + if (!startRow || !endRow || startRow.rowPinned || endRow.rowPinned) { + return null; + } + const rowStartIndex = Math.min(startRow.rowIndex, endRow.rowIndex) + 1; + const rowEndIndex = Math.max(startRow.rowIndex, endRow.rowIndex) + 1; + const columns = range.columns?.filter((col) => !isSpecialCol3(col) && !!formula.getColRef(col)); + if (!columns?.length) { + return null; + } + const sorted = [...columns]; + const startCol = sorted[0]; + const endCol = sorted[sorted.length - 1]; + const colStartRef = formula.getColRef(startCol); + const colEndRef = formula.getColRef(endCol); + if (!colStartRef || !colEndRef) { + return null; + } + const sameCol = colStartRef === colEndRef; + const sameRow = rowStartIndex === rowEndIndex; + if (sameCol && sameRow) { + return `${colStartRef}${rowStartIndex}`; + } + return `${colStartRef}${rowStartIndex}:${colEndRef}${rowEndIndex}`; +}; +var getRefTokenMatchesForFormula = (beans, text) => { + const matches = getRefTokenMatches(text); + const { formula } = beans; + if (!formula) { + return matches; + } + const valid = []; + let index = 0; + for (const match of matches) { + if (!getCellRangeParams(beans, match.ref)) { + continue; + } + valid.push({ ...match, index }); + index += 1; + } + return valid; +}; +var getRefTokensFromText = (beans, text) => { + const matches = getRefTokenMatchesForFormula(beans, text); + return matches.map(({ ref, index }) => ({ ref, index })); +}; + +// packages/ag-grid-enterprise/src/widgets/formulaInputAutocompleteFeature.ts +var FormulaInputAutocompleteFeature = class extends BeanStub78 { + constructor(field) { + super(); + this.field = field; + this.functionAutocompleteList = null; + this.functionAutocompleteToken = null; + this.functionAutocompleteEntries = null; + this.functionAutocompleteSearch = null; + } + postConstruct() { + this.addManagedElementListeners(this.field.getContentElement(), { + keydown: this.onContentKeyDown.bind(this), + mouseup: this.updateFunctionAutocomplete.bind(this), + focusin: this.updateFunctionAutocomplete.bind(this), + focusout: this.closeFunctionAutocomplete.bind(this) + }); + this.addDestroyFunc(() => this.closeFunctionAutocomplete()); + } + onPlainValueUpdated() { + this.closeFunctionAutocomplete(); + } + onFormulaValueUpdated() { + this.updateFunctionAutocomplete(); + } + onContentKeyDown(event) { + if (this.functionAutocompleteList) { + switch (event.key) { + case KeyCode32.ENTER: + case KeyCode32.TAB: + event.preventDefault(); + event.stopPropagation(); + this.confirmFunctionAutocomplete(); + return; + case KeyCode32.ESCAPE: + event.preventDefault(); + event.stopPropagation(); + this.closeFunctionAutocomplete(); + return; + case KeyCode32.UP: + case KeyCode32.DOWN: + this.functionAutocompleteList.onNavigationKeyDown(event, event.key); + return; + } + } + switch (event.key) { + case KeyCode32.LEFT: + case KeyCode32.RIGHT: + case KeyCode32.PAGE_HOME: + case KeyCode32.PAGE_END: + this.scheduleFunctionAutocompleteUpdate(); + break; + } + } + scheduleFunctionAutocompleteUpdate() { + setTimeout(() => { + if (!this.isAlive()) { + return; + } + this.updateFunctionAutocomplete(); + }); + } + updateFunctionAutocomplete() { + if (!this.isContentFocused()) { + this.closeFunctionAutocomplete(); + return; + } + const { field, beans } = this; + const value = field.getCurrentValue(); + const hasFormulaPrefix = value.trimStart().startsWith("="); + if (!hasFormulaPrefix) { + this.closeFunctionAutocomplete(); + return; + } + const caretOffsets = field.getCaretOffsetsForAutocomplete(value); + if (!caretOffsets) { + this.closeFunctionAutocomplete(); + return; + } + if (isCaretInsideRefToken(beans, value, caretOffsets.valueOffset)) { + this.closeFunctionAutocomplete(); + return; + } + const token = getFunctionTokenAtOffset(value, caretOffsets.valueOffset, beans.formula ?? null); + if (!token) { + this.closeFunctionAutocomplete(); + return; + } + const { prefix } = token; + if (!prefix.length) { + this.closeFunctionAutocomplete(); + return; + } + const entries = this.getFunctionAutocompleteEntries(); + if (!entries.length) { + this.closeFunctionAutocomplete(); + return; + } + const searchLower = prefix.toLocaleLowerCase(); + const hasMatch = entries.some(({ key }) => key.toLocaleLowerCase().startsWith(searchLower)); + if (!hasMatch) { + this.closeFunctionAutocomplete(); + return; + } + this.functionAutocompleteToken = token; + this.openFunctionAutocomplete(entries); + if (this.functionAutocompleteList && this.functionAutocompleteSearch !== prefix) { + this.functionAutocompleteList.setSearch(prefix); + this.functionAutocompleteSearch = prefix; + } + } + getFunctionAutocompleteEntries() { + const formula = this.beans.formula; + const names = formula?.active ? formula.getFunctionNames?.() ?? [] : []; + if (!this.functionAutocompleteEntries || this.functionAutocompleteEntries.length !== names.length) { + this.functionAutocompleteEntries = names.map((name) => ({ key: name })); + } + return this.functionAutocompleteEntries; + } + openFunctionAutocomplete(entries) { + if (this.functionAutocompleteList || !entries.length) { + return; + } + const popupSvc = this.beans.popupSvc; + if (!popupSvc) { + return; + } + let positionParams = null; + const repositionList = () => { + if (this.functionAutocompleteList && positionParams) { + popupSvc.positionPopupByComponent(positionParams); + } + }; + this.functionAutocompleteList = this.createManagedBean( + new AgAutocompleteList({ + autocompleteEntries: entries, + onConfirmed: () => this.confirmFunctionAutocomplete(), + useStartsWithSearch: true, + autoSizeList: true, + maxVisibleItems: 10, + onListHeightChanged: repositionList + }) + ); + const ePopupGui = this.functionAutocompleteList.getGui(); + positionParams = { + ePopup: ePopupGui, + type: "autocomplete", + eventSource: this.field.getGui(), + position: "under", + alignSide: this.gos.get("enableRtl") ? "right" : "left", + keepWithinBounds: true + }; + const addPopupRes = popupSvc.addPopup({ + eChild: ePopupGui, + anchorToElement: this.field.getGui(), + positionCallback: repositionList, + ariaLabel: "Formula functions" + }); + this.functionAutocompleteHidePopup = addPopupRes.hideFunc; + this.functionAutocompleteList.afterGuiAttached(); + } + closeFunctionAutocomplete() { + this.functionAutocompleteToken = null; + this.functionAutocompleteSearch = null; + if (!this.functionAutocompleteList) { + return; + } + this.functionAutocompleteHidePopup?.(); + this.functionAutocompleteHidePopup = void 0; + this.destroyBean(this.functionAutocompleteList); + this.functionAutocompleteList = null; + } + confirmFunctionAutocomplete() { + const token = this.functionAutocompleteToken; + const selected = this.functionAutocompleteList?.getSelectedValue(); + if (!token || !selected) { + this.closeFunctionAutocomplete(); + return; + } + const { field } = this; + const value = field.getCurrentValue(); + const functionName = selected.key; + const baseValue = value.slice(0, token.start) + functionName + value.slice(token.end); + const insertPos = token.start + functionName.length; + const nextValue = baseValue[insertPos] === "(" ? baseValue : baseValue.slice(0, insertPos) + "(" + baseValue.slice(insertPos); + field.getContentElement().focus({ preventScroll: true }); + field.applyFormulaValueChange({ + currentValue: value, + nextValue, + caret: insertPos + 1 + }); + this.closeFunctionAutocomplete(); + } + isContentFocused() { + return _getDocument5(this.beans).activeElement === this.field.getContentElement(); + } +}; +var getFunctionTokenAtOffset = (value, caretOffset, formula) => { + if (caretOffset < 0 || caretOffset > value.length || isInsideStringLiteral(value, caretOffset)) { + return null; + } + let start = caretOffset; + while (start > 0 && isFormulaIdentChar(value[start - 1])) { + start--; + } + let end = caretOffset; + while (end < value.length && isFormulaIdentChar(value[end])) { + end++; + } + if (start === end) { + return null; + } + let tokenEnd = end; + if (caretOffset !== end) { + const suffix = value.slice(caretOffset, end); + const parsed = parseA1Ref(suffix); + const isRefSuffix = !!parsed && (!formula || !!formula.getColByRef(parsed.startCol)); + if (isRefSuffix) { + tokenEnd = caretOffset; + } + } + const token = value.slice(start, tokenEnd); + if (!token || !isFormulaIdentStart(token[0])) { + return null; + } + if (value[start - 1] === "$") { + return null; + } + const previousChar = getPreviousNonSpaceChar(value, start); + if (previousChar != null && !TOKEN_INSERT_AFTER_CHARS.has(previousChar)) { + return null; + } + return { + start, + end: tokenEnd, + prefix: value.slice(start, caretOffset) + }; +}; +var isCaretInsideRefToken = (beans, value, caretOffset) => { + for (const match of getRefTokenMatchesForFormula(beans, value)) { + if (caretOffset >= match.start && caretOffset <= match.end) { + return true; + } + } + return false; +}; +var isInsideStringLiteral = (value, offset) => { + let inString = false; + for (let i = 0; i < offset && i < value.length; i++) { + if (value[i] !== '"') { + continue; + } + if (value[i + 1] === '"') { + i++; + continue; + } + inString = !inString; + } + return inString; +}; + +// packages/ag-grid-enterprise/src/widgets/formulaInputRangeSyncFeature.ts +import { BeanStub as BeanStub79, _last as _last17, isSpecialCol as isSpecialCol4 } from "ag-grid-community"; +var FormulaInputRangeSyncFeature = class extends BeanStub79 { + constructor(field) { + super(); + this.field = field; + // local mirror of editSvc range selection state while formula editing is active. + this.rangeSelectionEnabled = false; + // refs found in the formula that should have matching grid ranges (counts handle duplicates). + this.trackedRangeRefs = /* @__PURE__ */ new Map(); + // ranges we are actively tracking and their current ref string. + this.trackedRanges = /* @__PURE__ */ new Map(); + // prevents our own range changes from re-entering the selection handler. + this.suppressRangeEvents = false; + // skips the synthetic refresh event we dispatch after re-tagging ranges. + this.ignoreNextRangeEvent = false; + // avoids a value update loop when we re-render on enabling range selection. + this.skipNextValueUpdate = false; + // suppress selection handling while keyboard navigation updates the focus range. + this.suppressSelectionChangeHandling = false; + // keep a stable callback so the input manager can deactivate the previous editor. + this.handleEditorDeactivated = () => { + this.rangeSelectionEnabled = false; + this.suppressRangeEvents = false; + this.ignoreNextRangeEvent = false; + this.skipNextValueUpdate = false; + this.clearTrackedRanges(true); + }; + } + postConstruct() { + this.addManagedEventListeners({ + cellSelectionChanged: this.onCellSelectionChanged.bind(this) + }); + this.addDestroyFunc(() => this.disableRangeSelectionWhileEditing()); + this.addDestroyFunc(() => this.unregisterActiveEditor()); + } + onValueUpdated(value, hasFormulaPrefix) { + if (this.skipNextValueUpdate) { + this.skipNextValueUpdate = false; + return; + } + if (!this.isActiveEditor()) { + return; + } + if (hasFormulaPrefix) { + const newlyEnabled = this.enableRangeSelectionWhileEditing(); + if (newlyEnabled) { + this.skipNextValueUpdate = true; + this.field.setValue(value, true); + } + this.syncRangesFromFormula(value); + return; + } + this.disableRangeSelectionWhileEditing(); + } + setEditingCellRef(column, rowIndex, editingCellRef) { + this.editingColumn = column; + this.editingRowIndex = rowIndex ?? void 0; + this.editingCellRef = editingCellRef; + } + setEditorActive(active) { + if (active) { + this.registerActiveEditor(); + return; + } + this.unregisterActiveEditor(); + } + withSelectionChangeHandlingSuppressed(action) { + const previous = this.suppressSelectionChangeHandling; + this.suppressSelectionChangeHandling = true; + try { + action(); + } finally { + this.suppressSelectionChangeHandling = previous; + } + } + deactivateForFocusLoss() { + if (!this.isActiveEditor()) { + return; + } + this.handleEditorDeactivated(); + this.beans.editSvc?.disableRangeSelectionWhileEditing?.(); + this.unregisterActiveEditor(); + } + registerActiveEditor() { + const fieldId = this.field.getCompId(); + const { formulaInputManager } = this.beans; + if (!formulaInputManager) { + return; + } + const becameActive = formulaInputManager.registerActiveEditor(fieldId, this.handleEditorDeactivated); + if (!becameActive) { + return; + } + this.rangeSelectionEnabled = false; + this.suppressRangeEvents = false; + this.ignoreNextRangeEvent = false; + this.skipNextValueUpdate = false; + this.clearTrackedRanges(false); + const value = this.field.getCurrentValue(); + const hasFormulaPrefix = value.trimStart().startsWith("="); + this.onValueUpdated(value, hasFormulaPrefix); + } + unregisterActiveEditor() { + const fieldId = this.field.getCompId(); + const { formulaInputManager } = this.beans; + if (!formulaInputManager) { + return; + } + formulaInputManager.unregisterActiveEditor(fieldId, this.handleEditorDeactivated); + } + isActiveEditor() { + const fieldId = this.field.getCompId(); + const { formulaInputManager } = this.beans; + return !!formulaInputManager && formulaInputManager.isActiveEditor(fieldId); + } + getTrackedRefCount(ref) { + return this.trackedRangeRefs.get(ref) ?? 0; + } + hasTrackedRef(ref) { + return this.getTrackedRefCount(ref) > 0; + } + addTrackedRef(ref) { + this.trackedRangeRefs.set(ref, this.getTrackedRefCount(ref) + 1); + } + removeTrackedRef(ref) { + const next = this.getTrackedRefCount(ref) - 1; + if (next <= 0) { + this.trackedRangeRefs.delete(ref); + return; + } + this.trackedRangeRefs.set(ref, next); + } + enableRangeSelectionWhileEditing() { + if (this.rangeSelectionEnabled) { + return false; + } + this.rangeSelectionEnabled = true; + this.beans.editSvc?.enableRangeSelectionWhileEditing?.(); + return true; + } + disableRangeSelectionWhileEditing() { + if (!this.rangeSelectionEnabled && !this.trackedRangeRefs.size) { + return; + } + this.rangeSelectionEnabled = false; + this.beans.editSvc?.disableRangeSelectionWhileEditing?.(); + this.clearTrackedRanges(this.isActiveEditor()); + } + clearTrackedRanges(clearGridRanges = true) { + if (clearGridRanges) { + const refs = Array.from(this.trackedRangeRefs.keys()); + refs.forEach((ref) => this.removeRangeForRef(ref)); + } + this.trackedRangeRefs.clear(); + this.trackedRanges.clear(); + } + getLiveRanges() { + return this.beans.rangeSvc?.getCellRanges() ?? []; + } + withSuppressedRangeEvents(action) { + this.suppressRangeEvents = true; + action(); + this.suppressRangeEvents = false; + } + setCellRangesSilently(ranges) { + const rangeSvc = this.beans.rangeSvc; + if (!rangeSvc) { + return; + } + this.withSuppressedRangeEvents(() => rangeSvc.setCellRanges(ranges)); + } + getColorIndexForTokenOrRef(ref, tokenIndex) { + return this.field.getColorIndexForToken(tokenIndex ?? null) ?? this.field.getColorIndexForRef(ref); + } + normaliseRefForComparison(ref) { + if (!ref) { + return null; + } + const trimmed = ref.endsWith(":") ? ref.slice(0, -1) : ref; + return trimmed.replace(/\$/g, "").toUpperCase(); + } + tagRangeColor(range, ref, colorIndex) { + const { rangeClass } = getColorClassesForRef(ref, colorIndex); + if (range.colorClass === rangeClass) { + return false; + } + tagRangeWithFormulaColor(range, ref, colorIndex); + return true; + } + trackRange(range, ref, tokenIndex) { + const existing = this.trackedRanges.get(range); + const nextTokenIndex = tokenIndex !== void 0 ? tokenIndex : existing?.tokenIndex ?? null; + if (!existing) { + this.addTrackedRef(ref); + } else if (existing.ref !== ref) { + this.removeTrackedRef(existing.ref); + this.addTrackedRef(ref); + } + this.trackedRanges.set(range, { ref, tokenIndex: nextTokenIndex }); + } + getUntrackedFormulaRangesByRef() { + const rangesByRef = /* @__PURE__ */ new Map(); + const ranges = this.getLiveRanges(); + for (const range of ranges) { + if (this.trackedRanges.has(range)) { + continue; + } + if (getRangeColorIndexFromClass(range.colorClass) == null) { + continue; + } + const ref = rangeToRef(this.beans, range); + if (!ref || ref === this.editingCellRef) { + continue; + } + const existing = rangesByRef.get(ref); + if (existing) { + existing.push(range); + } else { + rangesByRef.set(ref, [range]); + } + } + return rangesByRef; + } + syncRangesFromFormula(value) { + const text = value ?? this.field.getCurrentValue() ?? ""; + if (!this.rangeSelectionEnabled) { + this.clearTrackedRanges(); + return; + } + const refTokens = getRefTokensFromText(this.beans, text); + const desiredByRef = /* @__PURE__ */ new Map(); + for (const token of refTokens) { + const { ref, index } = token; + if (ref === this.editingCellRef) { + continue; + } + const list = desiredByRef.get(ref) ?? []; + list.push(index); + desiredByRef.set(ref, list); + } + for (const ref of Array.from(this.trackedRangeRefs.keys())) { + if (!desiredByRef.has(ref)) { + this.removeRangeForRef(ref); + } + } + const rangeSvc = this.beans.rangeSvc; + if (!rangeSvc) { + return; + } + const liveRanges = new Set(this.getLiveRanges()); + for (const [range, tracked] of this.trackedRanges.entries()) { + if (!liveRanges.has(range)) { + this.trackedRanges.delete(range); + this.removeTrackedRef(tracked.ref); + } + } + const untrackedFormulaRanges = this.getUntrackedFormulaRangesByRef(); + let reTagged = false; + for (const [ref, tokenIndices] of desiredByRef.entries()) { + const rangesForRef = []; + for (const [range, tracked] of this.trackedRanges.entries()) { + if (tracked.ref === ref) { + rangesForRef.push(range); + } + } + const reuseCandidates = untrackedFormulaRanges.get(ref); + while (rangesForRef.length < tokenIndices.length && reuseCandidates?.length) { + const candidate = reuseCandidates.shift(); + if (candidate) { + rangesForRef.push(candidate); + } + } + while (rangesForRef.length > tokenIndices.length) { + const range = rangesForRef.pop(); + if (range) { + this.removeTrackedRange(range); + } + } + while (rangesForRef.length < tokenIndices.length) { + const tokenIndex = tokenIndices[rangesForRef.length]; + const added = this.addRangeForRef(ref, false, tokenIndex); + if (!added) { + break; + } + rangesForRef.push(added); + } + for (let i = 0; i < rangesForRef.length && i < tokenIndices.length; i++) { + const range = rangesForRef[i]; + const tokenIndex = tokenIndices[i]; + this.trackRange(range, ref, tokenIndex); + const colorIndex = this.getColorIndexForTokenOrRef(ref, tokenIndex); + if (this.tagRangeColor(range, ref, colorIndex)) { + reTagged = true; + } + } + } + const unusedFormulaRanges = []; + for (const ranges of untrackedFormulaRanges.values()) { + if (ranges.length) { + unusedFormulaRanges.push(...ranges); + } + } + if (unusedFormulaRanges.length) { + const currentRanges = this.getLiveRanges(); + const remaining = currentRanges.filter((range) => !unusedFormulaRanges.includes(range)); + if (remaining.length !== currentRanges.length) { + this.setCellRangesSilently(remaining); + reTagged = true; + } + } + if (reTagged) { + this.refreshRangeStyling(); + } + } + onCellSelectionChanged(event) { + if (!this.isActiveEditor() || !this.rangeSelectionEnabled || !this.beans.editSvc?.isRangeSelectionEnabledWhileEditing?.()) { + return; + } + if (this.ignoreNextRangeEvent) { + this.ignoreNextRangeEvent = false; + return; + } + if (this.suppressSelectionChangeHandling) { + return; + } + const { finished, started } = event; + const liveRanges = this.getLiveRanges(); + const nonSpecialRanges = liveRanges.filter((range) => !this.isSpecialOnlyRange(range)); + if (nonSpecialRanges.length !== liveRanges.length) { + this.setCellRangesSilently(nonSpecialRanges); + this.refocusEditingCell(); + return; + } + const latestRange = liveRanges.length ? _last17(liveRanges) : null; + const latestRef = latestRange ? rangeToRef(this.beans, latestRange) : null; + const hasInsertCandidate = !!latestRange && !this.trackedRanges.has(latestRange) && !!latestRef && latestRef !== this.editingCellRef; + const shouldInsert = finished && (started || hasInsertCandidate); + const reTagged = this.ensureTrackedRangeColors(); + if (this.suppressRangeEvents) { + if (reTagged) { + this.refreshRangeStyling(); + } + return; + } + if (started || hasInsertCandidate) { + this.field.rememberCaret(); + } + if (!hasInsertCandidate && this.handleRemovedRangeTokens()) { + this.field.restoreCaretAfterToken(); + this.refocusEditingCell(); + return; + } + if (this.updateTrackedRangeTokens()) { + return; + } + const ref = getLatestRangeRef(this.beans); + if (!ref || ref === this.editingCellRef) { + this.refocusEditingCell(); + return; + } + if (shouldInsert) { + const { action, previousRef, tokenIndex } = this.field.applyRangeInsert(ref); + if (action === "none") { + this.keepLatestSelectionOnly(latestRange); + this.beans.editSvc?.stopEditing(void 0, { source: "edit" }); + return; + } + if (action === "replace" && previousRef === ref) { + this.discardLatestRangeForRef(ref); + this.field.restoreCaretAfterToken(); + this.refocusEditingCell(); + return; + } + this.tagLatestRangeForRef(ref, tokenIndex); + this.handleRangeTokenUpdate(previousRef, ref, true, action === "insert", tokenIndex); + this.syncRangesFromFormula(this.field.getCurrentValue()); + this.field.restoreCaretAfterToken(); + this.refocusEditingCell(); + return; + } + if (!started && !finished) { + const { previousRef, tokenIndex } = this.field.insertOrReplaceToken(ref, false); + this.tagLatestRangeForRef(ref, tokenIndex); + this.handleRangeTokenUpdate(previousRef, ref, false, false); + this.refocusEditingCell(); + return; + } + this.tagLatestRangeForRef(ref); + if (finished) { + this.field.restoreCaretAfterToken(); + this.refocusEditingCell(); + } + } + keepLatestSelectionOnly(latestRange) { + if (!latestRange || this.getLiveRanges().length <= 1) { + return; + } + this.setCellRangesSilently([latestRange]); + } + isSpecialOnlyRange(range) { + const columns = range.columns; + return !!columns?.length && columns.every((col) => isSpecialCol4(col)); + } + handleRangeTokenUpdate(previousRef, ref, manageRanges, isNew, tokenIndex) { + if (manageRanges) { + if (!isNew && previousRef && previousRef !== ref) { + this.removeRangeForRef(previousRef, tokenIndex); + } + this.addRangeForRef(ref, true, tokenIndex); + return; + } + if (isNew || !previousRef) { + this.addTrackedRef(ref); + return; + } + if (previousRef !== ref) { + this.removeTrackedRef(previousRef); + this.addTrackedRef(ref); + } + } + addRangeForRef(ref, skipAddCellRange, tokenIndex) { + const rangeSvc = this.beans.rangeSvc; + if (!rangeSvc) { + return void 0; + } + let created; + if (!skipAddCellRange) { + const params = getCellRangeParams(this.beans, ref); + if (!params) { + return void 0; + } + this.withSuppressedRangeEvents(() => { + created = rangeSvc.addCellRange(params); + }); + } else { + created = this.findLatestRangeForRef(ref, true) ?? this.findLatestRangeForRef(ref, false); + } + if (created) { + const colorIndex = this.getColorIndexForTokenOrRef(ref, tokenIndex); + this.tagRangeColor(created, ref, colorIndex); + this.trackRange(created, ref, tokenIndex); + this.refreshRangeStyling(); + } + return created; + } + findLatestRangeForRef(ref, skipTracked) { + const ranges = this.getLiveRanges(); + for (let i = ranges.length - 1; i >= 0; i--) { + const range = ranges[i]; + if (rangeToRef(this.beans, range) !== ref) { + continue; + } + if (skipTracked && this.trackedRanges.has(range)) { + continue; + } + return range; + } + return void 0; + } + tagLatestRangeForRef(ref, tokenIndex) { + const { trackedRanges } = this; + const ranges = this.getLiveRanges(); + const latest = ranges.length ? _last17(ranges) : null; + if (!latest) { + return; + } + const trackedIndex = trackedRanges.get(latest)?.tokenIndex ?? null; + const colorIndex = this.getColorIndexForTokenOrRef(ref, tokenIndex ?? trackedIndex); + this.tagRangeColor(latest, ref, colorIndex); + this.refreshRangeStyling(); + } + discardLatestRangeForRef(ref) { + const ranges = this.getLiveRanges(); + if (!ranges.length) { + return; + } + const latest = _last17(ranges); + if (rangeToRef(this.beans, latest) !== ref) { + return; + } + if (this.trackedRanges.has(latest)) { + this.removeTrackedRange(latest); + return; + } + this.setCellRangesSilently(ranges.slice(0, -1)); + } + ensureTrackedRangeColors() { + const ranges = this.getLiveRanges(); + if (!ranges.length) { + return false; + } + let reTagged = false; + for (const range of ranges) { + const tracked = this.trackedRanges.get(range); + const ref = tracked?.ref ?? rangeToRef(this.beans, range); + if (!ref || !this.hasTrackedRef(ref)) { + continue; + } + const tokenIndex = tracked?.tokenIndex ?? null; + const tokenColorIndex = this.field.getColorIndexForToken(tokenIndex); + const inferredColorIndex = getRangeColorIndexFromClass(range.colorClass); + const colorIndex = tokenColorIndex ?? (this.field.hasColorForRef(ref) ? this.field.getColorIndexForRef(ref) : this.field.moveColorToRef(void 0, ref, inferredColorIndex ?? void 0)); + if (colorIndex == null) { + continue; + } + if (this.tagRangeColor(range, ref, colorIndex)) { + reTagged = true; + } + if (!this.trackedRanges.has(range)) { + this.trackRange(range, ref, tokenIndex); + } + } + return reTagged; + } + handleRemovedRangeTokens() { + if (!this.beans.rangeSvc || this.trackedRanges.size === 0) { + return false; + } + const value = this.field.getCurrentValue(); + const tokens = getRefTokensFromText(this.beans, value).filter(({ ref }) => ref !== this.editingCellRef); + if (!tokens.length) { + return false; + } + const liveRanges = this.getLiveRanges(); + const liveSet = new Set(liveRanges); + const liveCounts = /* @__PURE__ */ new Map(); + for (const range of liveRanges) { + const ref = rangeToRef(this.beans, range); + if (!ref || ref === this.editingCellRef) { + continue; + } + liveCounts.set(ref, (liveCounts.get(ref) ?? 0) + 1); + } + const pendingRemovals = /* @__PURE__ */ new Map(); + for (const token of tokens) { + const { ref } = token; + pendingRemovals.set(ref, (pendingRemovals.get(ref) ?? 0) + 1); + } + for (const [ref, tokenCount] of Array.from(pendingRemovals.entries())) { + const liveCount = liveCounts.get(ref) ?? 0; + const remaining = tokenCount - liveCount; + if (remaining > 0) { + pendingRemovals.set(ref, remaining); + } else { + pendingRemovals.delete(ref); + } + } + if (!pendingRemovals.size) { + return false; + } + const removals = []; + for (const [range, tracked] of Array.from(this.trackedRanges.entries())) { + if (liveSet.has(range)) { + continue; + } + const { ref } = tracked; + const remaining = pendingRemovals.get(ref) ?? 0; + if (remaining <= 0) { + continue; + } + pendingRemovals.set(ref, remaining - 1); + removals.push({ range, tracked }); + } + if (!removals.length) { + return false; + } + removals.sort((a, b) => (b.tracked.tokenIndex ?? -1) - (a.tracked.tokenIndex ?? -1)); + let removed = false; + for (const { range, tracked } of removals) { + const { ref, tokenIndex } = tracked; + removed = this.field.removeTokenRef(ref, tokenIndex ?? null) || removed; + this.trackedRanges.delete(range); + this.removeTrackedRef(ref); + } + if (removed) { + this.syncRangesFromFormula(this.field.getCurrentValue()); + } + return removed; + } + refreshRangeStyling() { + const { eventSvc } = this.beans; + if (!eventSvc) { + return; + } + this.ensureTrackedRangeColors(); + this.ignoreNextRangeEvent = true; + eventSvc.dispatchEvent({ + type: "cellSelectionChanged", + started: false, + finished: false + }); + } + refocusEditingCell() { + const { focusSvc } = this.beans; + const { editingColumn, editingRowIndex } = this; + if (!focusSvc || editingColumn == null || editingRowIndex == null) { + return; + } + focusSvc.setFocusedCell({ + column: editingColumn, + rowIndex: editingRowIndex, + rowPinned: null, + preventScrollOnBrowserFocus: true + }); + } + removeTrackedRange(range) { + const tracked = this.trackedRanges.get(range); + if (!tracked) { + return; + } + const ranges = this.getLiveRanges(); + const remaining = ranges.filter((candidate) => candidate !== range); + if (remaining.length !== ranges.length) { + this.setCellRangesSilently(remaining); + } + this.trackedRanges.delete(range); + this.removeTrackedRef(tracked.ref); + } + removeRangeForRef(ref, tokenIndex) { + if (!ref || !this.hasTrackedRef(ref)) { + return; + } + if (tokenIndex != null) { + let removed = false; + for (const [range, tracked] of Array.from(this.trackedRanges.entries())) { + const { ref: trackedRef, tokenIndex: trackedTokenIndex } = tracked; + if (trackedRef !== ref || trackedTokenIndex !== tokenIndex) { + continue; + } + this.removeTrackedRange(range); + removed = true; + break; + } + if (!removed) { + for (const [range, tracked] of Array.from(this.trackedRanges.entries())) { + if (tracked.ref === ref) { + this.removeTrackedRange(range); + break; + } + } + } + return; + } + for (const [range, tracked] of Array.from(this.trackedRanges.entries())) { + if (tracked.ref === ref) { + this.removeTrackedRange(range); + } + } + } + updateTrackedRangeTokens() { + if (!this.beans.rangeSvc) { + return false; + } + const ranges = this.getLiveRanges(); + const editingRef = this.normaliseRefForComparison(this.editingCellRef); + let updated = false; + for (const range of ranges) { + const tracked = this.trackedRanges.get(range); + if (!tracked) { + continue; + } + const { ref: previousRef, tokenIndex } = tracked; + const nextRef = rangeToRef(this.beans, range); + const normalisedPrevious = this.normaliseRefForComparison(previousRef); + const normalisedNext = this.normaliseRefForComparison(nextRef); + if (!nextRef || !normalisedNext || normalisedNext === normalisedPrevious || normalisedNext === editingRef) { + continue; + } + const { colorClass } = range; + const tokenColorIndex = this.field.getColorIndexForToken(tokenIndex ?? null); + const colorIndex = tokenColorIndex ?? this.field.moveColorToRef(previousRef, nextRef, getRangeColorIndexFromClass(colorClass) ?? void 0); + const replacedIndex = this.field.replaceTokenRef(previousRef, nextRef, colorIndex, tokenIndex); + if (replacedIndex == null) { + continue; + } + this.tagRangeColor(range, nextRef, colorIndex); + this.trackRange(range, nextRef, replacedIndex ?? tokenIndex ?? null); + updated = true; + } + if (updated) { + this.refreshRangeStyling(); + } + return updated; + } +}; + +// packages/ag-grid-enterprise/src/widgets/agFormulaInputField.ts +var FORMULA_TOKEN_COLOR_COUNT = 7; +var DISPLAY_OPERATOR_LOOKUP = { + "/": "\xF7", + "*": "\xD7" +}; +var VALUE_OPERATOR_LOOKUP = { + "\xF7": "/", + "\xD7": "*" +}; +var AgFormulaInputField = class extends AgContentEditableField { + constructor() { + super({ renderValueToElement: false, className: "ag-formula-input-field" }); + this.currentValue = ""; + // caret / token bookkeeping so range updates can re-render without losing position. + this.selectionCaretOffset = null; + this.lastTokenValueOffset = null; + this.lastTokenValueLength = null; + this.lastTokenCaretOffset = null; + // record mouse focus so we don't jump the caret to the end after a click. + this.focusFromMouseTime = null; + // skip auto-caret placement when we are restoring a caret programmatically. + this.suppressNextFocusCaretPlacement = false; + // fallback color assignment per ref when a token index is unavailable. + this.formulaColorByRef = /* @__PURE__ */ new Map(); + this.registerCSS(agFormulaInputField_default); + this.registerCSS(agAutocomplete_default); + } + postConstruct() { + super.postConstruct(); + this.rangeSyncFeature = this.createManagedBean(new FormulaInputRangeSyncFeature(this)); + this.autocompleteFeature = this.createManagedBean(new FormulaInputAutocompleteFeature(this)); + this.addManagedElementListeners(this.getContentElement(), { + input: this.onContentInput.bind(this), + focus: this.onContentFocus.bind(this), + blur: this.onContentBlur.bind(this), + mousedown: this.onContentMouseDown.bind(this) + }); + } + setValue(value, silent) { + const text = value == null ? "" : String(value); + const { isFormula, hasFormulaPrefix } = this.getFormulaState(text); + if (!isFormula) { + this.applyPlainValue(text, { silent, dispatch: true }); + this.rangeSyncFeature?.onValueUpdated(text, hasFormulaPrefix); + return this; + } + this.applyFormulaValue(text, { currentValue: this.getCurrentValue(), silent }); + this.rangeSyncFeature?.onValueUpdated(text, hasFormulaPrefix); + return this; + } + getCurrentValue() { + const liveValue = serializeContent(this.getContentElement()); + if (liveValue !== this.currentValue) { + this.setEditorValue(liveValue, true); + } + return this.currentValue; + } + setEditingCellRef(column, rowIndex) { + const colRef = column ? this.beans.formula?.getColRef(column) : void 0; + const editingCellRef = colRef && rowIndex != null && rowIndex !== void 0 ? `${colRef}${rowIndex + 1}` : void 0; + if (!editingCellRef) { + this.rangeSyncFeature?.setEditingCellRef(void 0, void 0, void 0); + return; + } + this.rangeSyncFeature?.setEditingCellRef(column, rowIndex, editingCellRef); + } + rememberCaret() { + const caretOffset = getCaretOffset(this.beans, this.getContentElement(), this.getCurrentValue()); + this.selectionCaretOffset = caretOffset ?? this.currentValue.length; + } + setEditorValue(value, silent = false) { + this.currentValue = value; + super.setValue(value, silent); + return this; + } + renderFormula(params) { + renderFormula({ + beans: this.beans, + contentElement: this.getContentElement(), + getColorIndexForToken: this.getColorIndexForToken.bind(this), + ...params + }); + } + renderPlainValue(value, caret) { + const contentElement = this.getContentElement(); + const caretOffset = caret ?? getCaretOffset(this.beans, contentElement, this.currentValue); + contentElement.textContent = value ?? ""; + const targetCaret = caretOffset != null ? Math.min(caretOffset, value.length) : null; + restoreCaret(this.beans, contentElement, targetCaret); + } + withSelectionChangeHandlingSuppressed(action) { + if (!this.rangeSyncFeature) { + action(); + return; + } + this.rangeSyncFeature.withSelectionChangeHandlingSuppressed(action); + } + getColorIndexForRef(ref) { + if (!shouldUseTokenColors(this.beans)) { + return null; + } + const existing = this.formulaColorByRef.get(ref); + if (existing != null) { + return existing; + } + const next = this.formulaColorByRef.size % FORMULA_TOKEN_COLOR_COUNT; + this.formulaColorByRef.set(ref, next); + return next; + } + getColorIndexForToken(tokenIndex) { + if (!shouldUseTokenColors(this.beans) || tokenIndex == null) { + return null; + } + return tokenIndex % FORMULA_TOKEN_COLOR_COUNT; + } + hasColorForRef(ref) { + return this.formulaColorByRef.has(ref); + } + moveColorToRef(fromRef, toRef, fallback) { + const colorIndex = fromRef && this.formulaColorByRef.has(fromRef) ? this.getColorIndexForRef(fromRef) : fallback ?? this.formulaColorByRef.get(toRef) ?? this.getColorIndexForRef(toRef); + if (fromRef && fromRef !== toRef) { + this.formulaColorByRef.delete(fromRef); + } + if (colorIndex == null) { + return null; + } + this.formulaColorByRef.set(toRef, colorIndex); + return colorIndex; + } + updateFormulaColorsFromValue(value) { + value = value == null ? "" : String(value); + if (!shouldUseTokenColors(this.beans)) { + this.formulaColorByRef.clear(); + return; + } + const refsInOrder = getOrderedRefs(this.beans, value); + let changed = refsInOrder.length !== this.formulaColorByRef.size; + const nextColors = /* @__PURE__ */ new Map(); + refsInOrder.forEach((ref, index) => { + const colorIndex = index % FORMULA_TOKEN_COLOR_COUNT; + nextColors.set(ref, colorIndex); + if (this.formulaColorByRef.get(ref) !== colorIndex) { + changed = true; + } + }); + if (!changed) { + return; + } + this.formulaColorByRef.clear(); + nextColors.forEach((colorIndex, ref) => this.formulaColorByRef.set(ref, colorIndex)); + } + onContentInput() { + const contentElement = this.getContentElement(); + const currentValue = this.getCurrentValue(); + const caret = getCaretOffset(this.beans, contentElement, currentValue); + const serialized = serializeContent(contentElement); + const { isFormula, hasFormulaPrefix } = this.getFormulaState(serialized); + if (!isFormula) { + this.applyPlainValue(serialized, { caret, dispatch: true }); + this.rangeSyncFeature?.onValueUpdated(serialized, hasFormulaPrefix); + return; + } + this.applyFormulaValue(serialized, { currentValue, caret: caret ?? void 0, dispatch: true }); + this.rangeSyncFeature?.onValueUpdated(serialized, hasFormulaPrefix); + } + onContentFocus() { + this.rangeSyncFeature?.setEditorActive(true); + if (this.suppressNextFocusCaretPlacement) { + this.suppressNextFocusCaretPlacement = false; + return; + } + const { focusFromMouseTime } = this; + const focusFromMouse = focusFromMouseTime != null; + this.focusFromMouseTime = null; + if (focusFromMouse) { + return; + } + _placeCaretAtEnd(this.beans, this.getContentElement()); + } + onContentBlur(event) { + this.focusFromMouseTime = null; + const nextTarget = event.relatedTarget; + const editorTarget = nextTarget?.closest(".ag-cell-editor"); + const cellTarget = nextTarget?.closest(".ag-cell"); + if (!nextTarget || this.getGui().contains(nextTarget) || !editorTarget || !cellTarget) { + return; + } + this.rangeSyncFeature?.deactivateForFocusLoss(); + } + onContentMouseDown() { + this.focusFromMouseTime = Date.now(); + } + insertOrReplaceToken(ref, isNew) { + const offsets = this.getTokenInsertOffsets(isNew); + if (!offsets) { + return {}; + } + const { caretOffset, valueOffset } = offsets; + const replaceLen = isNew || this.lastTokenValueLength == null ? 0 : this.lastTokenValueLength; + const value = this.getCurrentValue(); + const updatedValue = value.slice(0, valueOffset) + ref + value.slice(valueOffset + replaceLen); + const tokenIndex = getTokenMatchAtOffset(this.beans, updatedValue, valueOffset)?.index ?? null; + let previousRef; + this.applyFormulaValueChange({ + currentValue: value, + nextValue: updatedValue, + caret: caretOffset + ref.length, + updateTracking: () => { + previousRef = this.updateLastTokenTracking(ref, caretOffset, valueOffset); + } + }); + return { previousRef, tokenIndex }; + } + removeTokenRef(ref, tokenIndex) { + const value = this.getCurrentValue(); + const matches = getRefTokenMatchesForFormula(this.beans, value); + let token; + if (tokenIndex != null) { + token = matches.find((match) => match.index === tokenIndex); + if (token && token.ref !== ref) { + token = void 0; + } + } + if (!token) { + token = matches.find((match) => match.ref === ref); + } + if (!token) { + return false; + } + const updated = value.slice(0, token.start) + value.slice(token.end); + const caretBase = this.selectionCaretOffset ?? token.start; + const caret = Math.min(caretBase, updated.length); + this.applyFormulaValueChange({ + currentValue: value, + nextValue: updated, + caret, + updateTracking: () => { + this.lastTokenValueOffset = null; + this.lastTokenValueLength = null; + this.lastTokenCaretOffset = caret; + this.lastTokenRef = void 0; + } + }); + return true; + } + applyRangeInsert(ref) { + const value = this.getCurrentValue(); + const caretOffsets = this.getCaretOffsets(value); + if (!caretOffsets) { + const { previousRef: previousRef2, tokenIndex: tokenIndex2 } = this.insertOrReplaceToken(ref, true); + return { action: "insert", previousRef: previousRef2, tokenIndex: tokenIndex2 }; + } + const { valueOffset } = caretOffsets; + const tokenMatch = getTokenMatchAtOffset(this.beans, value, valueOffset); + if (tokenMatch) { + const { end: tokenEnd, ref: tokenRef } = tokenMatch; + if (tokenRef.endsWith(":") && valueOffset === tokenEnd) { + const { previousRef: previousRef3, tokenIndex: tokenIndex3 } = this.insertOrReplaceToken(ref, true); + return { action: "insert", previousRef: previousRef3, tokenIndex: tokenIndex3 }; + } + const { previousRef: previousRef2, tokenIndex: tokenIndex2 } = this.replaceTokenAtMatch(tokenMatch, ref); + return { action: "replace", previousRef: previousRef2, tokenIndex: tokenIndex2 }; + } + const rawTokenMatch = getRawTokenMatchAtOffset(value, valueOffset); + if (rawTokenMatch) { + const updated = value.slice(0, rawTokenMatch.start) + ref + value.slice(rawTokenMatch.end); + const tokenIndex2 = getTokenMatchAtOffset(this.beans, updated, rawTokenMatch.start)?.index ?? null; + const { previousRef: previousRef2 } = this.replaceTokenAtMatch(rawTokenMatch, ref, tokenIndex2); + return { action: "replace", previousRef: previousRef2, tokenIndex: tokenIndex2 }; + } + if (!shouldInsertTokenAtOffset(value, valueOffset)) { + return { action: "none" }; + } + const { previousRef, tokenIndex } = this.insertOrReplaceToken(ref, true); + return { action: "insert", previousRef, tokenIndex }; + } + restoreCaretAfterToken() { + const caretBase = this.lastTokenCaretOffset ?? getCaretOffset(this.beans, this.getContentElement(), this.getCurrentValue()) ?? this.currentValue.length; + const caret = caretBase + (this.lastTokenValueLength ?? 0); + this.selectionCaretOffset = null; + this.suppressNextFocusCaretPlacement = true; + setTimeout(() => { + if (!this.isAlive()) { + return; + } + this.getContentElement().focus({ preventScroll: true }); + if (_getDocument6(this.beans).activeElement === this.getContentElement()) { + this.suppressNextFocusCaretPlacement = false; + } + restoreCaret(this.beans, this.getContentElement(), caret); + }); + } + replaceTokenAtMatch(token, nextRef, tokenIndexOverride) { + const value = this.getCurrentValue(); + const updated = value.slice(0, token.start) + nextRef + value.slice(token.end); + this.applyFormulaValueChange({ + currentValue: value, + nextValue: updated, + caret: token.start + nextRef.length, + updateTracking: () => { + this.updateLastTokenTracking(nextRef, token.start, token.start); + } + }); + return { previousRef: token.ref, tokenIndex: tokenIndexOverride ?? token.index }; + } + getValueOffsetFromCaret(caretOffset) { + const container = this.getContentElement(); + let caretRemaining = caretOffset; + let valueOffset = 0; + for (const child of Array.from(container.childNodes)) { + const caretLen = _getNodeTextLength(child); + const valueLen = getNodeText(child).length; + if (caretRemaining <= caretLen) { + return valueOffset + (caretLen === valueLen ? caretRemaining : 0); + } + caretRemaining -= caretLen; + valueOffset += valueLen; + } + return this.currentValue.length; + } + getTokenInsertOffsets(isNew) { + return this.getCaretOffsets(this.getCurrentValue(), { + useCachedCaret: true, + useCachedValueOffset: !isNew + }); + } + getCaretOffsetsForAutocomplete(value) { + return this.getCaretOffsets(value); + } + getCaretOffsets(value, options = { + useCachedCaret: false, + useCachedValueOffset: false + }) { + const { beans } = this; + const { useCachedCaret, useCachedValueOffset } = options; + const contentElement = this.getContentElement(); + const caretOffset = useCachedCaret ? this.selectionCaretOffset ?? getCaretOffset(beans, contentElement, value) ?? this.currentValue.length : getCaretOffset(beans, contentElement, value); + if (caretOffset == null) { + return null; + } + const valueOffset = useCachedValueOffset && this.lastTokenValueOffset != null ? this.lastTokenValueOffset : this.getValueOffsetFromCaret(caretOffset); + if (valueOffset == null) { + return null; + } + return { caretOffset, valueOffset }; + } + updateLastTokenTracking(ref, caretOffset, valueOffset) { + const previousRef = this.lastTokenRef; + this.lastTokenValueOffset = valueOffset; + this.lastTokenValueLength = ref.length; + this.lastTokenCaretOffset = caretOffset; + this.lastTokenRef = ref; + return previousRef; + } + getFormulaState(text) { + const hasFormulaPrefix = text.trimStart().startsWith("="); + const isFormula = this.beans.formula?.isFormula(text) ?? hasFormulaPrefix; + return { isFormula, hasFormulaPrefix }; + } + dispatchValueChanged() { + this.dispatchLocalEvent({ type: "fieldValueChanged" }); + } + applyPlainValue(value, params) { + this.formulaColorByRef.clear(); + this.renderPlainValue(value, params.caret); + this.setEditorValue(value, params.silent); + if (params.dispatch) { + this.dispatchValueChanged(); + } + this.autocompleteFeature?.onPlainValueUpdated(); + } + applyFormulaValue(value, params) { + this.updateFormulaColorsFromValue(value); + this.renderFormula({ + value, + currentValue: params.currentValue ?? this.getCurrentValue(), + caret: params.caret ?? void 0 + }); + this.setEditorValue(value, params.silent); + if (params.dispatch) { + this.dispatchValueChanged(); + } + this.autocompleteFeature?.onFormulaValueUpdated(); + } + applyFormulaValueChange(params) { + const { currentValue, nextValue, caret } = params; + this.updateFormulaColorsFromValue(nextValue); + params.updateTracking?.(); + this.setEditorValue(nextValue); + this.renderFormula({ + currentValue, + value: nextValue, + caret + }); + this.dispatchValueChanged(); + this.autocompleteFeature?.onFormulaValueUpdated(); + } + replaceTokenRef(previousRef, nextRef, colorIndex, tokenIndex) { + const contentElement = this.getContentElement(); + let token; + if (tokenIndex != null) { + token = contentElement.querySelector( + `.ag-formula-token[data-formula-token-index="${tokenIndex}"]` + ) ?? void 0; + if (token && getTokenRef(token) !== previousRef) { + token = void 0; + } + } + if (!token) { + token = Array.from(contentElement.querySelectorAll(".ag-formula-token")).find( + (node) => getTokenRef(node) === previousRef + ); + } + if (!token) { + return null; + } + const caretOffset = getOffsetBeforeNode(contentElement, token); + const valueOffset = getOffsetBeforeNode(contentElement, token, true); + if (caretOffset == null || valueOffset == null) { + return null; + } + const value = this.getCurrentValue(); + if (colorIndex != null) { + this.formulaColorByRef.set(nextRef, colorIndex); + } + const updated = value.slice(0, valueOffset) + nextRef + value.slice(valueOffset + previousRef.length); + const resolvedIndex = getTokenIndex(token); + this.applyFormulaValueChange({ + currentValue: value, + nextValue: updated, + caret: caretOffset + nextRef.length, + updateTracking: () => { + this.updateLastTokenTracking(nextRef, caretOffset, valueOffset); + } + }); + return resolvedIndex ?? tokenIndex ?? null; + } +}; +var shouldUseTokenColors = (beans) => { + const { gos, rangeSvc } = beans; + const canCreateRanges = !!rangeSvc && !!gos.get("cellSelection"); + return canCreateRanges; +}; +var getOrderedRefs = (beans, value) => { + const refsInOrder = []; + const seen = /* @__PURE__ */ new Set(); + for (const match of getRefTokenMatchesForFormula(beans, value)) { + const ref = match.ref; + if (seen.has(ref)) { + continue; + } + seen.add(ref); + refsInOrder.push(ref); + } + return refsInOrder; +}; +var getTokenMatchAtOffset = (beans, value, offset) => { + for (const match of getRefTokenMatchesForFormula(beans, value)) { + if (offset >= match.start && offset <= match.end) { + return { ref: match.ref, start: match.start, end: match.end, index: match.index }; + } + } + return null; +}; +var getRawTokenMatchAtOffset = (value, offset) => { + for (const match of getRefTokenMatches(value)) { + if (offset >= match.start && offset <= match.end) { + return { ref: match.ref, start: match.start, end: match.end, index: match.index }; + } + } + return null; +}; +var shouldInsertTokenAtOffset = (value, offset) => { + const previousChar = getPreviousNonSpaceChar(value, offset); + return previousChar == null || TOKEN_INSERT_AFTER_CHARS.has(previousChar); +}; +var tokenize = (beans, value, getColorIndexForToken) => { + const nodes = []; + let lastIndex = 0; + const matches = getRefTokenMatchesForFormula(beans, value); + const doc = _getDocument6(beans); + for (const match of matches) { + if (match.start > lastIndex) { + nodes.push(doc.createTextNode(formatForDisplay(value.slice(lastIndex, match.start)))); + } + const colorIndex = getColorIndexForToken(match.index); + nodes.push(createReferenceNode(match.ref, colorIndex, colorIndex != null, match.index)); + lastIndex = match.end; + } + if (lastIndex < value.length) { + nodes.push(doc.createTextNode(formatForDisplay(value.slice(lastIndex)))); + } + if (!nodes.length) { + nodes.push(doc.createTextNode("")); + } + return nodes; +}; +var createReferenceNode = (ref, colorIndex, useTokenColors, tokenIndex) => { + const attrs = { + "aria-label": ref, + "data-formula-ref": ref, + "data-formula-token-index": tokenIndex.toString() + }; + let tokenClass; + if (useTokenColors && colorIndex != null) { + const classes = getColorClassesForRef(ref, colorIndex); + tokenClass = classes.tokenClass; + attrs["data-formula-range-class"] = classes.rangeClass; + } + const node = _createElement16({ + tag: "span", + cls: "ag-formula-token", + attrs, + children: ref + }); + if (tokenClass) { + node.classList.add(tokenClass); + } + return node; +}; +var renderFormula = (params) => { + const { beans, contentElement, currentValue, value, getColorIndexForToken, caret } = params; + const caretOffset = caret ?? getCaretOffset(beans, contentElement, currentValue); + const maxCaret = value.length; + contentElement.textContent = ""; + for (const node of tokenize(beans, value, getColorIndexForToken)) { + contentElement.append(node); + } + const targetCaret = caretOffset != null ? Math.min(caretOffset, maxCaret) : null; + restoreCaret(beans, contentElement, targetCaret); +}; +var getOffsetBeforeNode = (container, node, useValueLength = false) => { + if (!container.contains(node)) { + return null; + } + let offset = 0; + for (const child of Array.from(container.childNodes)) { + if (child === node) { + return offset; + } + offset += useValueLength ? getNodeText(child).length : _getNodeTextLength(child); + } + return null; +}; +var serializeContent = (contentElement) => { + let output = ""; + contentElement.childNodes.forEach((child) => { + output += getNodeText(child); + }); + return output; +}; +var getNodeText = (node) => { + if (node.nodeType === Node.TEXT_NODE) { + return formatForValue(node.textContent ?? ""); + } + if (node.nodeType === Node.ELEMENT_NODE) { + return Array.from(node.childNodes).map((child) => getNodeText(child)).join(""); + } + return ""; +}; +var _getNodeTextLength = (node) => { + if (node.nodeType === Node.TEXT_NODE) { + return node.textContent?.length ?? 0; + } + if (node.nodeType === Node.ELEMENT_NODE) { + return Array.from(node.childNodes).reduce((sum, child) => sum + _getNodeTextLength(child), 0); + } + return 0; +}; +var findNodeAtOffset = (root, offset) => { + let remaining = offset; + for (let i = 0; i < root.childNodes.length; i++) { + const child = root.childNodes[i]; + const length = _getNodeTextLength(child); + if (remaining > length) { + remaining -= length; + continue; + } + if (child.nodeType === Node.TEXT_NODE) { + return { node: child, localOffset: remaining }; + } + return findNodeAtOffset(child, remaining); + } + return { node: root, localOffset: root.childNodes.length }; +}; +var restoreCaret = (beans, contentElement, offset) => { + if (offset == null) { + return; + } + const win = _getWindow(beans); + const doc = _getDocument6(beans); + const selection = win.getSelection(); + const range = doc.createRange(); + const { node, localOffset } = findNodeAtOffset(contentElement, offset); + if (!node || !selection || !contentElement.isConnected || !node.isConnected) { + return; + } + range.setStart(node, localOffset); + range.collapse(true); + selection.removeAllRanges(); + try { + selection.addRange(range); + } catch { + } +}; +var getCaretOffset = (beans, contentElement, currentValue) => { + const win = _getWindow(beans); + const selection = win.getSelection(); + if (!selection || selection.rangeCount === 0) { + return currentValue?.length ?? null; + } + const range = selection.getRangeAt(0); + if (!contentElement.contains(range.startContainer)) { + return currentValue?.length ?? null; + } + if (range.startContainer === contentElement) { + let offset2 = 0; + for (let i = 0; i < range.startOffset; i++) { + offset2 += _getNodeTextLength(contentElement.childNodes[i]); + } + return offset2; + } + let offset = range.startOffset; + let node = range.startContainer; + while (node && node !== contentElement) { + let sibling = node.previousSibling; + while (sibling) { + offset += _getNodeTextLength(sibling); + sibling = sibling.previousSibling; + } + node = node.parentNode; + } + return offset; +}; +var getTokenRef = (tokenEl) => formatForValue(tokenEl.textContent ?? tokenEl.dataset.formulaRef ?? ""); +var getTokenIndex = (tokenEl) => { + const raw = tokenEl.dataset.formulaTokenIndex; + if (!raw) { + return null; + } + const parsed = parseInt(raw, 10); + return Number.isFinite(parsed) ? parsed : null; +}; +var formatForDisplay = (text) => text.replace(/[/*]/g, (match) => DISPLAY_OPERATOR_LOOKUP[match] ?? match); +var formatForValue = (text) => text.replace(/[÷×]/g, (match) => VALUE_OPERATOR_LOOKUP[match] ?? match); + +// packages/ag-grid-enterprise/src/formula/i18n.ts +var FORMULA_ERRORS = { + 1: ["invalidFormulaValidation", "Invalid formula."], + 2: ["formulaParseInvalidCellReference", "Invalid cell reference: ${variable}."], + 3: ["formulaParseInvalidRangeEndReference", "Invalid range end reference."], + 4: ["formulaParseUnterminatedString", "Unterminated string."], + 5: ["formulaParseUnexpectedCharacter", "Unexpected character: ${variable}."], + 6: ["formulaParseOperatorStackUnderflow", "Operator stack underflow."], + 7: ["formulaParseMissingOperand", "Missing operand for '${variable}'."], + 8: ["formulaParseInternalUnexpectedFrameDuringReduction", "Internal error: unexpected frame during reduction."], + 9: ["formulaParseInternalUnexpectedFrameBeforeOpenParen", "Internal error: unexpected frame before '('."], + 10: ["formulaParseMisplacedComma", "Misplaced comma."], + 11: ["formulaParseCommaOutsideFunctionCall", "Comma outside of a function call."], + 12: ["formulaParseInternalUnexpectedFrameBeforeCloseParen", "Internal error: unexpected frame before ')'."], + 13: ["formulaParseMismatchedParentheses", "Mismatched parentheses."], + 14: ["formulaParseUnsupportedOperand", "Unsupported operand: ${variable}."], + 15: [ + "formulaParseMismatchedParenthesesOrUnfinishedFunctionCall", + "Mismatched parentheses or unfinished function call." + ], + 16: ["formulaParseInvalidExpression", "Invalid expression."], + 17: ["formulaParseFormulasMustBeginWithEquals", "Formulas must begin with =."], + 18: [ + "formulaSerializeStringContainsQuote", + 'String contains a quote (") which the tokenizer does not support.', + "#PARSE!" + ], + 19: [ + "formulaSerializeCannotProduceAbsoluteColumnLabelFromId", + "Cannot produce absolute COLUMN label from id '${variable}'." + ], + 20: [ + "formulaSerializeCannotProduceAbsoluteRowIndexFromId", + "Cannot produce absolute ROW index from id '${variable}'." + ], + 21: ["formulaSerializeCannotProduceRowIndexFromId", "Cannot produce ROW index from id '${variable}'."], + 22: ["formulaSerializeCannotMapColumnIdToA1Label", "Cannot map column id '${variable}' to A1 label."], + 23: ["formulaSerializeCannotParseAbsoluteRowIndex", "Cannot parse absolute row index '${variable}'."], + 24: ["formulaSerializeCannotMapRowIdToA1Index", "Cannot map row id '${variable}' to A1 index."], + 25: ["formulaEvalRangeNotAllowedInScalarContext", "Range is not allowed in scalar context."], + 26: ["formulaEvalUnknownReferenceToCell", "Unknown reference to cell.", "#REF!"], + 27: ["formulaEvalUnsupportedOperation", "Unsupported operation ${variable}.", "#NAME?"], + 28: ["formulaEvalInvalidAbsoluteRow", "Invalid absolute row.", "#REF!"], + 29: ["formulaEvalUnrecognisedRowId", "Unrecognised row id.", "#REF!"], + 30: ["formulaEvalInvalidAbsoluteColumn", "Invalid absolute column.", "#REF!"], + 31: ["formulaEvalUnrecognisedColumnId", "Unrecognised column id.", "#REF!"], + 32: ["formulaEvalUnrecognisedRowInRange", "Unrecognised row in range.", "#REF!"], + 33: ["formulaEvalUnrecognisedReferenceToCell", "Unrecognised reference to cell.", "#REF!"], + 34: ["formulaEvalIncompleteRangeReference", "Incomplete range reference.", "#REF!"], + 35: ["formulaFunctionExpectedExactlyArguments", "${variable}: expected exactly ${variable} arguments."], + 36: ["formulaFunctionExpectedAtMostArguments", "${variable}: expected at most ${variable} arguments."], + 37: ["formulaFunctionExpectedAtLeastArguments", "${variable}: expected at least ${variable} arguments."], + 38: [ + "formulaFunctionInvalidCriteriaWildcardsWithComparator", + "Invalid criteria: wildcards with comparator.", + "#VALUE!" + ], + 39: ["formulaFunctionNonNumericArgument", "${variable}: non-numeric argument.", "#VALUE!"], + 40: ["formulaFunctionDivisionByZero", "${variable}: division by zero.", "#DIV/0!"], + 41: ["formulaFunctionCannotCombineDatesWithBigInt", "${variable}: cannot combine dates with BigInt.", "#VALUE!"], + 42: [ + "formulaFunctionRequiresAtLeastOneNumericValue", + "${variable}: requires at least one numeric value.", + "#PARSE!" + ], + 43: ["formulaFunctionRequiresAtLeastOneValue", "${variable}: requires at least one value."], + 44: ["formulaFunctionAllValuesMustBeNumbers", "${variable}: all values must be numbers.", "#VALUE!"], + 45: ["formulaFunctionArgumentMustBeRange", "${variable}: ${variable} argument must be a range.", "#VALUE!"], + 46: ["formulaFunctionArgumentMustBeValue", "${variable}: ${variable} argument must be a value.", "#VALUE!"], + 47: ["formulaFunctionRangesHaveDifferentSizes", "${variable}: ranges have different sizes.", "#VALUE!"], + 48: ["formulaFunctionValuesMustBeNumeric", "${variable}: values must be numeric.", "#VALUE!"], + 49: ["formulaFunctionValuesMustBeIntegers", "${variable}: values must be integers.", "#VALUE!"], + 50: ["formulaFunctionUnsupportedValueType", "${variable}: unsupported value type.", "#VALUE!"], + 51: ["formulaServiceCircularReference", "Circular reference.", "#CIRCREF!"], + 52: ["formulaServiceExpectedParsableFormula", "Expected parsable formula.", "#PARSE!"], + 53: ["formulaServiceInternalSchedulingError", "Internal scheduling error."], + 54: ["formulaFunctionDivNonNumericArgument", "DIV: non-numeric argument.", "#VALUE!"], + 55: ["formulaFunctionDivDivisionByZero", "DIV: division by zero.", "#DIV/0!"], + 56: ["formulaFunctionSumCannotCombineDatesWithBigInt", "SUM: cannot combine dates with BigInt.", "#VALUE!"], + 57: ["formulaFunctionSumRequiresAtLeastOneNumericValue", "SUM: requires at least one numeric value.", "#PARSE!"], + 58: ["formulaFunctionAvgRequiresAtLeastOneValue", "AVG: requires at least one value."], + 59: ["formulaFunctionMedianAllValuesMustBeNumbers", "MEDIAN: all values must be numbers.", "#VALUE!"], + 60: ["formulaFunctionMedianRequiresAtLeastOneValue", "MEDIAN: requires at least one value."], + 61: ["formulaFunctionSumifFirstArgumentMustBeRange", "SUMIF: first argument must be a range.", "#VALUE!"], + 62: [ + "formulaFunctionSumifSecondArgumentMustBeValue", + "SUMIF: second argument must be a value (criteria).", + "#VALUE!" + ], + 63: [ + "formulaFunctionSumifThirdArgumentMustBeRange", + "SUMIF: third argument must be a range (sum_range).", + "#VALUE!" + ], + 64: ["formulaFunctionSumifRangesHaveDifferentSizes", "SUMIF: ranges have different sizes.", "#VALUE!"], + 65: ["formulaFunctionCountifFirstArgumentMustBeRange", "COUNTIF: first argument must be a range.", "#VALUE!"], + 66: [ + "formulaFunctionCountifSecondArgumentMustBeValue", + "COUNTIF: second argument must be a value (criteria).", + "#VALUE!" + ], + 67: ["formulaFunctionConcatUnsupportedValueType", "CONCAT: unsupported value type.", "#VALUE!"], + 68: ["formulaFunctionMinRequiresAtLeastOneValue", "MIN: requires at least one value."], + 69: ["formulaFunctionMaxRequiresAtLeastOneValue", "MAX: requires at least one value."], + 70: ["formulaFunctionPercentNonNumericArgument", "PERCENT: non-numeric argument.", "#VALUE!"], + 71: ["formulaFunctionPowerNonNumericArgument", "POWER: non-numeric argument.", "#VALUE!"] +}; +var interpolateVariables = (template, variableValues) => { + if (!variableValues?.length) { + return template; + } + let localisedText = template; + let found = 0; + while (found < variableValues.length) { + const idx = localisedText.indexOf("${variable}"); + if (idx === -1) { + break; + } + localisedText = localisedText.replace("${variable}", variableValues[found++]); + } + return localisedText; +}; +var normaliseVariableValues = (values) => { + if (!values?.length) { + return void 0; + } + return values.map((value) => String(value)); +}; +var getFormulaErrorDefinition = (errorId) => { + return FORMULA_ERRORS[errorId]; +}; +var getFormulaErrorDefaultMessage = (errorId, variableValues) => { + const [, defaultMessage] = getFormulaErrorDefinition(errorId); + return interpolateVariables(defaultMessage, normaliseVariableValues(variableValues)); +}; +var translateFormulaError = (translate, errorId, variableValues) => { + const [localeKey, defaultMessage] = getFormulaErrorDefinition(errorId); + const normalizedVariableValues = normaliseVariableValues(variableValues); + return translate(localeKey, defaultMessage, normalizedVariableValues); +}; + +// packages/ag-grid-enterprise/src/formula/editor/formulaCellEditor.ts +var FormulaCellEditor = class extends AgAbstractCellEditor2 { + constructor() { + super({ tag: "div", cls: "ag-cell-edit-wrapper" }); + this.eEditor = RefPlaceholder47; + this.focusAfterAttached = false; + } + initialiseEditor(params) { + const formulaInputField = this.createManagedBean(new AgFormulaInputField()); + this.eEditor = formulaInputField; + formulaInputField.addCss("ag-cell-editor"); + this.appendChild(formulaInputField); + this.addManagedElementListeners(formulaInputField.getContentElement(), { + keydown: (event) => this.onFormulaInputKeyDown(event, params.onKeyDown) + }); + const { eventKey, cellStartedEdit } = params; + let startValue; + if (cellStartedEdit) { + this.focusAfterAttached = true; + if (eventKey === KeyCode33.BACKSPACE || eventKey === KeyCode33.DELETE) { + startValue = ""; + } else if (eventKey && eventKey.length === 1) { + startValue = eventKey; + } else { + startValue = this.getStartValue(params); + } + } else { + startValue = this.getStartValue(params); + } + const initialValue = startValue == null ? "" : String(startValue); + this.eEditor.setEditingCellRef(params.column, params.rowIndex); + this.eEditor.setValue(initialValue, true); + } + onFormulaInputKeyDown(event, onKeyDown) { + const { key } = event; + if (key !== KeyCode33.TAB || event.defaultPrevented) { + return; + } + const { focusSvc } = this.beans; + const prevFocus = focusSvc?.getFocusedCell(); + this.eEditor.withSelectionChangeHandlingSuppressed(() => { + onKeyDown?.(event); + }); + const nextFocus = focusSvc?.getFocusedCell(); + let focusChanged = false; + if (prevFocus && nextFocus) { + const { rowIndex: prevRowIndex, rowPinned: prevRowPinned, column: prevColumn } = prevFocus; + const { rowIndex: nextRowIndex, rowPinned: nextRowPinned, column: nextColumn } = nextFocus; + focusChanged = prevRowIndex !== nextRowIndex || prevRowPinned !== nextRowPinned || prevColumn !== nextColumn; + } + const { defaultPrevented } = event; + if (defaultPrevented || focusChanged) { + event.preventDefault(); + } + event.stopPropagation(); + } + getStartValue(params) { + const { value } = params; + return value?.toString() ?? value; + } + agSetEditValue(value) { + this.params.value = value; + const startValue = this.getStartValue(this.params); + this.eEditor.setValue(startValue ?? "", true); + } + isPopup() { + return false; + } + afterGuiAttached() { + if (!this.focusAfterAttached) { + return; + } + const { beans, eEditor } = this; + if (!_isBrowserSafari2()) { + this.focusIn(); + } + _placeCaretAtEnd2(beans, eEditor.getContentElement()); + } + focusIn() { + this.eEditor.getContentElement().focus({ preventScroll: true }); + } + getValue() { + const rawValue = this.eEditor.getCurrentValue(); + const { value, parseValue } = this.params; + if (typeof rawValue === "string" && this.isFormulaText(rawValue)) { + return rawValue; + } + if (rawValue == null && value == null) { + return value; + } + return parseValue(String(rawValue)); + } + getValidationElement() { + return this.eEditor.getContentElement(); + } + getValidationErrors() { + const { params } = this; + const rawValue = this.eEditor.getCurrentValue(); + const translate = this.getLocaleTextFunc(); + const { getValidationErrors, validateFormulas } = params; + let internalErrors = null; + const shouldValidate = validateFormulas === true || !!getValidationErrors; + if (shouldValidate && typeof rawValue === "string" && this.isFormulaText(rawValue)) { + const normalised = this.beans.formula?.normaliseFormula(rawValue, true); + if (!normalised) { + internalErrors = [translateFormulaError(translate, 1)]; + } + } + if (getValidationErrors) { + return getValidationErrors({ value: this.getValue(), internalErrors, cellEditorParams: params }); + } + return internalErrors; + } + isFormulaText(value) { + const text = value == null ? "" : String(value); + return this.beans.formula?.isFormula(text) ?? text.trimStart().startsWith("="); + } +}; + +// packages/ag-grid-enterprise/src/formula/formula.css +var formula_default = '.formula-error:after{background-color:var(--ag-invalid-color);content:"";height:12px;position:absolute;top:-6px;width:12px}:where(.ag-ltr) .formula-error:after{right:-6px;transform:rotate(45deg)}:where(.ag-rtl) .formula-error:after{left:-6px;transform:rotate(-45deg)}'; + +// packages/ag-grid-enterprise/src/formula/formulaDataService.ts +import { BeanStub as BeanStub80, _addGridCommonParams as _addGridCommonParams26, _isExpressionString as _isExpressionString2 } from "ag-grid-community"; +var FormulaDataService = class extends BeanStub80 { + constructor() { + super(...arguments); + this.beanName = "formulaDataSvc"; + this.hasSource = false; + } + postConstruct() { + const dataSource = this.gos.get("formulaDataSource"); + if (dataSource) { + this.setDataSource(dataSource); + } + } + hasDataSource() { + return this.hasSource; + } + getFormula(params) { + const formula = this.dataSource?.getFormula(params); + return _isExpressionString2(formula) ? formula : void 0; + } + setFormula(params) { + this.dataSource?.setFormula(params); + } + setDataSource(dataSource) { + this.dataSource = dataSource; + this.hasSource = true; + dataSource.init?.(this.createInitParams()); + } + createInitParams() { + return _addGridCommonParams26(this.gos, {}); + } + destroy() { + this.dataSource?.destroy?.(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/formula/formulaInputManagerService.ts +import { BeanStub as BeanStub81 } from "ag-grid-community"; +var FormulaInputManagerService = class extends BeanStub81 { + constructor() { + super(...arguments); + this.beanName = "formulaInputManager"; + this.activeEditor = null; + this.activeEditorDeactivate = null; + } + postConstruct() { + this.registerRangeSelectionExtension(); + } + registerActiveEditor(editorId, onDeactivate) { + if (this.activeEditor === editorId && this.activeEditorDeactivate === onDeactivate) { + return false; + } + const previousDeactivate = this.activeEditorDeactivate; + if (previousDeactivate && previousDeactivate !== onDeactivate) { + previousDeactivate(); + } + this.activeEditor = editorId; + this.activeEditorDeactivate = onDeactivate; + return true; + } + unregisterActiveEditor(editorId, onDeactivate) { + if (this.activeEditor === editorId && this.activeEditorDeactivate === onDeactivate) { + this.activeEditor = null; + this.activeEditorDeactivate = null; + } + } + isActiveEditor(editorId) { + return this.activeEditor === editorId; + } + shouldSuppressRangeSelection(eventTarget) { + const target = eventTarget; + if (!target?.closest) { + return false; + } + if (this.activeEditor != null) { + return !!target.closest(".ag-cell-editor"); + } + return !!target.closest(".ag-formula-input-field"); + } + registerRangeSelectionExtension() { + const rangeSvc = this.beans.rangeSvc; + if (!rangeSvc) { + return; + } + rangeSvc.registerRangeSelectionExtension(this); + this.addDestroyFunc(() => rangeSvc.unregisterRangeSelectionExtension?.(this)); + } +}; + +// packages/ag-grid-enterprise/src/formula/formulaService.ts +import { BeanStub as BeanStub82, _convertColumnEventSourceType as _convertColumnEventSourceType3, _isExpressionString as _isExpressionString4, _warn as _warn54 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/formula/ast/parsers.ts +import { _getClientSideRowModel as _getClientSideRowModel2, _isExpressionString as _isExpressionString3 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/formula/ast/operators.ts +var OP_DEFS = [ + { symbol: "%", fixity: "postfix", precedence: 100 }, + { symbol: "-", fixity: "prefix", precedence: 90 }, + { symbol: "+", fixity: "prefix", precedence: 90 }, + { symbol: "^", fixity: "infix", precedence: 80, associativity: "right" }, + { symbol: "*", fixity: "infix", precedence: 70, associativity: "left", isAssociative: true }, + { symbol: "/", fixity: "infix", precedence: 70, associativity: "left" }, + { symbol: "+", fixity: "infix", precedence: 60, associativity: "left", isAssociative: true }, + { symbol: "-", fixity: "infix", precedence: 60, associativity: "left" }, + { symbol: "&", fixity: "infix", precedence: 55, associativity: "left", isAssociative: true }, + { symbol: "=", fixity: "infix", precedence: 50, associativity: "left" }, + { symbol: "<>", fixity: "infix", precedence: 50, associativity: "left" }, + { symbol: ">=", fixity: "infix", precedence: 50, associativity: "left" }, + { symbol: "<=", fixity: "infix", precedence: 50, associativity: "left" }, + { symbol: ">", fixity: "infix", precedence: 50, associativity: "left" }, + { symbol: "<", fixity: "infix", precedence: 50, associativity: "left" } +]; +var symbolOperatorMap = /* @__PURE__ */ new Map(); +for (const d of OP_DEFS) { + const s2 = symbolOperatorMap.get(d.symbol) ?? []; + s2.push(d); + symbolOperatorMap.set(d.symbol, s2); +} +function getDefBySymbol(symbol, fixity) { + const arr = symbolOperatorMap.get(symbol) ?? []; + return fixity ? arr.find((d) => d.fixity === fixity) : arr[0]; +} +var OP_SYMBOLS_DESC = [...new Set(OP_DEFS.map((d) => d.symbol))].sort((a, b) => b.length - a.length); +var OP_BY_SYMBOL = symbolOperatorMap; + +// packages/ag-grid-enterprise/src/formula/ast/utils.ts +var normaliseVariableValues2 = (values) => { + if (!values?.length) { + return void 0; + } + return values.map((value) => String(value)); +}; +var FormulaError = class extends Error { + constructor(messageOrErrorId, typeOrVariableValues, typeOverride) { + const isMessage = typeof messageOrErrorId === "string"; + const variableValues = !isMessage && Array.isArray(typeOrVariableValues) ? normaliseVariableValues2(typeOrVariableValues) : void 0; + const resolvedMessage = isMessage ? messageOrErrorId : getFormulaErrorDefaultMessage(messageOrErrorId, variableValues); + super(resolvedMessage); + this.name = "FormulaError"; + if (isMessage) { + this.type = typeof typeOrVariableValues === "string" ? typeOrVariableValues : "#ERROR!"; + this.errorId = null; + this.localeKey = null; + this.defaultMessage = messageOrErrorId; + this.variableValues = void 0; + } else { + const [localeKey, defaultMessage, defaultType] = getFormulaErrorDefinition(messageOrErrorId); + this.type = typeOverride ?? defaultType ?? "#ERROR!"; + this.errorId = messageOrErrorId; + this.localeKey = localeKey; + this.defaultMessage = defaultMessage; + this.variableValues = variableValues; + } + } + getTranslatedMessage(translate) { + if (!this.localeKey) { + return this.message; + } + return translate(this.localeKey, this.defaultMessage, this.variableValues); + } +}; +var FormulaParseError = class extends FormulaError { + constructor(errorId, errorStart, errorEnd, variableValues) { + super(errorId, variableValues, "#PARSE!"); + this.errorStart = errorStart; + this.errorEnd = errorEnd; + } +}; + +// packages/ag-grid-enterprise/src/formula/ast/parsers.ts +var parseOperand = (beans, operand, unsafe) => { + const trimmed = operand.trim(); + if (trimmed.startsWith('"') && trimmed.endsWith('"') && trimmed.length > 2) { + return trimmed.slice(1, -1); + } + if (trimmed.toLowerCase() === "true") { + return true; + } + if (trimmed.toLowerCase() === "false") { + return false; + } + const num = Number(trimmed); + if (!isNaN(num)) { + return num; + } + const parsed = parseA1Ref(trimmed); + if (parsed) { + const { + startCol, + startRow, + startColAbsolute, + startRowAbsolute, + endCol, + endRow, + endColAbsolute, + endRowAbsolute + } = parsed; + const toCell = (colAbs, colStr, rowAbs, rowStr, unsafe2) => { + const col = colAbs || unsafe2 ? colStr.toUpperCase() : beans.formula?.getColByRef(colStr)?.colId; + const row = rowAbs || unsafe2 ? rowStr : _getClientSideRowModel2(beans)?.getFormulaRow(Number(rowStr) - 1)?.id; + if (col == null || row == null) { + throw new FormulaParseError(2, 0, 0, [trimmed]); + } + return { + column: { id: col, absolute: colAbs }, + row: { id: row, absolute: rowAbs } + }; + }; + const start = toCell(startColAbsolute, startCol, startRowAbsolute, startRow, unsafe); + if (endCol && endRow) { + const end = toCell(endColAbsolute ?? false, endCol, endRowAbsolute ?? false, endRow, unsafe); + start.endColumn = end.column; + start.endRow = end.row; + } + return start; + } + return null; +}; +function tokenize2(expr) { + const tokens = []; + let i = 0; + const lexCellRange = (s2, start) => { + let j = start; + const dollar = () => s2[j] === "$" ? (j++, true) : false; + const letters = () => { + const k = j; + while (j < s2.length && /[A-Za-z]/.test(s2[j])) { + j++; + } + return j > k; + }; + const digits = () => { + const k = j; + while (j < s2.length && /[0-9]/.test(s2[j])) { + j++; + } + return j > k; + }; + const parseCell = () => { + const j0 = j; + dollar(); + if (!letters()) { + j = j0; + return false; + } + dollar(); + if (!digits()) { + j = j0; + return false; + } + return true; + }; + if (!parseCell()) { + return 0; + } + if (s2[j] === ":") { + const colonPos = j; + j++; + if (!parseCell()) { + throw new FormulaParseError(3, colonPos, j); + } + } + const ref = s2.slice(start, j); + if (!isStandaloneRefToken(s2, start, ref)) { + return 0; + } + return j - start; + }; + while (i < expr.length) { + const ch = expr[i]; + if (/\s/.test(ch)) { + i++; + continue; + } + if (ch === '"') { + let j = i + 1; + while (j < expr.length && expr[j] !== '"') { + j++; + } + if (j >= expr.length) { + throw new FormulaParseError(4, i, expr.length); + } + tokens.push(expr.slice(i, j + 1)); + i = j + 1; + continue; + } + if (/[0-9]/.test(ch) || ch === "." && /[0-9]/.test(expr[i + 1])) { + let j = i + 1; + while (j < expr.length && /[0-9.]/.test(expr[j])) { + j++; + } + tokens.push(expr.slice(i, j)); + i = j; + continue; + } + if (ch === "$" || isFormulaIdentStart(ch)) { + const len = lexCellRange(expr, i); + if (len > 0) { + tokens.push(expr.slice(i, i + len)); + i += len; + continue; + } + let j = i + 1; + while (j < expr.length && isFormulaIdentChar(expr[j])) { + j++; + } + tokens.push(expr.slice(i, j)); + i = j; + continue; + } + if (ch === "(" || ch === ")" || ch === ",") { + tokens.push(ch); + i++; + continue; + } + const firstMatch = OP_SYMBOLS_DESC.find((sym) => expr.startsWith(sym, i)); + if (!firstMatch) { + throw new FormulaParseError(5, i, i + 1, [ch]); + } + tokens.push(firstMatch); + i += firstMatch.length; + } + return tokens; +} +function shouldReduce(top, incoming) { + if (top.fixity !== "infix" || incoming.fixity !== "infix") { + return true; + } + if (top.associativity === "right" && top.precedence === incoming.precedence) { + return false; + } + return top.precedence >= incoming.precedence; +} +function pickOpDefForContext(symbol, prevToken) { + const defs = OP_BY_SYMBOL.get(symbol); + if (!defs) { + return null; + } + const prevIsOperator = prevToken !== void 0 && OP_BY_SYMBOL.has(prevToken); + const prevIsOpenOrComma = prevToken === "(" || prevToken === ","; + const prevIsValueLike = prevToken !== void 0 && !prevIsOperator && !prevIsOpenOrComma && prevToken !== "("; + if (prevIsValueLike || prevToken === ")") { + return defs.find((d) => d.fixity === "postfix") ?? defs.find((d) => d.fixity === "infix") ?? null; + } + return defs.find((d) => d.fixity === "prefix") ?? defs.find((d) => d.fixity === "infix") ?? null; +} +function parseExpression(beans, expr, unsafe) { + const tokens = tokenize2(expr); + const output = []; + const ops = []; + const applyTop = () => { + const frame = ops.pop(); + if (!frame) { + throw new FormulaParseError(6, 0, 0); + } + if (frame.kind === "op") { + const def = frame.def; + if (def.fixity !== "infix") { + const right2 = output.pop(); + if (!right2) { + throw new FormulaParseError(7, 0, 0, [def.symbol]); + } + if (def.symbol === "+" && def.fixity === "prefix") { + output.push(right2); + return; + } + if (def.fixity === "postfix" && def.symbol === "%") { + output.push({ type: "operation", operation: def.symbol, operands: [right2] }); + return; + } + if (def.symbol === "-" && def.fixity === "prefix") { + output.push({ + type: "operation", + operation: "-", + operands: [{ type: "operand", value: 0 }, right2] + }); + } else { + output.push({ type: "operation", operation: def.symbol, operands: [right2] }); + } + return; + } + const right = output.pop(); + const left = output.pop(); + if (!left || !right) { + throw new FormulaParseError(7, 0, 0, [def.symbol]); + } + output.push({ type: "operation", operation: def.symbol, operands: [left, right] }); + return; + } + throw new FormulaParseError(8, 0, 0); + }; + let i = 0; + while (i < tokens.length) { + const token = tokens[i]; + if (isFormulaIdentStart(token[0]) && tokens[i + 1] === "(") { + const name = token; + ops.push({ kind: "function", name, args: [] }); + ops.push({ kind: "parenthesis", outLen: output.length }); + i += 2; + continue; + } + if (token === "(") { + ops.push({ kind: "parenthesis", outLen: output.length }); + i++; + continue; + } + if (token === ",") { + while (true) { + const top = ops[ops.length - 1]; + if (!top || top.kind === "parenthesis") { + break; + } + if (top.kind === "op") { + applyTop(); + } else { + throw new FormulaParseError(9, i, i + 1); + } + } + const paren = ops[ops.length - 1]; + if (!paren || paren.kind !== "parenthesis") { + throw new FormulaParseError(10, i, i + 1); + } + const maybeFunction = ops[ops.length - 2]; + if (!maybeFunction || maybeFunction.kind !== "function") { + throw new FormulaParseError(11, i, i + 1); + } + if (output.length > paren.outLen) { + maybeFunction.args.push(output.pop()); + } + i++; + continue; + } + if (token === ")") { + while (true) { + const top = ops[ops.length - 1]; + if (!top || top.kind === "parenthesis") { + break; + } + if (top.kind === "op") { + applyTop(); + } else { + throw new FormulaParseError(12, i, i + 1); + } + } + const paren = ops[ops.length - 1]; + if (!paren || paren.kind !== "parenthesis") { + throw new FormulaParseError(13, i, i + 1); + } + const parenOutLen = paren.outLen; + ops.pop(); + if (ops[ops.length - 1]?.kind === "function") { + const fn = ops.pop(); + if (output.length > parenOutLen) { + fn.args.push(output.pop()); + } + output.push({ type: "operation", operation: fn.name, operands: fn.args }); + } + i++; + continue; + } + const incoming = OP_BY_SYMBOL.has(token) ? pickOpDefForContext(token, tokens[i - 1]) : null; + if (incoming) { + while (true) { + const top = ops[ops.length - 1]; + if (!top || top.kind !== "op") { + break; + } + if (shouldReduce(top.def, incoming)) { + applyTop(); + } else { + break; + } + } + ops.push({ kind: "op", def: incoming }); + i++; + continue; + } + const parsed = parseOperand(beans, token, unsafe); + if (parsed == null) { + throw new FormulaParseError(14, 0, token.length, [token]); + } + output.push({ type: "operand", value: parsed }); + i++; + } + while (ops.length) { + const top = ops[ops.length - 1]; + if (top.kind === "op") { + applyTop(); + } else { + throw new FormulaParseError(15, 0, 0); + } + } + if (output.length !== 1) { + throw new FormulaParseError(16, 0, 0); + } + return output[0]; +} +var parseFormula = (beans, formula, unsafe = false) => { + if (!_isExpressionString3(formula)) { + throw new FormulaParseError(17, 0, 1); + } + const body = formula.slice(1).trim(); + return normalizeRefCells(parseExpression(beans, body, unsafe)); +}; +function isOperation(node, name) { + return node.type === "operation" && node.operation.toUpperCase() === name.toUpperCase(); +} +function asBool(node, def = false) { + if (!node) { + return def; + } + if (node.type !== "operand") { + return def; + } + return !!node.value; +} +function asStringish(node) { + if (!node || node.type !== "operand") { + return null; + } + const v = node.value; + if (typeof v === "string") { + return v; + } + if (typeof v === "number" || typeof v === "boolean") { + return String(v); + } + return null; +} +function extractColumnRef(node) { + if (!isOperation(node, "COLUMN")) { + return null; + } + const id = asStringish(node.operands[0]); + if (id == null) { + return null; + } + const absolute = asBool(node.operands[1], false); + return { id, absolute }; +} +function extractRowRef(node) { + if (!isOperation(node, "ROW")) { + return null; + } + const id = asStringish(node.operands[0]); + if (id == null) { + return null; + } + const absolute = asBool(node.operands[1], false); + return { id, absolute }; +} +function tryFoldRefToCell(node) { + if (!isOperation(node, "REF")) { + return null; + } + const ops = node.operands; + if (ops.length !== 2 && ops.length !== 4) { + return null; + } + const col1 = extractColumnRef(ops[0]); + const row1 = extractRowRef(ops[1]); + if (!col1 || !row1) { + return null; + } + const cell = { column: col1, row: row1 }; + if (ops.length === 4) { + const col2 = extractColumnRef(ops[2]); + const row2 = extractRowRef(ops[3]); + if (!col2 || !row2) { + return null; + } + cell.endColumn = col2; + cell.endRow = row2; + } + return { type: "operand", value: cell }; +} +function normalizeRefCells(node) { + if (node.type === "operation") { + const normalizedOperands = node.operands.map(normalizeRefCells); + const rebuilt = { + type: "operation", + operation: node.operation, + operands: normalizedOperands + }; + const folded = tryFoldRefToCell(rebuilt); + return folded ?? rebuilt; + } + return node; +} + +// packages/ag-grid-enterprise/src/formula/ast/serializer.ts +import { _getClientSideRowModel as _getClientSideRowModel3 } from "ag-grid-community"; +var isOperationNode = (n) => n.type === "operation"; +function colLabelFromId(beans, colId) { + const col = beans.colModel.getColById(colId); + if (col) { + return beans.formula?.getColRef(col) ?? null; + } + return null; +} +function colIdFromLabel(beans, label) { + return beans.formula?.getColByRef?.(label)?.colId ?? null; +} +function colIndexFromId(colModel, cols, colId) { + const col = colModel.getColById(colId); + if (!col) { + return null; + } + const i = cols.indexOf(col); + return i >= 0 ? i : null; +} +function colIdFromIndex(cols, idx) { + const col = cols[idx]; + return col ? col.getId() ?? null : null; +} +function rowIndexFromId(beans, rowId) { + const row = beans.rowModel?.getRowNode?.(rowId); + if (row?.formulaRowIndex != null) { + return row.formulaRowIndex + 1; + } + return null; +} +function rowIdFromIndex(beans, idx) { + return _getClientSideRowModel3(beans)?.getFormulaRow?.(idx - 1)?.id ?? null; +} +function quoteString(s2) { + if (s2.includes('"')) { + throw new FormulaError(18); + } + return `"${s2}"`; +} +function columnValueForREF(beans, ref) { + const looksLetters = /^[A-Za-z]+$/.test(ref.id); + if (ref.absolute) { + if (looksLetters) { + return ref.id.toUpperCase(); + } + const label = colLabelFromId(beans, ref.id); + if (label) { + return label.toUpperCase(); + } + throw new FormulaError(19, [ref.id]); + } else { + if (looksLetters) { + const id = colIdFromLabel(beans, ref.id); + if (id) { + return id; + } + } + return ref.id; + } +} +function rowValueForREF(beans, ref) { + const { id, absolute } = ref; + if (absolute) { + const rowId = rowIdFromIndex(beans, Number(id)); + if (rowId == null) { + throw new FormulaError(20, [id]); + } + } else { + const idx = rowIndexFromId(beans, id); + if (idx == null) { + throw new FormulaError(21, [id]); + } + } + return id; +} +function columnLabelForA1(beans, ref) { + if (ref.absolute) { + return ref.id; + } + const label = colLabelFromId(beans, ref.id); + if (label) { + return label.toUpperCase(); + } + throw new FormulaError(22, [ref.id]); +} +function rowIndexForA1(beans, ref) { + if (ref.absolute) { + const idx2 = Number(ref.id); + if (Number.isFinite(idx2) && idx2 >= 1) { + return idx2; + } + throw new FormulaError(23, [ref.id]); + } + const idx = rowIndexFromId(beans, ref.id); + if (idx != null) { + return idx; + } + throw new FormulaError(24, [ref.id]); +} +function serializeCellA1(beans, cell, unsafe) { + const a = (abs, x) => (abs ? "$" : "") + String(x); + const col1 = unsafe ? cell.column.id : columnLabelForA1(beans, cell.column); + const row1 = unsafe ? cell.row.id : rowIndexForA1(beans, cell.row); + const startRef = a(cell.column.absolute, col1) + a(cell.row.absolute, row1); + if (cell.endColumn && cell.endRow) { + const col2 = unsafe ? cell.endColumn.id : columnLabelForA1(beans, cell.endColumn); + const row2 = unsafe ? cell.endRow.id : rowIndexForA1(beans, cell.endRow); + return `${startRef}:${a(cell.endColumn.absolute, col2)}${a(cell.endRow.absolute, row2)}`; + } + return startRef; +} +function serializeCellREF(beans, cell) { + const colPart = (r) => `COLUMN(${quoteString(columnValueForREF(beans, r))}${r.absolute ? ",true" : ""})`; + const rowPart = (r) => `ROW(${quoteString(rowValueForREF(beans, r))}${r.absolute ? ",true" : ""})`; + const start = `REF(${colPart(cell.column)},${rowPart(cell.row)}`; + if (cell.endColumn && cell.endRow) { + return `${start},${colPart(cell.endColumn)},${rowPart(cell.endRow)})`; + } + return `${start})`; +} +function isUnaryMinusNode(node) { + if (!isOperationNode(node) || node.operation !== "-" || node.operands.length !== 2) { + return null; + } + const [left, right] = node.operands; + if (left.type === "operand" && left.value === 0) { + return right; + } + return null; +} +function isInfixOpNode(node) { + if (!isOperationNode(node)) { + return false; + } + return !!getDefBySymbol(node.operation, "infix"); +} +function needsParensInBinary(parentDef, child, side) { + if (!isOperationNode(child)) { + return false; + } + if (isUnaryMinusNode(child)) { + return false; + } + const childDef = getDefBySymbol(child.operation, "infix"); + if (!childDef || childDef.fixity !== "infix") { + return false; + } + const pParent = parentDef.precedence; + const pChild = childDef.precedence; + if (pChild < pParent) { + return true; + } + if (pChild > pParent) { + return false; + } + if (parentDef.associativity === "right") { + const sameOp = childDef.symbol === parentDef.symbol; + return side === "left" && sameOp; + } + const parentAssociative = parentDef.isAssociative === true; + if (!parentAssociative) { + return side === "right"; + } + return false; +} +function needsParensForUnaryMinus(rhs) { + if (!isOperationNode(rhs)) { + return false; + } + const innerInfix = getDefBySymbol(rhs.operation, "infix"); + if (!innerInfix) { + return false; + } + const isPow = innerInfix.symbol === "^"; + return !isPow; +} +function serializeFormula(beans, root, useRefFormat, unsafe) { + const emitCell = (cell) => useRefFormat ? serializeCellREF(beans, cell) : serializeCellA1(beans, cell, unsafe); + function emit(node) { + if (node.type === "operand") { + const v = node.value; + if (typeof v === "string") { + return quoteString(v); + } + if (typeof v === "number") { + return String(v); + } + if (typeof v === "boolean") { + return v ? "TRUE" : "FALSE"; + } + return emitCell(v); + } + const unaryMinusInner = isUnaryMinusNode(node); + if (unaryMinusInner) { + const s2 = emit(unaryMinusInner); + return needsParensForUnaryMinus(unaryMinusInner) ? `-(${s2})` : `-${s2}`; + } + const op = node.operation.toUpperCase(); + if (node.operands.length === 1) { + const rhs = node.operands[0]; + const post = getDefBySymbol(op, "postfix"); + if (post) { + return `${emit(rhs)}${post.symbol}`; + } + const pre = getDefBySymbol(op, "prefix"); + if (pre) { + const inner = emit(rhs); + const need = isInfixOpNode(rhs); + return need ? `${pre.symbol}(${inner})` : `${pre.symbol}${inner}`; + } + return `${op}(${emit(rhs)})`; + } + if (node.operands.length === 2) { + const def = getDefBySymbol(op, "infix"); + if (def) { + const [l, r] = node.operands; + const Ls = needsParensInBinary(def, l, "left") ? `(${emit(l)})` : emit(l); + const Rs = needsParensInBinary(def, r, "right") ? `(${emit(r)})` : emit(r); + return `${Ls}${def.symbol}${Rs}`; + } + } + return `${op}(${node.operands.map(emit).join(",")})`; + } + return "=" + emit(root); +} + +// packages/ag-grid-enterprise/src/formula/functions/resolver.ts +import { _getClientSideRowModel as _getClientSideRowModel4 } from "ag-grid-community"; +function isRangeCell(cell) { + return !!(cell.endColumn && cell.endRow); +} +function resolveRefToAddress(beans, cell) { + const { row, column } = cell; + const rowNode = row.absolute ? _getClientSideRowModel4(beans)?.getFormulaRow(Number(row.id) - 1) : beans.rowModel.getRowNode(row.id); + const agCol = column.absolute ? beans.formula.getColByRef(column.id) : beans.colModel.getColById(column.id); + if (!rowNode || !agCol) { + return null; + } + return { row: rowNode, column: agCol }; +} +function evalAst(beans, node, getCellValue, caller) { + if (node.type === "operand") { + const v = node.value; + if (typeof v !== "object") { + return v; + } + if (isRangeCell(v)) { + throw new FormulaError(25); + } + const addr = resolveRefToAddress(beans, v); + if (!addr) { + throw new FormulaError(26); + } + return getCellValue(addr); + } + const fn = beans.formula?.getFunction(node.operation); + if (!fn) { + throw new FormulaError(27, [node.operation]); + } + const { args, values } = makeArgIterables(beans, node.operands, getCellValue, caller); + return fn({ row: caller.row, column: caller.column, args, values }); +} +function operandToArg(beans, node, getCellValue, caller) { + if (node.type === "operand") { + const v = node.value; + if (typeof v !== "object") { + return { kind: "value", value: v }; + } + if (isRangeCell(v)) { + return buildRangeArgLazy(beans, v, getCellValue); + } + const addr = resolveRefToAddress(beans, v); + if (!addr) { + throw new FormulaError(26); + } + return { kind: "value", value: getCellValue(addr) }; + } + const val = evalAst(beans, node, getCellValue, caller); + return { kind: "value", value: val }; +} +var ParamsIterator = class { + constructor(beans, operandNodes, getCellValue, caller) { + this.beans = beans; + this.operandNodes = operandNodes; + this.getCellValue = getCellValue; + this.caller = caller; + this.i = 0; + this.res = { done: false, value: void 0 }; + } + next() { + if (this.i >= this.operandNodes.length) { + this.res.done = true; + this.res.value = void 0; + return this.res; + } + this.res.done = false; + this.res.value = operandToArg(this.beans, this.operandNodes[this.i++], this.getCellValue, this.caller); + return this.res; + } + [Symbol.iterator]() { + return this; + } +}; +var ValuesIterator = class { + constructor(beans, operandNodes, getCellValue, caller) { + this.beans = beans; + this.operandNodes = operandNodes; + this.getCellValue = getCellValue; + this.caller = caller; + this.i = 0; + this.inner = null; + this.res = { done: false, value: void 0 }; + } + next() { + while (true) { + if (this.inner) { + const step = this.inner.next(); + if (!step.done) { + this.res.done = false; + this.res.value = step.value; + return this.res; + } + this.inner = null; + continue; + } + if (this.i >= this.operandNodes.length) { + this.res.done = true; + this.res.value = void 0; + return this.res; + } + const arg = operandToArg(this.beans, this.operandNodes[this.i++], this.getCellValue, this.caller); + if (arg.kind === "value") { + this.res.done = false; + this.res.value = arg.value; + return this.res; + } + this.inner = arg[Symbol.iterator](); + } + } + [Symbol.iterator]() { + return this; + } +}; +function makeArgIterables(beans, operandNodes, getCellValue, caller) { + const args = { + [Symbol.iterator]() { + return new ParamsIterator(beans, operandNodes, getCellValue, caller); + } + }; + const values = { + [Symbol.iterator]() { + return new ValuesIterator(beans, operandNodes, getCellValue, caller); + } + }; + return { args, values }; +} +function resolveRowIndex(beans, ref) { + if (ref.absolute) { + const n = Number(ref.id) - 1; + if (!Number.isFinite(n) || n < 0) { + throw new FormulaError(28); + } + return n; + } + const node = beans.rowModel?.getRowNode?.(ref.id); + if (node?.formulaRowIndex == null) { + throw new FormulaError(29); + } + return node.formulaRowIndex; +} +function resolveCol(beans, ref) { + if (ref.absolute) { + const col2 = beans.formula?.getColByRef(ref.id); + if (!col2) { + throw new FormulaError(30); + } + return col2; + } + const col = beans.colModel.getColById(ref.id); + if (!col) { + throw new FormulaError(31); + } + return col; +} +var RangeValuesIterator = class { + constructor(beans, rowStartIndex, rowEndIndex, colStart, colEnd, getCellValue) { + this.beans = beans; + this.rowStartIndex = rowStartIndex; + this.rowEndIndex = rowEndIndex; + this.colStart = colStart; + this.colEnd = colEnd; + this.getCellValue = getCellValue; + this.cols = null; + this.currentRowIndex = this.rowStartIndex; + this.currentColIdx = -1; + this.colStartIdx = -1; + this.colEndIdx = -1; + this.res = { done: false, value: void 0 }; + } + initColsOnce() { + if (this.cols) { + return; + } + this.cols = this.beans.colModel.getCols() ?? []; + const range = getColRangeIndices(this.beans, this.colStart, this.colEnd); + if (!range) { + this.colStartIdx = -1; + this.colEndIdx = -1; + return; + } + [this.colStartIdx, this.colEndIdx] = range; + this.currentColIdx = this.colStartIdx; + } + next() { + if (!this.cols) { + this.initColsOnce(); + if (this.colStartIdx < 0) { + this.res.done = true; + return this.res; + } + } + if (this.currentRowIndex <= this.rowEndIndex) { + const row = _getClientSideRowModel4(this.beans)?.getFormulaRow(this.currentRowIndex); + if (!row) { + throw new FormulaError(32); + } + const col = this.cols[this.currentColIdx]; + if (this.currentColIdx < this.colEndIdx) { + this.currentColIdx++; + } else { + this.currentColIdx = this.colStartIdx; + this.currentRowIndex++; + } + this.res.value = this.getCellValue({ row, column: col }); + return this.res; + } + this.res.done = true; + this.res.value = void 0; + return this.res; + } +}; +function buildRangeArgLazy(beans, cell, getCellValue) { + const r1 = resolveRowIndex(beans, cell.row); + const r2 = cell.endRow ? resolveRowIndex(beans, cell.endRow) : r1; + const rowStart = Math.min(r1, r2); + const rowEnd = Math.max(r1, r2); + const c1 = resolveCol(beans, cell.column); + const c2 = cell.endColumn ? resolveCol(beans, cell.endColumn) : c1; + return { + kind: "range", + rowStart, + rowEnd, + colStart: c1, + colEnd: c2, + [Symbol.iterator]() { + return new RangeValuesIterator(beans, rowStart, rowEnd, c1, c2, getCellValue); + } + }; +} +function getColRangeIndices(beans, c1, c2) { + const allColumns = beans.colModel.getCols() ?? []; + let startColIndex = null; + let endColIndex = null; + for (let i = 0; i < allColumns.length && (startColIndex === null || endColIndex === null); i++) { + const column = allColumns[i]; + if (column === c2) { + endColIndex = i; + } + if (column === c1) { + startColIndex = i; + } + if (endColIndex !== null && startColIndex !== null) { + break; + } + } + if (startColIndex === null || endColIndex === null) { + return null; + } + const colIndexMin = Math.min(startColIndex, endColIndex); + const colIndexMax = Math.max(startColIndex, endColIndex); + return [colIndexMin, colIndexMax]; +} +function* rangeAddrs(beans, rowStartIndex, rowEndIndex, startColumn, endColumn) { + const allColumns = beans.colModel.getCols() ?? []; + const colRange = getColRangeIndices(beans, startColumn, endColumn); + if (colRange == null) { + return; + } + const [colIndexMin, colIndexMax] = colRange; + for (let rowIndex = rowStartIndex; rowIndex <= rowEndIndex; rowIndex++) { + const rowNode = _getClientSideRowModel4(beans)?.getFormulaRow(rowIndex); + if (!rowNode) { + continue; + } + for (let colIndex = colIndexMin; colIndex <= colIndexMax; colIndex++) { + yield { row: rowNode, column: allColumns[colIndex] }; + } + } +} +function* unresolvedDeps(beans, root, ensureFormulaCache) { + const astStack = [root]; + while (astStack.length) { + const currentNode = astStack.pop(); + if (currentNode.type === "operand") { + const operandValue = currentNode.value; + if (typeof operandValue !== "object" || operandValue == null) { + continue; + } + if (!operandValue.endColumn && !operandValue.endRow) { + const cellAddress = resolveRefToAddress(beans, operandValue); + if (!cellAddress) { + throw new FormulaError(33); + } + const cachedCellFormula = ensureFormulaCache(cellAddress.row, cellAddress.column); + if (!cachedCellFormula || cachedCellFormula.isValueReady()) { + continue; + } + yield cellAddress; + continue; + } + if (!operandValue.endColumn || !operandValue.endRow) { + throw new FormulaError(34); + } + const firstRowIndex = resolveRowIndex(beans, operandValue.row); + const secondRowIndex = resolveRowIndex(beans, operandValue.endRow); + const rowStartIndex = Math.min(firstRowIndex, secondRowIndex); + const rowEndIndex = Math.max(firstRowIndex, secondRowIndex); + const startCol = resolveCol(beans, operandValue.column); + const endCol = resolveCol(beans, operandValue.endColumn); + for (const cellAddress of rangeAddrs(beans, rowStartIndex, rowEndIndex, startCol, endCol)) { + const cachedCellFormula = ensureFormulaCache(cellAddress.row, cellAddress.column); + if (!cachedCellFormula || cachedCellFormula.isValueReady()) { + continue; + } + yield cellAddress; + } + continue; + } + for (let i = 0; i < currentNode.operands.length; i++) { + astStack.push(currentNode.operands[i]); + } + } +} + +// packages/ag-grid-enterprise/src/formula/functions/utils.ts +function take(values, name, n) { + const it = values[Symbol.iterator](); + const out = new Array(n); + for (let i = 0; i < n; i++) { + const step = it.next(); + if (step.done) { + throw new FormulaError(35, [name, n]); + } + out[i] = step.value; + } + if (!it.next().done) { + throw new FormulaError(35, [name, n]); + } + return out; +} +function iterableWithoutBlanks(values) { + return { + *[Symbol.iterator]() { + for (const v of values) { + if (v != null && v !== "") { + yield v; + } + } + } + }; +} +function takeBetween(values, name, min, max) { + const out = []; + for (const v of values) { + out.push(v); + if (out.length > max) { + throw new FormulaError(36, [name, max]); + } + } + if (out.length < min) { + throw new FormulaError(37, [name, min]); + } + return out; +} +var isRangeParam = (p) => { + return p.kind === "range"; +}; +var isValueParam = (p) => { + return p.kind === "value"; +}; +var OPERATOR_TOKENS = ["<=", ">=", "<>", "<", ">", "="]; +function findOperatorSymbol(s2) { + for (const tok of OPERATOR_TOKENS) { + if (s2.startsWith(tok)) { + return tok; + } + } + return null; +} +function toNumberLike(x) { + if (typeof x === "number" && Number.isFinite(x)) { + return x; + } + if (x instanceof Date) { + return +x; + } + if (typeof x === "string") { + const num = Number(x); + if (!Number.isNaN(num)) { + return num; + } + } + return null; +} +function toText(x) { + if (x == null) { + return ""; + } + switch (typeof x) { + case "string": + return x; + case "number": + return String(x); + case "boolean": + return x ? "TRUE" : "FALSE"; + } + if (x instanceof Date) { + return String(+x); + } + return String(x); +} +function wildcardToRegExp(pattern) { + let out = "^"; + for (let i = 0; i < pattern.length; i++) { + const ch = pattern[i]; + if (ch === "~" && i + 1 < pattern.length && (pattern[i + 1] === "*" || pattern[i + 1] === "?")) { + out += "\\" + pattern[++i]; + continue; + } + if (ch === "*") { + out += ".*"; + continue; + } + if (ch === "?") { + out += "."; + continue; + } + if (/[-/\\^$*+?.()|[\]{}]/.test(ch)) { + out += "\\" + ch; + } else { + out += ch; + } + } + out += "$"; + return new RegExp(out, "i"); +} +var COMPARE_VALUES = (op, query, cell) => { + let queryVal = toNumberLike(query); + let cellVal = toNumberLike(cell); + if (queryVal == null || cellVal == null) { + queryVal = query; + cellVal = toText(cell).toUpperCase(); + } + switch (op) { + case "<": + return cellVal < queryVal; + case ">": + return cellVal > queryVal; + case "<=": + return cellVal <= queryVal; + case ">=": + return cellVal >= queryVal; + case "=": + return cellVal === queryVal; + case "<>": + return cellVal !== queryVal; + } + return false; +}; +var REGEX_COMPARE_VALUES = (op, rx, cell) => { + const text = toText(cell); + const match = rx.test(text); + return op === "=" ? match : !match; +}; +var EMPTY_PREDICATE = (cell) => cell == null || cell === ""; +function criteriaToPredicate(criteria) { + if (typeof criteria === "number") { + return (cell) => toNumberLike(cell) === criteria; + } + if (typeof criteria !== "string") { + return (cell) => criteria === cell; + } + const trimmed = criteria.trim(); + if (trimmed === "") { + return EMPTY_PREDICATE; + } + const symbol = findOperatorSymbol(trimmed); + const query = symbol ? trimmed.substring(symbol.length) : trimmed; + const wildcard = /[*?]/.test(query); + if (!wildcard) { + return COMPARE_VALUES.bind(null, symbol ?? "=", query.toUpperCase()); + } + if (symbol && symbol !== "=" && symbol !== "<>") { + throw new FormulaError(38); + } + const regexp = wildcardToRegExp(query); + return REGEX_COMPARE_VALUES.bind(null, symbol ?? "=", regexp); +} +var shiftColRef = (beans, delta, ref) => { + if (!ref || delta === 0 || ref.absolute) { + return; + } + const { visibleCols, colModel } = beans; + const cols = visibleCols.allCols; + const i0 = colIndexFromId(colModel, cols, ref.id); + if (i0 == null) { + return; + } + const j0 = i0 + delta; + if (j0 < 0) { + return; + } + const nextId = colIdFromIndex(cols, j0); + if (nextId) { + ref.id = nextId; + } +}; +var shiftRowRef = (beans, rowDelta, ref, unsafe) => { + if (!ref || rowDelta === 0 || ref.absolute) { + return; + } + if (unsafe) { + const numericId = Number(ref.id); + if (!Number.isFinite(numericId)) { + return; + } + ref.id = String(numericId + rowDelta); + return; + } + const idx1 = rowIndexFromId(beans, ref.id); + if (idx1 == null) { + return; + } + const next1 = idx1 + rowDelta; + if (next1 < 1) { + return; + } + const nextId = rowIdFromIndex(beans, next1); + if (nextId) { + ref.id = nextId; + } +}; +var isCellOperand = (value) => { + return !!value && typeof value === "object" && value !== null && "row" in value && "column" in value; +}; +var shiftNode = (beans, node, rowDelta, columnDelta, unsafe) => { + if (node.type === "operand") { + const { value } = node; + if (!isCellOperand(value)) { + return; + } + const { row, column, endRow, endColumn } = value; + shiftRowRef(beans, rowDelta, row, unsafe); + shiftColRef(beans, columnDelta, column); + shiftRowRef(beans, rowDelta, endRow, unsafe); + shiftColRef(beans, columnDelta, endColumn); + return; + } + if (node.type === "operation") { + for (const child of node.operands) { + shiftNode(beans, child, rowDelta, columnDelta, unsafe); + } + } +}; + +// packages/ag-grid-enterprise/src/formula/functions/counting/functions.ts +var COUNT = ({ values }) => { + let count = 0; + for (const v of values) { + if (v != null && v !== "" && !isNaN(v)) { + count++; + } + } + return count; +}; +var COUNTA = ({ values }) => { + let count = 0; + for (const v of values) { + if (v != null && v !== "") { + count++; + } + } + return count; +}; +var COUNTBLANK = ({ values }) => { + let count = 0; + for (const v of values) { + if (v == null || v === "") { + count++; + } + } + return count; +}; +var COUNTIF = ({ args }) => { + const [range, criteria] = take(args, "COUNTIF", 2); + if (!isRangeParam(range)) { + throw new FormulaError(65); + } + if (!isValueParam(criteria)) { + throw new FormulaError(66); + } + const pred = criteriaToPredicate(criteria.value); + let count = 0; + for (const v of range) { + if (pred(v)) { + count++; + } + } + return count; +}; + +// packages/ag-grid-enterprise/src/formula/functions/dates/functions.ts +var NOW = () => /* @__PURE__ */ new Date(); +var TODAY = () => { + const now = /* @__PURE__ */ new Date(); + return new Date(now.getFullYear(), now.getMonth(), now.getDate()); +}; + +// packages/ag-grid-enterprise/src/formula/functions/logic/functions.ts +var EQUALS = ({ values }) => { + const [a, b] = take(values, "EQUALS", 2); + return a === b; +}; +var NOT_EQUALS = ({ values }) => { + const [a, b] = take(values, "NOT_EQUALS", 2); + return a !== b; +}; +var GT = ({ values }) => { + const [a, b] = take(values, "GT", 2); + return a > b; +}; +var GTE = ({ values }) => { + const [a, b] = take(values, "GTE", 2); + return a >= b; +}; +var LT = ({ values }) => { + const [a, b] = take(values, "LT", 2); + return a < b; +}; +var LTE = ({ values }) => { + const [a, b] = take(values, "LTE", 2); + return a <= b; +}; +var IF = ({ values }) => { + const [cond, valTrue, valFalse] = take(values, "IF", 3); + return cond ? valTrue : valFalse; +}; +var MIN = ({ values }) => { + let best = null; + for (const v of values) { + if (v == null) { + continue; + } + if (best === null || v < best) { + best = v; + } + } + if (best === null) { + throw new FormulaError(68); + } + return best; +}; +var MAX = ({ values }) => { + let best = null; + for (const v of values) { + if (v == null) { + continue; + } + if (best === null || v > best) { + best = v; + } + } + if (best === null) { + throw new FormulaError(69); + } + return best; +}; + +// packages/ag-grid-enterprise/src/formula/functions/numbers/utils.ts +var isFiniteNumber = (v) => typeof v === "number" && Number.isFinite(v); +var MS_PER_DAY = 24 * 60 * 60 * 1e3; +function daysFromDate(d) { + return d.getTime() / MS_PER_DAY; +} +function dateFromDays(n) { + return new Date(n * MS_PER_DAY); +} +function isDateValue(v) { + return v instanceof Date; +} +function coerceFiniteNumber(fname, v) { + if (typeof v === "bigint") { + const asNumber = Number(v); + if (Number.isFinite(asNumber)) { + return asNumber; + } + throw new FormulaError(48, [fname]); + } + if (isFiniteNumber(v)) { + return v; + } + if (isDateValue(v)) { + return daysFromDate(v); + } + if (typeof v === "boolean") { + return v ? 1 : 0; + } + if (typeof v === "string") { + const n = Number(v.trim()); + if (Number.isFinite(n)) { + return n; + } + } + throw new FormulaError(48, [fname]); +} +function coerceFiniteNumberOrBigInt(fname, v) { + if (typeof v === "bigint") { + return v; + } + return coerceFiniteNumber(fname, v); +} +function coerceBigInt(fname, v) { + if (typeof v === "bigint") { + return v; + } + if (!Number.isFinite(v) || !Number.isInteger(v)) { + throw new FormulaError(49, [fname]); + } + return BigInt(v); +} + +// packages/ag-grid-enterprise/src/formula/functions/numbers/functions.ts +var PRODUCT = ({ values }) => { + let acc = 1; + let accBigInt = null; + for (const v of iterableWithoutBlanks(values)) { + const n = coerceFiniteNumberOrBigInt("PRODUCT", v); + if (typeof n === "bigint") { + accBigInt ?? (accBigInt = coerceBigInt("PRODUCT", acc)); + if (n === 0n) { + return 0n; + } + accBigInt *= n; + continue; + } + if (accBigInt != null) { + accBigInt *= coerceBigInt("PRODUCT", n); + continue; + } + if (n === 0) { + return 0; + } + acc *= n; + } + return accBigInt ?? acc; +}; +var DIVIDE = ({ values }) => { + const [a, b] = take(iterableWithoutBlanks(values), "DIVIDE", 2); + const na = coerceFiniteNumber("DIV", a); + const nb = coerceFiniteNumber("DIV", b); + if (na == null || nb == null) { + throw new FormulaError(54); + } + if (nb === 0) { + throw new FormulaError(55); + } + return na / nb; +}; +var SUM = ({ values }) => { + let hasDates = false; + let acc = 0; + let accBigInt = null; + let hasValue = false; + for (const v of iterableWithoutBlanks(values)) { + hasDates || (hasDates = isDateValue(v)); + const n = coerceFiniteNumberOrBigInt("SUM", v); + if (typeof n === "bigint") { + if (hasDates) { + throw new FormulaError(56); + } + accBigInt ?? (accBigInt = coerceBigInt("SUM", acc)); + accBigInt += n; + hasValue = true; + continue; + } + if (typeof accBigInt === "bigint") { + if (hasDates) { + throw new FormulaError(56); + } + accBigInt += coerceBigInt("SUM", n); + hasValue = true; + continue; + } + acc += n; + hasValue = true; + } + if (!hasValue) { + throw new FormulaError(57); + } + if (typeof accBigInt === "bigint") { + return accBigInt; + } + return hasDates ? dateFromDays(acc) : acc; +}; +var MINUS = ({ values }) => { + const [a, b] = take(iterableWithoutBlanks(values), "MINUS", 2); + const aDate = isDateValue(a); + const bDate = isDateValue(b); + if (aDate || bDate) { + const na2 = coerceFiniteNumber("MINUS", a); + const nb2 = coerceFiniteNumber("MINUS", b); + if (aDate && !bDate) { + return dateFromDays(na2 - nb2); + } + if (aDate && bDate) { + return na2 - nb2; + } + return na2 - nb2; + } + const na = coerceFiniteNumberOrBigInt("MINUS", a); + const nb = coerceFiniteNumberOrBigInt("MINUS", b); + if (typeof na === "bigint" || typeof nb === "bigint") { + return coerceBigInt("MINUS", na) - coerceBigInt("MINUS", nb); + } + return na - nb; +}; +var PERCENT = ({ values }) => { + const [a] = take(values, "PERCENT", 1); + const n = coerceFiniteNumber("PERCENT", a); + if (n == null) { + throw new FormulaError(70); + } + return n / 100; +}; +var POWER = ({ values }) => { + const [a, b] = take(values, "POWER", 2); + const na = coerceFiniteNumber("POWER", a); + const nb = coerceFiniteNumber("POWER", b); + if (na == null || nb == null) { + throw new FormulaError(71); + } + return Math.pow(na, nb); +}; +var AVERAGE = ({ values }) => { + let sum = 0; + let count = 0; + let allDate = true; + for (const v of iterableWithoutBlanks(values)) { + const n = coerceFiniteNumber("AVG", v); + if (n == null) { + continue; + } + sum += n; + count++; + allDate && (allDate = isDateValue(v)); + } + if (count === 0) { + throw new FormulaError(58); + } + const avg = sum / count; + return allDate ? dateFromDays(avg) : avg; +}; +var MEDIAN = ({ values }) => { + let allDates = true; + const arr = []; + for (const v of iterableWithoutBlanks(values)) { + const n = coerceFiniteNumber("MEDIAN", v); + if (n == null) { + throw new FormulaError(59); + } + arr.push(n); + allDates && (allDates = isDateValue(v)); + } + if (arr.length === 0) { + throw new FormulaError(60); + } + arr.sort((a, b) => a - b); + const mid = Math.floor(arr.length / 2); + const med = arr.length % 2 === 1 ? arr[mid] : (arr[mid - 1] + arr[mid]) / 2; + return allDates ? dateFromDays(med) : med; +}; +var RAND = () => Math.random(); +var SUMIF = ({ args }) => { + const [critRange, criteria, sumRange] = takeBetween(args, "SUMIF", 2, 3); + if (!isRangeParam(critRange)) { + throw new FormulaError(61); + } + if (!isValueParam(criteria)) { + throw new FormulaError(62); + } + if (sumRange && !isRangeParam(sumRange)) { + throw new FormulaError(63); + } + const pred = criteriaToPredicate(criteria.value); + if (!sumRange) { + let acc = 0; + let accBigInt = null; + for (const v of critRange) { + if (pred(v)) { + const n = coerceFiniteNumberOrBigInt("SUMIF", v); + if (typeof n === "bigint") { + accBigInt ?? (accBigInt = coerceBigInt("SUMIF", acc)); + accBigInt += n; + } else if (accBigInt != null) { + accBigInt += coerceBigInt("SUMIF", n); + } else { + acc += n; + } + } + } + return accBigInt ?? acc; + } + const critRangeHeight = critRange.rowEnd - critRange.rowStart; + const sumRangeHeight = sumRange.rowEnd - sumRange.rowStart; + if (critRangeHeight !== sumRangeHeight) { + throw new FormulaError(64); + } + const critRangeIterator = critRange[Symbol.iterator](); + const sumRangeIterator = sumRange[Symbol.iterator](); + let total = 0; + let totalBigInt = null; + while (true) { + const a = critRangeIterator.next(); + const b = sumRangeIterator.next(); + if (a.done || b.done) { + if (a.done !== b.done) { + throw new FormulaError(64); + } + break; + } + if (pred(a.value)) { + const n = coerceFiniteNumberOrBigInt("SUMIF", b.value); + if (typeof n === "bigint") { + totalBigInt ?? (totalBigInt = coerceBigInt("SUMIF", total)); + totalBigInt += n; + } else if (totalBigInt != null) { + totalBigInt += coerceBigInt("SUMIF", n); + } else { + total += n; + } + } + } + return totalBigInt ?? total; +}; + +// packages/ag-grid-enterprise/src/formula/functions/strings/functions.ts +var CONCAT = ({ values }) => { + let out = ""; + for (const v of values) { + if (v == null) { + continue; + } + switch (typeof v) { + case "string": { + out += v; + break; + } + case "number": { + out += String(v); + break; + } + case "boolean": { + out += v ? "TRUE" : "FALSE"; + break; + } + case "object": { + out += v.toString(); + break; + } + default: { + throw new FormulaError(67); + } + } + } + return out; +}; + +// packages/ag-grid-enterprise/src/formula/functions/supportedFuncs.ts +var supportedFuncs_default = { + // logic/date + IF, + NOW, + TODAY, + // arithmetic + PRODUCT, + // DIVIDE, + // DIV: DIVIDE, + SUM, + ADD: SUM, + SUMIF, + // MINUS, + // PERCENT, + POWER, + MIN, + MAX, + AVERAGE, + MEDIAN, + // counting + COUNT, + COUNTA, + COUNTBLANK, + COUNTIF, + // random + RAND, + // text + CONCAT, + CONCATENATE: CONCAT, + // comparisons + // EQ: EQUALS, + // NE: NOT_EQUALS, + // GT, + // GTE, + // LT, + // LTE, + // operator aliases + "+": SUM, + "-": MINUS, + "*": PRODUCT, + "/": DIVIDE, + "^": POWER, + "%": PERCENT, + "=": EQUALS, + "&": CONCAT, + "<>": NOT_EQUALS, + ">": GT, + ">=": GTE, + "<": LT, + "<=": LTE +}; + +// packages/ag-grid-enterprise/src/formula/formulaService.ts +var CellFormula = class { + constructor(rowNode, column, formulaString, beans) { + this.rowNode = rowNode; + this.column = column; + this.formulaString = formulaString; + this.beans = beans; + this.error = null; + this.ast = null; + this.astStale = true; + this._value = void 0; + this._valueStale = true; + } + setFormulaString(next) { + if (this.formulaString === next) { + return; + } + this.formulaString = next; + this.astStale = true; + this._valueStale = true; + } + /** Cache write: store a fresh computed value (and clear previous error). */ + setComputedValue(v) { + this._value = v; + this._valueStale = false; + this.error = null; + } + /** Cache write: store an error (value considered stale). */ + setError(e) { + this.error = e; + this._valueStale = false; + } + isValueReady() { + return !this._valueStale; + } + /** + * Return the error type or the value + */ + getValue() { + return this.error?.type ?? this._value; + } + getError() { + return this.error; + } + /** Returns the AST for the formula and recomputes if stale */ + getAst() { + if (!this.astStale) { + return this.ast; + } + const ast = parseFormula(this.beans, this.formulaString); + this.ast = ast ?? null; + this.astStale = false; + return this.ast; + } +}; +var FormulaService = class extends BeanStub82 { + constructor() { + super(...arguments); + this.beanName = "formula"; + /** Cache: row -> (column -> CellFormula) */ + this.cachedResult = /* @__PURE__ */ new WeakMap(); + /** Map "A", "B", ..., "AA" -> actual AgColumn */ + this.colRefMap = /* @__PURE__ */ new Map(); + this.functionNames = null; + this.active = false; + } + setFormulasActive(cols) { + const formulaColumnsPresent = cols.list.some((col) => col.isAllowFormula()); + const active = formulaColumnsPresent && this.checkForIncompatibleServices(cols); + if (active !== this.active) { + this.active = active; + this.refreshFormulas(true); + } + } + checkForIncompatibleServices(cols) { + if (this.gos.get("masterDetail")) { + _warn54(295, { blockedService: "Master Detail" }); + return false; + } + if (this.gos.get("treeData")) { + _warn54(295, { blockedService: "Tree Data" }); + return false; + } + if (this.gos.get("enableCellExpressions")) { + _warn54(295, { blockedService: "Cell Expressions" }); + return false; + } + return cols.list.every((col) => { + if (col.isAllowPivot() || col.isPivotActive()) { + _warn54(295, { blockedService: "Column Pivoting" }); + return false; + } + if (col.isAllowRowGroup() || col.isRowGroupActive()) { + _warn54(295, { blockedService: "Row Groups" }); + return false; + } + if (col.isAllowValue() || col.isValueActive() || col.getAggFunc()) { + _warn54(295, { blockedService: "Value Aggregation" }); + return false; + } + return true; + }); + } + postConstruct() { + this.setupFunctions(); + const refreshFormulas = () => { + if (this.active) { + this.refreshFormulas(true); + } + }; + const resetColMap = () => { + if (this.active) { + this.setupColRefMap(); + } + }; + this.addManagedPropertyListeners(["masterDetail", "enableCellExpressions"], (e) => { + const { colModel } = this.beans; + const formulaColumnsPresent = colModel.cols?.list.some((col) => col.isAllowFormula()); + if (formulaColumnsPresent) { + colModel.refreshAll(_convertColumnEventSourceType3(e.source)); + } + }); + this.addManagedListeners(this.beans.eventSvc, { + modelUpdated: refreshFormulas, + cellValueChanged: refreshFormulas, + rowDataUpdated: refreshFormulas, + newColumnsLoaded: resetColMap, + columnMoved: resetColMap + }); + } + updateFormulaByOffset(params) { + const { value, rowDelta = 0, columnDelta = 0, useRefFormat = true } = params; + const { beans } = this; + try { + const unsafe = !useRefFormat; + const ast = parseFormula(beans, value, unsafe); + shiftNode(beans, ast, rowDelta, columnDelta, unsafe); + return serializeFormula( + beans, + ast, + /*useRefFormat*/ + useRefFormat, + unsafe + ); + } catch { + return value; + } + } + setupFunctions() { + this.supportedOperations = /* @__PURE__ */ new Map(); + Object.keys(supportedFuncs_default).forEach((name) => { + this.supportedOperations.set(name, supportedFuncs_default[name]); + }); + this.functionNames = null; + const customFuncs = this.gos.get("formulaFuncs"); + if (customFuncs) { + Object.keys(customFuncs).forEach((name) => { + this.supportedOperations.set(name.toUpperCase(), customFuncs[name].func); + }); + } + } + getFunctionNames() { + if (this.functionNames) { + return this.functionNames; + } + const names = []; + for (const name of this.supportedOperations.keys()) { + if (!isFormulaIdentStart(name[0])) { + continue; + } + if (![...name].every((char) => isFormulaIdentChar(char))) { + continue; + } + names.push(name); + } + names.sort((a, b) => a.localeCompare(b)); + this.functionNames = names; + return names; + } + setupColRefMap() { + if (!this.active) { + this.colRefMap = /* @__PURE__ */ new Map(); + return; + } + const alphabet = "abcdefghijklmnopqrstuvwxyz"; + const base = alphabet.length; + const list = this.beans.colModel.getCols(); + const map = /* @__PURE__ */ new Map(); + let idx = 0; + list?.forEach((col) => { + if (!col.isPrimary()) { + return; + } + let label = ""; + let n = idx++; + while (true) { + label = alphabet[n % base] + label; + if (n < base) { + break; + } + n = Math.floor(n / base) - 1; + } + if (col.formulaRef !== label.toUpperCase()) { + col.formulaRef = label.toUpperCase(); + col.dispatchColEvent("formulaRefChanged", "api"); + } + map.set(label.toUpperCase(), col); + }); + this.colRefMap = map; + this.refreshFormulas(true); + } + /** Lookup a column by A1-style reference label, e.g. "A", "AB". */ + getColByRef(ref) { + return this.colRefMap.get(ref.toUpperCase()) ?? null; + } + /** Find the A1-style label for a given column (reverse lookup). */ + getColRef(col) { + for (const [label, value] of this.colRefMap.entries()) { + if (value === col) { + return label; + } + } + return null; + } + /** Clear all cached results and re-render cells. */ + refreshFormulas(refreshCells) { + this.cachedResult = /* @__PURE__ */ new WeakMap(); + if (refreshCells) { + this.beans.rowRenderer.refreshCells({ suppressFlash: true, force: true }); + } + } + /** + * Is a value a formula string (starts with '=') + **/ + isFormula(value) { + return this.active && _isExpressionString4(value); + } + /** + * Normalise a formula by parsing and serializing it (REF(COLUMN(), ROW()) format). + * @returns null if the formula is invalid. + */ + normaliseFormula(value, shorthand = false) { + const { beans } = this; + try { + const parsedAST = parseFormula(beans, value); + const serialized = serializeFormula(beans, parsedAST, !shorthand, false); + return serialized; + } catch { + return null; + } + } + /** If the cell has been evaluated and errored, return its last error (else null). */ + getFormulaError(column, node) { + const rowMap = this.cachedResult.get(node); + const cell = rowMap?.get(column); + return cell?.error ?? null; + } + /** Get a registered function by name (used by the evaluator). */ + getFunction(name) { + return this.supportedOperations.get(name.toUpperCase()); + } + /** Ensure a CellFormula exists for (row,col) if it's a formula cell; returns null for non-formula. */ + ensureCellFormula(row, col) { + let rowMap = this.cachedResult.get(row); + let cf = rowMap?.get(col); + if (cf) { + return cf; + } + const str = this.getFormulaFromDataSource(row, col) ?? this.fetchRawValue(col, row); + if (typeof str !== "string" || str[0] !== "=") { + return null; + } + cf = new CellFormula(row, col, str, this.beans); + if (!rowMap) { + rowMap = /* @__PURE__ */ new Map(); + this.cachedResult.set(row, rowMap); + } + rowMap.set(col, cf); + return cf; + } + getFormulaFromDataSource(row, col) { + const dataSource = this.beans.formulaDataSvc; + if (!dataSource?.hasDataSource()) { + return void 0; + } + return dataSource.getFormula({ column: col, rowNode: row }); + } + coerceFormulaValue(column, value) { + const baseDataType = this.beans.dataTypeSvc?.getBaseDataType(column); + if (baseDataType === "bigint") { + const bigintValue = this.toBigIntValue(value); + return bigintValue ?? value; + } + if (baseDataType === "number" && typeof value === "bigint") { + const asNumber = Number(value); + return Number.isFinite(asNumber) ? asNumber : value; + } + return value; + } + toBigIntValue(value) { + if (typeof value === "bigint") { + return value; + } + if (typeof value === "number") { + if (!Number.isFinite(value) || !Number.isInteger(value)) { + return null; + } + return BigInt(value); + } + return null; + } + /** Fetch a non-formula value from the grid without triggering nested formula calc. */ + fetchRawValue(col, row) { + return this.beans.valueSvc.getValue(col, row, "data"); + } + getVisitorContext() { + if (this.activeCtx) { + return this.activeCtx; + } + const stateByCell = /* @__PURE__ */ new Map(); + const setVisiting = (r, c) => { + let colSet = stateByCell.get(r); + const isVisiting = colSet?.has(c); + if (isVisiting) { + throw new FormulaError(51); + } + if (!colSet) { + colSet = /* @__PURE__ */ new Set(); + stateByCell.set(r, colSet); + } + colSet.add(c); + }; + const setVisited = (r, c) => { + const colSet = stateByCell.get(r); + if (colSet) { + colSet.delete(c); + if (colSet.size === 0) { + stateByCell.delete(r); + } + } + }; + const errorAllVisitors = (error) => { + for (const [row, cells] of stateByCell) { + for (const col of cells) { + const cache = this.ensureCellFormula(row, col); + cache?.setError(error); + } + } + }; + return this.activeCtx = { setVisited, setVisiting, errorAllVisitors }; + } + makeFormulaFrame(address) { + const cachedItem = this.ensureCellFormula(address.row, address.column); + const ast = cachedItem.getAst(); + if (!ast) { + throw new FormulaError(52); + } + const unresolvedDepIterator = unresolvedDeps(this.beans, ast, this.ensureCellFormula.bind(this)); + return { address, ast, unresolvedDepIterator }; + } + /** + * Evaluate a single cell's formula **iteratively** (no recursion to avoid large stack traces), + * caching dependency results into their own CellFormula entries. + * + * Returns the computed value, or a '#...' string on error. + */ + resolveValue(column, node) { + const rootCachedCellFormula = this.ensureCellFormula(node, column); + if (!rootCachedCellFormula) { + return this.fetchRawValue(column, node); + } + if (rootCachedCellFormula.isValueReady()) { + return rootCachedCellFormula.getValue(); + } + const hadCtx = !!this.activeCtx; + const { setVisited, setVisiting, errorAllVisitors } = this.getVisitorContext(); + const evalStack = []; + try { + setVisiting(node, column); + evalStack.push(this.makeFormulaFrame({ row: node, column })); + while (evalStack.length) { + const { address, ast, unresolvedDepIterator } = evalStack[evalStack.length - 1]; + const { row, column: col } = address; + const cachedCellFormula = this.ensureCellFormula(row, col); + if (cachedCellFormula.isValueReady()) { + evalStack.pop(); + setVisited(row, col); + if (cachedCellFormula.error) { + throw cachedCellFormula.error; + } + continue; + } + const depStep = unresolvedDepIterator.next(); + if (!depStep.done) { + const depAddr = depStep.value; + const depCachedCellFormula = this.ensureCellFormula(depAddr.row, depAddr.column); + if (!depCachedCellFormula || depCachedCellFormula.isValueReady()) { + continue; + } + setVisiting(depAddr.row, depAddr.column); + evalStack.push(this.makeFormulaFrame(depAddr)); + continue; + } + const computed = evalAst( + this.beans, + ast, + (addr) => { + const cachedRefFormula = this.ensureCellFormula(addr.row, addr.column); + if (cachedRefFormula) { + if (!cachedRefFormula.isValueReady()) { + throw new FormulaError(53); + } + const error = cachedRefFormula.getError(); + if (error) { + throw error; + } + return cachedRefFormula.getValue(); + } + return this.fetchRawValue(addr.column, addr.row); + }, + { row, column: col } + ); + const coerced = this.coerceFormulaValue(col, computed); + const existing = cachedCellFormula.getError(); + if (existing) { + setVisited(row, col); + throw existing; + } + cachedCellFormula.setComputedValue(coerced); + setVisited(row, col); + evalStack.pop(); + } + if (!rootCachedCellFormula.isValueReady()) { + throw new FormulaError(53); + } + return rootCachedCellFormula.getValue(); + } catch (e) { + const normalized = e instanceof FormulaError ? e : new FormulaError(String(e?.message ?? e)); + errorAllVisitors(normalized); + return normalized.type; + } finally { + if (!hadCtx) { + this.activeCtx = null; + } + } + } +}; + +// packages/ag-grid-enterprise/src/formula/formulaModule.ts +var FormulaModule = { + moduleName: "Formula", + version: VERSION, + userComponents: { agFormulaCellEditor: FormulaCellEditor }, + beans: [FormulaService, FormulaDataService, FormulaInputManagerService], + dependsOn: [RowNumbersModule], + css: [formula_default] +}; + +// packages/ag-grid-enterprise/src/sparkline/sparklinesModule.ts +import { _preInitErrMsg } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sparkline/sparkline.css +var sparkline_default = ".ag-sparkline-wrapper{height:100%;line-height:normal;position:absolute;top:0;width:100%}"; + +// packages/ag-grid-enterprise/src/sparkline/sparklineCellRenderer.ts +import { + Component as Component55, + RefPlaceholder as RefPlaceholder48, + _batchCall, + _formatNumberCommas as _formatNumberCommas6, + _setAriaLabel as _setAriaLabel20, + _setAriaLabelledBy as _setAriaLabelledBy4 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/sparkline/sparklinesUtils.ts +var WrappedFunctionMarker = Symbol("WrappedFunctionMarker"); +var wrapFn = (fn, wrapperFn) => { + if (fn[WrappedFunctionMarker]) { + return fn; + } + const wrapped = (...args) => wrapperFn(fn, ...args); + wrapped[WrappedFunctionMarker] = WrappedFunctionMarker; + return wrapped; +}; +var defaultSparklineAriaDescription = "Sparkline - ${chartType} displaying ${count} values between ${min} and ${max}. Starts at ${start} and ends at ${end}."; +var defaultSingleValueSparklineAriaDescription = "Sparkline - ${chartType} displaying 1 value, ${value}."; +var defaultEmptySparklineAriaDescription = "Sparkline - ${chartType} displaying no values."; +var getChartTypeLabel = (translate, sparklineOptions) => { + const type = sparklineOptions?.type ?? "line"; + switch (type) { + case "line": + return translate("lineChart", "Line"); + case "area": + return translate("areaChart", "Area"); + case "bar": + return translate("barChart", "Bar"); + default: + return type; + } +}; +var getSparklineSummary = (data, yKey) => { + let count = 0; + let min = Number.POSITIVE_INFINITY; + let max = Number.NEGATIVE_INFINITY; + let start; + let end; + for (const datum of data) { + const yValue = getYValue(datum, yKey); + if (yValue == null) { + continue; + } + if (start == null) { + start = yValue; + } + end = yValue; + count++; + min = Math.min(min, yValue); + max = Math.max(max, yValue); + } + return count === 0 ? { count } : { count, min, max, start, end }; +}; +function getSparklineAriaTemplate(params) { + const { translate, chartType, summary, formatNumber } = params; + let key; + let defaultTemplate; + let variableValues; + let values; + if (!hasCompleteSparklineSummary(summary)) { + key = "ariaSparklineChartDescriptionEmpty"; + defaultTemplate = defaultEmptySparklineAriaDescription; + variableValues = [chartType]; + values = { chartType }; + } else if (summary.count === 1) { + const value = formatNumber(summary.start); + key = "ariaSparklineChartDescriptionSingleValue"; + defaultTemplate = defaultSingleValueSparklineAriaDescription; + variableValues = [chartType, value]; + values = { chartType, value }; + } else { + const [count, min, max, start, end] = [summary.count, summary.min, summary.max, summary.start, summary.end].map( + formatNumber + ); + key = "ariaSparklineChartDescription"; + defaultTemplate = defaultSparklineAriaDescription; + variableValues = [chartType, count, min, max, start, end]; + values = { chartType, count, min, max, start, end }; + } + return { template: translate(key, defaultTemplate, variableValues), values }; +} +var hasCompleteSparklineSummary = (summary) => summary.count > 0 && summary.min != null && summary.max != null && summary.start != null && summary.end != null; +var interpolateTemplate = (template, values) => template.replace(/\$\{([^}]+)\}/g, (match, token) => values[token] ?? match); +var getYValue = (datum, yKey) => { + if (typeof datum === "number") { + return Number.isFinite(datum) ? datum : null; + } + if (datum && typeof datum === "object") { + const yValue = Array.isArray(datum) ? datum[1] : datum[yKey]; + return typeof yValue === "number" && Number.isFinite(yValue) ? yValue : null; + } + return null; +}; + +// packages/ag-grid-enterprise/src/sparkline/sparklineCellRenderer.ts +function tooltipRendererWithXValue(params) { + return { content: `${params.xValue} ${params.yValue}` }; +} +function tooltipRenderer(params) { + return { content: `${params.yValue}` }; +} +var COMPONENT_PREFIX = "ag-sparkline"; +var SparklineCellRenderer = class extends Component55 { + constructor() { + super({ + tag: "div", + cls: `${COMPONENT_PREFIX}-wrapper`, + children: [{ tag: "span", ref: "eSparkline" }] + }); + this.eSparkline = RefPlaceholder48; + this.cachedWidth = 0; + this.cachedHeight = 0; + this.dataRef = []; + this.processedData = []; + } + postConstruct() { + this.env = this.beans.environment; + this.addManagedPropertyListeners( + ["chartThemeOverrides", "chartThemes", "styleNonce"], + () => this.refresh(this.params) + ); + } + createListener(batch = true) { + return () => this.updateSize(this.params?.column?.getActualWidth() ?? 0, (this.params?.node.rowHeight ?? 0) - 2, batch); + } + initGridObserver() { + const batchListener = this.createListener(); + const listener = this.createListener(false); + const column = this.params?.column; + const rowNode = this.params?.node; + column.__addEventListener("columnStateUpdated", batchListener); + rowNode.__addEventListener("heightChanged", batchListener); + this.addDestroyFunc(() => { + column.__removeEventListener("columnStateUpdated", batchListener); + rowNode.__removeEventListener("heightChanged", batchListener); + }); + listener(); + } + updateSize(newWidth, newHeight, batch = true) { + newWidth -= this.env.getCellPadding(); + if (newWidth !== this.cachedWidth || newHeight !== this.cachedHeight) { + this.cachedWidth = newWidth; + this.cachedHeight = newHeight; + const refresh = this.refresh.bind(this); + if (batch) { + _batchCall(() => this.isAlive() && refresh()); + } else { + refresh(); + } + } + } + init(params) { + this.params = params; + const { eParentOfValue } = params; + const id = `${COMPONENT_PREFIX}-cell-renderer-${this.getCompId()}`; + this.getGui().setAttribute("id", id); + _setAriaLabelledBy4(eParentOfValue, id); + this.addDestroyFunc(() => _setAriaLabelledBy4(eParentOfValue)); + this.initGridObserver(); + } + refresh(params = this.params) { + var _a; + this.params = params; + const data = this.processData(params?.value); + this.refreshAriaLabel(data); + const width = this.cachedWidth; + const height = this.cachedHeight; + const styleNonce = this.gos.get("styleNonce"); + if (!this.sparklineInstance && params && width > 0 && height > 0) { + this.sparklineOptions = { + container: this.eSparkline, + width, + height, + ...params.sparklineOptions, + ...styleNonce ? { styleNonce } : {}, + data + }; + (_a = this.sparklineOptions).type ?? (_a.type = "line"); + if (this.sparklineOptions.tooltip?.renderer) { + this.wrapTooltipRenderer(); + } else { + const renderer = this.getDefaultTooltipRenderer(); + this.sparklineOptions.tooltip = { + ...this.sparklineOptions.tooltip, + renderer + }; + } + const theme = this.sparklineOptions?.theme; + if (this.sparklineOptions.type === "bar" && this.sparklineOptions.itemStyler) { + this.wrapItemStyler(this.sparklineOptions); + } else if (theme?.overrides?.bar?.series?.itemStyler) { + this.wrapItemStyler(theme.overrides.bar.series); + } + this.sparklineInstance = params.createSparkline(this.sparklineOptions); + return true; + } else if (this.sparklineInstance) { + this.sparklineInstance.update({ + ...this.sparklineOptions, + data, + width, + height, + ...styleNonce ? { styleNonce } : {} + }); + return true; + } + return false; + } + refreshAriaLabel(data) { + const translate = this.getLocaleTextFunc(); + const getLocaleText = this.getLocaleTextFunc.bind(this); + const yKey = this.params?.sparklineOptions?.yKey ?? this.sparklineOptions?.yKey ?? "y"; + const summary = getSparklineSummary(data, yKey); + const sparklineOptions = this.params?.sparklineOptions ?? this.sparklineOptions; + const { template, values } = getSparklineAriaTemplate({ + translate, + chartType: getChartTypeLabel(translate, sparklineOptions), + summary, + formatNumber: (value) => _formatNumberCommas6(value, getLocaleText) + }); + _setAriaLabel20(this.getGui(), interpolateTemplate(template, values)); + } + processData(data) { + if (!data?.length) { + return data ?? []; + } + if (this.dataRef !== data) { + this.dataRef = data; + this.processedData = Array.isArray(data[0]) ? data.filter((item) => item != null) : data; + } + return this.processedData; + } + createContext() { + return { + data: this.params?.data, + cellData: this.params?.value + }; + } + getDefaultTooltipRenderer(userRendererResult) { + const userTitle = userRendererResult?.title; + const xKeyProvided = this.sparklineOptions.xKey; + const tupleData = Array.isArray(this.sparklineOptions.data?.[0]); + const showXValue = !userTitle && (xKeyProvided || tupleData); + return showXValue ? tooltipRendererWithXValue : tooltipRenderer; + } + wrapItemStyler(container) { + container.itemStyler = wrapFn(container.itemStyler, (fn, stylerParams) => { + return fn({ + ...stylerParams, + context: this.createContext() + }); + }); + } + wrapTooltipRenderer() { + this.sparklineOptions.tooltip = { + ...this.sparklineOptions.tooltip, + renderer: wrapFn(this.sparklineOptions.tooltip.renderer, (fn, tooltipParams) => { + const userRendererResult = fn({ + ...tooltipParams, + context: this.createContext() + }); + if (typeof userRendererResult === "string") { + return userRendererResult; + } + return { + ...this.getDefaultTooltipRenderer(userRendererResult)(tooltipParams), + ...userRendererResult + }; + }) + }; + } + destroy() { + super.destroy(); + this.sparklineInstance?.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/sparkline/sparklinesModule.ts +var moduleName = "Sparklines"; +var SparklinesModule = { + moduleName, + version: VERSION, + dependsOn: [EnterpriseCoreModule], + validate: () => { + return { + isValid: false, + message: _preInitErrMsg(258) + }; + }, + with: (params) => { + params.setup(); + return { + moduleName, + version: VERSION, + dependsOn: [EnterpriseCoreModule], + css: [sparkline_default], + userComponents: { + agSparklineCellRenderer: { + classImp: SparklineCellRenderer, + /** Default params for provided components */ + params: { createSparkline: params.createSparkline } + } + }, + validate: () => { + return { isValid: true }; + } + }; + } +}; + +// packages/ag-grid-enterprise/src/find/find.css +var find_default = ".ag-find-cell{display:block;overflow:hidden;text-overflow:ellipsis}.ag-find-match{background-color:var(--ag-find-match-background-color);color:var(--ag-find-match-color)}.ag-find-active-match{background-color:var(--ag-find-active-match-background-color);color:var(--ag-find-active-match-color)}"; + +// packages/ag-grid-enterprise/src/find/findApi.ts +function findNext(beans) { + beans.findSvc?.next(); +} +function findPrevious(beans) { + beans.findSvc?.previous(); +} +function findGetTotalMatches(beans) { + return beans.findSvc?.totalMatches ?? 0; +} +function findGoTo(beans, match, force) { + beans.findSvc?.goTo(match, force); +} +function findClearActive(beans) { + beans.findSvc?.clearActive(); +} +function findGetActiveMatch(beans) { + return beans.findSvc?.activeMatch; +} +function findGetNumMatches(beans, params) { + const { node, column } = params; + return beans.findSvc?.getNumMatches(node, column) ?? 0; +} +function findGetParts(beans, params) { + return beans.findSvc?.getParts(params) ?? []; +} +function findRefresh(beans) { + return beans.findSvc?.refresh(true); +} + +// packages/ag-grid-enterprise/src/find/findCellRenderer.ts +import { Component as Component56, _clearElement as _clearElement19, _createElement as _createElement17, _toString as _toString2 } from "ag-grid-community"; +var FindCellRendererElement = { tag: "span", cls: "ag-find-cell" }; +var FindCellRenderer = class extends Component56 { + constructor() { + super(FindCellRendererElement); + } + init(params) { + this.refresh(params); + } + refresh(params) { + const { node, column } = params; + const { findSvc, valueSvc } = this.beans; + const { value, valueFormatted } = valueSvc.getValueForDisplay({ + column, + node, + includeValueFormatted: true, + from: "edit" + }); + const displayValue = valueFormatted ?? value ?? ""; + const eGui = this.getGui(); + _clearElement19(eGui); + const parts = findSvc?.getParts({ value: displayValue, node, column: column ?? null }); + if (!parts) { + eGui.textContent = _toString2(displayValue) ?? ""; + eGui.classList.remove("ag-find-cell-active-match"); + } else { + let hasActiveMatch = false; + for (const { value: value2, match, activeMatch } of parts) { + const content = _toString2(value2) ?? ""; + if (match) { + const element = _createElement17({ tag: "mark", cls: "ag-find-match" }); + element.textContent = content; + if (activeMatch) { + element.classList.add("ag-find-active-match"); + hasActiveMatch = true; + } + eGui.appendChild(element); + } else { + eGui.appendChild(document.createTextNode(content)); + } + } + eGui.classList.toggle("ag-find-cell-active-match", hasActiveMatch); + } + return true; + } +}; + +// packages/ag-grid-enterprise/src/find/findService.ts +import { + BeanStub as BeanStub83, + _addGridCommonParams as _addGridCommonParams27, + _debounce as _debounce7, + _isClientSideRowModel as _isClientSideRowModel9, + _isFullWidthGroupRow, + _jsonEquals as _jsonEquals4, + _missing as _missing9, + _toString as _toString3, + isSpecialCol as isSpecialCol5 +} from "ag-grid-community"; +function defaultCaseFormat(value) { + return value?.toLocaleLowerCase(); +} +function getMatchesForValue(findSearchValue, caseFormat, valueToFind) { + const finalValue = caseFormat(_toString3(valueToFind)); + let numMatches = 0; + if (finalValue?.length) { + let index = -1; + while (true) { + index = finalValue.indexOf(findSearchValue, index + 1); + if (index != -1) { + numMatches++; + } else { + break; + } + } + } + return numMatches; +} +var FindService = class extends BeanStub83 { + constructor() { + super(...arguments); + this.beanName = "findSvc"; + /** + * Is find currently active (e.g. non-empty search value). + * Used for performance when checking matches (part of cell rendering) + */ + this.active = false; + /** pinned top matches */ + this.topMatches = /* @__PURE__ */ new Map(); + /** same nodes as keys in `topMatches`, but kept separate for performance when moving backwards and forwards through the matches */ + this.topNodes = []; + /** total number of matches in pinned top */ + this.topNumMatches = 0; + this.centerMatches = /* @__PURE__ */ new Map(); + this.centerNodes = []; + this.centerNumMatches = 0; + this.bottomMatches = /* @__PURE__ */ new Map(); + this.bottomNodes = []; + /** switches based on grid options */ + this.caseFormat = defaultCaseFormat; + /** whether to scroll to active match after a refresh */ + this.scrollOnRefresh = false; + this.totalMatches = 0; + } + postConstruct() { + if (!_isClientSideRowModel9(this.gos)) { + return; + } + const refreshAndWipeActive = this.refresh.bind(this, false); + const refreshAndKeepActive = this.refresh.bind(this, true); + const refreshAndKeepActiveDebounced = _debounce7( + this, + () => { + if (this.isAlive()) { + refreshAndKeepActive(); + } + }, + 0 + ); + this.refreshDebounced = refreshAndKeepActiveDebounced; + this.addManagedPropertyListener("findSearchValue", refreshAndWipeActive); + this.addManagedPropertyListener("findOptions", ({ currentValue, previousValue }) => { + if (!_jsonEquals4(currentValue, previousValue)) { + refreshAndWipeActive(); + } + }); + this.addManagedPropertyListeners(["groupSuppressBlankHeader", "showOpenedGroup"], refreshAndKeepActive); + this.addManagedEventListeners({ + modelUpdated: refreshAndKeepActive, + displayedColumnsChanged: refreshAndKeepActive, + pinnedRowDataChanged: refreshAndKeepActive, + cellValueChanged: refreshAndKeepActiveDebounced, + rowNodeDataChanged: refreshAndKeepActiveDebounced, + cellEditingStopped: refreshAndKeepActiveDebounced, + cellEditValuesChanged: refreshAndKeepActiveDebounced, + batchEditingStopped: refreshAndKeepActiveDebounced + }); + const rowSpanSvc = this.beans.rowSpanSvc; + if (rowSpanSvc) { + this.addManagedListeners(rowSpanSvc, { spannedCellsUpdated: refreshAndKeepActiveDebounced }); + } + refreshAndWipeActive(); + } + next() { + this.findAcrossContainers(false, ["top", null, "bottom"], 1, 1); + } + previous() { + this.findAcrossContainers(true, ["bottom", null, "top"], this.totalMatches, -1); + } + goTo(match, force) { + if (!force && match === this.activeMatch?.numOverall) { + return; + } + const { topMatches, topNumMatches, centerMatches, centerNumMatches, bottomMatches } = this; + if (match <= topNumMatches) { + this.goToInContainer(topMatches, match, 0); + return; + } + if (match <= centerNumMatches) { + this.goToInContainer(centerMatches, match, topNumMatches); + return; + } + this.goToInContainer(bottomMatches, match, topNumMatches + centerNumMatches); + } + clearActive() { + if (this.activeMatch) { + this.setActive(void 0); + } + } + // called by cell ctrl, so needs to be performant + isMatch(node, column) { + return this.active && !!this.getMatches(node.rowPinned).get(node)?.some(([colToCheck]) => colToCheck === column); + } + getNumMatches(node, column) { + return this.getMatches(node.rowPinned).get(node)?.find(([colToCheck]) => colToCheck === column)?.[1] ?? 0; + } + /** + * Get detail for cell renderer. Splits up the cell value into strings depending on + * whether they don't match, match, or are the active match + */ + getParts(params) { + const { value, node, column, precedingNumMatches } = params; + const findSearchValue = this.findSearchValue; + const stringValue = _toString3(value) ?? ""; + if (_missing9(findSearchValue)) { + return [{ value: stringValue }]; + } + const valueToFind = this.caseFormat(stringValue) ?? ""; + const activeMatchNum = this.getActiveMatchNum(node, column) - (precedingNumMatches ?? 0); + let lastIndex = 0; + let currentMatchNum = 0; + const findTextLength = findSearchValue.length; + const parts = []; + while (true) { + const index = valueToFind.indexOf(findSearchValue, lastIndex); + if (index != -1) { + currentMatchNum++; + if (index > lastIndex) { + parts.push({ value: stringValue.slice(lastIndex, index) }); + } + const endIndex = index + findTextLength; + parts.push({ + value: stringValue.slice(index, endIndex), + match: true, + activeMatch: currentMatchNum === activeMatchNum + }); + lastIndex = endIndex; + } else { + if (lastIndex < stringValue.length) { + parts.push({ + value: stringValue.slice(lastIndex) + }); + } + return parts; + } + } + } + // when a detail grid is created, we need to sync the matches + registerDetailGrid(node, api) { + const gos = this.gos; + if (!_isClientSideRowModel9(gos)) { + return; + } + const isSearchDetail = () => gos.get("findOptions")?.searchDetail; + const compareMatchesAndRefresh = (newNumMatches) => { + const nodeMatch = this.centerMatches.get(node)?.[0]; + const oldNumMatches = nodeMatch?.[1] ?? 0; + if (newNumMatches !== oldNumMatches) { + this.refreshDebounced(); + } + }; + api.addEventListener("findChanged", (event) => { + if (api.isDestroyed() || !this.isAlive() || !this.active || !isSearchDetail()) { + return; + } + compareMatchesAndRefresh(event.totalMatches); + }); + api.addEventListener("gridPreDestroyed", () => { + if (!this.isAlive() || !this.active || !isSearchDetail()) { + return; + } + const masterNode = node.parent; + const findSearchValue = this.findSearchValue; + if (!masterNode || !findSearchValue) { + return; + } + const numMatches = gos.get("detailCellRendererParams")?.getFindMatches?.({ + node: masterNode, + data: masterNode.data, + findSearchValue: gos.get("findSearchValue"), + updateMatches: this.refreshDebounced, + getMatchesForValue: (value) => getMatchesForValue(findSearchValue, this.caseFormat, value) + }) ?? 0; + compareMatchesAndRefresh(numMatches); + }); + if (isSearchDetail()) { + api.setGridOption("findSearchValue", gos.get("findSearchValue")); + } + } + // updates all the matches + refresh(maintainActive) { + const rowNodesToRefresh = /* @__PURE__ */ new Set([...this.topNodes, ...this.centerNodes, ...this.bottomNodes]); + this.topNodes = []; + this.centerNodes = []; + this.bottomNodes = []; + const { + topNodes, + topMatches, + centerMatches, + centerNodes, + bottomNodes, + bottomMatches, + beans: { + gos, + visibleCols, + rowModel, + valueSvc, + pinnedRowModel, + pagination, + rowSpanSvc, + masterDetailSvc, + colModel + }, + findSearchValue: oldFindSearchValue + } = this; + const findOptions = gos.get("findOptions"); + const caseFormat = findOptions?.caseSensitive ? (value) => value ?? void 0 : defaultCaseFormat; + this.caseFormat = caseFormat; + const providedFindSearchValue = gos.get("findSearchValue"); + const findSearchValue = caseFormat(providedFindSearchValue?.trim()); + this.findSearchValue = findSearchValue; + topMatches.clear(); + centerMatches.clear(); + bottomMatches.clear(); + const oldActiveMatch = maintainActive ? this.activeMatch : void 0; + this.activeMatch = void 0; + const checkMasterDetail = gos.get("masterDetail") && findOptions?.searchDetail && masterDetailSvc; + if (_missing9(findSearchValue)) { + this.active = false; + this.topNumMatches = 0; + this.centerNumMatches = 0; + this.totalMatches = 0; + this.refreshRows(rowNodesToRefresh); + if (checkMasterDetail) { + const store = masterDetailSvc.store; + for (const detailId of Object.keys(store)) { + store[detailId]?.api?.findClearActive(); + } + } + if (!_missing9(oldFindSearchValue)) { + this.dispatchFindChanged(); + } + return; + } + const allCols = visibleCols.allCols; + const isFullWidthCellFunc = gos.getCallback("isFullWidthRow"); + const detailCellRendererParams = gos.get("detailCellRendererParams"); + const fullWidthCellRendererParams = gos.get("fullWidthCellRendererParams"); + const groupRowRendererParams = gos.get("groupRowRendererParams"); + const flattenDetails = _getFlattenDetails(gos); + const pivotMode = colModel.isPivotMode(); + let containerNumMatches = 0; + let matches; + let rowNodes; + let checkCurrentPage = false; + const addMatches = (node, column, numMatches, skipRefresh) => { + if (!numMatches) { + return; + } + let rowMatches = matches.get(node); + if (!rowMatches) { + rowMatches = []; + matches.set(node, rowMatches); + rowNodes.push(node); + if (!skipRefresh) { + rowNodesToRefresh.add(node); + } + } + rowMatches.push([column, numMatches]); + containerNumMatches += numMatches; + }; + const findMatchesForRow = (node) => { + if (checkCurrentPage) { + let rowIndex = node.rowIndex; + let nodeToCheck = node.parent; + while (rowIndex == null && nodeToCheck) { + rowIndex = nodeToCheck.rowIndex; + nodeToCheck = nodeToCheck.parent; + } + if (rowIndex == null || !pagination.isRowInPage(rowIndex)) { + return; + } + } + const isParent = node.hasChildren(); + if (!_shouldRowBeRendered( + flattenDetails, + node, + isParent, + pivotMode, + _isRemovedSingleChildrenGroup(flattenDetails, node, isParent), + _isRemovedLowestSingleChildrenGroup(flattenDetails, node, isParent) + )) { + return; + } + const data = node.data; + if (isFullWidthCellFunc?.({ rowNode: node })) { + if (fullWidthCellRendererParams) { + const numMatches = fullWidthCellRendererParams.getFindMatches?.({ + node, + data, + findSearchValue: providedFindSearchValue, + updateMatches: this.refreshDebounced, + getMatchesForValue: (value) => getMatchesForValue(findSearchValue, caseFormat, value) + }) ?? 0; + addMatches(node, null, numMatches); + } + return; + } + if (_isFullWidthGroupRow(gos, node, pivotMode)) { + let valueToFind; + const getFindText = groupRowRendererParams?.getFindText; + if (getFindText) { + const value = valueSvc.getValueForDisplay({ node, from: "batch" }).value; + valueToFind = getFindText( + _addGridCommonParams27(gos, { + value, + node, + data, + column: null, + colDef: null, + getValueFormatted: () => { + const { valueFormatted } = valueSvc.getValueForDisplay({ + node, + includeValueFormatted: true, + from: "batch" + }); + return valueFormatted; + } + }) + ); + } else { + const { value, valueFormatted } = valueSvc.getValueForDisplay({ + node, + includeValueFormatted: true, + from: "batch" + }); + valueToFind = valueFormatted ?? value; + } + const numMatches = getMatchesForValue(findSearchValue, caseFormat, valueToFind); + addMatches(node, null, numMatches); + return; + } + const nodeWillBeHiddenByOpenParent = node.level > 0 && gos.get("groupHideOpenParents") && node.parent?.getFirstChild() === node && !node.parent?.expanded; + for (const column of allCols) { + if (isSpecialCol5(column)) { + continue; + } + const cellSpan = rowSpanSvc?.getCellSpan(column, node); + if (cellSpan && cellSpan.firstNode !== node) { + continue; + } + if (column.colDef.showRowGroup && nodeWillBeHiddenByOpenParent) { + continue; + } + let valueToFind; + const colDef = column.colDef; + const getFindText = colDef.getFindText; + if (getFindText) { + const value = valueSvc.getValueForDisplay({ column, node, from: "batch" }).value; + valueToFind = getFindText( + _addGridCommonParams27(gos, { + value, + node, + data, + column, + colDef, + getValueFormatted: () => { + const { valueFormatted } = valueSvc.getValueForDisplay({ + column, + node, + includeValueFormatted: true, + from: "batch" + }); + return valueFormatted; + } + }) + ); + } else { + const { value, valueFormatted } = valueSvc.getValueForDisplay({ + column, + node, + includeValueFormatted: true, + from: "batch" + }); + valueToFind = valueFormatted ?? value; + } + const numMatches = getMatchesForValue(findSearchValue, caseFormat, valueToFind); + addMatches(node, column, numMatches); + } + if (node.master && checkMasterDetail) { + const detailNode = node.detailNode; + if (detailNode) { + const detailApi = detailNode.detailGridInfo?.api; + if (detailApi) { + detailApi.setGridOption("findSearchValue", providedFindSearchValue); + const numMatches = detailApi.findGetTotalMatches(); + addMatches(detailNode, null, numMatches); + return; + } + } + if (detailCellRendererParams) { + const numMatches = detailCellRendererParams.getFindMatches?.({ + node, + data, + findSearchValue: providedFindSearchValue, + updateMatches: this.refreshDebounced, + getMatchesForValue: (value) => getMatchesForValue(findSearchValue, caseFormat, value) + }) ?? 0; + addMatches( + detailNode ?? { parent: node, dummy: true }, + null, + numMatches, + !detailNode + // if dummy detail node, don't refresh + ); + } + } + }; + matches = topMatches; + rowNodes = topNodes; + pinnedRowModel?.forEachPinnedRow("top", findMatchesForRow); + this.topNumMatches = containerNumMatches; + let totalMatches = containerNumMatches; + matches = centerMatches; + rowNodes = centerNodes; + containerNumMatches = 0; + checkCurrentPage = !!pagination && !!findOptions?.currentPageOnly; + rowModel.forEachNodeAfterFilterAndSort(findMatchesForRow, true); + this.centerNumMatches = containerNumMatches; + totalMatches += containerNumMatches; + matches = bottomMatches; + rowNodes = bottomNodes; + containerNumMatches = 0; + checkCurrentPage = false; + pinnedRowModel?.forEachPinnedRow("bottom", findMatchesForRow); + totalMatches += containerNumMatches; + this.totalMatches = totalMatches; + this.active = true; + this.refreshRows(rowNodesToRefresh); + if (oldActiveMatch) { + this.resetActiveMatch(oldActiveMatch); + } + this.dispatchFindChanged(); + } + // update the active match back to what it was previously if possible. e.g. row index might have changed + resetActiveMatch(oldActiveMatch) { + const { column, numInMatch } = oldActiveMatch; + let node = oldActiveMatch.node; + if (node.dummy) { + const detailNode = node.parent?.detailNode; + if (!detailNode) { + return; + } + node = detailNode; + } + const rowPinned = node.rowPinned ?? null; + const stillValid = this.getMatches(rowPinned)?.get(node)?.some(([columnToCheck, numMatches]) => columnToCheck === column && numMatches >= numInMatch); + if (!stillValid) { + return; + } + let numOverall = 0; + if (rowPinned == null) { + numOverall = this.topNumMatches; + } else if (rowPinned === "bottom") { + numOverall = this.topNumMatches + this.centerNumMatches; + } + const updateNumInMatches = () => { + const matches = this.getMatches(rowPinned); + for (const nodeToCheck of matches.keys()) { + const matchingNode = nodeToCheck === node; + const cols = matches.get(nodeToCheck); + for (const [columnToCheck, numMatches] of cols) { + if (matchingNode && columnToCheck === column) { + numOverall += numInMatch; + return; + } + numOverall += numMatches; + } + } + }; + updateNumInMatches(); + const activeMatch = { + ...oldActiveMatch, + node, + numOverall + }; + this.activeMatch = activeMatch; + this.refreshRows(/* @__PURE__ */ new Set([node]), column == null ? void 0 : /* @__PURE__ */ new Set([column])); + if (this.scrollOnRefresh) { + this.scrollOnRefresh = false; + this.scrollToActive(activeMatch); + } + this.setDetailActive(activeMatch); + } + refreshRows(rowNodes, columns) { + if (!rowNodes.size) { + return; + } + this.beans.rowRenderer.refreshCells({ + rowNodes: [...rowNodes], + columns: columns ? [...columns] : void 0, + force: true, + suppressFlash: true + }); + } + // go to the next/previous match across all containers + findAcrossContainers(backwards, containers, startNum, increment) { + if (!this.totalMatches) { + this.setActive(); + return; + } + const activeMatch = this.activeMatch; + let containersToFind = containers; + if (activeMatch) { + const { column, node, numInMatch, numOverall } = activeMatch; + const rowPinned = node.rowPinned ?? null; + const nextOverallNum = numOverall + increment; + const matchInContainer = this.findInContainer( + rowPinned, + backwards, + nextOverallNum, + node, + column, + numInMatch + ); + if (matchInContainer) { + return; + } + const activeContainerIndex = containers.indexOf(rowPinned); + const containerLength = containers.length; + const containersAfter = containers.slice(activeContainerIndex + 1, containerLength); + if (containersAfter.some( + (containerRowPinned) => this.findInContainer(containerRowPinned, backwards, nextOverallNum) + )) { + return; + } + containersToFind = containers.slice(0, activeContainerIndex + 1); + } + containersToFind.some((containerRowPinned) => this.findInContainer(containerRowPinned, backwards, startNum)); + } + // go to the next/previous match within a container + findInContainer(rowPinned, backwards, nextOverallNum, currentNode, currentColumn, currentNumInMatch) { + const matches = this.getMatches(rowPinned); + const rowNodes = this.getRowNodes(rowPinned); + const direction = backwards ? -1 : 1; + if (currentNode != null) { + const currentIndexRowMatches = matches.get(currentNode); + const colArrayIndex = currentIndexRowMatches?.findIndex(([column]) => column === currentColumn); + if (colArrayIndex != null && colArrayIndex != -1) { + const [column, numMatches] = currentIndexRowMatches[colArrayIndex]; + if (backwards ? currentNumInMatch > 1 : currentNumInMatch < numMatches) { + this.setActive({ + column, + node: currentNode, + numInMatch: currentNumInMatch + direction, + numOverall: nextOverallNum + }); + return true; + } + } + const nextMatch2 = colArrayIndex != null && colArrayIndex != -1 ? currentIndexRowMatches?.[colArrayIndex + direction] : void 0; + if (nextMatch2) { + const [column, numMatches] = nextMatch2; + this.setActive({ + column, + node: currentNode, + numInMatch: backwards ? numMatches : 1, + numOverall: nextOverallNum + }); + return true; + } + } + let nextNode; + if (currentNode == null) { + nextNode = rowNodes[backwards ? rowNodes.length - 1 : 0]; + } else { + const rowArrayIndex = rowNodes.findIndex((node) => node === currentNode); + nextNode = rowNodes[rowArrayIndex + direction]; + } + if (nextNode == null) { + return false; + } + const nextIndexRowMatches = matches.get(nextNode); + const nextMatch = nextIndexRowMatches?.[backwards ? nextIndexRowMatches.length - 1 : 0]; + if (nextMatch) { + const [column, numMatches] = nextMatch; + this.setActive({ + column, + node: nextNode, + numInMatch: backwards ? numMatches : 1, + numOverall: nextOverallNum + }); + return true; + } + return false; + } + dispatchFindChanged() { + const { eventSvc, activeMatch, totalMatches, findSearchValue } = this; + eventSvc.dispatchEvent({ + type: "findChanged", + activeMatch, + totalMatches, + findSearchValue + }); + } + setActive(activeMatch) { + if (activeMatch && activeMatch.node.rowIndex == null) { + const node = activeMatch.node; + let parent = node.footer ? node.sibling : node.parent; + while (parent && parent.level !== -1) { + parent.expanded = true; + parent = parent.parent; + } + this.activeMatch = activeMatch; + this.scrollOnRefresh = true; + this.beans.expansionSvc?.onGroupExpandedOrCollapsed(); + return; + } + const oldActiveMatch = this.activeMatch; + this.activeMatch = activeMatch; + this.refreshAndScrollToActive(activeMatch, oldActiveMatch); + if (activeMatch) { + this.setDetailActive(activeMatch); + } + this.dispatchFindChanged(); + } + setDetailActive({ node, numInMatch }) { + if (node.detail) { + node.detailGridInfo?.api?.findGoTo(numInMatch); + } + } + refreshAndScrollToActive(activeMatch, oldActiveMatch) { + if (activeMatch || oldActiveMatch) { + const nodes = /* @__PURE__ */ new Set(); + const columns = /* @__PURE__ */ new Set(); + let skipColumns = false; + const addMatch = (match) => { + if (!match) { + return; + } + const { node, column } = match; + nodes.add(node); + if (column == null) { + skipColumns = true; + } else { + columns.add(column); + } + }; + addMatch(activeMatch); + addMatch(oldActiveMatch); + this.refreshRows(nodes, skipColumns ? void 0 : columns); + } + if (activeMatch) { + this.scrollToActive(activeMatch); + } + } + scrollToActive({ node: { rowPinned, rowIndex }, column }) { + const { ctrlsSvc, pagination, gos } = this.beans; + const scrollFeature = ctrlsSvc.getScrollFeature(); + if (rowPinned == null && rowIndex != null) { + if (pagination && !gos.get("findOptions")?.currentPageOnly && !pagination.isRowInPage(rowIndex)) { + pagination.goToPageWithIndex(rowIndex); + } + scrollFeature.ensureIndexVisible(rowIndex); + } + scrollFeature.ensureColumnVisible(column); + } + // search for the specified overall `match` number with the provided container, and set it to be active + goToInContainer(matches, match, startNum) { + let currentMatch = startNum; + for (const node of matches.keys()) { + const cols = matches.get(node); + for (const [column, numMatches] of cols) { + if (match <= currentMatch + numMatches) { + this.setActive({ + column, + node, + numInMatch: match - currentMatch, + numOverall: match + }); + return; + } + currentMatch += numMatches; + } + } + } + getMatches(rowPinned) { + if (rowPinned === "top") { + return this.topMatches; + } else if (rowPinned === "bottom") { + return this.bottomMatches; + } else { + return this.centerMatches; + } + } + getRowNodes(rowPinned) { + if (rowPinned === "top") { + return this.topNodes; + } else if (rowPinned === "bottom") { + return this.bottomNodes; + } else { + return this.centerNodes; + } + } + getActiveMatchNum(node, column) { + const activeMatch = this.activeMatch; + return activeMatch != null && activeMatch.node === node && activeMatch.column === column ? activeMatch.numInMatch : 0; + } + destroy() { + this.topMatches.clear(); + this.topNodes.length = 0; + this.centerMatches.clear(); + this.centerNodes.length = 0; + this.bottomMatches.clear(); + this.bottomNodes.length = 0; + this.activeMatch = void 0; + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/find/findModule.ts +var FindCoreModule = { + moduleName: "FindCore", + version: VERSION, + rowModels: ["clientSide"], + beans: [FindService], + userComponents: { + agFindCellRenderer: FindCellRenderer + }, + css: [find_default] +}; +var FindModule = { + moduleName: "Find", + version: VERSION, + apiFunctions: { + findGetTotalMatches, + findGoTo, + findNext, + findPrevious, + findGetActiveMatch, + findGetNumMatches, + findGetParts, + findClearActive, + findRefresh + }, + dependsOn: [EnterpriseCoreModule, FindCoreModule] +}; + +// packages/ag-grid-enterprise/src/batch-edit/batchEditModule.ts +import { _EditCoreModule as _EditCoreModule2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/batch-edit/batchEditApi.ts +import { _isClientSideRowModel as _isClientSideRowModel10, _warn as _warn55 } from "ag-grid-community"; +function startBatchEdit({ editSvc, gos, rowModel }) { + if (!_isClientSideRowModel10(gos, rowModel)) { + _warn55(289, { rowModelType: gos.get("rowModelType") }); + return; + } + editSvc?.startBatchEditing(); +} +function cancelBatchEdit({ editSvc }) { + editSvc?.stopBatchEditing({ cancel: true, source: "api", forceCancel: true }); +} +function commitBatchEdit({ editSvc }) { + editSvc?.stopBatchEditing({ source: "api", forceStop: true, commit: true }); +} +function isBatchEditing(beans) { + return beans.editSvc?.isBatchEditing() ?? false; +} + +// packages/ag-grid-enterprise/src/batch-edit/batchEditModule.ts +var BatchEditModule = { + moduleName: "BatchEdit", + version: VERSION, + beans: [], + apiFunctions: { + isBatchEditing, + startBatchEdit, + cancelBatchEdit, + commitBatchEdit + }, + dependsOn: [_EditCoreModule2, EnterpriseCoreModule], + css: [] +}; + +// packages/ag-grid-enterprise/src/rowGrouping/rowGroupingEditValueSvc.ts +import { BeanStub as BeanStub84 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/rowGrouping/distributeGroupValue/valueConversion.ts +var resolveStrategy = (aggFunc, distribution) => { + if (distribution === false || distribution === null) { + return false; + } + if (isNonDistributable(aggFunc)) { + return distribution === "overwrite" ? "overwrite" : false; + } + if (typeof distribution === "string") { + return distribution; + } + if (aggFunc === "sum") { + return "uniform"; + } + if (aggFunc === "avg" || aggFunc == null) { + return "overwrite"; + } + return distribution === true ? "overwrite" : false; +}; +var isNonDistributable = (aggFunc) => aggFunc === "count" || aggFunc === "min" || aggFunc === "max" || aggFunc === "first" || aggFunc === "last"; +var isDistributableBuiltin = (aggFunc) => aggFunc === "sum" || aggFunc === "avg"; +var toNumber = (raw) => { + if (typeof raw === "number") { + return raw; + } + if (typeof raw === "bigint" || typeof raw === "string") { + const r = Number(raw); + return Number.isFinite(r) ? r : 0; + } + if (typeof raw === "boolean") { + return raw ? 1 : 0; + } + if (raw != null && typeof raw === "object") { + if (typeof raw.toNumber === "function") { + return toNumber(raw.toNumber()); + } + if ("value" in raw) { + return toNumber(raw.value); + } + } + return 0; +}; +var numberToBigInt = (value) => Number.isFinite(value) ? BigInt(Math.round(value)) : 0n; +var toBigInt = (raw) => { + if (typeof raw === "bigint") { + return raw; + } + if (typeof raw === "number") { + return numberToBigInt(raw); + } + if (typeof raw === "boolean") { + return raw ? 1n : 0n; + } + if (typeof raw === "string") { + try { + return BigInt(raw); + } catch { + return numberToBigInt(Number(raw)); + } + } + if (raw != null && typeof raw === "object") { + if (typeof raw.toNumber === "function") { + return toBigInt(raw.toNumber()); + } + if ("value" in raw) { + return toBigInt(raw.value); + } + } + return 0n; +}; +var isNumericLike = (value) => { + const t = typeof value; + if (t === "number" || t === "bigint" || t === "boolean") { + return true; + } + if (t === "string") { + return Number.isFinite(Number(value)); + } + if (value != null && t === "object") { + if (typeof value.toNumber === "function") { + return true; + } + if ("value" in value) { + return isNumericLike(value.value); + } + } + return false; +}; +var detectPrecision = (colDef) => { + if (colDef.cellDataType === "bigint") { + return 0; + } + const ep = colDef.cellEditorParams; + if (ep == null || typeof ep !== "object") { + return void 0; + } + const precision = ep.precision; + if (typeof precision === "number" && Number.isInteger(precision) && precision >= 0) { + return precision; + } + const step = ep.step; + if (typeof step === "number" && Number.isInteger(step)) { + return 0; + } + return void 0; +}; + +// packages/ag-grid-enterprise/src/rowGrouping/distributeGroupValue/distributorBigInt.ts +var DistributorBigInt = class { + constructor(params, opts, aggFunc) { + this.params = params; + const { aggregatedChildren: children, column, newValue } = params; + const newBigInt = toBigInt(newValue); + const oldBigInt = toBigInt(params.oldValue); + const count = children.length; + const bigCount = BigInt(count); + this.children = children; + this.column = column; + this.count = count; + this.bigCount = bigCount; + this.newValue = newValue; + this.strategy = resolveStrategy(aggFunc, opts?.distribution); + if (aggFunc === "avg") { + this.target = newBigInt * bigCount; + this.oldTarget = oldBigInt * bigCount; + } else { + this.target = newBigInt; + this.oldTarget = oldBigInt; + } + this.getVal = opts?.getValue; + this.setVal = opts?.setValue; + } + run() { + const { strategy, newValue } = this; + if (strategy === false) { + return false; + } + if (strategy === "overwrite") { + return this.writeAll(newValue); + } + const { target, oldTarget } = this; + if (target === 0n && !isNumericLike(newValue)) { + return this.writeAll(newValue); + } + if (strategy === "increment" && target === oldTarget) { + return false; + } + if (strategy === "uniform") { + return this.writeUniformDirect(target); + } + if (strategy === "increment") { + return this.writeIncrementDirect(target - oldTarget); + } + return this.writePercentage(); + } + /** Reads a child's current value as a bigint. */ + readOne(index) { + const { children, column, getVal } = this; + const node = children[index]; + if (getVal) { + const { colDef, api, context } = this.params; + return toBigInt(getVal({ node, data: node.data, column, colDef, api, context, groupParams: this.params })); + } + return toBigInt(node.getDataValue(column, "value")); + } + /** Writes a value to a single child. */ + writeOne(index, value) { + const { children, column, setVal } = this; + const node = children[index]; + if (setVal) { + const { colDef, api, context } = this.params; + return setVal({ node, data: node.data, column, colDef, api, context, groupParams: this.params, value }); + } + return node.setDataValue(column, value, "data"); + } + /** Writes the same value to every child. */ + writeAll(value) { + const { count } = this; + let changed = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(i, value)) { + changed = true; + } + } + return changed; + } + /** Writes uniform values directly without array allocation. */ + writeUniformDirect(total) { + const { count, bigCount } = this; + const base = total / bigCount; + const rem = total - base * bigCount; + const absRem = Number(rem < 0n ? -rem : rem); + const step = rem >= 0n ? 1n : -1n; + let changed = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(i, i < absRem ? base + step : base)) { + changed = true; + } + } + return changed; + } + /** Writes increment values directly without array allocation. */ + writeIncrementDirect(totalDelta) { + const { count, bigCount } = this; + const base = totalDelta / bigCount; + const rem = totalDelta - base * bigCount; + const absRem = Number(rem < 0n ? -rem : rem); + const step = rem >= 0n ? 1n : -1n; + let changed = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(i, this.readOne(i) + base + (i < absRem ? step : 0n))) { + changed = true; + } + } + return changed; + } + /** Computes percentage distribution and writes values. */ + writePercentage() { + const { count, target } = this; + let total = 0n; + const values = new Array(count); + for (let i = 0; i < count; ++i) { + const v = this.readOne(i); + values[i] = v; + total += v; + } + if (total === 0n) { + return this.writeUniformDirect(target); + } + let scaledSum = 0n; + for (let i = 0; i < count; ++i) { + const v = values[i] * target / total; + values[i] = v; + scaledSum += v; + } + let diff = target - scaledSum; + for (let i = 0; diff > 0n && i < count; ++i, --diff) { + ++values[i]; + } + for (let i = 0; diff < 0n && i < count; ++i, ++diff) { + --values[i]; + } + let changed = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(i, values[i])) { + changed = true; + } + } + return changed; + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/distributeGroupValue/distributorNumber.ts +var DistributorNumber = class { + constructor(params, opts, aggFunc) { + this.params = params; + const { aggregatedChildren: children, column, colDef, newValue } = params; + const newNumber = toNumber(newValue); + const count = children.length; + const isAvg = aggFunc === "avg"; + this.children = children; + this.column = column; + this.count = count; + this.newValue = newValue; + this.strategy = resolveStrategy(aggFunc, opts?.distribution); + this.isAvg = isAvg; + if (isAvg) { + this.target = newNumber * count; + this.oldTarget = toNumber(params.oldValue) * count; + } else { + this.target = newNumber; + this.oldTarget = toNumber(params.oldValue); + } + const explicitPrecision = opts?.precision; + if (explicitPrecision === false) { + this.precision = void 0; + } else if (typeof explicitPrecision === "number") { + this.precision = Number.isInteger(explicitPrecision) && explicitPrecision >= 0 ? explicitPrecision : void 0; + } else { + this.precision = detectPrecision(colDef); + } + this.getVal = opts?.getValue; + this.setVal = opts?.setValue; + } + run() { + const { strategy, newValue } = this; + if (strategy === false) { + return false; + } + if (strategy === "overwrite") { + return this.writeAll(newValue); + } + if (this.target === 0 && !isNumericLike(newValue)) { + return this.writeAll(newValue); + } + if (strategy === "increment" && this.target === this.oldTarget) { + return false; + } + switch (strategy) { + case "uniform": + return this.distributeUniform(); + case "increment": + return this.distributeIncrement(); + default: + return this.isAvg ? this.distributePercentageAvg() : this.distributePercentage(); + } + } + readOne(node) { + const { column, getVal } = this; + if (getVal) { + const { colDef, api, context } = this.params; + return toNumber(getVal({ node, data: node.data, column, colDef, api, context, groupParams: this.params })); + } + return toNumber(node.getDataValue(column, "value")); + } + /** + * Reads a child's value and leaf count in a single call. + * For group children, reads the raw avg agg object { value, count } if available, + * falling back to allLeafChildren.length. For leaf children, count is always 1. + */ + readValueAndCount(node) { + const { column, getVal } = this; + let raw; + if (getVal) { + const { colDef, api, context } = this.params; + raw = getVal({ node, data: node.data, column, colDef, api, context, groupParams: this.params }); + } else { + raw = node.getDataValue(column); + } + if (node.group) { + if (raw != null && typeof raw === "object") { + const { value, count } = raw; + if (value != null && typeof count === "number" && count > 0) { + return typeof value === "number" ? raw : { value: toNumber(value), count }; + } + } + return { value: toNumber(raw), count: node.allLeafChildren?.length || 1 }; + } + return { value: toNumber(raw), count: 1 }; + } + writeOne(node, value) { + const { column, setVal } = this; + if (setVal) { + const { colDef, api, context } = this.params; + return setVal({ node, data: node.data, column, colDef, api, context, groupParams: this.params, value }); + } + return node.setDataValue(column, value, "data"); + } + writeAll(value) { + const { children, count } = this; + let changed = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(children[i], value)) { + changed = true; + } + } + return changed; + } + distributeUniform() { + const { children, count, target, precision } = this; + if (precision === void 0) { + return this.writeAll(target / count); + } + const scale = 10 ** precision; + const intTarget = Math.round(target * scale); + const base = Math.trunc(intTarget / count); + const rem = intTarget - base * count; + const absRem = Math.abs(rem); + const step = rem >= 0 ? 1 : -1; + let changed = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(children[i], (i < absRem ? base + step : base) / scale)) { + changed = true; + } + } + return changed; + } + distributeIncrement() { + const { children, count, target, oldTarget, precision } = this; + if (precision === void 0) { + const add = (target - oldTarget) / count; + let changed2 = false; + for (let i = 0; i < count; ++i) { + const child = children[i]; + if (this.writeOne(child, this.readOne(child) + add)) { + changed2 = true; + } + } + return changed2; + } + const scale = 10 ** precision; + const intDelta = Math.round(target * scale) - Math.round(oldTarget * scale); + const base = Math.trunc(intDelta / count); + const rem = intDelta - base * count; + const absRem = Math.abs(rem); + const step = rem >= 0 ? 1 : -1; + let changed = false; + for (let i = 0; i < count; ++i) { + const child = children[i]; + const cur = Math.round(this.readOne(child) * scale); + if (this.writeOne(child, (cur + base + (i < absRem ? step : 0)) / scale)) { + changed = true; + } + } + return changed; + } + /** + * Scales each child's value proportionally so they sum to the target. + * Each child keeps its relative share: newValue[i] = oldValue[i] × (target / oldTotal). + * With precision rounding, uses scaled integers and spreads the remainder across the first N children. + */ + distributePercentage() { + const { children, count, target, precision } = this; + const values = new Array(count); + let total = 0; + for (let i = 0; i < count; ++i) { + const v = this.readOne(children[i]); + values[i] = v; + total += v; + } + if (total === 0) { + return this.distributeUniform(); + } + if (precision === void 0) { + const ratio = target / total; + let changed2 = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(children[i], values[i] * ratio)) { + changed2 = true; + } + } + return changed2; + } + const scale = 10 ** precision; + const intTarget = Math.round(target * scale); + let roundedSum = 0; + for (let i = 0; i < count; ++i) { + const r = Math.round(values[i] / total * intTarget); + values[i] = r; + roundedSum += r; + } + const rem = intTarget - roundedSum; + const absRem = Math.abs(rem); + const step = rem >= 0 ? 1 : -1; + let changed = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(children[i], (values[i] + (i < absRem ? step : 0)) / scale)) { + changed = true; + } + } + return changed; + } + /** + * Percentage distribution for avg aggregation. + * + * Avg group children may themselves be groups with different leaf counts, + * so we can't scale avg values directly — a group averaging 2 leaves contributes + * twice as much to the parent avg as a group averaging 1 leaf. + * + * Instead, we convert each child's avg to its sum contribution (avg × leafCount), + * scale those sums proportionally, then convert back to avg for writing. + * + * The target is also converted: constructor stores target = newAvg × childGroupCount, + * but we need effectiveTarget = newAvg × totalLeafCount for sum-space scaling. + */ + distributePercentageAvg() { + const { children, count, target, precision } = this; + const values = new Array(count); + const leafCounts = new Array(count); + let total = 0; + let totalLeafCount = 0; + for (let i = 0; i < count; ++i) { + const vc = this.readValueAndCount(children[i]); + const lc = vc.count; + leafCounts[i] = lc; + totalLeafCount += lc; + const v = vc.value * lc; + values[i] = v; + total += v; + } + if (total === 0) { + return this.distributeUniform(); + } + const effectiveTarget = target / count * totalLeafCount; + if (precision === void 0) { + const ratio = effectiveTarget / total; + let changed2 = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(children[i], values[i] * ratio / leafCounts[i])) { + changed2 = true; + } + } + return changed2; + } + const scale = 10 ** precision; + const intTarget = Math.round(effectiveTarget * scale); + let roundedSum = 0; + for (let i = 0; i < count; ++i) { + const r = Math.round(values[i] / total * intTarget); + values[i] = r; + roundedSum += r; + } + const rem = intTarget - roundedSum; + const absRem = Math.abs(rem); + const step = rem >= 0 ? 1 : -1; + let changed = false; + for (let i = 0; i < count; ++i) { + if (this.writeOne(children[i], (values[i] + (i < absRem ? step : 0)) / (scale * leafCounts[i]))) { + changed = true; + } + } + return changed; + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/distributeGroupValue/distributeGroupValue.ts +var distributeGroupValue = (params, options) => { + const { aggregatedChildren: children, colDef } = params; + if (children.length === 0) { + return false; + } + const aggFunc = colDef.aggFunc ?? null; + const entry = resolveDistributionEntry(options, aggFunc); + if (entry === false) { + return false; + } + if (typeof entry === "function") { + return entry(params) ?? true; + } + if (colDef.cellDataType === "bigint") { + return new DistributorBigInt(params, entry, aggFunc).run(); + } + return new DistributorNumber(params, entry, aggFunc).run(); +}; +function resolveDistributionEntry(options, aggFunc) { + if (!options) { + return void 0; + } + const dist = options.distribution; + if (dist === false || dist === null) { + return false; + } + const nonDist = isNonDistributable(aggFunc); + const defaultHandler = options.default; + if (typeof dist === "object") { + const aggEntry = typeof aggFunc === "string" ? dist[aggFunc] : void 0; + if (aggEntry !== void 0) { + return resolveEntry(aggEntry, nonDist, options); + } + if (nonDist) { + return false; + } + return resolveEntry(defaultHandler, false, options) ?? inheritOptions(options); + } + if (nonDist) { + return dist === "overwrite" ? inheritOptions(options, "overwrite") : false; + } + if (dist === void 0 && !isDistributableBuiltin(aggFunc)) { + const resolved = resolveEntry(defaultHandler, false, options); + if (resolved !== void 0) { + return resolved; + } + } + return options; +} +function resolveEntry(entry, nonDist, parent) { + if (entry === false || entry === null) { + return false; + } + if (entry === void 0) { + return void 0; + } + if (typeof entry === "function") { + return entry; + } + if (typeof entry === "object") { + const dist = entry.distribution; + if (nonDist && dist !== "overwrite" && dist !== true) { + return false; + } + const { precision: pp, getValue: pgv, setValue: psv } = parent; + return { + distribution: nonDist ? "overwrite" : dist, + precision: entry.precision ?? pp, + getValue: entry.getValue ?? pgv, + setValue: entry.setValue ?? psv + }; + } + if (nonDist && entry !== "overwrite" && entry !== true) { + return false; + } + return inheritOptions(parent, nonDist ? "overwrite" : entry); +} +function inheritOptions(parent, distribution) { + return { distribution, precision: parent.precision, getValue: parent.getValue, setValue: parent.setValue }; +} + +// packages/ag-grid-enterprise/src/rowGrouping/rowGroupingEditValueSvc.ts +var RowGroupingEditValueSvc = class extends BeanStub84 { + constructor() { + super(...arguments); + this.beanName = "rowGroupingEditValueSvc"; + } + isGroupCellEditable(rowNode, column) { + const colDef = column.getColDef(); + if (!column.isColumnFunc(rowNode, colDef.groupRowEditable)) { + return false; + } + const setter = colDef.groupRowValueSetter; + if (typeof setter === "function") { + return true; + } + const aggFunc = colDef.aggFunc ?? null; + if (typeof setter === "object") { + const entry = resolveDistributionEntry(setter, aggFunc); + return typeof entry === "function" || entry !== false && resolveStrategy(aggFunc, entry?.distribution) !== false; + } + return resolveStrategy(aggFunc, setter ?? void 0) !== false; + } + setGroupDataValue(rowNode, column, newValue, oldValue, eventSource, valueChanged) { + const colDef = column.getColDef(); + let setter = colDef.groupRowValueSetter; + if (setter == null) { + const gre = colDef.groupRowEditable; + setter = gre && column.isColumnFunc(rowNode, gre) ? true : void 0; + } + if (!setter) { + return void 0; + } + const params = this.gos.addCommon({ + node: rowNode, + data: rowNode.data, + oldValue, + newValue, + colDef, + column, + eventSource, + valueChanged, + aggregatedChildren: this.beans.aggChildrenSvc?.getAggregatedChildren(rowNode, column) ?? [] + }); + const result = typeof setter === "function" ? setter(params) : ( + // true or options object — delegate to the built-in distributor. + distributeGroupValue(params, setter === true ? void 0 : setter) + ); + return result ?? true; + } +}; + +// packages/ag-grid-enterprise/src/rowGrouping/rowGroupingEditModule.ts +var RowGroupingEditModule = { + moduleName: "RowGroupingEdit", + version: VERSION, + beans: [RowGroupingEditValueSvc], + dependsOn: [EnterpriseCoreModule, SharedRowGroupingModule] +}; + +// packages/ag-grid-enterprise/src/charts/integratedChartsModule.ts +import { _PopupModule as _PopupModule5, _SharedDragAndDropModule as _SharedDragAndDropModule5, _preInitErrMsg as _preInitErrMsg2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/agChartsExports.ts +import { BeanStub as BeanStub85 } from "ag-grid-community"; +var AgChartsExports = class extends BeanStub85 { + constructor(params) { + super(); + this.beanName = "agChartsExports"; + this.isEnterprise = false; + this.create = params.create; + this._Theme = params._Theme; + this._Scene = params._Scene; + this.isEnterprise = params.isEnterprise; + this._Util = params._Util; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/enterpriseChartProxyFactory.ts +import { BeanStub as BeanStub90 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/cartesian/cartesianChartProxy.ts +import { _parseDateTimeFromString as _parseDateTimeFromString3 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/utils/integration.ts +function deproxy(chartOrProxy) { + if (chartOrProxy.chart != null) { + return chartOrProxy.chart; + } + return chartOrProxy; +} + +// packages/ag-grid-enterprise/src/charts/chartComp/utils/object.ts +var SKIP_JS_BUILTINS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]); +function get(source, expression, defaultValue) { + if (source == null) { + return defaultValue; + } + const keys = expression.split("."); + let objectToRead = source; + while (keys.length > 1) { + objectToRead = objectToRead[keys.shift()]; + if (objectToRead == null) { + return defaultValue; + } + } + const value = objectToRead[keys[0]]; + return value != null ? value : defaultValue; +} +function set(target, expression, value) { + if (target == null) { + return; + } + const keys = expression.split("."); + let objectToUpdate = target; + keys.filter((key) => !SKIP_JS_BUILTINS.has(key)).forEach((key, i) => { + if (!objectToUpdate[key]) { + objectToUpdate[key] = {}; + } + if (i < keys.length - 1) { + objectToUpdate = objectToUpdate[key]; + } + }); + objectToUpdate[keys[keys.length - 1]] = value; +} + +// packages/ag-grid-enterprise/src/charts/chartComp/utils/seriesTypeMapper.ts +var CHART_TYPE_TO_SERIES_TYPE = { + column: "bar", + groupedColumn: "bar", + stackedColumn: "bar", + normalizedColumn: "bar", + bar: "bar", + groupedBar: "bar", + stackedBar: "bar", + normalizedBar: "bar", + line: "line", + stackedLine: "line", + normalizedLine: "line", + scatter: "scatter", + bubble: "bubble", + pie: "pie", + donut: "donut", + doughnut: "donut", + area: "area", + stackedArea: "area", + normalizedArea: "area", + histogram: "histogram", + radarLine: "radar-line", + radarArea: "radar-area", + nightingale: "nightingale", + radialColumn: "radial-column", + radialBar: "radial-bar", + sunburst: "sunburst", + rangeBar: "range-bar", + rangeArea: "range-area", + boxPlot: "box-plot", + treemap: "treemap", + heatmap: "heatmap", + waterfall: "waterfall", + funnel: "funnel", + coneFunnel: "cone-funnel", + pyramid: "pyramid" +}; +var COMBO_CHART_TYPES = /* @__PURE__ */ new Set(["columnLineCombo", "areaColumnCombo", "customCombo"]); +var SERIES_GROUP_TYPES = ["grouped", "stacked", "normalized"]; +var SERIES_TYPES = { + area: { + isCartesian: true, + canInvert: true + }, + bar: { + isCartesian: true, + canInvert: true + }, + histogram: { + isCartesian: true + }, + line: { + isCartesian: true, + canInvert: true + }, + pie: { + isPie: true + }, + donut: { + isPie: true, + canInvert: true + }, + scatter: { + isCartesian: true + }, + bubble: { + isCartesian: true + }, + "radial-column": { + isPolar: true, + isEnterprise: true, + isRadial: true, + canInvert: true + }, + "radial-bar": { + isPolar: true, + isEnterprise: true, + isRadial: true, + canInvert: true + }, + "radar-line": { + isPolar: true, + isEnterprise: true, + canInvert: true + }, + "radar-area": { + isPolar: true, + isEnterprise: true, + canInvert: true + }, + nightingale: { + isPolar: true, + isEnterprise: true, + canInvert: true + }, + "range-bar": { + isCartesian: true, + isStatistical: true, + isEnterprise: true, + canSwitchDirection: true + }, + "range-area": { + isCartesian: true, + isStatistical: true, + isEnterprise: true + }, + "box-plot": { + isCartesian: true, + isStatistical: true, + isEnterprise: true, + canSwitchDirection: true + }, + treemap: { + isEnterprise: true, + isHierarchical: true + }, + sunburst: { + isEnterprise: true, + isHierarchical: true + }, + heatmap: { + isCartesian: true, + isEnterprise: true + }, + waterfall: { + isCartesian: true, + isEnterprise: true, + canSwitchDirection: true + }, + funnel: { + isCartesian: true, + isEnterprise: true, + canSwitchDirection: true + }, + "cone-funnel": { + isCartesian: true, + isEnterprise: true, + canSwitchDirection: true + }, + pyramid: { + isCartesian: true, + isEnterprise: true, + canSwitchDirection: true + } +}; +function isSeriesType(seriesType) { + return !!SERIES_TYPES[seriesType]; +} +function isComboChart(chartType) { + return COMBO_CHART_TYPES.has(chartType); +} +function doesSeriesHaveProperty(seriesType, prop) { + return !!SERIES_TYPES[seriesType]?.[prop]; +} +function isEnterpriseChartType(chartType) { + return doesSeriesHaveProperty(getSeriesType(chartType), "isEnterprise"); +} +var stackedChartTypes = /* @__PURE__ */ new Set(["stackedColumn", "normalizedColumn", "stackedBar", "normalizedBar"]); +function isStacked(chartType) { + return stackedChartTypes.has(chartType); +} +function isCartesian(seriesType) { + return doesSeriesHaveProperty(seriesType, "isCartesian"); +} +function isFunnel(seriesType) { + return seriesType === "funnel" || seriesType === "cone-funnel" || seriesType === "pyramid"; +} +function isPolar(seriesType) { + return doesSeriesHaveProperty(seriesType, "isPolar"); +} +function isRadial(seriesType) { + return doesSeriesHaveProperty(seriesType, "isRadial"); +} +function isHierarchical(seriesType) { + return doesSeriesHaveProperty(seriesType, "isHierarchical"); +} +function isStatistical(seriesType) { + return doesSeriesHaveProperty(seriesType, "isStatistical"); +} +function getCanonicalChartType(chartType) { + return chartType === "doughnut" ? "donut" : chartType; +} +function getSeriesTypeIfExists(chartType) { + return CHART_TYPE_TO_SERIES_TYPE[chartType]; +} +function getSeriesType(chartType) { + return getSeriesTypeIfExists(chartType) ?? "line"; +} +function isPieChartSeries(seriesType) { + return doesSeriesHaveProperty(seriesType, "isPie"); +} +function canOnlyHaveSingleSeries(chartType) { + return chartType === "pie" || chartType === "waterfall" || chartType === "histogram" || chartType === "funnel" || chartType === "coneFunnel" || chartType === "pyramid"; +} +function getMaxNumCategories(chartType) { + return isHierarchical(getSeriesType(chartType)) ? void 0 : 1; +} +function getMaxNumSeries(chartType) { + if (isHierarchical(getSeriesType(chartType))) { + return 2; + } else if (canOnlyHaveSingleSeries(chartType)) { + return 1; + } else { + return void 0; + } +} +function supportsInvertedCategorySeries(chartType) { + return !isComboChart(chartType) && doesSeriesHaveProperty(getSeriesType(chartType), "canInvert"); +} +function canSwitchDirection(chartType) { + return doesSeriesHaveProperty(getSeriesType(chartType), "canSwitchDirection"); +} +function getFullChartNameTranslationKey(chartType) { + switch (chartType) { + case "groupedColumn": + case "stackedColumn": + case "normalizedColumn": + case "groupedBar": + case "stackedBar": + case "normalizedBar": + case "stackedLine": + case "normalizedLine": + case "stackedArea": + case "normalizedArea": + return `${chartType}Full`; + case "doughnut": + return "donut"; + case "areaColumnCombo": + return "AreaColumnCombo"; + default: + return chartType; + } +} + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/chartTheme.ts +import { _warn as _warn56 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/utils/axisTypeMapper.ts +var ALL_AXIS_TYPES = ["number", "category", "grouped-category", "log", "time"]; +function getLegacyAxisType(chartType) { + switch (chartType) { + case "bar": + case "stackedBar": + case "normalizedBar": + return ["number", "category"]; + case "groupedBar": + return ["number", "grouped-category"]; + case "column": + case "stackedColumn": + case "normalizedColumn": + case "line": + case "stackedLine": + case "normalizedLine": + case "area": + case "stackedArea": + case "normalizedArea": + case "histogram": + return ["category", "number"]; + case "groupedColumn": + return ["grouped-category", "number"]; + case "scatter": + case "bubble": + return ["number", "number"]; + default: + return void 0; + } +} + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/chartTheme.ts +function createAgChartTheme(chartProxyParams, proxy, isEnterprise, chartThemeDefaults, updatedOverrides) { + const { chartOptionsToRestore, chartPaletteToRestore, chartThemeToRestore, agChartsExports } = chartProxyParams; + const themeName = getSelectedTheme(chartProxyParams); + const stockTheme = isStockTheme(themeName, agChartsExports._Theme); + const rootTheme = stockTheme ? { baseTheme: themeName } : lookupCustomChartTheme(chartProxyParams, themeName) ?? {}; + const gridOptionsThemeOverrides = chartProxyParams.getGridOptionsChartThemeOverrides(); + const apiThemeOverrides = chartProxyParams.apiChartThemeOverrides; + const standaloneChartType = getSeriesType(chartProxyParams.chartType); + const crossFilteringOverrides = chartProxyParams.crossFiltering ? createCrossFilterThemeOverrides(proxy, chartProxyParams, standaloneChartType) : void 0; + const isTitleEnabled = () => { + const isTitleEnabled2 = (obj) => { + if (!obj) { + return false; + } + return Object.keys(obj).some((key) => get(obj[key], "title.enabled", false)); + }; + return isTitleEnabled2(gridOptionsThemeOverrides) || isTitleEnabled2(apiThemeOverrides); + }; + const overrides = [ + stockTheme ? inbuiltStockThemeOverrides(chartProxyParams, isEnterprise, isTitleEnabled()) : void 0, + pieAndDonutOverrides(), + chartThemeDefaults, + crossFilteringOverrides, + gridOptionsThemeOverrides, + apiThemeOverrides, + { ...chartOptionsToRestore ?? {} }, + updatedOverrides + ]; + const theme = overrides.filter((v) => !!v).reduce( + (r, n) => ({ + baseTheme: r, + overrides: n + }), + rootTheme + ); + if (chartPaletteToRestore && themeName === chartThemeToRestore) { + const rootThemePalette = chartProxyParams.agChartsExports._Theme.getChartTheme(rootTheme).palette; + if (!isIdenticalPalette(chartPaletteToRestore, rootThemePalette)) { + theme.palette = chartPaletteToRestore; + } + } + return theme; +} +function isIdenticalPalette(paletteA, paletteB) { + const arrayCompare = (arrA, arrB) => { + if (arrA === arrB) { + return true; + } + if (arrA?.length !== arrB?.length) { + return false; + } + return arrA?.every((v, i) => v === arrB?.[i]) ?? false; + }; + return arrayCompare(paletteA.fills, paletteB.fills) && arrayCompare(paletteA.strokes, paletteB.strokes); +} +function isStockTheme(themeName, theme) { + return Object.keys(theme.themes).includes(themeName); +} +function createCrossFilterThemeOverrides(proxy, chartProxyParams, seriesType) { + const legend = { + listeners: { + legendItemClick: (e) => { + const chart = proxy.getChart(); + const eligibleSeriesIds = [e.seriesId, `${e.seriesId}-filtered-out`]; + for (const s2 of chart.series.filter((s3) => eligibleSeriesIds.includes(s3.id))) { + s2.toggleSeriesItem(void 0, "category", e.itemId, void 0); + } + } + } + }; + const common = { + tooltip: { + delay: 500 + }, + legend, + listeners: { + click: (e) => chartProxyParams.crossFilterCallback(e, true) + } + }; + if (seriesType === "pie" || seriesType === "donut") { + return { + [seriesType]: { + series: { + fills: { + $applyCycle: [ + { $cacheMax: { $size: { $path: ["./data", { $path: "/data" }] } } }, + { $palette: "fills" }, + { + $if: [ + { $eq: [{ $value: "$parentIndex" }, 0] }, + { $mix: [{ $value: "$1" }, { $ref: "backgroundColor" }, 0.7] }, + { $value: "$1" } + ] + } + ] + }, + strokes: { + $applyCycle: [ + { $cacheMax: { $size: { $path: ["./data", { $path: "/data" }] } } }, + { $palette: "strokes" }, + { + $if: [ + { $eq: [{ $value: "$parentIndex" }, 0] }, + { $mix: [{ $value: "$1" }, { $ref: "backgroundColor" }, 0.7] }, + { $value: "$1" } + ] + } + ] + } + }, + ...common + } + }; + } + const fill = {}; + if (seriesType !== "line") { + fill.fill = { + $if: [ + { $isEven: [{ $value: "$index" }] }, + { $palette: "fill" }, + { + $mix: [ + { + $path: ["../$prevIndex/fill", { $palette: "fill" }] + }, + { $ref: "backgroundColor" }, + 0.7 + ] + } + ] + }; + } + return { + [seriesType]: { + series: { + stroke: { + $if: [ + { $isEven: [{ $value: "$index" }] }, + { $palette: "stroke" }, + { + $mix: [ + { + $path: ["../$prevIndex/fill", { $palette: "stroke" }] + }, + { $ref: "backgroundColor" }, + 0.7 + ] + } + ] + }, + ...fill + }, + ...common + } + }; +} +var STATIC_INBUILT_STOCK_THEME_AXES_OVERRIDES = ALL_AXIS_TYPES.reduce( + (r, n) => ({ ...r, [n]: { title: { _enabledFromTheme: true } } }), + {} +); +function inbuiltStockThemeOverrides(params, isEnterprise, titleEnabled) { + const extraPadding = params.getExtraPaddingDirections(); + return { + common: { + ...isEnterprise ? { animation: { duration: 500 } } : void 0, + axes: STATIC_INBUILT_STOCK_THEME_AXES_OVERRIDES, + padding: { + // don't add extra padding when a title is present! + top: !titleEnabled && extraPadding.includes("top") ? 40 : 20, + right: extraPadding.includes("right") ? 30 : 20, + bottom: extraPadding.includes("bottom") ? 40 : 20, + left: extraPadding.includes("left") ? 30 : 20 + } + } + }; +} +function pieAndDonutOverrides() { + return { + pie: { + series: { + title: { _enabledFromTheme: true }, + calloutLabel: { _enabledFromTheme: true }, + sectorLabel: { + enabled: false, + _enabledFromTheme: true + } + } + }, + donut: { + series: { + title: { _enabledFromTheme: true }, + calloutLabel: { _enabledFromTheme: true }, + sectorLabel: { + enabled: false, + _enabledFromTheme: true + } + } + } + }; +} +function getSelectedTheme(chartProxyParams) { + let chartThemeName = chartProxyParams.getChartThemeName(); + const availableThemes = chartProxyParams.getChartThemes(); + if (!availableThemes.includes(chartThemeName)) { + chartThemeName = availableThemes[0]; + } + return chartThemeName; +} +function lookupCustomChartTheme(chartProxyParams, name) { + const { customChartThemes } = chartProxyParams; + const customChartTheme = customChartThemes?.[name]; + if (!customChartTheme) { + _warn56(140, { name }); + } + return customChartTheme; +} +function getSeriesHighlight(crossFiltering, isSingleSeries) { + const highlight = { + highlightedItem: { + strokeWidth: 2 + } + }; + if (!isSingleSeries) { + highlight.unhighlightedSeries = { + opacity: 1 + }; + } + if (!crossFiltering) { + highlight.unhighlightedItem = { + opacity: 1 + }; + } + return highlight; +} + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/chartProxy.ts +var ChartProxy = class { + constructor(chartProxyParams) { + this.chartProxyParams = chartProxyParams; + this.clearThemeOverrides = false; + this.agChartsExports = chartProxyParams.agChartsExports; + this.chart = chartProxyParams.chartInstance; + this.chartType = chartProxyParams.chartType; + this.crossFiltering = chartProxyParams.crossFiltering; + this.crossFilterCallback = chartProxyParams.crossFilterCallback; + this.standaloneChartType = getSeriesType(this.chartType); + if (this.chart == null) { + this.chart = chartProxyParams.agChartsExports.create(this.getCommonChartOptions()); + } else { + this.clearThemeOverrides = true; + } + } + crossFilteringReset() { + } + update(params) { + this.getChartRef().update(this.getUpdateOptions(params, this.getCommonChartOptions(params.updatedOverrides))); + } + updateThemeOverrides(themeOverrides) { + this.getChartRef().updateDelta({ theme: { overrides: themeOverrides } }); + } + getChart() { + return deproxy(this.chart); + } + getChartRef() { + return this.chart; + } + downloadChart(dimensions, fileName, fileFormat) { + const { chart } = this; + const rawChart = deproxy(chart); + const imageFileName = fileName || rawChart.title.node.getPlainText(); + const { width, height } = dimensions || {}; + chart.download({ width, height, fileName: imageFileName, fileFormat }); + } + getChartImageDataURL(type) { + return this.getChart().getCanvasDataURL(type); + } + getChartOptions() { + return this.chart.getOptions(); + } + getChartThemeOverrides() { + const chartOptionsTheme = this.getChartOptions().theme; + return chartOptionsTheme.overrides ?? {}; + } + getChartPalette() { + return this.agChartsExports._Theme.getChartTheme(this.getChartOptions().theme).palette; + } + setPaired(paired) { + const seriesType = getSeriesType(this.chartProxyParams.chartType); + this.chart.updateDelta({ theme: { overrides: { [seriesType]: { paired } } } }); + } + isPaired() { + const seriesType = getSeriesType(this.chartProxyParams.chartType); + return get(this.getChartThemeOverrides(), `${seriesType}.paired`, true); + } + lookupCustomChartTheme(themeName) { + return lookupCustomChartTheme(this.chartProxyParams, themeName); + } + getSeriesGroupType() { + return void 0; + } + transformCategoryData(data, categoryKey) { + return data.map((d, index) => { + const value = d[categoryKey]; + const valueString = value?.toString ? value.toString() : ""; + const datum = { ...d }; + datum[categoryKey] = { id: index, value, toString: () => valueString }; + return datum; + }); + } + getCommonChartOptions(updatedOverrides) { + const existingOptions = this.clearThemeOverrides ? {} : this.chart?.getOptions() ?? {}; + const formattingPanelOverrides = this.chart != null ? this.getActiveFormattingPanelOverrides() : void 0; + this.clearThemeOverrides = false; + const styleNonce = this.chartProxyParams.styleNonce; + const theme = createAgChartTheme( + this.chartProxyParams, + this, + this.agChartsExports.isEnterprise, + this.getChartThemeDefaults(), + updatedOverrides ?? formattingPanelOverrides + ); + const newOptions = { + ...existingOptions, + mode: "integrated", + ...styleNonce ? { styleNonce } : {}, + suppressFieldDotNotation: true, + theme, + container: this.chartProxyParams.parentElement + }; + return newOptions; + } + getChartThemeDefaults() { + const crosshair = { + enabled: true, + snap: true, + label: { + enabled: false + } + }; + const common = this.agChartsExports.isEnterprise ? { + zoom: { + enabled: true + }, + animation: { + enabled: true, + duration: 500 + }, + axes: { + number: { crosshair }, + category: { crosshair }, + log: { crosshair }, + time: { crosshair } + } + } : {}; + common.minHeight = 0; + common.minWidth = 0; + common.navigator = { + enabled: false, + height: 18 + }; + common.context = this.chartProxyParams.context; + const overrides = { + common + }; + this.setSeriesChartThemeDefaults(overrides); + return overrides; + } + setSeriesChartThemeDefaults(overrides) { + const seriesOverrides = this.getSeriesChartThemeDefaults(); + if (!seriesOverrides) { + return; + } + overrides[this.standaloneChartType] = seriesOverrides; + } + getSeriesChartThemeDefaults() { + return void 0; + } + getActiveFormattingPanelOverrides() { + if (this.clearThemeOverrides) { + return {}; + } + const inUseTheme = this.chart?.getOptions().theme; + return inUseTheme?.overrides ?? {}; + } + destroy({ keepChartInstance = false } = {}) { + if (keepChartInstance) { + this.chart.resetAnimations(); + return this.chart; + } + this.destroyChart(); + } + destroyChart() { + if (this.chart) { + this.chart.destroy(); + this.chart = void 0; + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/cartesian/cartesianChartProxy.ts +var CartesianChartProxy = class extends ChartProxy { + constructor() { + super(...arguments); + this.crossFilteringAllPoints = /* @__PURE__ */ new Set(); + this.crossFilteringSelectedPoints = []; + this.isSingleSeries = false; + } + getUpdateOptions(params, commonChartOptions) { + const axes = this.getAxes(params, commonChartOptions); + return { + ...commonChartOptions, + data: this.getData(params, axes), + axes, + series: this.getSeries(params) + }; + } + getData(params, axes) { + const supportsCrossFiltering = ["area", "line"].includes(this.standaloneChartType); + return this.crossFiltering && supportsCrossFiltering ? this.getCrossFilterData(params) : this.getDataTransformedData(params, axes); + } + getDataTransformedData(params, axes) { + const xAxisType = axes.x.type; + const { categories, data } = params; + const [category] = categories; + switch (xAxisType) { + case "category": + return this.transformCategoryData(data, category.id); + case "time": + return this.transformTimeData(data, category.id, category.convertTime); + default: + return data; + } + } + getXAxisType(params) { + if (params.grouping) { + return "grouped-category"; + } else if (this.isXAxisOfType(params, "time", (value) => value instanceof Date)) { + return "time"; + } else if (this.isXAxisOfType(params, "number")) { + return "number"; + } + return "category"; + } + isXAxisOfType(params, type, isInstance) { + const [category] = params.categories; + if (category?.chartDataType) { + return category.chartDataType === type; + } + if (!isInstance) { + return false; + } + const testDatum = params.data[0]; + if (!testDatum) { + return false; + } + return isInstance(testDatum[category.id]); + } + transformTimeData(data, categoryKey, convertTime2) { + const firstValue = data[0]?.[categoryKey]; + if (firstValue instanceof Date) { + return data; + } + return data.map((datum) => { + const value = datum[categoryKey]; + return typeof value === "string" ? { + ...datum, + [categoryKey]: convertTime2 ? convertTime2(value) : _parseDateTimeFromString3(value) + } : datum; + }); + } + crossFilteringReset() { + this.crossFilteringSelectedPoints = []; + this.crossFilteringAllPoints.clear(); + } + crossFilteringPointSelected(point) { + return this.crossFilteringSelectedPoints.length == 0 || this.crossFilteringSelectedPoints.includes(point); + } + crossFilteringDeselectedPoints() { + return this.crossFilteringSelectedPoints.length > 0 && this.crossFilteringAllPoints.size !== this.crossFilteringSelectedPoints.length; + } + extractLineAreaCrossFilterSeries(series, params) { + const [category] = params.categories; + const getYKey = (yKey) => { + if (this.standaloneChartType === "area") { + const lastSelectedChartId = params.getCrossFilteringContext().lastSelectedChartId; + return lastSelectedChartId === params.chartId ? yKey + "-total" : yKey; + } + return yKey + "-total"; + }; + return series.map((s2) => { + s2.yKey = getYKey(s2.yKey); + s2.listeners = { + seriesNodeClick: (e) => { + const value = e.datum[s2.xKey]; + const multiSelection = e.event.metaKey || e.event.ctrlKey; + this.crossFilteringAddSelectedPoint(multiSelection, value); + this.crossFilterCallback(e); + } + }; + s2.marker = { + itemStyler: (p) => { + const value = p.datum[category.id]; + const highlighted = p.highlightState === "highlighted-item"; + return { + fill: highlighted ? "yellow" : p.fill, + size: highlighted ? 14 : this.crossFilteringPointSelected(value) ? 8 : 0 + }; + } + }; + if (this.standaloneChartType === "area") { + s2.fillOpacity = this.crossFilteringDeselectedPoints() ? 0.3 : 1; + } + if (this.standaloneChartType === "line") { + s2.strokeOpacity = this.crossFilteringDeselectedPoints() ? 0.3 : 1; + } + return s2; + }); + } + getCrossFilterData(params) { + this.crossFilteringAllPoints.clear(); + const [category] = params.categories; + const colId = params.fields[0].colId; + const filteredOutColId = `${colId}-filtered-out`; + const lastSelectedChartId = params.getCrossFilteringContext().lastSelectedChartId; + return params.data.map((d) => { + const value = d[category.id]; + this.crossFilteringAllPoints.add(value); + const pointSelected = this.crossFilteringPointSelected(value); + if (this.standaloneChartType === "area" && lastSelectedChartId === params.chartId) { + d[`${colId}-total`] = pointSelected ? d[colId] : d[colId] + d[filteredOutColId]; + } + if (this.standaloneChartType === "line") { + d[`${colId}-total`] = pointSelected ? d[colId] : d[colId] + d[filteredOutColId]; + } + return d; + }); + } + crossFilteringAddSelectedPoint(multiSelection, value) { + if (multiSelection) { + this.crossFilteringSelectedPoints.push(value); + } else { + this.crossFilteringSelectedPoints = [value]; + } + } + isHorizontal(commonChartOptions) { + const seriesType = this.standaloneChartType; + if (seriesType !== "waterfall" && seriesType !== "box-plot" && seriesType !== "range-bar") { + return false; + } + const theme = commonChartOptions.theme; + const isHorizontal = (theme2) => { + const direction = theme2?.overrides?.[seriesType]?.series?.direction; + if (direction != null) { + return direction === "horizontal"; + } + if (typeof theme2?.baseTheme === "object") { + return isHorizontal(theme2.baseTheme); + } + return false; + }; + return isHorizontal(theme); + } + getSeriesChartThemeDefaults() { + return { + series: { + highlight: getSeriesHighlight(this.crossFiltering, this.isSingleSeries) + } + }; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/cartesian/histogramChartProxy.ts +var HistogramChartProxy = class extends CartesianChartProxy { + getSeries(params) { + const firstField = params.fields[0]; + return [ + { + type: this.standaloneChartType, + xKey: firstField.colId, + xName: firstField.displayName, + yName: this.chartProxyParams.translate("histogramFrequency"), + areaPlot: false + // only constant width is supported via integrated charts + } + ]; + } + getAxes(_params) { + return { + x: { + type: "number", + position: "bottom" + }, + y: { + type: "number", + position: "left" + } + }; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/cartesian/waterfallChartProxy.ts +var WaterfallChartProxy = class extends CartesianChartProxy { + constructor() { + super(...arguments); + this.isSingleSeries = true; + } + getAxes(params, commonChartOptions) { + const isHorizontal = this.isHorizontal(commonChartOptions); + const crossAxis = isHorizontal ? "y" : "x"; + const valueAxis = isHorizontal ? "x" : "y"; + return { + [crossAxis]: { type: this.getXAxisType(params), position: isHorizontal ? "left" : "bottom" }, + [valueAxis]: { type: "number", position: isHorizontal ? "bottom" : "left" } + }; + } + getSeries(params) { + const [category] = params.categories; + const [firstField] = params.fields; + const firstSeries = { + type: this.standaloneChartType, + xKey: category.id, + xName: category.name, + yKey: firstField.colId, + yName: firstField.displayName ?? void 0 + }; + return [firstSeries]; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/funnel/funnelChartProxy.ts +var FunnelChartProxy = class extends ChartProxy { + getUpdateOptions(params, commonChartOptions) { + return { + ...commonChartOptions, + data: this.transformFunnelCategories(params), + series: this.getSeries(params) + }; + } + transformFunnelCategories(params) { + const { data } = params; + const [{ id }] = params.categories; + return data.map((d, index) => ({ + ...d, + [id]: { + name: d[id], + id: index, + toString: () => String(d[id]) + } + })); + } + getSeriesChartThemeDefaults() { + const config = { + crosshair: { + enabled: false + } + }; + return { + zoom: { + enabled: false + }, + ...this.chartType !== "pyramid" && { + axes: { + category: config, + number: config + } + } + }; + } + getSeries(params) { + const [{ id }] = params.categories; + const [{ colId }] = params.fields; + const series = { + type: this.standaloneChartType, + stageKey: id, + valueKey: colId + }; + return [series]; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/hierarchical/hierarchicalChartProxy.ts +import { GROUP_AUTO_COLUMN_ID as GROUP_AUTO_COLUMN_ID2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/hierarchical/hierarchicalChartUtils.ts +var CATEGORY_LABEL_KEY = "AG-GRID-DEFAULT-LABEL-KEY"; +function createCategoryHierarchy(data, categoryKeys) { + const hierarchy = buildNestedHierarchy(data, getItemDepth, getItemCategoryLabel); + return formatCategoryHierarchy(hierarchy); + function getItemDepth(_item) { + return categoryKeys.length; + } + function getItemCategoryLabel(item, categoryIndex) { + const categoryKey = categoryKeys[categoryIndex]; + const categoryValue = item[categoryKey]; + return getCategoryLabel(categoryValue); + } + function getCategoryLabel(value) { + if (value == null) { + return null; + } + return String(value); + } +} +function createAutoGroupHierarchy(data, getItemLabels) { + const hierarchy = buildNestedHierarchy(data, getItemDepth, getItemGroupLabel); + return formatCategoryHierarchy(hierarchy); + function getItemDepth(item) { + return getItemLabels(item)?.length ?? 0; + } + function getItemGroupLabel(item, groupIndex) { + const labels2 = getItemLabels(item); + return labels2 ? labels2[groupIndex] : labels2; + } +} +function formatCategoryHierarchy(hierarchy, key = null, isChild) { + const { depth, rootValues, value, children: inputChildren } = hierarchy; + if (rootValues) { + return rootValues.map((item) => ({ [CATEGORY_LABEL_KEY]: key, ...item })); + } else if (depth === 0) { + return [{ [CATEGORY_LABEL_KEY]: key, ...value }]; + } + const children = []; + for (const [childKey, childHierarchy] of inputChildren.entries()) { + children.push(...formatCategoryHierarchy(childHierarchy, childKey, true)); + } + return isChild ? [ + { + [CATEGORY_LABEL_KEY]: key, + children, + ...value ?? {} + } + ] : children; +} +function buildNestedHierarchy(data, getItemDepth, getItemGroupKey) { + const hierarchy = { depth: 0, children: /* @__PURE__ */ new Map() }; + for (const item of data) { + const itemDepth = getItemDepth(item); + createNestedItemHierarchy(item, itemDepth, getItemGroupKey, 0, hierarchy); + } + return hierarchy; + function createNestedItemHierarchy(item, itemDepth, getItemGroupKey2, currentDepth, hierarchy2) { + if (currentDepth === itemDepth) { + if (currentDepth === 0) { + if (!hierarchy2.rootValues) { + hierarchy2.rootValues = []; + } + hierarchy2.rootValues.push(item); + } else { + hierarchy2.value = item; + } + return hierarchy2; + } else { + const key = getItemGroupKey2(item, currentDepth); + const existingChildHierarchy = hierarchy2.children.get(key); + const childHierarchy = createNestedItemHierarchy( + item, + itemDepth, + getItemGroupKey2, + currentDepth + 1, + existingChildHierarchy || { depth: 0, children: /* @__PURE__ */ new Map() } + ); + hierarchy2.children.set(key, childHierarchy); + hierarchy2.depth = Math.max(1 + childHierarchy.depth, hierarchy2.depth); + return hierarchy2; + } + } +} + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/hierarchical/hierarchicalChartProxy.ts +var HierarchicalChartProxy = class extends ChartProxy { + getUpdateOptions(params, commonChartOptions) { + const { fields } = params; + const [sizeField, colorField] = fields; + return { + ...commonChartOptions, + series: this.getSeries(sizeField, colorField), + data: this.getData(params, sizeField, colorField) + }; + } + getSeriesChartThemeDefaults() { + return { + gradientLegend: { + gradient: { + preferredLength: 200 + }, + position: "right" + } + }; + } + getSeries(sizeField, colorField) { + return [ + { + type: this.standaloneChartType, + labelKey: CATEGORY_LABEL_KEY, + // Size and color fields are inferred from the range data + sizeKey: sizeField?.colId, + sizeName: sizeField?.displayName ?? void 0, + colorKey: colorField?.colId, + colorName: colorField?.displayName ?? void 0 + } + ]; + } + getData(params, sizeField, colorField) { + const { categories, data, groupData, grouping: isGrouped } = params; + if (isGrouped) { + const processedData = colorField ? data.concat( + groupData?.map((groupDatum) => { + const newDatum = { ...groupDatum }; + delete newDatum[sizeField.colId]; + return newDatum; + }) ?? [] + ) : data; + return createAutoGroupHierarchy( + processedData, + (item) => item[GROUP_AUTO_COLUMN_ID2]?.value ?? null + ); + } else { + const categoryKeys = categories.map(({ id }) => id); + return createCategoryHierarchy(data, categoryKeys); + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/polar/polarChartProxy.ts +var PolarChartProxy = class extends ChartProxy { + getAxes(_) { + const radialBar = this.standaloneChartType === "radial-bar"; + return { + angle: { type: radialBar ? "angle-number" : "angle-category" }, + radius: { type: radialBar ? "radius-category" : "radius-number" } + }; + } + getSeries(params) { + const { fields, categories, seriesGroupType } = params; + const [category] = categories; + const radialBar = this.standaloneChartType === "radial-bar"; + const seriesGroupTypeOptions = this.getSeriesGroupTypeOptions(seriesGroupType); + return fields.map((f) => { + return { + type: this.standaloneChartType, + angleKey: radialBar ? f.colId : category.id, + angleName: radialBar ? f.displayName ?? void 0 : category.name, + radiusKey: radialBar ? category.id : f.colId, + radiusName: radialBar ? category.name : f.displayName ?? void 0, + ...seriesGroupTypeOptions + }; + }); + } + getSeriesGroupType() { + const standaloneChartType = this.standaloneChartType; + if (!["nightingale", "radial-bar", "radial-column"].includes(standaloneChartType)) { + return void 0; + } + const firstSeriesProperties = this.getChart().series?.[0]?.properties.toJson(); + const getStackedValue = () => firstSeriesProperties.normalizedTo ? "normalized" : "stacked"; + if (standaloneChartType === "nightingale") { + return firstSeriesProperties.grouped ? "grouped" : getStackedValue(); + } else { + return firstSeriesProperties.stacked ? getStackedValue() : "grouped"; + } + } + getUpdateOptions(params, commonChartOptions) { + const axes = this.getAxes(params); + return { + ...commonChartOptions, + data: this.getData(params, axes), + axes, + series: this.getSeries(params) + }; + } + getData(params, axes) { + const isCategoryAxis = axes.angle.type === "angle-category" || axes.radius.type === "radius-category"; + if (isCategoryAxis) { + const [category] = params.categories; + return this.transformCategoryData(params.data, category.id); + } else { + return params.data; + } + } + getSeriesGroupTypeOptions(seriesGroupType) { + if (!seriesGroupType) { + return {}; + } + return { + grouped: seriesGroupType === "grouped" || void 0, + stacked: seriesGroupType !== "grouped" || void 0, + normalizedTo: seriesGroupType === "normalized" ? 100 : void 0 + }; + } + getSeriesChartThemeDefaults() { + return { + series: { + highlight: getSeriesHighlight(this.crossFiltering) + } + }; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/specialized/heatmapChartProxy.ts +var HEATMAP_CATEGORY_KEY = "AG-GRID-DEFAULT-HEATMAP-CATEGORY-KEY"; +var HEATMAP_SERIES_KEY = "AG-GRID-DEFAULT-HEATMAP-SERIES-KEY"; +var HEATMAP_VALUE_KEY = "AG-GRID-DEFAULT-HEATMAP-VALUE-KEY"; +function flatMap(items, iteratee) { + return items.reduce((acc, item, index, array) => acc.concat(iteratee(item, index, array)), new Array()); +} +var HeatmapChartProxy = class extends ChartProxy { + getUpdateOptions(params, commonChartOptions) { + const xSeriesKey = HEATMAP_SERIES_KEY; + const xValueKey = HEATMAP_VALUE_KEY; + const yKey = HEATMAP_CATEGORY_KEY; + return { + ...commonChartOptions, + series: this.getSeries(params, xSeriesKey, xValueKey, yKey), + data: this.getData(params, xSeriesKey, xValueKey, yKey) + }; + } + getSeries(params, xSeriesKey, xValueKey, yKey) { + const [category] = params.categories; + return [ + { + type: this.standaloneChartType, + // The axis keys reference synthetic fields based on the category values and series column names + yKey, + xKey: xSeriesKey, + // The color key references a synthetic field based on the series column value for a specific cell + colorKey: xValueKey, + yName: category.name, + // We don't know how to label the 'x' series, as it is a synthetic series created from the set of all input columns + // In future releases we may want to consider inferring the series label from column groupings etc + xName: void 0, + colorName: void 0 + } + ]; + } + getData(params, xSeriesKey, xValueKey, yKey) { + const [category] = params.categories; + return flatMap(params.data, (datum, index) => { + const value = datum[category.id]; + const valueString = value == null ? "" : String(value); + const yValue = { id: index, value, toString: () => valueString }; + return params.fields.map(({ colId, displayName }) => ({ + ...datum, + [xSeriesKey]: displayName, + [xValueKey]: datum[colId], + [yKey]: yValue + })); + }); + } + getSeriesChartThemeDefaults() { + return { + gradientLegend: { + gradient: { + preferredLength: 200 + }, + position: "right" + }, + series: { + tooltip: { + renderer: renderHeatmapTooltip + } + } + }; + } +}; +function renderHeatmapTooltip(params) { + const { xKey, yKey, colorKey, yName, datum } = params; + const table = [ + { label: yName, value: datum[yKey] }, + { label: datum[xKey], value: colorKey && datum[colorKey] } + ]; + return { + title: "", + data: table.map(({ label, value }) => ({ label: String(label), value: String(value) })) + }; +} + +// packages/ag-grid-enterprise/src/charts/chartComp/model/chartDataModel.ts +import { BeanStub as BeanStub89, CellRangeType as CellRangeType3, _normalizeSortType as _normalizeSortType2, isColumnGroupAutoCol as isColumnGroupAutoCol3 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/datasource/chartDatasource.ts +import { + BeanStub as BeanStub86, + GROUP_AUTO_COLUMN_ID as GROUP_AUTO_COLUMN_ID3, + _isClientSideRowModel as _isClientSideRowModel11, + _isServerSideRowModel as _isServerSideRowModel8, + _last as _last18, + _warn as _warn57 +} from "ag-grid-community"; +var ChartDatasource = class extends BeanStub86 { + wireBeans(beans) { + this.sortSvc = beans.sortSvc; + this.gridRowModel = beans.rowModel; + this.colModel = beans.colModel; + this.valueSvc = beans.valueSvc; + this.pivotResultCols = beans.pivotResultCols; + this.rowNodeSorter = beans.rowNodeSorter; + } + getData(params) { + if (params.crossFiltering) { + if (params.grouping) { + _warn57(141); + return { chartData: [], colNames: {} }; + } + if (!_isClientSideRowModel11(this.gos)) { + _warn57(142); + return { chartData: [], colNames: {} }; + } + } + const isServerSide = _isServerSideRowModel8(this.gos); + if (isServerSide && params.pivoting) { + this.updatePivotKeysForSSRM(); + } + const result = this.extractRowsFromGridRowModel(params); + result.chartData = this.aggregateRowsByDimension(params, result.chartData); + return result; + } + extractRowsFromGridRowModel(params) { + const { + crossFiltering, + startRow, + endRow, + valueCols, + dimensionCols, + grouping, + crossFilteringSort, + combineGroupValues + } = params; + let extractedRowData = []; + const colNames = {}; + const groupNodeIndexes = {}; + const groupsToRemove = {}; + let filteredNodes = {}; + let allRowNodes = []; + let numRows; + if (crossFiltering) { + filteredNodes = this.getFilteredRowNodes(); + allRowNodes = this.getAllRowNodes(crossFilteringSort); + numRows = allRowNodes.length; + } else { + const modelLastRow = this.gridRowModel.getRowCount() - 1; + const hasNoRange = startRow === endRow && startRow === 0 && dimensionCols.length === 0 && valueCols.length === 0; + if (hasNoRange) { + numRows = 0; + } else { + const rangeLastRow = endRow >= 0 ? Math.min(endRow, modelLastRow) : modelLastRow; + numRows = rangeLastRow - startRow + 1; + } + } + if (numRows > 0) { + for (const col of valueCols) { + let colNamesArr = []; + const pivotKeys = col.getColDef().pivotKeys; + if (pivotKeys) { + colNamesArr = pivotKeys.slice(); + } + const headerName = col.getColDef().headerName; + if (headerName) { + colNamesArr.push(headerName); + } + if (colNamesArr.length > 0) { + colNames[col.getId()] = colNamesArr; + } + } + } + let numRemovedNodes = 0; + let id = 0; + const groupingCache = {}; + for (let i = 0; i < numRows; i++) { + const rowNode = crossFiltering ? allRowNodes[i] : this.gridRowModel.getRow(i + startRow); + if (rowNode.footer || rowNode.detail) { + numRemovedNodes++; + continue; + } + const data = { node: rowNode }; + for (const col of dimensionCols) { + const colId = col.colId; + const column = this.colModel.getCol(colId); + if (column) { + const valueObject = this.valueSvc.getValue(column, rowNode, "data"); + if (grouping) { + const valueString = valueObject?.toString ? String(valueObject.toString()) : " "; + const labels2 = this.getGroupLabels(rowNode, valueString); + const value = labels2.slice().reverse(); + let groupingValue = { + value, + // this is needed so that standalone can handle animations properly when data updates + id: id++, + toString: () => value.filter(Boolean).join(" - ") + }; + if (combineGroupValues) { + const groupingKey = groupingValue.toString(); + const cachedGroupingValue = groupingCache[groupingKey]; + if (cachedGroupingValue) { + groupingValue = cachedGroupingValue; + } else { + groupingCache[groupingKey] = groupingValue; + } + } + data[colId] = groupingValue; + if (rowNode.group) { + groupNodeIndexes[labels2.toString()] = i - numRemovedNodes; + } + const groupKey = labels2.slice(1, labels2.length).toString(); + if (groupKey) { + groupsToRemove[groupKey] = groupNodeIndexes[groupKey]; + } + } else { + data[colId] = valueObject; + } + } else { + data[DEFAULT_CHART_CATEGORY] = i + 1; + } + } + for (const col of valueCols) { + const colId = col.getColId(); + if (crossFiltering) { + const filteredOutColId = colId + "-filtered-out"; + const value = this.valueSvc.getValue(col, rowNode, "data"); + let actualValue = value; + if (value != null) { + if (typeof value.toNumber === "function") { + actualValue = value.toNumber(); + } else if (typeof value.value === "number") { + actualValue = value.value; + } + } + if (filteredNodes[rowNode.id]) { + data[colId] = actualValue; + data[filteredOutColId] = params.aggFunc || params.isScatter ? void 0 : 0; + } else { + data[colId] = params.aggFunc || params.isScatter ? void 0 : 0; + data[filteredOutColId] = actualValue; + } + } else { + let value = this.valueSvc.getValue(col, rowNode, "data"); + if (value && typeof value.value === "number") { + value = value.value; + } + if (value && Object.prototype.hasOwnProperty.call(value, "toString")) { + value = parseFloat(value.toString()); + } + data[colId] = value != null && typeof value.toNumber === "function" ? value.toNumber() : value; + } + } + extractedRowData.push(data); + } + let groupChartData; + if (grouping) { + const groupIndexesToRemove = Object.values(groupsToRemove); + const allData = extractedRowData; + extractedRowData = []; + groupChartData = []; + for (let i = 0; i < allData.length; i++) { + (groupIndexesToRemove.includes(i) ? groupChartData : extractedRowData).push(allData[i]); + } + } + return { chartData: extractedRowData, colNames, groupChartData }; + } + aggregateRowsByDimension(params, dataFromGrid) { + const dimensionCols = params.dimensionCols; + if (!params.aggFunc || dimensionCols.length === 0) { + return dataFromGrid; + } + const lastCol = _last18(dimensionCols); + const lastColId = lastCol?.colId; + const map = {}; + const dataAggregated = []; + for (const data of dataFromGrid) { + let currentMap = map; + for (const col of dimensionCols) { + const colId = col.colId; + const key = data[colId]; + if (colId === lastColId) { + let groupItem = currentMap[key]; + if (!groupItem) { + groupItem = { __children: [] }; + for (const dimCol of dimensionCols) { + const dimColId = dimCol.colId; + groupItem[dimColId] = data[dimColId]; + } + currentMap[key] = groupItem; + dataAggregated.push(groupItem); + } + groupItem.__children.push(data); + } else { + if (!currentMap[key]) { + currentMap[key] = {}; + } + currentMap = currentMap[key]; + } + } + } + if (this.gos.assertModuleRegistered("SharedAggregation", 1)) { + const aggFuncOrString = params.aggFunc; + const aggFunc = typeof aggFuncOrString === "function" ? aggFuncOrString : typeof aggFuncOrString === "string" ? this.beans.aggFuncSvc.getAggFunc(aggFuncOrString) : null; + if (typeof aggFunc !== "function") { + _warn57(109, { inputValue: String(aggFuncOrString), allSuggestions: [] }); + return dataAggregated; + } + const api = this.beans.gridApi; + const context = this.gos.get("context"); + for (const groupItem of dataAggregated) { + for (const col of params.valueCols) { + const colId = col.getColId(); + if (params.crossFiltering) { + const dataToAgg = groupItem.__children.filter((child) => typeof child[colId] !== "undefined").map((child) => child[colId]); + const aggResult = aggFunc({ + values: dataToAgg, + column: col, + colDef: col.colDef, + pivotResultColumn: void 0, + rowNode: void 0, + data: void 0, + aggregatedChildren: [], + api, + context + }); + groupItem[colId] = aggResult && typeof aggResult.value !== "undefined" ? aggResult.value : aggResult; + const filteredOutColId = `${colId}-filtered-out`; + const dataToAggFiltered = groupItem.__children.filter((child) => typeof child[filteredOutColId] !== "undefined").map((child) => child[filteredOutColId]); + const aggResultFiltered = aggFunc({ + values: dataToAggFiltered, + column: col, + colDef: col.colDef, + pivotResultColumn: void 0, + rowNode: void 0, + data: void 0, + aggregatedChildren: [], + api, + context + }); + groupItem[filteredOutColId] = aggResultFiltered && typeof aggResultFiltered.value !== "undefined" ? aggResultFiltered.value : aggResultFiltered; + } else { + const dataToAgg = groupItem.__children.map((child) => child[colId]); + const aggResult = aggFunc({ + values: dataToAgg, + column: col, + colDef: col.colDef, + pivotResultColumn: void 0, + rowNode: void 0, + data: void 0, + aggregatedChildren: [], + api, + context + }); + groupItem[colId] = aggResult && typeof aggResult.value !== "undefined" ? aggResult.value : aggResult; + } + } + } + } + return dataAggregated; + } + updatePivotKeysForSSRM() { + const secondaryColumns = this.pivotResultCols?.getPivotResultCols()?.list; + if (!secondaryColumns) { + return; + } + const pivotKeySeparator = this.extractPivotKeySeparator(secondaryColumns); + for (const col of secondaryColumns) { + if (pivotKeySeparator === "") { + col.getColDef().pivotKeys = []; + } else { + const keys = col.getColId().split(pivotKeySeparator); + col.getColDef().pivotKeys = keys.slice(0, keys.length - 1); + } + } + } + extractPivotKeySeparator(secondaryColumns) { + if (secondaryColumns.length === 0) { + return ""; + } + const extractSeparator = (columnGroup, childId) => { + const groupId = columnGroup.getGroupId(); + if (!columnGroup.getParent()) { + return childId.split(groupId)[1][0]; + } + return extractSeparator(columnGroup.getParent(), groupId); + }; + const firstSecondaryCol = secondaryColumns[0]; + if (firstSecondaryCol.getParent() == null) { + return ""; + } + return extractSeparator(firstSecondaryCol.getParent(), firstSecondaryCol.getColId()); + } + getGroupLabels(rowNode, initialLabel) { + const labels2 = [initialLabel]; + while (rowNode && rowNode.level !== 0) { + rowNode = rowNode.parent; + if (rowNode) { + if (rowNode.group) { + const groupColumn = this.colModel.getCol(GROUP_AUTO_COLUMN_ID3); + if (groupColumn) { + const valueObject = this.valueSvc.getValue(groupColumn, rowNode, "data"); + const valueString = valueObject?.toString ? String(valueObject.toString()) : " "; + labels2.push(valueString); + } + } else { + labels2.push(rowNode.key); + } + } + } + return labels2; + } + /** cross filtering only */ + getFilteredRowNodes() { + const filteredNodes = {}; + this.gridRowModel.forEachNodeAfterFilterAndSort((rowNode) => { + filteredNodes[rowNode.id] = rowNode; + }); + return filteredNodes; + } + /** cross filtering only */ + getAllRowNodes(sortModel) { + const allRowNodes = []; + this.gridRowModel.forEachNode((rowNode) => { + allRowNodes.push(rowNode); + }); + const rowNodeSorter = this.rowNodeSorter; + if (!rowNodeSorter) { + return allRowNodes; + } + const sortOptions = sortModel === true ? this.sortSvc?.getSortOptions() : sortModel; + if (!sortOptions || sortOptions.length == 0) { + return allRowNodes; + } + return rowNodeSorter.doFullSortInPlace(allRowNodes, sortOptions); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/services/chartColumnService.ts +import { BeanStub as BeanStub87, _getRowNode as _getRowNode8, _warn as _warn58 } from "ag-grid-community"; +var ChartColumnService = class extends BeanStub87 { + constructor() { + super(...arguments); + this.valueColsWithoutSeriesType = /* @__PURE__ */ new Set(); + } + wireBeans(beans) { + this.colModel = beans.colModel; + this.colNames = beans.colNames; + this.valueSvc = beans.valueSvc; + } + postConstruct() { + const clearValueCols = () => this.valueColsWithoutSeriesType.clear(); + this.addManagedEventListeners({ + newColumnsLoaded: clearValueCols, + rowDataUpdated: clearValueCols + }); + } + getColumn(colId) { + return this.colModel.getColDefCol(colId); + } + getAllDisplayedColumns() { + return this.beans.visibleCols.allCols; + } + getColDisplayName(col) { + return this.colNames.getDisplayNameForColumn(col, "chart"); + } + getColGroupDisplayName(colGroup) { + return this.colNames.getDisplayNameForColumnGroup(colGroup, "chart"); + } + getRowGroupColumns() { + return this.beans.rowGroupColsSvc?.columns ?? []; + } + getGroupDisplayColumns() { + return this.beans.showRowGroupCols?.columns ?? []; + } + isPivotMode() { + return this.colModel.isPivotMode(); + } + isPivotActive() { + return this.colModel.isPivotActive(); + } + getChartColumns() { + const gridCols = this.colModel.getCols(); + const dimensionCols = /* @__PURE__ */ new Set(); + const valueCols = /* @__PURE__ */ new Set(); + for (const col of gridCols) { + const colDef = col.getColDef(); + const chartDataType = colDef.chartDataType; + if (chartDataType) { + switch (chartDataType) { + case "category": + case "time": + dimensionCols.add(col); + continue; + case "series": + valueCols.add(col); + continue; + case "excluded": + continue; + default: + _warn58(153, { chartDataType }); + break; + } + } + if (colDef.colId === "ag-Grid-AutoColumn") { + dimensionCols.add(col); + continue; + } + if (!col.isPrimary()) { + valueCols.add(col); + continue; + } + (this.isInferredValueCol(col) ? valueCols : dimensionCols).add(col); + } + return { dimensionCols, valueCols }; + } + isInferredValueCol(col) { + const colId = col.getColId(); + if (colId === "ag-Grid-AutoColumn") { + return false; + } + const row = _getRowNode8(this.beans, { rowIndex: 0, rowPinned: null }); + if (!row) { + return this.valueColsWithoutSeriesType.has(colId); + } + let cellValue = this.valueSvc.getValue(col, row, "data"); + if (cellValue == null) { + cellValue = this.extractLeafData(row, col); + } + if (cellValue != null) { + if (typeof cellValue.toNumber === "function") { + cellValue = cellValue.toNumber(); + } else if (typeof cellValue.value === "number") { + cellValue = cellValue.value; + } + } + const isNumber = typeof cellValue === "number" || col.colDef.cellDataType === "number" || ["series", "time"].includes(col.colDef.chartDataType); + if (isNumber) { + this.valueColsWithoutSeriesType.add(colId); + } else if (cellValue == null && col.colDef.cellDataType !== "number") { + _warn58(265, { colId }); + } + return isNumber; + } + extractLeafData(row, col) { + const value = row.data && this.valueSvc.getValue(col, row, "data"); + if (value != null) { + return value; + } + const childrenAfterGroup = row.childrenAfterGroup; + if (childrenAfterGroup) { + for (let i = 0, len = childrenAfterGroup.length; i < len; ++i) { + const child = childrenAfterGroup[i]; + const result = this.extractLeafData(child, col); + if (result != null) { + return result; + } + } + } + return null; + } + destroy() { + this.valueColsWithoutSeriesType.clear(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/model/comboChartModel.ts +import { BeanStub as BeanStub88, _warn as _warn59 } from "ag-grid-community"; +var SUPPORTED_COMBO_CHART_TYPES = /* @__PURE__ */ new Set(["line", "groupedColumn", "stackedColumn", "area", "stackedArea"]); +var ComboChartModel = class extends BeanStub88 { + constructor(chartDataModel) { + super(); + // this control flag is used to only log warning for the initial user config + this.suppressComboChartWarnings = false; + this.chartDataModel = chartDataModel; + this.seriesChartTypes = chartDataModel.params.seriesChartTypes ?? []; + } + postConstruct() { + this.initComboCharts(); + } + update(seriesChartTypes) { + this.seriesChartTypes = seriesChartTypes ?? this.seriesChartTypes; + this.initComboCharts(); + this.updateSeriesChartTypes(); + } + initComboCharts() { + const seriesChartTypesExist = this.seriesChartTypes && this.seriesChartTypes.length > 0; + const customCombo = this.chartDataModel.chartType === "customCombo" || seriesChartTypesExist; + if (customCombo) { + this.chartDataModel.chartType = "customCombo"; + this.savedCustomSeriesChartTypes = this.seriesChartTypes || []; + } + } + updateSeriesChartTypes() { + if (!this.chartDataModel.isComboChart()) { + return; + } + this.seriesChartTypes = this.seriesChartTypes.map((seriesChartType) => { + const primaryOnly = ["groupedColumn", "stackedColumn", "stackedArea"].includes(seriesChartType.chartType); + seriesChartType.secondaryAxis = primaryOnly ? false : seriesChartType.secondaryAxis; + return seriesChartType; + }); + if (this.chartDataModel.chartType === "customCombo") { + this.updateSeriesChartTypesForCustomCombo(); + return; + } + this.updateChartSeriesTypesForBuiltInCombos(); + } + updateSeriesChartTypesForCustomCombo() { + const seriesChartTypesSupplied = this.seriesChartTypes && this.seriesChartTypes.length > 0; + if (!seriesChartTypesSupplied && !this.suppressComboChartWarnings) { + _warn59(150); + } + this.seriesChartTypes = this.seriesChartTypes.map((s2) => { + if (!SUPPORTED_COMBO_CHART_TYPES.has(s2.chartType)) { + _warn59(151, { chartType: s2.chartType }); + s2.chartType = "line"; + } + return s2; + }); + const getSeriesChartType = (valueCol) => { + if (!this.savedCustomSeriesChartTypes || this.savedCustomSeriesChartTypes.length === 0) { + this.savedCustomSeriesChartTypes = this.seriesChartTypes; + } + const providedSeriesChartType = this.savedCustomSeriesChartTypes.find((s2) => s2.colId === valueCol.colId); + if (!providedSeriesChartType) { + if (valueCol.selected && !this.suppressComboChartWarnings) { + _warn59(152, { colId: valueCol.colId }); + } + return { + colId: valueCol.colId, + chartType: "line", + secondaryAxis: false + }; + } + return providedSeriesChartType; + }; + const updatedSeriesChartTypes = this.chartDataModel.valueColState.map(getSeriesChartType); + this.seriesChartTypes = updatedSeriesChartTypes; + this.savedCustomSeriesChartTypes = updatedSeriesChartTypes; + this.suppressComboChartWarnings = true; + } + updateChartSeriesTypesForBuiltInCombos() { + const { chartType, valueColState } = this.chartDataModel; + const primaryChartType = chartType === "columnLineCombo" ? "groupedColumn" : "stackedArea"; + const secondaryChartType = chartType === "columnLineCombo" ? "line" : "groupedColumn"; + const selectedCols = valueColState.filter((cs) => cs.selected); + const lineIndex = Math.ceil(selectedCols.length / 2); + this.seriesChartTypes = selectedCols.map((valueCol, i) => { + const seriesType = i >= lineIndex ? secondaryChartType : primaryChartType; + return { colId: valueCol.colId, chartType: seriesType, secondaryAxis: false }; + }); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/model/chartDataModel.ts +var DEFAULT_CHART_CATEGORY = "AG-GRID-DEFAULT-CATEGORY"; +var ChartDataModel = class extends BeanStub89 { + constructor(params) { + super(); + this.unlinked = false; + this.chartData = []; + this.valueColState = []; + this.dimensionColState = []; + this.colNames = {}; + this.crossFiltering = false; + this.crossFilteringSort = true; + this.grouping = false; + this.useGroupColumnAsCategory = false; + this.params = params; + this.chartId = params.chartId; + this.setParams(params); + } + wireBeans(beans) { + this.rangeSvc = beans.rangeSvc; + this.chartTranslation = beans.chartTranslation; + } + setParams(params) { + const { + chartType, + pivotChart, + chartThemeName, + switchCategorySeries, + aggFunc, + cellRange, + suppressChartRanges, + unlinkChart, + crossFiltering, + crossFilteringSort, + seriesGroupType, + useGroupColumnAsCategory + } = params; + this.chartType = chartType; + this.pivotChart = pivotChart ?? false; + this.chartThemeName = chartThemeName; + this.switchCategorySeries = !!switchCategorySeries; + this.aggFunc = aggFunc; + this.referenceCellRange = cellRange; + this.suppliedCellRange = cellRange; + this.suppressChartRanges = suppressChartRanges ?? false; + this.unlinked = !!unlinkChart; + this.crossFiltering = !!crossFiltering; + this.crossFilteringSort = crossFilteringSort ?? true; + this.seriesGroupType = seriesGroupType; + this.useGroupColumnAsCategory = !!useGroupColumnAsCategory; + } + postConstruct() { + this.datasource = this.createManagedBean(new ChartDatasource()); + this.chartColSvc = this.createManagedBean(new ChartColumnService()); + this.comboChartModel = this.createManagedBean(new ComboChartModel(this)); + this.updateCellRanges({ setColsFromRange: true }); + this.updateData(); + } + updateModel(params) { + const { cellRange, seriesChartTypes } = params; + if (cellRange !== this.suppliedCellRange) { + this.dimensionCellRange = void 0; + this.valueCellRange = void 0; + } + this.setParams(params); + this.updateSelectedDimensions(cellRange?.columns); + this.updateCellRanges({ setColsFromRange: true }); + const shouldUpdateComboModel = this.isComboChart() || seriesChartTypes; + if (shouldUpdateComboModel) { + this.comboChartModel.update(seriesChartTypes); + } + if (!this.unlinked) { + this.updateData(); + } + } + updateCellRanges(params) { + const { updatedColState, resetOrder, maintainColState, setColsFromRange } = params ?? {}; + if (this.valueCellRange) { + this.referenceCellRange = this.valueCellRange; + } + const { dimensionCols, valueCols } = this.chartColSvc.getChartColumns(); + const allColsFromRanges = this.getAllColumnsFromRanges(); + if (updatedColState) { + this.updateColumnState(updatedColState, resetOrder); + } + this.setDimensionCellRange(dimensionCols, allColsFromRanges, updatedColState); + this.setValueCellRange(valueCols, allColsFromRanges, setColsFromRange); + if (!updatedColState && !maintainColState) { + this.resetColumnState(); + this.syncDimensionCellRange(); + } + this.comboChartModel.updateSeriesChartTypes(); + } + updateData() { + const { startRow, endRow } = this.getRowIndexes(); + if (this.pivotChart) { + this.resetColumnState(); + } + this.grouping = this.isGrouping(); + const params = { + aggFunc: this.aggFunc, + dimensionCols: this.getSelectedDimensions(), + grouping: this.grouping, + pivoting: this.isPivotActive(), + crossFiltering: this.crossFiltering, + crossFilteringSort: this.getCrossFilteringSort(), + valueCols: this.getSelectedValueCols(), + startRow, + endRow, + isScatter: ["scatter", "bubble"].includes(this.chartType), + combineGroupValues: isStatistical(getSeriesType(this.chartType)) + }; + const { chartData, colNames, groupChartData } = this.datasource.getData(params); + this.chartData = chartData; + this.groupChartData = groupChartData; + this.colNames = colNames; + this.categoryAxisType = void 0; + } + isGrouping() { + const usingTreeData = this.gos.get("treeData"); + const groupedCols = usingTreeData ? null : this.chartColSvc.getRowGroupColumns(); + const isGroupActive = usingTreeData || groupedCols && groupedCols.length > 0; + const colIds = this.getSelectedDimensions().map(({ colId }) => colId); + const displayedGroupCols = this.chartColSvc.getGroupDisplayColumns(); + const groupDimensionSelected = displayedGroupCols.map((col) => col.getColId()).some((id) => colIds.includes(id)); + return !!isGroupActive && groupDimensionSelected; + } + getSelectedValueCols() { + return this.valueColState.filter((cs) => cs.selected).map((cs) => cs.column); + } + getSelectedDimensions() { + return this.dimensionColState.filter((cs) => cs.selected); + } + getValueColState() { + return this.valueColState.map(this.displayNameMapper.bind(this)); + } + displayNameMapper(col) { + const { column } = col; + if (column) { + const columnDisplayName = this.getColDisplayName(column); + col.displayName = this.isPivotMode() ? this.getPivotDisplayName(column, columnDisplayName) : columnDisplayName; + } else { + const colNames = this.colNames[col.colId]; + col.displayName = colNames ? colNames.join(" - ") : this.getColDisplayName(column); + } + return col; + } + getPivotDisplayName(column, columnDisplayName) { + let attemptFallbackToColNames = false; + let displayNames = [columnDisplayName]; + const getDisplayName2 = (colGroup) => { + if (!colGroup) { + return; + } + const colGroupName = this.chartColSvc.getColGroupDisplayName(colGroup); + if (colGroupName?.length) { + displayNames.unshift(colGroupName); + getDisplayName2(colGroup.getParent()); + } else { + attemptFallbackToColNames = true; + } + }; + getDisplayName2(column.getParent()); + if (attemptFallbackToColNames) { + const colNames = this.colNames[column.getColId()]; + if (colNames) { + displayNames = colNames; + } + } + return displayNames.join(" - "); + } + getColDisplayName(col) { + return this.chartColSvc.getColDisplayName(col); + } + isPivotMode() { + return this.chartColSvc.isPivotMode(); + } + getChartDataType(colId) { + const column = this.chartColSvc.getColumn(colId); + return column ? column.getColDef().chartDataType : void 0; + } + getConvertTime(colId) { + const column = this.chartColSvc.getColumn(colId); + if (column?.colDef.cellDataType === "dateString") { + return this.beans.dataTypeSvc?.getDateParserFunction(column); + } + return void 0; + } + isPivotActive() { + return this.chartColSvc.isPivotActive(); + } + createCellRange(type, ...columns) { + return { + id: this.chartId, + // set range ID to match chart ID so we can identify changes to the ranges for this chart + startRow: this.referenceCellRange.startRow, + endRow: this.referenceCellRange.endRow, + columns, + startColumn: type === CellRangeType3.DIMENSION || this.referenceCellRange.startColumn == null ? columns[0] : this.referenceCellRange.startColumn, + type + }; + } + getAllColumnsFromRanges() { + if (this.pivotChart) { + return new Set(this.chartColSvc.getAllDisplayedColumns()); + } + const columns = this.dimensionCellRange || this.valueCellRange ? [] : this.referenceCellRange.columns; + if (this.dimensionCellRange) { + columns.push(...this.dimensionCellRange.columns); + } + if (this.valueCellRange) { + columns.push(...this.valueCellRange.columns); + } + return new Set(columns); + } + getRowIndexes() { + let startRow = 0, endRow = 0; + const { rangeSvc, valueCellRange, dimensionCellRange } = this; + const cellRange = valueCellRange || dimensionCellRange; + if (rangeSvc && cellRange) { + startRow = rangeSvc.getRangeStartRow(cellRange).rowIndex; + const endRowPosition = rangeSvc.getRangeEndRow(cellRange); + endRow = endRowPosition.rowPinned === "bottom" ? -1 : endRowPosition.rowIndex; + } + return { startRow, endRow }; + } + resetColumnState() { + const { dimensionCols, valueCols } = this.chartColSvc.getChartColumns(); + const allCols = this.getAllColumnsFromRanges(); + const isInitialising = this.valueColState.length < 1; + this.dimensionColState = []; + this.valueColState = []; + const supportsMultipleDimensions = isHierarchical(getSeriesType(this.chartType)); + let hasSelectedDimension = false; + let order = 1; + const aggFuncDimension = this.suppliedCellRange.columns[0]; + const usingTreeData = this.gos.get("treeData"); + const rowGroupCols = usingTreeData ? null : this.chartColSvc.getRowGroupColumns(); + const groupingActive = usingTreeData || rowGroupCols && rowGroupCols.length > 0; + dimensionCols.forEach((column) => { + const autoGroup = isColumnGroupAutoCol3(column); + const selected = this.crossFiltering && this.aggFunc ? aggFuncDimension.getColId() === column.getColId() : this.useGroupColumnAsCategory && groupingActive && autoGroup || (!hasSelectedDimension || supportsMultipleDimensions) && allCols.has(column); + this.dimensionColState.push({ + column, + colId: column.getColId(), + displayName: this.getColDisplayName(column), + selected, + order: order++ + }); + if (selected) { + hasSelectedDimension = true; + } + }); + const defaultCategory = { + colId: DEFAULT_CHART_CATEGORY, + displayName: this.chartTranslation.translate("defaultCategory"), + selected: !hasSelectedDimension, + // if no dimensions in range select the default + order: 0 + }; + this.dimensionColState.unshift(defaultCategory); + const valueColumnsFromReferenceRange = this.referenceCellRange.columns.filter( + (c) => valueCols.has(c) + ); + valueCols.forEach((column) => { + if (isInitialising && this.referenceCellRange.columns.includes(column)) { + column = valueColumnsFromReferenceRange.shift(); + } + this.valueColState.push({ + column, + colId: column.getColId(), + displayName: this.getColDisplayName(column), + selected: allCols.has(column), + order: order++ + }); + }); + } + updateColumnState(updatedCol, resetOrder) { + const idsMatch = (cs) => cs.colId === updatedCol.colId; + const { dimensionColState, valueColState } = this; + const matchedDimensionColState = dimensionColState.find(idsMatch); + const matchedValueColState = valueColState.find(idsMatch); + if (matchedDimensionColState) { + const supportsMultipleDimensions = isHierarchical(getSeriesType(this.chartType)); + if (!supportsMultipleDimensions) { + const selectedColumnState = updatedCol.selected ? matchedDimensionColState : dimensionColState.filter((cs) => cs !== matchedDimensionColState).find(({ selected }) => selected); + dimensionColState.forEach((cs) => cs.selected = cs === selectedColumnState); + } else { + matchedDimensionColState.selected = updatedCol.selected; + } + } else if (matchedValueColState) { + matchedValueColState.selected = updatedCol.selected; + } + const allColumns = [...dimensionColState, ...valueColState]; + const orderedColIds = []; + if (!resetOrder) { + allColumns.forEach((col, i) => { + if (i === updatedCol.order) { + orderedColIds.push(updatedCol.colId); + } + if (col.colId !== updatedCol.colId) { + orderedColIds.push(col.colId); + } + }); + allColumns.forEach((col) => { + const order = orderedColIds.indexOf(col.colId); + col.order = order >= 0 ? orderedColIds.indexOf(col.colId) : allColumns.length - 1; + }); + } + this.reorderColState(); + } + reorderColState() { + const ascColStateOrder = (a, b) => a.order - b.order; + this.dimensionColState.sort(ascColStateOrder); + this.valueColState.sort(ascColStateOrder); + } + setDimensionCellRange(dimensionCols, colsInRange, updatedColState) { + this.dimensionCellRange = void 0; + const supportsMultipleDimensions = isHierarchical(getSeriesType(this.chartType)); + if (!updatedColState && !this.dimensionColState.length) { + const selectedCols = new Array(); + dimensionCols.forEach((col) => { + if (selectedCols.length > 0 && !supportsMultipleDimensions || !colsInRange.has(col)) { + return; + } + selectedCols.push(col); + }); + if (selectedCols.length > 0) { + this.dimensionCellRange = this.createCellRange(CellRangeType3.DIMENSION, ...selectedCols); + } + return; + } + let selectedDimensionColStates = updatedColState ? [updatedColState] : []; + if (this.crossFiltering && this.aggFunc) { + const aggFuncDimension = this.suppliedCellRange.columns[0]; + selectedDimensionColStates = this.dimensionColState.filter( + (cs) => cs.colId === aggFuncDimension.getColId() + ); + } else if (supportsMultipleDimensions || selectedDimensionColStates.length === 0 || selectedDimensionColStates.some(({ column }) => !column || !dimensionCols.has(column))) { + selectedDimensionColStates = this.dimensionColState.filter((cs) => cs.selected); + } + const isDefaultCategory = selectedDimensionColStates.length === 1 ? selectedDimensionColStates[0].colId === DEFAULT_CHART_CATEGORY : false; + const selectedColumns = selectedDimensionColStates.map(({ column }) => column).filter((value) => value != null); + if (selectedColumns.length > 0 && !isDefaultCategory) { + this.dimensionCellRange = this.createCellRange(CellRangeType3.DIMENSION, ...selectedColumns); + } + } + setValueCellRange(valueCols, colsInRange, setColsFromRange) { + this.valueCellRange = void 0; + const selectedValueCols = []; + const maxSelection = getMaxNumSeries(this.chartType); + let numSelected = 0; + valueCols.forEach((col) => { + if (setColsFromRange) { + if ((maxSelection == null || numSelected < maxSelection) && colsInRange.has(col)) { + selectedValueCols.push(col); + numSelected++; + } + } else if (this.valueColState.some((colState) => colState.selected && colState.colId === col.getColId())) { + selectedValueCols.push(col); + } + }); + if (selectedValueCols.length > 0) { + let orderedColIds = []; + if (this.valueColState.length > 0) { + orderedColIds = this.valueColState.map((c) => c.colId); + } else { + colsInRange.forEach((c) => orderedColIds.push(c.getColId())); + } + selectedValueCols.sort((a, b) => orderedColIds.indexOf(a.getColId()) - orderedColIds.indexOf(b.getColId())); + this.valueCellRange = this.createCellRange(CellRangeType3.VALUE, ...selectedValueCols); + } + } + resetCellRanges(dimension, value) { + if (!dimension && !value) { + return; + } + const { dimensionCols, valueCols } = this.chartColSvc.getChartColumns(); + const allColsFromRanges = this.getAllColumnsFromRanges(); + if (dimension) { + this.setDimensionCellRange(dimensionCols, allColsFromRanges); + } + if (value) { + this.setValueCellRange(valueCols, allColsFromRanges); + } + } + updateSelectedDimensions(columns) { + const colIdSet = new Set(columns.map((column) => column.getColId())); + const supportsMultipleDimensions = isHierarchical(getSeriesType(this.chartType)); + if (!supportsMultipleDimensions) { + const foundColState = this.dimensionColState.find((colState) => colIdSet.has(colState.colId)) || this.dimensionColState[0]; + const selectedColumnId = foundColState.colId; + this.dimensionColState = this.dimensionColState.map((colState) => ({ + ...colState, + selected: colState.colId === selectedColumnId + })); + } else { + const foundColStates = this.dimensionColState.filter((colState) => colIdSet.has(colState.colId)); + const selectedColumnIds = new Set(foundColStates.map((colState) => colState.colId)); + this.dimensionColState = this.dimensionColState.map((colState) => ({ + ...colState, + selected: selectedColumnIds.has(colState.colId) + })); + } + } + syncDimensionCellRange() { + const selectedDimensions = this.getSelectedDimensions(); + if (selectedDimensions.length === 0) { + return; + } + const selectedCols = selectedDimensions.map(({ column }) => column).filter((value) => value != null); + if (selectedCols.length > 0) { + this.dimensionCellRange = this.createCellRange(CellRangeType3.DIMENSION, ...selectedCols); + } + } + isComboChart(chartType) { + return isComboChart(chartType ?? this.chartType); + } + getCrossFilteringSort() { + const sort = this.crossFilteringSort; + if (typeof sort === "boolean") { + return sort; + } + const sortOptions = []; + sort.forEach(({ sort: sort2, colId }) => { + const column = this.chartColSvc.getColumn(colId); + if (column) { + sortOptions.push({ + sort: sort2, + column, + type: _normalizeSortType2(column.getSortDef()?.type) + }); + } + }); + return sortOptions; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/statistical/statisticalChartProxy.ts +var StatisticalChartProxy = class extends CartesianChartProxy { + getAxes(params, commonChartOptions) { + return { + x: { + type: this.getXAxisType(params), + position: this.isHorizontal(commonChartOptions) ? "left" : "bottom" + }, + y: { + type: "number", + position: this.isHorizontal(commonChartOptions) ? "bottom" : "left" + } + }; + } + computeSeriesStatistics(params, computeStatsFn) { + const { data, fields } = params; + const [category] = params.categories; + const categoryKey = category.id || DEFAULT_CHART_CATEGORY; + const groupedData = this.groupDataByCategory(categoryKey, data); + return Array.from(groupedData).map(([categoryValue, categoryData]) => { + const categoryResult = { [category.id]: categoryValue }; + fields.forEach((field, seriesIndex) => { + const seriesValues = categoryData.map((datum) => datum[field.colId]).filter((value) => typeof value === "number" && !isNaN(value)); + const computed = computeStatsFn(seriesValues); + for (const statKey of Object.keys(computed)) { + const propertyKey = `${statKey}:${seriesIndex}`; + categoryResult[propertyKey] = seriesValues.length > 0 ? computed[statKey] : null; + } + }); + return categoryResult; + }); + } + groupDataByCategory(categoryKey, data) { + const getCategory = (datum) => { + if (categoryKey === DEFAULT_CHART_CATEGORY) { + return 1; + } + const categoryValue = datum[categoryKey]; + if (categoryValue === null || categoryValue === void 0) { + return ""; + } + return categoryValue instanceof Date ? categoryValue.getTime() : categoryValue; + }; + return data.reduce((acc, datum) => { + const category = getCategory(datum); + const existingCategoryData = acc.get(category); + if (existingCategoryData) { + existingCategoryData.push(datum); + } else { + acc.set(category, [datum]); + } + return acc; + }, /* @__PURE__ */ new Map()); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/statistical/boxPlotChartProxy.ts +var BoxPlotChartProxy = class extends StatisticalChartProxy { + getSeries(params) { + const [category] = params.categories; + return params.fields.map((field, seriesIndex) => ({ + type: this.standaloneChartType, + // xKey/xName refer to category buckets + xKey: category.id, + xName: category.name, + // yName is used to label the series + yName: field.displayName ?? void 0, + // custom field labels shown in the tooltip + minName: "Min", + q1Name: "Q1", + medianName: "Median", + q3Name: "Q3", + maxName: "Max", + // generated 'synthetic fields' from getData() + minKey: `min:${seriesIndex}`, + q1Key: `q1:${seriesIndex}`, + medianKey: `median:${seriesIndex}`, + q3Key: `q3:${seriesIndex}`, + maxKey: `max:${seriesIndex}` + })); + } + getData(params) { + return this.computeSeriesStatistics(params, (seriesValues) => { + const sortedValues = seriesValues.sort((a, b) => a - b); + return { + min: sortedValues[0], + q1: this.quantile(sortedValues, 0.25), + median: this.quantile(sortedValues, 0.5), + q3: this.quantile(sortedValues, 0.75), + max: sortedValues[sortedValues.length - 1] + }; + }); + } + quantile(sortedValues, q) { + const position = (sortedValues.length - 1) * q; + const indexBelow = Math.floor(position); + const aboveValue = position - indexBelow; + if (sortedValues[indexBelow + 1] !== void 0) { + return sortedValues[indexBelow] + aboveValue * (sortedValues[indexBelow + 1] - sortedValues[indexBelow]); + } + return sortedValues[indexBelow]; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/statistical/rangeChartProxy.ts +var RangeChartProxy = class extends StatisticalChartProxy { + getSeries(params) { + const [category] = params.categories; + return params.fields.map((field, seriesIndex) => ({ + type: this.standaloneChartType, + // xKey/xName refer to category buckets + xKey: category.id, + xName: category.name, + // yName is used to label the series + yName: field.displayName ?? void 0, + // custom field labels shown in the tooltip + yLowName: "Min", + yHighName: "Max", + // generated 'synthetic fields' from getData() + yLowKey: `min:${seriesIndex}`, + yHighKey: `max:${seriesIndex}` + })); + } + getData(params) { + return this.computeSeriesStatistics(params, (seriesValues) => { + return { + min: Math.min(...seriesValues), + max: Math.max(...seriesValues) + }; + }); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/enterpriseChartProxyFactory.ts +var EnterpriseChartProxyFactory = class extends BeanStub90 { + constructor() { + super(...arguments); + this.beanName = "enterpriseChartProxyFactory"; + } + createChartProxy(chartProxyParams) { + switch (chartProxyParams.chartType) { + case "histogram": + return new HistogramChartProxy(chartProxyParams); + case "radarLine": + case "radarArea": + case "nightingale": + case "radialColumn": + case "radialBar": + return new PolarChartProxy(chartProxyParams); + case "rangeBar": + case "rangeArea": + return new RangeChartProxy(chartProxyParams); + case "boxPlot": + return new BoxPlotChartProxy(chartProxyParams); + case "treemap": + case "sunburst": + return new HierarchicalChartProxy(chartProxyParams); + case "heatmap": + return new HeatmapChartProxy(chartProxyParams); + case "waterfall": + return new WaterfallChartProxy(chartProxyParams); + case "funnel": + case "coneFunnel": + case "pyramid": + return new FunnelChartProxy(chartProxyParams); + } + return void 0; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/advancedSettings/advancedSettingsMenuFactory.ts +import { BeanStub as BeanStub92, TabGuardComp as TabGuardComp4, _findFocusableElements as _findFocusableElements4, _findNextFocusableElement as _findNextFocusableElement8 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/advancedSettings/advancedSettingsPanel.ts +import { Component as Component61 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/chartPanelFeature.ts +import { BeanStub as BeanStub91, _removeFromParent as _removeFromParent11 } from "ag-grid-community"; +var ChartPanelFeature = class extends BeanStub91 { + constructor(chartController, eGui, cssClass, createPanels) { + super(); + this.chartController = chartController; + this.eGui = eGui; + this.cssClass = cssClass; + this.createPanels = createPanels; + this.panels = []; + } + postConstruct() { + this.addManagedListeners(this.chartController, { + chartUpdated: () => this.refreshPanels(true), + chartApiUpdate: () => this.refreshPanels(false) + }); + } + addComponent(component) { + this.createBean(component); + this.panels.push(component); + component.addCss(this.cssClass); + this.eGui.appendChild(component.getGui()); + } + refreshPanels(reuse) { + const chartType = this.chartController.getChartType(); + const isGrouping = this.chartController.isGrouping(); + const seriesType = getSeriesType(chartType); + if (reuse && chartType === this.chartType && isGrouping === this.isGrouping) { + return; + } + this.destroyPanels(); + this.createPanels(chartType, seriesType); + this.chartType = chartType; + this.isGrouping = isGrouping; + } + destroyPanels() { + for (const panel of this.panels) { + _removeFromParent11(panel.getGui()); + this.destroyBean(panel); + } + this.panels = []; + } + destroy() { + this.destroyPanels(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/advancedSettings/interactivity/animationPanel.ts +import { AgInputNumberFieldSelector as AgInputNumberFieldSelector2, Component as Component57 } from "ag-grid-community"; +var AnimationPanel = class extends Component57 { + constructor(chartMenuParamsFactory) { + super(); + this.chartMenuParamsFactory = chartMenuParamsFactory; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const animationGroupParams = this.chartMenuParamsFactory.addEnableParams( + "animation.enabled", + { + cssIdentifier: "charts-advanced-settings-top-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("animation"), + suppressEnabledCheckbox: true, + useToggle: true + } + ); + const animationHeightInputParams = this.chartMenuParamsFactory.getDefaultNumberInputParams( + "animation.duration", + "durationMillis", + { + min: 0 + } + ); + this.setTemplate( + /* html */ + `
+ + + +
`, + [AgGroupComponentSelector, AgInputNumberFieldSelector2], + { + animationGroup: animationGroupParams, + animationHeightInput: animationHeightInputParams + } + ); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/advancedSettings/interactivity/crosshairPanel.ts +import { AgCheckboxSelector as AgCheckboxSelector6, Component as Component58 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/widgets/colorPicker.ts +var ColorPicker = class extends AgColorPicker { + constructor(config) { + super({ + ...config, + dialogCallbacks: DIALOG_CALLBACKS + }); + } +}; +var ColorPickerSelector = { + selector: "AG-COLOR-PICKER", + component: ColorPicker +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/advancedSettings/interactivity/crosshairPanel.ts +var CrosshairPanel = class extends Component58 { + constructor(chartMenuParamsFactory) { + super(); + this.chartMenuParamsFactory = chartMenuParamsFactory; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const crosshairGroupParams = this.chartMenuParamsFactory.addEnableParams( + "crosshair.enabled", + { + cssIdentifier: "charts-advanced-settings-top-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("crosshair"), + suppressEnabledCheckbox: true, + useToggle: true + } + ); + const crosshairLabelCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams( + "crosshair.label.enabled", + "crosshairLabel" + ); + const crosshairSnapCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams( + "crosshair.snap", + "crosshairSnap" + ); + const crosshairStrokeColorPickerParams = this.chartMenuParamsFactory.getDefaultColorPickerParams( + "crosshair.stroke", + "color" + ); + this.setTemplate( + /* html */ + `
+ + + + + +
`, + [AgGroupComponentSelector, AgCheckboxSelector6, ColorPickerSelector], + { + crosshairGroup: crosshairGroupParams, + crosshairLabelCheckbox: crosshairLabelCheckboxParams, + crosshairSnapCheckbox: crosshairSnapCheckboxParams, + crosshairStrokeColorPicker: crosshairStrokeColorPickerParams + } + ); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/advancedSettings/interactivity/navigatorPanel.ts +import { AgCheckboxSelector as AgCheckboxSelector7, Component as Component59 } from "ag-grid-community"; +var NavigatorPanel = class extends Component59 { + constructor(chartMenuParamsFactory) { + super(); + this.chartMenuParamsFactory = chartMenuParamsFactory; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const navigatorGroupParams = this.chartMenuParamsFactory.addEnableParams( + "navigator.enabled", + { + cssIdentifier: "charts-advanced-settings-top-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("navigator"), + suppressEnabledCheckbox: true, + useToggle: true + } + ); + const navigatorHeightSliderParams = this.chartMenuParamsFactory.getDefaultSliderParams( + "navigator.height", + "height", + 60 + ); + navigatorHeightSliderParams.minValue = 10; + const navigatorMiniChartCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams( + "navigator.miniChart.enabled", + "miniChart" + ); + this.setTemplate( + /* html */ + `
+ + + + +
`, + [AgGroupComponentSelector, AgSliderSelector, AgCheckboxSelector7], + { + navigatorGroup: navigatorGroupParams, + navigatorHeightSlider: navigatorHeightSliderParams, + navigatorMiniChartCheckbox: navigatorMiniChartCheckboxParams + } + ); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/advancedSettings/interactivity/zoomPanel.ts +import { AgCheckboxSelector as AgCheckboxSelector8, Component as Component60, RefPlaceholder as RefPlaceholder49 } from "ag-grid-community"; +var ZoomPanel = class extends Component60 { + constructor(chartMenuParamsFactory) { + super(); + this.chartMenuParamsFactory = chartMenuParamsFactory; + this.zoomScrollingStepInput = RefPlaceholder49; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const zoomGroupParams = this.chartMenuParamsFactory.addEnableParams("zoom.enabled", { + cssIdentifier: "charts-advanced-settings-top-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("zoom"), + suppressEnabledCheckbox: true, + useToggle: true + }); + const zoomScrollingCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams( + "zoom.enableScrolling", + "scrollingZoom" + ); + const zoomScrollingStepSliderParams = this.chartMenuParamsFactory.getDefaultSliderParams( + "zoom.scrollingStep", + "scrollingStep", + 1 + ); + zoomScrollingStepSliderParams.step = 0.01; + zoomScrollingStepSliderParams.minValue = zoomScrollingStepSliderParams.step; + const zoomSelectingCheckboxParams = this.chartMenuParamsFactory.getDefaultCheckboxParams( + "zoom.enableSelecting", + "selectingZoom" + ); + zoomScrollingCheckboxParams.onValueChange = /* @__PURE__ */ ((onValueChange) => (value) => { + if (!onValueChange) { + return; + } + onValueChange(value); + this.zoomScrollingStepInput.setDisabled(!value); + })(zoomScrollingCheckboxParams.onValueChange); + this.setTemplate( + /* html */ + `
+ + + + + +
`, + [AgGroupComponentSelector, AgCheckboxSelector8, AgSliderSelector], + { + zoomGroup: zoomGroupParams, + zoomScrollingCheckbox: zoomScrollingCheckboxParams, + zoomScrollingStepInput: zoomScrollingStepSliderParams, + zoomSelectingCheckbox: zoomSelectingCheckboxParams + } + ); + this.zoomScrollingStepInput.setDisabled(!zoomScrollingCheckboxParams.value); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/advancedSettings/advancedSettingsPanel.ts +var INTERACTIVITY_GROUPS = ["navigator", "zoom", "animation", "crosshair"]; +var AdvancedSettingsPanel = class extends Component61 { + constructor(chartMenuContext) { + super( + /* html */ + `
` + ); + this.chartMenuContext = chartMenuContext; + } + postConstruct() { + this.chartPanelFeature = this.createManagedBean( + new ChartPanelFeature( + this.chartMenuContext.chartController, + this.getGui(), + "ag-chart-advanced-settings-section", + (chartType, seriesType) => this.createPanels(chartType, seriesType) + ) + ); + this.chartPanelFeature.refreshPanels(); + } + createPanels(chartType, seriesType) { + for (const group of INTERACTIVITY_GROUPS) { + if (!this.isGroupPanelShownForSeries(group, seriesType)) { + continue; + } + const comp = this.createPanel(group); + this.chartPanelFeature.addComponent(comp); + } + } + isGroupPanelShownForSeries(group, seriesType) { + return group === "animation" || isCartesian(seriesType) && !isFunnel(seriesType); + } + createPanel(group) { + const { chartMenuParamsFactory, chartAxisMenuParamsFactory } = this.chartMenuContext; + switch (group) { + case "navigator": + return new NavigatorPanel(chartMenuParamsFactory); + case "zoom": + return new ZoomPanel(chartMenuParamsFactory); + case "animation": + return new AnimationPanel(chartMenuParamsFactory); + case "crosshair": + return new CrosshairPanel(chartAxisMenuParamsFactory); + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/advancedSettings/advancedSettingsMenuFactory.ts +var AdvancedSettingsMenuFactory = class extends BeanStub92 { + constructor() { + super(...arguments); + this.beanName = "advSettingsMenuFactory"; + } + showMenu(chartMenuContext, eventSource) { + this.hideMenu(); + const menu = this.createBean(new AdvancedSettingsMenu(chartMenuContext)); + this.activeDialog = this.createBean( + new Dialog({ + title: this.beans.chartTranslation.translate("advancedSettings"), + component: menu, + width: 300, + height: 400, + resizable: true, + movable: true, + centered: true, + closable: true, + afterGuiAttached: () => { + _findFocusableElements4(menu.getGui())[0]?.focus(); + }, + closedCallback: () => { + this.activeMenu = this.destroyBean(this.activeMenu); + this.activeDialog = void 0; + eventSource?.focus({ preventScroll: true }); + } + }) + ); + this.activeMenu = menu; + } + hideMenu() { + if (this.activeDialog) { + this.destroyBean(this.activeDialog); + } + } + destroy() { + this.activeMenu = this.destroyBean(this.activeMenu); + this.activeDialog = this.destroyBean(this.activeDialog); + super.destroy(); + } +}; +var AdvancedSettingsMenu = class extends TabGuardComp4 { + constructor(chartMenuContext) { + super( + /* html */ + `
` + ); + this.chartMenuContext = chartMenuContext; + } + postConstruct() { + this.advancedSettingsPanel = this.createManagedBean(new AdvancedSettingsPanel(this.chartMenuContext)); + this.getGui().appendChild(this.advancedSettingsPanel.getGui()); + this.initialiseTabGuard({ + onTabKeyDown: this.onTabKeyDown.bind(this), + focusTrapActive: true + }); + } + onTabKeyDown(e) { + if (e.defaultPrevented) { + return; + } + e.preventDefault(); + const backwards = e.shiftKey; + const panelGui = this.advancedSettingsPanel.getGui(); + const nextEl = _findNextFocusableElement8(this.beans, panelGui, false, backwards); + if (nextEl) { + nextEl.focus(); + } else { + const focusableElements = _findFocusableElements4(panelGui); + if (focusableElements.length) { + focusableElements[backwards ? focusableElements.length - 1 : 0].focus(); + } + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/chartMenuList.ts +import { + BeanStub as BeanStub93, + Component as Component62, + RefPlaceholder as RefPlaceholder50, + _addGridCommonParams as _addGridCommonParams28, + _createIconNoSpan as _createIconNoSpan25, + _focusInto as _focusInto10, + _isNothingFocused as _isNothingFocused5 +} from "ag-grid-community"; +var ChartMenuListFactory = class extends BeanStub93 { + constructor() { + super(...arguments); + this.beanName = "chartMenuListFactory"; + } + wireBeans(beans) { + this.popupSvc = beans.popupSvc; + this.chartMenuSvc = beans.chartMenuSvc; + this.chartTranslation = beans.chartTranslation; + } + showMenuList(params) { + const { eventSource, showMenu, chartMenuContext, closeOnElementClick } = params; + const areChartToolPanelsEnabled = this.chartMenuSvc.doChartToolPanelsExist(chartMenuContext.chartController); + const menuItems = this.mapWithStockItems( + this.getMenuItems(chartMenuContext.chartController, areChartToolPanelsEnabled), + chartMenuContext, + showMenu, + eventSource, + areChartToolPanelsEnabled + ); + if (!menuItems.length) { + return; + } + const chartMenuList = this.createBean(new ChartMenuList(menuItems)); + this.activeChartMenuList = chartMenuList; + let multiplier = -1; + let alignSide = "left"; + if (this.gos.get("enableRtl")) { + multiplier = 1; + alignSide = "right"; + } + const eGui = chartMenuList.getGui(); + this.popupSvc.addPopup({ + modal: true, + eChild: eGui, + closeOnEsc: true, + alwaysOnTop: true, + closedCallback: () => { + this.destroyBean(chartMenuList); + this.activeChartMenuList = void 0; + if (_isNothingFocused5(this.beans)) { + eventSource.focus({ preventScroll: true }); + } + }, + afterGuiAttached: (params2) => { + chartMenuList.afterGuiAttached(params2, closeOnElementClick); + }, + positionCallback: () => { + { + this.popupSvc.positionPopupByComponent({ + type: "chartMenu", + eventSource, + ePopup: eGui, + alignSide, + nudgeX: 4 * multiplier, + nudgeY: 4, + position: "under", + keepWithinBounds: true + }); + } + }, + ariaLabel: "Chart Menu" + }); + } + getMenuItems(chartController, areChartToolPanelsEnabled) { + const defaultItems = [ + ...areChartToolPanelsEnabled ? ["chartEdit"] : [], + ...chartController.isEnterprise() ? ["chartAdvancedSettings"] : [], + chartController.isChartLinked() ? "chartUnlink" : "chartLink", + "chartDownload" + ]; + const chartMenuItems = this.gos.get("chartMenuItems"); + if (!chartMenuItems) { + return defaultItems; + } else if (Array.isArray(chartMenuItems)) { + return chartMenuItems; + } else { + return chartMenuItems( + _addGridCommonParams28(this.gos, { + defaultItems, + chartId: chartController.getChartId() + }) + ); + } + } + mapWithStockItems(originalList, chartMenuContext, showMenu, eventSource, areChartToolPanelsEnabled) { + if (!originalList) { + return []; + } + const resultList = []; + for (const menuItemOrString of originalList) { + let result; + if (typeof menuItemOrString === "string") { + result = this.getStockMenuItem( + menuItemOrString, + chartMenuContext, + showMenu, + eventSource, + areChartToolPanelsEnabled + ); + } else { + result = { ...menuItemOrString }; + } + if (!result) { + continue; + } + const { subMenu } = result; + if (Array.isArray(subMenu)) { + result.subMenu = this.mapWithStockItems( + subMenu, + chartMenuContext, + showMenu, + eventSource, + areChartToolPanelsEnabled + ); + } + resultList.push(result); + } + return resultList; + } + getStockMenuItem(key, chartMenuContext, showMenu, eventSource, areChartToolPanelsEnabled) { + switch (key) { + case "chartEdit": + return areChartToolPanelsEnabled ? this.createMenuItem(this.chartTranslation.translate("chartEdit"), "chartsMenuEdit", showMenu) : null; + case "chartAdvancedSettings": + return this.createMenuItem( + this.chartTranslation.translate("chartAdvancedSettings"), + "chartsMenuAdvancedSettings", + () => this.chartMenuSvc.openAdvancedSettings(chartMenuContext, eventSource) + ); + case "chartUnlink": + return chartMenuContext.chartController.isChartLinked() ? this.createMenuItem( + this.chartTranslation.translate("chartUnlink"), + "unlinked", + () => this.chartMenuSvc.toggleLinked(chartMenuContext) + ) : null; + case "chartLink": + return !chartMenuContext.chartController.isChartLinked() ? this.createMenuItem( + this.chartTranslation.translate("chartLink"), + "linked", + () => this.chartMenuSvc.toggleLinked(chartMenuContext) + ) : null; + case "chartDownload": + return this.createMenuItem( + this.chartTranslation.translate("chartDownload"), + "chartsDownload", + () => this.chartMenuSvc.downloadChart(chartMenuContext) + ); + } + return null; + } + createMenuItem(name, iconName, action) { + return { + name, + icon: _createIconNoSpan25(iconName, this.beans, null), + action + }; + } + destroy() { + this.destroyBean(this.activeChartMenuList); + super.destroy(); + } +}; +var ChartMenuList = class extends Component62 { + constructor(menuItems) { + super( + /* html */ + ` + + ` + ); + this.menuItems = menuItems; + this.eChartsMenu = RefPlaceholder50; + } + postConstruct() { + this.mainMenuList = this.createManagedBean(new MenuList(0)); + this.mainMenuList.addMenuItems(this.menuItems); + this.mainMenuList.addEventListener("closeMenu", this.onHidePopup.bind(this)); + this.eChartsMenu.appendChild(this.mainMenuList.getGui()); + } + onHidePopup() { + this.hidePopupFunc?.(); + } + afterGuiAttached({ hidePopup }, closeOnElementClick) { + const time = Date.now(); + if (hidePopup) { + this.hidePopupFunc = hidePopup; + this.addDestroyFunc(hidePopup); + if (closeOnElementClick) { + const clickListener = () => { + if (Date.now() - time < 500) { + return; + } + this.hidePopupFunc(); + }; + closeOnElementClick.addEventListener("click", clickListener); + this.addDestroyFunc(() => { + closeOnElementClick?.removeEventListener("click", clickListener); + }); + } + } + _focusInto10(this.mainMenuList.getGui()); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/services/chartCrossFilterService.ts +import { BeanStub as BeanStub94, _warn as _warn60 } from "ag-grid-community"; +var ChartCrossFilterService = class extends BeanStub94 { + constructor() { + super(...arguments); + this.beanName = "chartCrossFilterSvc"; + } + filter(event, reset = false) { + const filterManager = this.beans.filterManager; + const filterModel = filterManager?.getFilterModel() ?? {}; + if (reset) { + if (Object.keys(filterModel).length > 0) { + filterManager?.setFilterModel(null); + } + return; + } + let colId = extractFilterColId(event); + if (colId.indexOf("-filtered-out")) { + colId = colId.replace("-filtered-out", ""); + } + this.updateFilters(filterModel, event, colId); + } + updateFilters(filterModel, event, colId) { + const dataKey = extractFilterColId(event); + const rawValue = this.convertRawValue(colId, event.datum[dataKey]); + if (rawValue === void 0) { + return; + } + const filterManager = this.beans.filterManager; + filterManager?.getColumnFilterInstance(colId).then((filter) => { + const filterType = filter?.filterType; + let setFilter; + let processModel = (model) => model; + if (filterType === "multi") { + const result = extractFromMultiFilter(filter); + setFilter = result.setFilter; + processModel = result.processModel ?? processModel; + } else if (filterType === "set") { + setFilter = filter; + } + if (!setFilter) { + _warn60(154, { colId }); + return; + } + const update = event.event.metaKey || event.event.ctrlKey; + const setFilterModel = setFilter.getFilterHandler().getCrossFilterModel( + (createKey, availableKeys, existingValues) => getSetFilterModel(update, createKey(rawValue), availableKeys, existingValues) + ); + const colFilterModel = processModel(setFilterModel); + const newFilterModel = update ? { ...filterModel } : {}; + newFilterModel[colId] = colFilterModel; + filterManager?.setFilterModel(newFilterModel); + }); + } + convertRawValue(colId, rawValue) { + const { colModel, dataTypeSvc } = this.beans; + const column = colModel.getColById(colId); + const colDef = column?.colDef; + if (colDef && dataTypeSvc && colDef.chartDataType === "time" && colDef.cellDataType === "dateString") { + return dataTypeSvc.getDateFormatterFunction(column)(rawValue); + } + return rawValue; + } +}; +function processMultiFilterModel(setFilterModel, index, numFilters) { + const filterModels = new Array(numFilters); + for (let i = 0; i < numFilters; i++) { + filterModels[i] = i === index ? setFilterModel : null; + } + return { filterType: "multi", filterModels }; +} +function extractFromMultiFilter(multiFilter) { + const numFilters = multiFilter.getNumChildFilters(); + for (let i = 0; i < numFilters; i++) { + const childFilter = multiFilter.getChildFilterInstance(i); + if (childFilter?.filterType === "set") { + return { + setFilter: childFilter, + processModel: (model) => processMultiFilterModel(model, i, numFilters) + }; + } + } + return {}; +} +function extractFilterColId(event) { + return event.xKey || event.calloutLabelKey; +} +function getSetFilterModel(update, key, availableKeySet, existingValues) { + let values; + if (update) { + if (availableKeySet.has(key) && (existingValues == null || existingValues.includes(key))) { + values = []; + if (existingValues == null) { + for (const availableKey of availableKeySet) { + if (availableKey !== key) { + values.push(availableKey); + } + } + } else { + for (const existingValue of existingValues) { + if (existingValue !== key && availableKeySet.has(existingValue)) { + values.push(existingValue); + } + } + } + } else { + if (existingValues == null) { + values = Array.from(availableKeySet); + } else { + values = []; + for (const existingValue of existingValues) { + if (availableKeySet.has(existingValue)) { + values.push(existingValue); + } + } + } + values.push(key); + } + } else { + values = [key]; + } + return { + filterType: "set", + values + }; +} + +// packages/ag-grid-enterprise/src/charts/chartComp/services/chartMenuService.ts +import { BeanStub as BeanStub95, _warn as _warn61 } from "ag-grid-community"; +var CHART_TOOLBAR_ALLOW_LIST = [ + "chartUnlink", + "chartLink", + "chartDownload", + "chartMenu" +]; +var CHART_TOOL_PANEL_MENU_OPTIONS = { + settings: "chartSettings", + data: "chartData", + format: "chartFormat" +}; +var ChartMenuService = class extends BeanStub95 { + constructor() { + super(...arguments); + this.beanName = "chartMenuSvc"; + } + wireBeans(beans) { + this.advSettingsMenuFactory = beans.advSettingsMenuFactory; + } + downloadChart(chartMenuContext, dimensions, fileName, fileFormat) { + chartMenuContext.chartController.getChartProxy().downloadChart(dimensions, fileName, fileFormat); + } + toggleLinked(chartMenuContext) { + chartMenuContext.chartController.detachChartRange(); + } + openAdvancedSettings(chartMenuContext, eventSource) { + this.advSettingsMenuFactory?.showMenu(chartMenuContext, eventSource); + } + hideAdvancedSettings() { + this.advSettingsMenuFactory?.hideMenu(); + } + getChartToolbarOptions() { + const defaultChartToolbarOptions = ["chartMenu"]; + const toolbarItemsFunc = this.gos.getCallback("getChartToolbarItems"); + const params = { + defaultItems: defaultChartToolbarOptions + }; + return toolbarItemsFunc ? toolbarItemsFunc(params).filter((option) => { + if (!CHART_TOOLBAR_ALLOW_LIST.includes(option)) { + _warn61(155, { option }); + return false; + } + return true; + }) : defaultChartToolbarOptions; + } + getChartToolPanels(chartController) { + const chartToolPanelsDef = this.gos.get("chartToolPanelsDef"); + const panelsOverride = chartToolPanelsDef?.panels?.map((panel) => { + const menuOption = CHART_TOOL_PANEL_MENU_OPTIONS[panel]; + if (!menuOption) { + _warn61(156, { panel }); + } + return menuOption; + }).filter((panel) => Boolean(panel)); + let panels = panelsOverride ?? Object.values(CHART_TOOL_PANEL_MENU_OPTIONS); + if (chartController.isPivotChart()) { + panels = panels.filter((panel) => panel !== "chartData"); + } + const defaultToolPanel = chartToolPanelsDef?.defaultToolPanel; + const defaultPanel = defaultToolPanel && CHART_TOOL_PANEL_MENU_OPTIONS[defaultToolPanel] || panels[0]; + return { + panels, + defaultPanel + }; + } + doesChartToolbarExist() { + const chartToolbarOptions = this.getChartToolbarOptions(); + return chartToolbarOptions.length > 0; + } + doChartToolPanelsExist(chartController) { + const { panels } = this.getChartToolPanels(chartController); + return panels.length > 0; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/services/chartTranslationService.ts +import { BeanStub as BeanStub96 } from "ag-grid-community"; +var DEFAULT_CHART_TRANSLATIONS = { + pivotChartTitle: "Pivot Chart", + rangeChartTitle: "Range Chart", + settings: "Chart", + data: "Set Up", + format: "Customize", + categories: "Categories", + defaultCategory: "(None)", + series: "Series", + switchCategorySeries: "Switch Category / Series", + categoryValues: "Category Values", + seriesLabels: "Series Labels", + aggregate: "Aggregate", + xyValues: "X Y Values", + paired: "Paired Mode", + axis: "Axis", + xAxis: "Horizontal Axis", + yAxis: "Vertical Axis", + polarAxis: "Polar Axis", + radiusAxis: "Radius Axis", + navigator: "Navigator", + zoom: "Zoom", + animation: "Animation", + crosshair: "Crosshair", + color: "Color", + thickness: "Thickness", + preferredLength: "Preferred Length", + xType: "X Type", + axisType: "Axis Type", + automatic: "Automatic", + category: "Category", + number: "Number", + time: "Time", + timeFormat: "Time Format", + autoRotate: "Auto Rotate", + labelRotation: "Rotation", + circle: "Circle", + polygon: "Polygon", + square: "Square", + cross: "Cross", + diamond: "Diamond", + plus: "Plus", + triangle: "Triangle", + heart: "Heart", + orientation: "Orientation", + fixed: "Fixed", + parallel: "Parallel", + perpendicular: "Perpendicular", + radiusAxisPosition: "Position", + ticks: "Ticks", + gridLines: "Grid Lines", + width: "Width", + height: "Height", + length: "Length", + padding: "Padding", + spacing: "Spacing", + chartStyle: "Chart Style", + title: "Title", + chartTitles: "Titles", + chartTitle: "Chart Title", + chartSubtitle: "Subtitle", + horizontalAxisTitle: "Horizontal Axis Title", + verticalAxisTitle: "Vertical Axis Title", + polarAxisTitle: "Polar Axis Title", + titlePlaceholder: "Chart Title", + background: "Background", + font: "Font", + weight: "Weight", + top: "Top", + right: "Right", + bottom: "Bottom", + left: "Left", + labels: "Labels", + calloutLabels: "Callout Labels", + sectorLabels: "Sector Labels", + positionRatio: "Position Ratio", + size: "Size", + shape: "Shape", + minSize: "Minimum Size", + maxSize: "Maximum Size", + legend: "Legend", + position: "Position", + markerSize: "Marker Size", + markerStroke: "Marker Stroke", + markerPadding: "Marker Padding", + itemSpacing: "Item Spacing", + itemPaddingX: "Item Padding X", + itemPaddingY: "Item Padding Y", + layoutHorizontalSpacing: "Horizontal Spacing", + layoutVerticalSpacing: "Vertical Spacing", + strokeWidth: "Stroke Width", + offset: "Offset", + offsets: "Offsets", + tooltips: "Tooltips", + callout: "Callout", + markers: "Markers", + shadow: "Shadow", + blur: "Blur", + xOffset: "X Offset", + yOffset: "Y Offset", + lineWidth: "Line Width", + lineDash: "Line Dash", + lineDashOffset: "Dash Offset", + scrollingZoom: "Scrolling", + scrollingStep: "Scrolling Step", + selectingZoom: "Selecting", + durationMillis: "Duration (ms)", + crosshairLabel: "Label", + crosshairSnap: "Snap to Node", + normal: "Normal", + bold: "Bold", + italic: "Italic", + boldItalic: "Bold Italic", + predefined: "Predefined", + fillOpacity: "Fill Opacity", + strokeColor: "Line Color", + strokeOpacity: "Line Opacity", + miniChart: "Mini-Chart", + histogramBinCount: "Bin count", + connectorLine: "Connector Line", + seriesItems: "Series Items", + seriesItemType: "Item Type", + seriesItemPositive: "Positive", + seriesItemNegative: "Negative", + seriesItemLabels: "Item Labels", + columnGroup: "Column", + barGroup: "Bar", + pieGroup: "Pie", + lineGroup: "Line", + scatterGroup: "X Y (Scatter)", + areaGroup: "Area", + polarGroup: "Polar", + statisticalGroup: "Statistical", + hierarchicalGroup: "Hierarchical", + specializedGroup: "Specialized", + combinationGroup: "Combination", + groupedColumnTooltip: "Grouped", + stackedColumnTooltip: "Stacked", + normalizedColumnTooltip: "100% Stacked", + groupedBarTooltip: "Grouped", + stackedBarTooltip: "Stacked", + normalizedBarTooltip: "100% Stacked", + pieTooltip: "Pie", + donutTooltip: "Donut", + lineTooltip: "Line", + stackedLineTooltip: "Stacked", + normalizedLineTooltip: "100% Stacked", + groupedAreaTooltip: "Area", + stackedAreaTooltip: "Stacked", + normalizedAreaTooltip: "100% Stacked", + scatterTooltip: "Scatter", + bubbleTooltip: "Bubble", + histogramTooltip: "Histogram", + radialColumnTooltip: "Radial Column", + radialBarTooltip: "Radial Bar", + radarLineTooltip: "Radar Line", + radarAreaTooltip: "Radar Area", + nightingaleTooltip: "Nightingale", + rangeBarTooltip: "Range Bar", + rangeAreaTooltip: "Range Area", + boxPlotTooltip: "Box Plot", + treemapTooltip: "Treemap", + sunburstTooltip: "Sunburst", + waterfallTooltip: "Waterfall", + heatmapTooltip: "Heatmap", + columnLineComboTooltip: "Column & Line", + areaColumnComboTooltip: "Area & Column", + customComboTooltip: "Custom Combination", + innerRadius: "Inner Radius", + startAngle: "Start Angle", + endAngle: "End Angle", + reverseDirection: "Reverse Direction", + groupPadding: "Group Padding", + seriesPadding: "Series Padding", + tile: "Tile", + whisker: "Whisker", + cap: "Cap", + capLengthRatio: "Length Ratio", + labelPlacement: "Placement", + inside: "Inside", + outside: "Outside", + noDataToChart: "No data available to be charted.", + pivotChartRequiresPivotMode: "Pivot Chart requires Pivot Mode enabled.", + chartSettingsToolbarTooltip: "Menu", + chartLinkToolbarTooltip: "Linked to Grid", + chartUnlinkToolbarTooltip: "Unlinked from Grid", + chartDownloadToolbarTooltip: "Download Chart", + chartMenuToolbarTooltip: "Menu", + chartEdit: "Edit Chart", + chartAdvancedSettings: "Advanced Settings", + chartLink: "Link to Grid", + chartUnlink: "Unlink from Grid", + chartDownload: "Download Chart", + histogramFrequency: "Frequency", + seriesChartType: "Series Chart Type", + seriesType: "Series Type", + secondaryAxis: "Secondary Axis", + seriesAdd: "Add a series", + categoryAdd: "Add a category", + bar: "Bar", + column: "Column", + histogram: "Histogram", + advancedSettings: "Advanced Settings", + direction: "Direction", + horizontal: "Horizontal", + vertical: "Vertical", + seriesGroupType: "Group Type", + groupedSeriesGroupType: "Grouped", + stackedSeriesGroupType: "Stacked", + normalizedSeriesGroupType: "100% Stacked", + legendEnabled: "Enabled", + groupedColumnFull: "Grouped Column", + stackedColumnFull: "Stacked Column", + normalizedColumnFull: "100% Stacked Column", + groupedBarFull: "Grouped Bar", + stackedBarFull: "Stacked Bar", + normalizedBarFull: "100% Stacked Bar", + stackedAreaFull: "Stacked Area", + normalizedAreaFull: "100% Stacked Area", + stackedLineFull: "Stacked Line", + normalizedLineFull: "100% Stacked Line", + customCombo: "Custom Combination", + funnel: "Funnel", + coneFunnel: "Cone Funnel", + pyramid: "Pyramid", + funnelGroup: "Funnel", + funnelTooltip: "Funnel", + coneFunnelTooltip: "Cone Funnel", + pyramidTooltip: "Pyramid", + dropOff: "Drop-Off", + stageLabels: "Stage Labels", + reverse: "Reverse", + tooltipMode: "Tooltip Mode", + tooltipModeSingle: "Single", + tooltipModeShared: "Multiple", + tooltipModeCompact: "Compact", + // menu items + groupedColumn: "Grouped", + stackedColumn: "Stacked", + pie: "Pie", + donut: "Donut", + line: "Line", + scatter: "Scatter", + bubble: "Bubble", + area: "Area", + stackedArea: "Stacked", + radarLine: "Radar Line", + radarArea: "Radar Area", + nightingale: "Nightingale", + radialColumn: "Radial Column", + radialBar: "Radial Bar", + boxPlot: "Box Plot", + rangeBar: "Range Bar", + rangeArea: "Range Area", + treemap: "Treemap", + sunburst: "Sunburst", + waterfall: "Waterfall", + heatmap: "Heatmap", + columnLineCombo: "Column & Line", + AreaColumnCombo: "Area & Column", + // aria + ariaChartMenuClose: "Close Chart Edit Menu", + ariaChartSelected: "Selected", + // group + group: "Group", + // time formats + timeFormatSlashesDDMMYYYY: "DD/MM/YYYY", + timeFormatSlashesMMDDYYYY: "MM/DD/YYYY", + timeFormatSlashesDDMMYY: "DD/MM/YY", + timeFormatSlashesMMDDYY: "MM/DD/YY", + timeFormatDotsDDMYY: "DD.M.YY", + timeFormatDotsMDDYY: "M.DD.YY", + timeFormatDashesYYYYMMDD: "YYYY-MM-DD", + timeFormatSpacesDDMMMMYYYY: "DD MMMM YYYY", + timeFormatHHMMSS: "HH:MM:SS", + timeFormatHHMMSSAmPm: "HH:MM:SS AM/PM", + // agg funcs + sum: "Sum", + first: "First", + last: "Last", + min: "Min", + max: "Max", + count: "Count", + avg: "Average" +}; +var ChartTranslationService = class extends BeanStub96 { + constructor() { + super(...arguments); + this.beanName = "chartTranslation"; + } + translate(toTranslate) { + const translate = this.getLocaleTextFunc(); + const defaultTranslation = DEFAULT_CHART_TRANSLATIONS[toTranslate]; + return translate(toTranslate, defaultTranslation); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartService.ts +import { BeanStub as BeanStub101, _focusInto as _focusInto12, _warn as _warn68 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/gridChartComp.ts +import { + Component as Component97, + RefPlaceholder as RefPlaceholder67, + _addGridCommonParams as _addGridCommonParams29, + _clearElement as _clearElement23, + _errMsg as _errMsg2, + _focusGridInnerElement, + _focusInto as _focusInto11, + _getAbsoluteHeight as _getAbsoluteHeight2, + _getAbsoluteWidth as _getAbsoluteWidth3, + _mergeDeep as _mergeDeep5, + _removeFromParent as _removeFromParent18, + _setDisplayed as _setDisplayed27, + _warn as _warn67 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartController.ts +import { BeanStub as BeanStub97, _warn as _warn62 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/utils/chartParamsValidator.ts +import { _warnOnce } from "ag-grid-community"; +var validateIfDefined = (validationFn) => { + return (value) => { + if (value == void 0) { + return true; + } + return validationFn(value); + }; +}; +var isString = (value) => typeof value === "string"; +var isBoolean = (value) => typeof value === "boolean"; +var isValidSeriesChartType = (value) => typeof value === "object"; +var createWarnMessage = (property, expectedType) => (value) => `AG Grid - unable to update chart as invalid params supplied: \`${property}: ${value}\`, expected ${expectedType}.`; +var createEnterpriseMessage = (feature) => { + const url = "https://www.ag-grid.com/javascript-data-grid/integrated-charts-installation/"; + return `${feature} is not supported in AG Charts Community ('ag-charts-enterprise' hasn't been loaded). See ${url} for more details.`; +}; +var legacyChartTypes = ["doughnut"]; +var baseUpdateChartParams = [ + "type", + "chartId", + "chartType", + "chartThemeName", + "chartThemeOverrides", + "unlinkChart" +]; +function isValidChartType(value) { + return !!getSeriesTypeIfExists(value) || isComboChart(value); +} +function isLegacyChartType(value) { + return legacyChartTypes.includes(value); +} +var validateChartType = validateIfDefined( + (chartType) => { + if (isValidChartType(chartType)) { + return true; + } + if (isLegacyChartType(chartType)) { + const renamedChartType = getCanonicalChartType(chartType); + _warnOnce(`The chart type '${chartType}' has been deprecated. Please use '${renamedChartType}' instead.`); + return renamedChartType; + } + return false; + } +); +var validateAgChartThemeOverrides = validateIfDefined((themeOverrides) => { + return typeof themeOverrides === "object"; +}); +var validateChartParamsCellRange = validateIfDefined((cellRange) => { + return typeof cellRange === "object"; +}); +var validateAggFunc = validateIfDefined((aggFunc) => { + return typeof aggFunc === "string" || typeof aggFunc === "function"; +}); +var enterpriseChartTypeValidation = (isEnterprise) => ({ + property: "chartType", + validationFn: validateIfDefined( + (chartType) => isEnterprise || !chartType || !isEnterpriseChartType(chartType) + ), + warnMessage: (chartType) => createEnterpriseMessage(`The '${chartType}' chart type`) +}); +var switchCategorySeriesValidation = (isEnterprise) => ({ + property: "switchCategorySeries", + validationFn: validateIfDefined((switchCategorySeries) => { + if (!switchCategorySeries || isEnterprise) { + return true; + } + return void 0; + }), + warnMessage: () => createEnterpriseMessage(`'switchCategorySeries' has been ignored as it`), + warnIfFixed: true +}); +var commonUpdateValidations = () => [ + { property: "chartId", validationFn: isString, warnMessage: createWarnMessage("chartId", "string") }, + { + property: "chartType", + validationFn: validateChartType, + warnMessage: createWarnMessage("chartType", "ChartType") + }, + { + property: "chartThemeName", + validationFn: isString, + warnMessage: createWarnMessage("chartThemeName", "string") + }, + { + property: "chartThemeOverrides", + validationFn: validateAgChartThemeOverrides, + warnMessage: createWarnMessage("chartThemeOverrides", "AgChartThemeOverrides") + }, + { property: "unlinkChart", validationFn: isBoolean, warnMessage: createWarnMessage("unlinkChart", "boolean") } +]; +var cellRangeValidations = (isEnterprise) => [ + { + property: "cellRange", + validationFn: validateChartParamsCellRange, + warnMessage: createWarnMessage("cellRange", "ChartParamsCellRange") + }, + { + property: "suppressChartRanges", + validationFn: isBoolean, + warnMessage: createWarnMessage("suppressChartRanges", "boolean") + }, + { + property: "aggFunc", + validationFn: validateAggFunc, + warnMessage: createWarnMessage("aggFunc", "string or IAggFunc") + }, + switchCategorySeriesValidation(isEnterprise) +]; +function validateUpdateParams(params, isEnterprise) { + const paramsToValidate = params; + switch (paramsToValidate.type) { + case "rangeChartUpdate": + return validateUpdateRangeChartParams(params, isEnterprise); + case "pivotChartUpdate": + return validateUpdatePivotChartParams(params); + case "crossFilterChartUpdate": + return validateUpdateCrossFilterChartParams(params, isEnterprise); + default: + _warnOnce( + `Invalid value supplied for 'type': ${params.type}. It must be either 'rangeChartUpdate', 'pivotChartUpdate', or 'crossFilterChartUpdate'.` + ); + return false; + } +} +function validateCreateParams(params, isEnterprise) { + return validateProperties(params, [ + enterpriseChartTypeValidation(isEnterprise), + switchCategorySeriesValidation(isEnterprise) + ]); +} +function validateUpdateRangeChartParams(params, isEnterprise) { + const validations = [ + ...commonUpdateValidations(), + enterpriseChartTypeValidation(isEnterprise), + ...cellRangeValidations(isEnterprise), + { + property: "seriesChartTypes", + validationFn: (value) => value === void 0 || Array.isArray(value) && value.every(isValidSeriesChartType), + warnMessage: createWarnMessage("seriesChartTypes", "Array of SeriesChartType") + }, + { + property: "useGroupColumnAsCategory", + validationFn: isBoolean, + warnMessage: createWarnMessage("useGroupColumnAsCategory", "boolean") + } + ]; + return validateProperties( + params, + validations, + [ + ...baseUpdateChartParams, + "cellRange", + "suppressChartRanges", + "switchCategorySeries", + "aggFunc", + "seriesChartTypes", + "seriesGroupType", + "useGroupColumnAsCategory" + ], + "UpdateRangeChartParams" + ); +} +function validateUpdatePivotChartParams(params) { + const validations = [...commonUpdateValidations()]; + return validateProperties(params, validations, [...baseUpdateChartParams], "UpdatePivotChartParams"); +} +function validateUpdateCrossFilterChartParams(params, isEnterprise) { + const validations = [ + ...commonUpdateValidations(), + ...cellRangeValidations(isEnterprise) + ]; + return validateProperties( + params, + validations, + [...baseUpdateChartParams, "cellRange", "suppressChartRanges", "aggFunc"], + "UpdateCrossFilterChartParams" + ); +} +function validateProperties(params, validations, validPropertyNames, paramsType) { + let validatedProperties = void 0; + for (const validation of validations) { + const { property, validationFn, warnMessage, warnIfFixed } = validation; + if (property in params) { + const value = params[property]; + const validationResult = validationFn(value); + if (validationResult === true) { + continue; + } + if (validationResult === false) { + _warnOnce(warnMessage(value)); + return false; + } + validatedProperties = validatedProperties || { ...params }; + validatedProperties[property] = validationResult; + if (warnIfFixed) { + _warnOnce(warnMessage(value)); + } + } + } + if (validPropertyNames) { + for (const property of Object.keys(params)) { + if (!validPropertyNames.includes(property)) { + _warnOnce(`Unexpected property supplied. ${paramsType} does not contain: \`${property}\`.`); + return false; + } + } + } + if (validatedProperties) { + return validatedProperties; + } + return true; +} + +// packages/ag-grid-enterprise/src/charts/chartComp/chartController.ts +var DEFAULT_THEMES = ["ag-default", "ag-material", "ag-sheets", "ag-polychroma", "ag-vivid"]; +var ChartController = class extends BeanStub97 { + constructor(model) { + super(); + this.model = model; + this.isEnterprise = () => this.agChartsExports.isEnterprise; + } + wireBeans(beans) { + this.rangeSvc = beans.rangeSvc; + this.agChartsExports = beans.agChartsExports; + } + postConstruct() { + this.setChartRange(); + if (this.model.unlinked) { + if (this.rangeSvc) { + this.rangeSvc.setCellRanges([]); + } + } + const listener = this.updateForGridChange.bind(this, {}); + this.addManagedEventListeners({ + cellSelectionChanged: (event) => { + if (event.id && event.id === this.model.chartId) { + this.updateForRangeChange(); + } + }, + columnMoved: listener, + columnPinned: listener, + columnVisible: listener, + columnRowGroupChanged: listener, + modelUpdated: listener, + cellValueChanged: this.updateForDataChange.bind(this), + cellEditValuesChanged: this.updateForDataChange.bind(this) + }); + } + update(params) { + if (!this.validUpdateType(params)) { + return false; + } + const validationResult = validateUpdateParams(params, this.agChartsExports.isEnterprise); + if (!validationResult) { + return false; + } + const validParams = validationResult === true ? params : validationResult; + this.applyValidatedChartParams(validParams); + return true; + } + applyValidatedChartParams(params) { + const { chartId, chartType, chartThemeName, unlinkChart } = params; + const common = { + chartId, + pivotChart: this.model.pivotChart, + chartType: chartType ?? this.model.chartType, + chartThemeName: chartThemeName ?? this.model.chartThemeName, + unlinkChart: unlinkChart ?? this.model.unlinked, + cellRange: this.model.suppliedCellRange, + switchCategorySeries: this.model.switchCategorySeries, + aggFunc: this.model.aggFunc, + seriesChartTypes: void 0, + suppressChartRanges: false, + crossFiltering: false + }; + const chartModelParams = { ...common }; + switch (params.type) { + case "rangeChartUpdate": + chartModelParams.cellRange = this.createCellRange(params) ?? this.model.suppliedCellRange; + chartModelParams.switchCategorySeries = params.switchCategorySeries ?? this.model.switchCategorySeries; + chartModelParams.aggFunc = params.aggFunc ?? this.model.aggFunc; + chartModelParams.seriesChartTypes = params.seriesChartTypes; + chartModelParams.suppressChartRanges = params.suppressChartRanges ?? this.model.suppressChartRanges; + chartModelParams.seriesGroupType = params.seriesGroupType ?? this.model.seriesGroupType; + chartModelParams.useGroupColumnAsCategory = params.useGroupColumnAsCategory ?? this.model.useGroupColumnAsCategory; + break; + case "crossFilterChartUpdate": + chartModelParams.cellRange = this.createCellRange(params) ?? this.model.suppliedCellRange; + chartModelParams.switchCategorySeries = false; + chartModelParams.aggFunc = params.aggFunc ?? this.model.aggFunc; + chartModelParams.crossFiltering = true; + chartModelParams.crossFilteringSort = this.model.crossFilteringSort; + chartModelParams.suppressChartRanges = params.suppressChartRanges ?? this.model.suppressChartRanges; + break; + case "pivotChartUpdate": + chartModelParams.switchCategorySeries = false; + break; + } + this.model.updateModel(chartModelParams); + const removeChartCellRanges = chartModelParams.unlinkChart || chartModelParams.suppressChartRanges; + if (removeChartCellRanges) { + this.rangeSvc?.setCellRanges([]); + } else { + this.setChartRange(); + } + } + updateForGridChange(params) { + if (this.model.unlinked) { + return; + } + const { maintainColState, setColsFromRange } = params ?? {}; + this.model.updateCellRanges({ maintainColState, setColsFromRange }); + this.model.updateData(); + this.setChartRange(); + } + updateForDataChange() { + if (this.model.unlinked) { + return; + } + this.model.updateData(); + this.raiseChartModelUpdateEvent(); + } + updateForRangeChange() { + this.updateForGridChange({ setColsFromRange: true }); + this.raiseChartRangeSelectionChangedEvent(); + } + updateForPanelChange(params) { + this.model.updateCellRanges(params); + this.model.updateData(); + if (params.skipAnimation) { + this.getChartProxy().getChartRef().skipAnimations(); + } + this.setChartRange(); + this.raiseChartRangeSelectionChangedEvent(); + } + updateThemeOverrides(updatedOverrides) { + this.chartProxy.updateThemeOverrides(updatedOverrides); + } + getChartUpdateParams(updatedOverrides) { + const selectedCols = this.getSelectedValueColState(); + const fields = selectedCols.map((c) => ({ colId: c.colId, displayName: c.displayName })); + const data = this.getChartData(); + const selectedDimensions = this.getSelectedDimensions(); + const model = this.model; + const params = { + data, + groupData: model.groupChartData, + grouping: this.isGrouping(), + categories: selectedDimensions.map(({ colId, displayName }) => { + const chartDataType = model.categoryAxisType ?? model.getChartDataType(colId); + return { + id: colId, + name: displayName, + chartDataType, + convertTime: chartDataType === "time" ? model.getConvertTime(colId) : void 0 + }; + }), + fields, + chartId: this.getChartId(), + getCrossFilteringContext: () => ({ lastSelectedChartId: "xxx" }), + //this.params.crossFilteringContext, //TODO + seriesChartTypes: this.getSeriesChartTypes(), + updatedOverrides, + seriesGroupType: model.seriesGroupType + }; + return this.isCategorySeriesSwitched() ? this.invertCategorySeriesParams(params) : params; + } + invertCategorySeriesParams(params) { + const [category] = params.categories; + const categories = [{ id: DEFAULT_CHART_CATEGORY, name: "" }]; + const fields = params.data.map((value, index) => { + const categoryKey = `${category.id}:${index}`; + const categoryValue = value[category.id]; + const seriesLabel = categoryValue == null ? "" : String(categoryValue); + return { colId: categoryKey, displayName: seriesLabel }; + }); + const data = params.fields.map((field) => { + const row = { + [DEFAULT_CHART_CATEGORY]: field.displayName + }; + for (const [index, value] of params.data.entries()) { + const categoryKey = `${category.id}:${index}`; + const seriesLabelValue = value[field.colId]; + row[categoryKey] = seriesLabelValue; + } + return row; + }); + return { + ...params, + categories, + fields, + data + }; + } + getChartModel() { + const modelType = this.model.pivotChart ? "pivot" : "range"; + const seriesChartTypes = this.isComboChart() ? this.model.comboChartModel.seriesChartTypes : void 0; + return { + modelType, + chartId: this.model.chartId, + chartType: this.model.chartType, + chartThemeName: this.getChartThemeName(), + chartOptions: this.chartProxy?.getChartThemeOverrides(), + chartPalette: this.chartProxy?.getChartPalette(), + cellRange: this.getCellRangeParams(), + switchCategorySeries: this.model.switchCategorySeries, + suppressChartRanges: this.model.suppressChartRanges, + aggFunc: this.model.aggFunc, + unlinkChart: this.model.unlinked, + seriesChartTypes, + seriesGroupType: this.model.seriesGroupType, + useGroupColumnAsCategory: this.model.useGroupColumnAsCategory + }; + } + getChartId() { + return this.model.chartId; + } + getChartData() { + return this.model.chartData; + } + getChartType() { + return this.model.chartType; + } + setChartType(chartType) { + this.updateMultiSeriesAndCategory(this.model.chartType, chartType); + this.model.chartType = chartType; + this.model.comboChartModel.updateSeriesChartTypes(); + this.model.switchCategorySeries = false; + this.model.categoryAxisType = void 0; + this.model.seriesGroupType = void 0; + this.raiseChartModelUpdateEvent(); + } + isCategorySeriesSwitched() { + return this.model.switchCategorySeries && !this.model.isGrouping(); + } + switchCategorySeries(inverted) { + if (!supportsInvertedCategorySeries(this.getChartType())) { + return; + } + this.model.switchCategorySeries = inverted; + this.raiseChartModelUpdateEvent(); + } + getAggFunc() { + return this.model.aggFunc; + } + setAggFunc(value, silent) { + if (this.model.aggFunc === value) { + return; + } + this.model.aggFunc = value; + if (silent) { + return; + } + this.model.updateData(); + this.raiseChartModelUpdateEvent(); + } + updateMultiSeriesAndCategory(previousChartType, chartType) { + const updateForMax = (columns, maxNum) => { + let numSelected = 0; + for (const colState of columns) { + if (!colState.selected) { + continue; + } + if (numSelected >= maxNum) { + colState.selected = false; + } else { + numSelected++; + } + } + if (numSelected === 0) { + columns[0].selected = true; + } + }; + const maxNumDimensions = getMaxNumCategories(chartType); + const maxNumSeries = getMaxNumSeries(chartType); + const updateDimensionColState = maxNumDimensions != null && (getMaxNumCategories(previousChartType) ?? 100) > (maxNumDimensions ?? 100); + const updateValueColState = maxNumSeries != null && (getMaxNumSeries(previousChartType) ?? 100) > (maxNumSeries ?? 100); + if (updateDimensionColState) { + updateForMax(this.model.dimensionColState, maxNumDimensions); + } + if (updateValueColState) { + updateForMax(this.model.valueColState, maxNumSeries); + } + if (updateDimensionColState || updateValueColState) { + this.model.resetCellRanges(updateDimensionColState, updateValueColState); + this.setChartRange(true); + } + } + setChartThemeName(chartThemeName, silent) { + this.model.chartThemeName = chartThemeName; + if (!silent) { + this.raiseChartModelUpdateEvent(); + } + } + getChartThemeName() { + return this.model.chartThemeName; + } + isPivotChart() { + return this.model.pivotChart; + } + isPivotMode() { + return this.model.isPivotMode(); + } + isGrouping() { + return this.model.isGrouping(); + } + isCrossFilterChart() { + return this.model.crossFiltering; + } + getThemeNames() { + return this.gos.get("chartThemes") || DEFAULT_THEMES; + } + getThemes() { + const themeNames = this.getThemeNames(); + return themeNames.map((themeName) => { + const stockTheme = isStockTheme(themeName, this.agChartsExports._Theme); + const theme = stockTheme ? themeName : this.chartProxy.lookupCustomChartTheme(themeName); + return this.agChartsExports._Theme.getChartTheme(theme); + }); + } + getPalettes() { + const themes = this.getThemes(); + return themes.map((theme) => { + return theme.palette; + }); + } + getSelectedValueColState() { + return this.model.getValueColState().filter((cs) => cs.selected); + } + getSelectedDimensions() { + return this.model.getSelectedDimensions(); + } + getColStateForMenu() { + return { dimensionCols: this.model.dimensionColState, valueCols: this.model.getValueColState() }; + } + setChartRange(silent = false) { + if (this.rangeSvc && !this.model.suppressChartRanges && !this.model.unlinked) { + this.rangeSvc.setCellRanges(this.getCellRanges()); + } + if (!silent) { + this.raiseChartModelUpdateEvent(); + } + } + detachChartRange() { + this.model.unlinked = !this.model.unlinked; + if (this.model.unlinked) { + if (this.rangeSvc) { + this.rangeSvc.setCellRanges([]); + } + } else { + this.updateForGridChange(); + } + this.dispatchLocalEvent({ type: "chartLinkedChanged" }); + } + setChartProxy(chartProxy) { + this.chartProxy = chartProxy; + } + getChartProxy() { + return this.chartProxy; + } + isActiveXYChart() { + return ["scatter", "bubble"].includes(this.getChartType()); + } + isChartLinked() { + return !this.model.unlinked; + } + customComboExists() { + const savedCustomSeriesChartTypes = this.model.comboChartModel.savedCustomSeriesChartTypes; + return savedCustomSeriesChartTypes && savedCustomSeriesChartTypes.length > 0; + } + getSeriesChartTypes() { + return this.model.comboChartModel.seriesChartTypes; + } + isComboChart(chartType) { + return this.model.isComboChart(chartType); + } + updateSeriesChartType(colId, chartType, secondaryAxis) { + const seriesChartType = this.model.comboChartModel.seriesChartTypes.find((s2) => s2.colId === colId); + if (seriesChartType) { + const updateChartType = this.model.chartType !== "customCombo"; + if (updateChartType) { + this.model.chartType = "customCombo"; + } + const prevSeriesChartType = seriesChartType.chartType; + if (chartType != null) { + seriesChartType.chartType = chartType; + } + if (secondaryAxis != null) { + seriesChartType.secondaryAxis = secondaryAxis; + } + this.model.comboChartModel.savedCustomSeriesChartTypes = this.model.comboChartModel.seriesChartTypes; + this.model.comboChartModel.updateSeriesChartTypes(); + this.updateForDataChange(); + if (updateChartType) { + this.dispatchLocalEvent({ + type: "chartTypeChanged" + }); + } + if (prevSeriesChartType !== chartType) { + this.dispatchLocalEvent({ + type: "chartSeriesChartTypeChanged" + }); + } + this.raiseChartOptionsChangedEvent(); + } + } + getActiveSeriesChartTypes() { + const selectedColIds = this.getSelectedValueColState().map((c) => c.colId); + return this.getSeriesChartTypes().filter((s2) => selectedColIds.includes(s2.colId)); + } + getChartSeriesTypes(chartType) { + const targetChartType = chartType ?? this.getChartType(); + return this.isComboChart(targetChartType) ? ["line", "bar", "area"] : [getSeriesType(targetChartType)]; + } + getChartSeriesType() { + const seriesChartTypes = this.getSeriesChartTypes(); + if (seriesChartTypes.length === 0) { + return "bar"; + } + const ct = seriesChartTypes[0].chartType; + if (ct === "columnLineCombo") { + return "bar"; + } + if (ct === "areaColumnCombo") { + return "area"; + } + return getSeriesType(ct); + } + getCellRanges() { + return [this.model.dimensionCellRange, this.model.valueCellRange].filter((r) => r); + } + createCellRange(params) { + return params.cellRange && this.rangeSvc?.createPartialCellRangeFromRangeParams(params.cellRange, true); + } + validUpdateType(params) { + if (!params.type) { + _warn62(136); + return false; + } + const chartTypeMap = { + "Range Chart": () => !this.isPivotChart() && !this.isCrossFilterChart(), + "Pivot Chart": () => this.isPivotChart(), + "Cross Filter Chart": () => this.isCrossFilterChart() + }; + const currentChartType = Object.keys(chartTypeMap).find((type) => chartTypeMap[type]()) ?? "Range Chart"; + const valid = params.type === `${currentChartType[0].toLowerCase()}${currentChartType.slice(1).replace(/ /g, "")}Update`; + if (!valid) { + _warn62(137, { currentChartType, type: params.type }); + } + return valid; + } + getCellRangeParams() { + const cellRanges = this.getCellRanges(); + const firstCellRange = cellRanges[0]; + const startRow = firstCellRange?.startRow || null; + const endRow = firstCellRange?.endRow || null; + return { + rowStartIndex: startRow?.rowIndex ?? null, + rowStartPinned: startRow?.rowPinned, + rowEndIndex: endRow?.rowIndex ?? null, + rowEndPinned: endRow?.rowPinned, + columns: cellRanges.reduce( + (columns, value) => columns.concat(value.columns.map((c) => c.getId())), + [] + ) + }; + } + setCategoryAxisType(categoryAxisType) { + this.model.categoryAxisType = categoryAxisType; + this.raiseChartModelUpdateEvent(); + } + getSeriesGroupType() { + return this.model.seriesGroupType ?? this.chartProxy.getSeriesGroupType(); + } + setSeriesGroupType(seriesGroupType) { + this.model.seriesGroupType = seriesGroupType; + this.raiseChartModelUpdateEvent(); + } + raiseChartModelUpdateEvent() { + this.dispatchLocalEvent({ type: "chartModelUpdate" }); + this.raiseChartOptionsChangedEvent(); + } + raiseChartUpdatedEvent() { + this.dispatchLocalEvent({ type: "chartUpdated" }); + } + raiseChartApiUpdateEvent() { + this.dispatchLocalEvent({ type: "chartApiUpdate" }); + } + raiseChartOptionsChangedEvent() { + const { chartId, chartType } = this.getChartModel(); + this.eventSvc.dispatchEvent({ + type: "chartOptionsChanged", + chartId, + chartType, + chartThemeName: this.getChartThemeName(), + chartOptions: this.chartProxy?.getChartThemeOverrides() + }); + } + raiseChartRangeSelectionChangedEvent() { + this.eventSvc.dispatchEvent({ + type: "chartRangeSelectionChanged", + id: this.model.chartId, + chartId: this.model.chartId, + cellRange: this.getCellRangeParams() + }); + } + destroy() { + super.destroy(); + if (this.rangeSvc) { + this.rangeSvc.setCellRanges([]); + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/cartesian/areaChartProxy.ts +var AreaChartProxy = class extends CartesianChartProxy { + getAxes(params) { + const axes = { + x: { + type: this.getXAxisType(params), + position: "bottom" + }, + y: { + type: "number", + position: "left" + } + }; + if (this.isNormalised()) { + axes.y.label = { ...axes.y.label, formatter: (params2) => Math.round(params2.value) + "%" }; + } + return axes; + } + getSeries(params) { + const [category] = params.categories; + const series = params.fields.map( + (f) => ({ + type: this.standaloneChartType, + xKey: category.id, + xName: category.name, + yKey: f.colId, + yName: f.displayName, + normalizedTo: this.chartType === "normalizedArea" ? 100 : void 0, + stacked: ["normalizedArea", "stackedArea"].includes(this.chartType) + }) + ); + return this.crossFiltering ? this.extractLineAreaCrossFilterSeries(series, params) : series; + } + isNormalised() { + return !this.crossFiltering && this.chartType === "normalizedArea"; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/cartesian/barChartProxy.ts +var HORIZONTAL_CHART_TYPES = /* @__PURE__ */ new Set(["bar", "groupedBar", "stackedBar", "normalizedBar"]); +var BarChartProxy = class extends CartesianChartProxy { + getAxes(params) { + const axes = { + x: { + type: this.getXAxisType(params), + position: this.isHorizontal() ? "left" : "bottom" + }, + y: { + type: "number", + position: this.isHorizontal() ? "bottom" : "left" + } + }; + if (this.isNormalised()) { + axes.y.label = { ...axes.y.label, formatter: (params2) => Math.round(params2.value) + "%" }; + } + return axes; + } + getSeries(params) { + const [category] = params.categories; + const series = params.fields.map( + (f) => ({ + type: this.standaloneChartType, + direction: this.isHorizontal() ? "horizontal" : "vertical", + stacked: this.crossFiltering || isStacked(this.chartType), + normalizedTo: this.isNormalised() ? 100 : void 0, + xKey: category.id, + xName: category.name, + yKey: f.colId, + yName: f.displayName + }) + ); + return this.crossFiltering ? this.extractCrossFilterSeries(series) : series; + } + extractCrossFilterSeries(series) { + const allSeries = []; + for (let i = 0; i < series.length; i++) { + const commonSeries = series[i]; + const primarySeries = { + ...commonSeries, + listeners: { + seriesNodeClick: this.crossFilterCallback + } + }; + const filteredOutSeries = { + ...primarySeries, + yKey: `${primarySeries.yKey}-filtered-out`, + showInLegend: false + }; + allSeries.push(primarySeries); + allSeries.push(filteredOutSeries); + } + return allSeries; + } + isNormalised() { + const normalisedCharts = ["normalizedColumn", "normalizedBar"]; + return !this.crossFiltering && normalisedCharts.includes(this.chartType); + } + isHorizontal() { + return HORIZONTAL_CHART_TYPES.has(this.chartType); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/cartesian/lineChartProxy.ts +var LineChartProxy = class extends CartesianChartProxy { + getAxes(params) { + const axes = { + x: { + type: this.getXAxisType(params), + position: "bottom" + }, + y: { + type: "number", + position: "left" + } + }; + if (this.isNormalised()) { + axes.y.label = { ...axes.y.label, formatter: (params2) => Math.round(params2.value) + "%" }; + } + return axes; + } + getSeries(params) { + const [category] = params.categories; + const stacked = ["normalizedLine", "stackedLine"].includes(this.chartType); + const series = params.fields.map( + (f) => ({ + type: this.standaloneChartType, + xKey: category.id, + xName: category.name, + yKey: f.colId, + yName: f.displayName, + normalizedTo: stacked && this.isNormalised() ? 100 : void 0, + stacked + }) + ); + return this.crossFiltering ? this.extractLineAreaCrossFilterSeries(series, params) : series; + } + isNormalised() { + const normalisedCharts = ["normalizedLine"]; + return !this.crossFiltering && normalisedCharts.includes(this.chartType); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/cartesian/scatterChartProxy.ts +var ScatterChartProxy = class extends CartesianChartProxy { + getAxes(_params) { + return { + x: { + type: "number", + position: "bottom" + }, + y: { + type: "number", + position: "left" + } + }; + } + getSeries(params) { + const [category] = params.categories; + const paired = this.isPaired(); + const seriesDefinitions = this.getSeriesDefinitions(params.fields, paired); + const labelFieldDefinition = category.id === DEFAULT_CHART_CATEGORY ? void 0 : category; + const series = seriesDefinitions.map((seriesDefinition) => { + if (seriesDefinition?.sizeField) { + const opts2 = { + type: "bubble", + xKey: seriesDefinition.xField.colId, + xName: seriesDefinition.xField.displayName ?? void 0, + yKey: seriesDefinition.yField.colId, + yName: seriesDefinition.yField.displayName ?? void 0, + title: `${seriesDefinition.yField.displayName} vs ${seriesDefinition.xField.displayName}`, + sizeKey: seriesDefinition.sizeField.colId, + sizeName: seriesDefinition.sizeField.displayName ?? "", + labelKey: labelFieldDefinition ? labelFieldDefinition.id : seriesDefinition.yField.colId, + labelName: labelFieldDefinition ? labelFieldDefinition.name : void 0 + }; + return opts2; + } + const opts = { + type: "scatter", + xKey: seriesDefinition.xField.colId, + xName: seriesDefinition.xField.displayName ?? void 0, + yKey: seriesDefinition.yField.colId, + yName: seriesDefinition.yField.displayName ?? void 0, + title: `${seriesDefinition.yField.displayName} vs ${seriesDefinition.xField.displayName}`, + labelKey: labelFieldDefinition ? labelFieldDefinition.id : seriesDefinition.yField.colId, + labelName: labelFieldDefinition ? labelFieldDefinition.name : void 0 + }; + return opts; + }); + return this.crossFiltering ? this.extractCrossFilterSeries(series, params) : series; + } + extractCrossFilterSeries(series, params) { + const { data } = params; + const filteredOutKey = (key) => `${key}-filtered-out`; + const calcMarkerDomain = (data2, sizeKey) => { + const markerDomain = [Infinity, -Infinity]; + if (sizeKey != null) { + for (const datum of data2) { + const value = datum[sizeKey] ?? datum[filteredOutKey(sizeKey)]; + if (value < markerDomain[0]) { + markerDomain[0] = value; + } + if (value > markerDomain[1]) { + markerDomain[1] = value; + } + } + } + if (markerDomain[0] <= markerDomain[1]) { + return markerDomain; + } + return void 0; + }; + const updatePrimarySeries = (series2) => { + let markerDomain = void 0; + if (series2.type === "bubble") { + const { sizeKey } = series2; + markerDomain = calcMarkerDomain(data, sizeKey); + } + return { + ...series2, + domain: markerDomain, + highlight: { highlightedItem: { fill: "yellow" } }, + listeners: { + ...series2.listeners, + seriesNodeClick: this.crossFilterCallback + } + }; + }; + const updateFilteredOutSeries = (series2) => { + const { yKey, xKey } = series2; + let alteredSizeKey = {}; + if (series2.type === "bubble") { + alteredSizeKey = { sizeKey: filteredOutKey(series2.sizeKey) }; + } + return { + ...series2, + ...alteredSizeKey, + yKey: filteredOutKey(yKey), + xKey: filteredOutKey(xKey), + showInLegend: false, + listeners: { + ...series2.listeners, + seriesNodeClick: (e) => { + const value = e.datum[filteredOutKey(xKey)]; + const filterableEvent = { + ...e, + xKey, + datum: { ...e.datum, [xKey]: value } + }; + this.crossFilterCallback(filterableEvent); + } + } + }; + }; + const updatedSeries = series.map(updatePrimarySeries); + return [...updatedSeries, ...updatedSeries.map(updateFilteredOutSeries)]; + } + getSeriesDefinitions(fields, paired) { + if (fields.length < 2) { + return []; + } + const isBubbleChart = this.chartType === "bubble"; + if (paired) { + if (isBubbleChart) { + return fields.map( + (currentXField, i) => i % 3 === 0 ? { + xField: currentXField, + yField: fields[i + 1], + sizeField: fields[i + 2] + } : null + ).filter((x) => x?.yField && x.sizeField); + } + return fields.map( + (currentXField, i) => i % 2 === 0 ? { + xField: currentXField, + yField: fields[i + 1] + } : null + ).filter((x) => x?.yField); + } + const xField = fields[0]; + if (isBubbleChart) { + return fields.map( + (yField, i) => i % 2 === 1 ? { + xField, + yField, + sizeField: fields[i + 1] + } : null + ).filter((x) => x?.sizeField); + } + return fields.filter((value, i) => i > 0).map((yField) => ({ xField, yField })); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/combo/comboChartProxy.ts +var ComboChartProxy = class extends CartesianChartProxy { + getAxes(params) { + const fields = params ? params.fields : []; + const fieldsMap = new Map(fields.map((f) => [f.colId, f])); + const { primaryYKeys, secondaryYKeys } = this.getYKeys(fields, params.seriesChartTypes); + const axes = { + x: { + type: this.getXAxisType(params), + position: "bottom" + } + }; + if (primaryYKeys.length > 0) { + axes.y = { + type: "number", + position: "left" + }; + } + if (secondaryYKeys.length > 0) { + secondaryYKeys.forEach((secondaryYKey) => { + const field = fieldsMap.get(secondaryYKey); + const secondaryAxisIsVisible = field && field.colId === secondaryYKey; + if (!secondaryAxisIsVisible) { + return; + } + const secondaryAxisOptions = { + type: "number", + position: "right" + }; + axes[`y_${secondaryYKey}`] = secondaryAxisOptions; + }); + } + return axes; + } + getSeries(params) { + const { fields, seriesChartTypes } = params; + const [category] = params.categories; + return fields.map((field) => { + const seriesChartType = seriesChartTypes.find((s2) => s2.colId === field.colId); + if (seriesChartType) { + const chartType = seriesChartType.chartType; + const grouped = ["groupedColumn", "groupedBar"].includes(chartType); + const groupedOpts = grouped ? { grouped: true } : {}; + const yKeyAxis = seriesChartType.secondaryAxis ? `y_${field.colId}` : "y"; + return { + type: getSeriesType(chartType), + xKey: category.id, + yKey: field.colId, + yName: field.displayName, + yKeyAxis, + stacked: ["stackedArea", "stackedColumn"].includes(chartType), + ...groupedOpts + }; + } + }); + } + getYKeys(fields, seriesChartTypes) { + const primaryYKeys = []; + const secondaryYKeys = []; + for (const field of fields) { + const colId = field.colId; + const seriesChartType = seriesChartTypes.find((s2) => s2.colId === colId); + if (seriesChartType) { + if (seriesChartType.secondaryAxis) { + secondaryYKeys.push(colId); + } else { + primaryYKeys.push(colId); + } + } + } + return { primaryYKeys, secondaryYKeys }; + } + setSeriesChartThemeDefaults(overrides) { + const seriesOverrides = this.getSeriesChartThemeDefaults(); + if (!seriesOverrides) { + return; + } + const chartTypes = /* @__PURE__ */ new Set(); + for (const seriesChartType of this.chartProxyParams.seriesChartTypes) { + chartTypes.add(seriesChartType.chartType); + } + for (const chartType of chartTypes) { + overrides[getSeriesType(chartType)] = seriesOverrides; + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/chartProxies/pie/pieChartProxy.ts +function calculateOffsets(offset) { + const outerRadiusOffset = offset.currentOffset; + offset.currentOffset -= offset.offsetAmount; + const innerRadiusOffset = offset.currentOffset; + offset.currentOffset -= offset.offsetAmount; + return { outerRadiusOffset, innerRadiusOffset }; +} +var PieChartProxy = class extends ChartProxy { + getUpdateOptions(params, commonChartOptions) { + return { + ...commonChartOptions, + data: this.crossFiltering ? this.getCrossFilterData(params) : params.data, + series: this.getSeries(params) + }; + } + getSeries(params) { + const [category] = params.categories; + const numFields = params.fields.length; + const offset = { + currentOffset: 0, + offsetAmount: numFields > 1 ? 20 : 40 + }; + const series = this.getFields(params).map( + (f) => { + const options = { + type: this.standaloneChartType, + angleKey: f.colId, + angleName: f.displayName, + sectorLabelKey: f.colId, + calloutLabelName: category.name, + calloutLabelKey: category.id + }; + if (this.chartType === "donut" || this.chartType === "doughnut") { + const { outerRadiusOffset, innerRadiusOffset } = calculateOffsets(offset); + const title = f.displayName ? { + title: { text: f.displayName, showInLegend: numFields > 1 } + } : void 0; + return { + ...options, + type: "donut", + outerRadiusOffset, + innerRadiusOffset, + ...title + }; + } + return options; + } + ); + return this.crossFiltering ? this.extractCrossFilterSeries(series) : series; + } + getCrossFilterData(params) { + const colId = params.fields[0].colId; + const filteredOutColId = `${colId}-filtered-out`; + return params.data.map((d) => { + const total = d[colId] + d[filteredOutColId]; + d[`${colId}-total`] = total; + d[filteredOutColId] = 1; + d[colId] = d[colId] / total; + return d; + }); + } + extractCrossFilterSeries(series) { + const primarySeries = series[0]; + const angleKey = primarySeries.angleKey; + const commonOptions = { + ...primarySeries, + radiusMin: 0, + radiusMax: 1, + listeners: { + seriesNodeClick: this.crossFilterCallback + }, + legendItemKey: primarySeries.calloutLabelKey, + angleKey: `${angleKey}-total` + }; + const primaryOptions = { + ...commonOptions, + radiusKey: angleKey, + sectorLabelKey: `${angleKey}-total` + }; + const filteredOutOptions = { + ...commonOptions, + radiusKey: `${angleKey}-filtered-out`, + showInLegend: false + }; + return [filteredOutOptions, primaryOptions]; + } + getFields(params) { + return this.chartType === "pie" ? params.fields.slice(0, 1) : params.fields; + } + getSeriesChartThemeDefaults() { + return { + series: { + highlight: getSeriesHighlight(this.crossFiltering) + } + }; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/chartMenu.ts +import { AgPromise as AgPromise14, Component as Component96, _warn as _warn66 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/chartToolbar.ts +import { Component as Component63, RefPlaceholder as RefPlaceholder51, _clearElement as _clearElement20, _createElement as _createElement18, _createIconNoSpan as _createIconNoSpan26 } from "ag-grid-community"; +var ChartToolbar = class extends Component63 { + constructor() { + super( + /* html */ + `
` + ); + this.eMenu = RefPlaceholder51; + this.buttonListenersDestroyFuncs = []; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + updateParams(params) { + const { buttons } = params; + this.createButtons(buttons); + } + createButtons(buttons) { + for (const func of this.buttonListenersDestroyFuncs) { + func?.(); + } + this.buttonListenersDestroyFuncs = []; + const menuEl = this.eMenu; + _clearElement20(menuEl); + for (const buttonConfig of buttons) { + const { buttonName, iconName, callback } = buttonConfig; + const buttonEl = this.createButton(iconName); + const tooltipTitle = this.chartTranslation.translate( + buttonName + "ToolbarTooltip" + ); + if (tooltipTitle && buttonEl instanceof HTMLElement) { + buttonEl.title = tooltipTitle; + } + this.buttonListenersDestroyFuncs.push( + ...this.addManagedElementListeners(buttonEl, { + click: (event) => callback(event.currentTarget) + }) + ); + menuEl.appendChild(buttonEl); + } + } + createButton(iconName) { + const buttonEl = _createIconNoSpan26(iconName, this.beans); + buttonEl.classList.add("ag-chart-menu-icon"); + const wrapperEl = _createElement18({ + tag: "button", + attrs: { type: "button" }, + cls: "ag-chart-menu-toolbar-button" + }); + wrapperEl.appendChild(buttonEl); + return wrapperEl; + } + destroy() { + this.buttonListenersDestroyFuncs = []; + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/tabbedChartMenu.ts +import { AgPromise as AgPromise13, Component as Component95, _createElement as _createElement19 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/chartDataPanel.ts +import { AgToggleButton as AgToggleButton5, Component as Component68, _getDocument as _getDocument7, _setDisplayed as _setDisplayed24, _warn as _warn63 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/categoriesDataPanel.ts +import { AgSelect as AgSelect4, AgToggleButton as AgToggleButton2 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/dragDataPanel.ts +import { AgSelect as AgSelect3, Component as Component65 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/widgets/agPillSelect.ts +import { + AgSelect as AgSelect2, + Component as Component64, + DragSourceType as DragSourceType8, + _escapeString as _escapeString8, + _getActiveDomElement as _getActiveDomElement15, + _removeFromParent as _removeFromParent12 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/widgets/agPillSelect.css +var agPillSelect_default = ".ag-pill-select{display:flex;flex-direction:column}.ag-pill-select .ag-column-drop-list{padding:0}:where(.ag-pill-select){.ag-select{padding-top:var(--ag-spacing)}.ag-picker-field-wrapper{background-color:transparent;border:0}.ag-picker-field-display{cursor:pointer;font-weight:500}.ag-picker-field-display,.ag-picker-field-icon{color:var(--ag-chart-menu-label-color)}}"; + +// packages/ag-grid-enterprise/src/charts/widgets/agPillSelect.ts +var AgPillSelect = class extends Component64 { + constructor(config) { + super( + /* html */ + `` + ); + this.config = config ?? {}; + const { selectedValueList, valueFormatter, valueList } = this.config; + this.selectedValues = selectedValueList ?? []; + this.valueList = valueList ?? []; + this.valueFormatter = valueFormatter ?? ((value) => _escapeString8(value)); + this.registerCSS(agPillSelect_default); + } + postConstruct() { + const { ariaLabel, onValuesChange, dragSourceId } = this.config; + this.dropZonePanel = this.createManagedBean( + new PillSelectDropZonePanel( + { + getValues: () => this.selectedValues, + setValues: (values) => this.updateValues(values), + isDraggable: () => this.selectedValues.length > 1 + }, + (value) => this.valueFormatter(value), + ariaLabel, + dragSourceId + ) + ); + const eGui = this.getGui(); + eGui.appendChild(this.dropZonePanel.getGui()); + this.initSelect(); + if (onValuesChange != null) { + this.onValuesChange = onValuesChange; + } + } + setValues(valueList, selectedValues) { + const { added, removed, updated } = this.getChanges(this.valueList, valueList); + let refreshSelect = false; + if (added.length || removed.length || updated.length) { + refreshSelect = true; + } + this.valueList = valueList; + this.updateValues(selectedValues, refreshSelect, true); + return this; + } + setValueFormatter(valueFormatter) { + this.valueFormatter = valueFormatter; + return this; + } + initSelect() { + const options = this.createSelectOptions(); + if (!options.length) { + return false; + } + const { selectPlaceholder: placeholder } = this.config; + this.eSelect = this.createBean( + new AgSelect2({ + options, + placeholder, + onValueChange: (value) => this.addValue(value), + pickerIcon: "chartsMenuAdd" + }) + ); + this.getGui().appendChild(this.eSelect.getGui()); + return true; + } + createSelectOptions() { + const options = []; + const { maxSelection } = this.config; + if (maxSelection && this.selectedValues.length >= maxSelection) { + return options; + } + for (const value of this.valueList) { + if (!this.selectedValues.includes(value)) { + options.push({ value, text: this.valueFormatter(value) }); + } + } + return options; + } + addValue(value) { + this.dropZonePanel.addItem(value); + } + updateValues(values, forceRefreshSelect, silent) { + const previousSelectedValues = this.selectedValues; + this.selectedValues = values; + const changes = this.getChanges(previousSelectedValues, values); + const refreshSelect = forceRefreshSelect || changes.added.length || changes.removed.length; + const activeElement = _getActiveDomElement15(this.beans); + const selectHasFocus = this.eSelect?.getGui().contains(activeElement); + const dropZoneHasFocus = this.dropZonePanel?.getGui().contains(activeElement); + if (!silent) { + this.onValuesChange?.(changes); + } + const emptyRefreshedSelect = refreshSelect ? !this.refreshSelect() : false; + this.dropZonePanel.refreshGui(); + if (refreshSelect && selectHasFocus) { + if (emptyRefreshedSelect) { + this.dropZonePanel.focusList(true); + } else { + this.eSelect?.getFocusableElement().focus(); + } + } + if (dropZoneHasFocus && !values.length) { + this.eSelect?.getFocusableElement().focus(); + } + } + getChanges(previousSelectedValues, newSelectedValues) { + const added = newSelectedValues.filter((value) => !previousSelectedValues.includes(value)); + const removed = previousSelectedValues.filter((value) => !newSelectedValues.includes(value)); + const updated = newSelectedValues.filter((value, index) => previousSelectedValues[index] !== value); + return { added, removed, updated, selected: newSelectedValues }; + } + refreshSelect() { + if (!this.eSelect) { + return this.initSelect(); + } + const options = this.createSelectOptions(); + if (!options.length) { + _removeFromParent12(this.eSelect.getGui()); + this.eSelect = this.destroyBean(this.eSelect); + return false; + } + this.eSelect.clearOptions().addOptions(options).setValue(void 0, true); + return true; + } + destroy() { + this.destroyBean(this.eSelect); + super.destroy(); + } +}; +var PillSelectDragComp = class extends PillDragComp { + constructor(value, dragSourceDropTarget, ghost, valueFormatter, draggable, sourceId) { + super(dragSourceDropTarget, ghost, false); + this.value = value; + this.valueFormatter = valueFormatter; + this.draggable = draggable; + this.sourceId = sourceId; + } + getItem() { + return this.value; + } + getDisplayName() { + return this.valueFormatter(this.value); + } + getAriaDisplayName() { + return this.getDisplayName(); + } + getTooltip() { + return void 0; + } + createGetDragItem() { + return () => ({ + value: this.value + }); + } + getDragSourceType() { + return DragSourceType8.ChartPanel; + } + getDragSourceId() { + return this.sourceId; + } + isMovable() { + return this.isDraggable(); + } + isDraggable() { + return this.draggable; + } +}; +var PillSelectDropZonePanel = class extends PillDropZonePanel { + constructor(model, valueFormatter, ariaLabel, sourceId) { + super(false); + this.model = model; + this.valueFormatter = valueFormatter; + this.ariaLabel = ariaLabel; + this.sourceId = sourceId; + } + postConstruct() { + super.init(); + } + isItemDroppable(item, draggingEvent) { + return this.isSourceEventFromTarget(draggingEvent) || this.sourceId != null && this.sourceId === draggingEvent.dragSource.sourceId; + } + updateItems(items) { + this.model.setValues(items); + } + getExistingItems() { + return this.model.getValues(); + } + getIconName() { + return this.isPotentialDndItems() ? "move" : "notAllowed"; + } + getAriaLabel() { + return this.ariaLabel; + } + createPillComponent(item, dropTarget, ghost) { + return new PillSelectDragComp( + item, + dropTarget, + ghost, + this.valueFormatter, + this.model.isDraggable(), + this.sourceId + ); + } + getItems(dragItem) { + return [dragItem.value]; + } + isInterestedIn(type) { + return type === DragSourceType8.ChartPanel; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/dragDataPanel.ts +var DragDataPanel = class extends Component65 { + constructor(chartController, allowMultipleSelection, maxSelection, template) { + super(template); + this.chartController = chartController; + this.allowMultipleSelection = allowMultipleSelection; + this.maxSelection = maxSelection; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + addItem(eItem) { + this.groupComp.addItem(eItem); + } + createGroup(columns, valueFormatter, selectLabelKey, dragSourceId, skipAnimation) { + if (this.allowMultipleSelection) { + const selectedValueList = columns.filter((col) => col.selected); + this.valuePillSelect = this.groupComp.createManagedBean( + new AgPillSelect({ + valueList: columns, + selectedValueList, + valueFormatter, + selectPlaceholder: this.chartTranslation.translate(selectLabelKey), + dragSourceId, + onValuesChange: (params) => this.onValueChange(params), + maxSelection: this.maxSelection + }) + ); + this.groupComp.addItem(this.valuePillSelect); + } else { + const params = this.createValueSelectParams(columns); + params.onValueChange = (updatedColState) => { + for (const col of columns) { + col.selected = false; + } + updatedColState.selected = true; + if (updatedColState.colId === DEFAULT_CHART_CATEGORY) { + this.chartController.setAggFunc(void 0, true); + } + this.chartController.updateForPanelChange({ updatedColState, skipAnimation: skipAnimation?.() }); + }; + this.valueSelect = this.groupComp.createManagedBean(new AgSelect3(params)); + this.groupComp.addItem(this.valueSelect); + } + } + refreshValueSelect(columns) { + if (!this.valueSelect) { + return; + } + const { options, value } = this.createValueSelectParams(columns); + this.valueSelect.clearOptions().addOptions(options).setValue(value, true); + } + createValueSelectParams(columns) { + let selectedValue; + const options = columns.map((value) => { + const text = value.displayName ?? ""; + if (value.selected) { + selectedValue = value; + } + return { + value, + text + }; + }); + return { + options, + value: selectedValue + }; + } + onValueChange({ added, updated, removed, selected }) { + let updatedColState; + let resetOrder; + const updateOrder = () => { + selected.forEach((col, index) => { + col.order = index; + }); + resetOrder = true; + }; + if (added.length) { + updatedColState = added[0]; + updatedColState.selected = true; + updateOrder(); + } else if (removed.length) { + updatedColState = removed[0]; + updatedColState.selected = false; + } else if (updated.length) { + updateOrder(); + updatedColState = updated[0]; + } + if (updatedColState) { + this.chartController.updateForPanelChange({ updatedColState, resetOrder }); + } + } + destroy() { + this.valuePillSelect = void 0; + this.valueSelect = void 0; + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/categoriesDataPanel.ts +var DEFAULT_AGG_FUNC = "sum"; +var CategoriesDataPanel = class extends DragDataPanel { + constructor(chartController, title, allowMultipleSelection, dimensionCols, isOpen) { + const maxSelection = void 0; + super( + chartController, + allowMultipleSelection, + maxSelection, + /* html */ + `
` + ); + this.title = title; + this.dimensionCols = dimensionCols; + this.isOpen = isOpen; + } + postConstruct() { + this.groupComp = this.createBean( + new AgGroupComponent({ + title: this.title, + enabled: true, + suppressEnabledCheckbox: true, + suppressOpenCloseIcons: false, + cssIdentifier: "charts-data", + expanded: this.isOpen + }) + ); + this.createGroup( + this.dimensionCols, + (col) => col.displayName ?? "", + "categoryAdd", + "categorySelect", + () => !this.chartController.getAggFunc() + ); + this.createAggFuncControls(this.dimensionCols); + this.getGui().appendChild(this.groupComp.getGui()); + } + refresh(dimensionCols) { + this.valuePillSelect?.setValues( + dimensionCols, + dimensionCols.filter((col) => col.selected) + ); + this.refreshValueSelect(dimensionCols); + this.refreshAggFuncControls(dimensionCols, this.chartController.getAggFunc()); + } + createAggFuncControls(dimensionCols) { + const aggFunc = this.chartController.getAggFunc(); + this.groupComp.addItem( + this.aggFuncToggle = this.createBean( + new AgToggleButton2({ + label: this.chartTranslation.translate("aggregate"), + labelAlignment: "left", + labelWidth: "flex", + inputWidth: "flex", + value: aggFunc != void 0, + onValueChange: (value) => { + const aggFunc2 = value ? DEFAULT_AGG_FUNC : void 0; + this.chartController.setAggFunc(aggFunc2); + this.aggFuncSelect?.setValue(aggFunc2, true); + this.aggFuncSelect?.setDisplayed(aggFunc2 != void 0); + } + }) + ) + ); + this.groupComp.addItem( + this.aggFuncSelect = this.createBean( + new AgSelect4({ + options: [ + { value: "sum", text: this.chartTranslation.translate("sum") }, + { value: "first", text: this.chartTranslation.translate("first") }, + { value: "last", text: this.chartTranslation.translate("last") }, + { value: "min", text: this.chartTranslation.translate("min") }, + { value: "max", text: this.chartTranslation.translate("max") }, + { value: "count", text: this.chartTranslation.translate("count") }, + { value: "avg", text: this.chartTranslation.translate("avg") } + ], + value: typeof aggFunc === "string" ? aggFunc : void 0, + onValueChange: (value) => { + this.chartController.setAggFunc(value); + } + }) + ) + ); + this.refreshAggFuncControls(dimensionCols, aggFunc); + } + refreshAggFuncControls(dimensionCols, aggFunc) { + const selectedDimensions = dimensionCols.filter((col) => col.selected); + const supportsAggregation = selectedDimensions.some((col) => col.colId !== DEFAULT_CHART_CATEGORY); + this.aggFuncToggle?.setValue(aggFunc != void 0); + this.aggFuncSelect?.setValue(typeof aggFunc === "string" ? aggFunc : void 0, true); + this.aggFuncToggle?.setDisplayed(supportsAggregation); + this.aggFuncSelect?.setDisplayed(supportsAggregation && aggFunc != void 0); + } + clearAggFuncControls() { + this.aggFuncToggle = this.destroyBean(this.aggFuncToggle); + this.aggFuncSelect = this.destroyBean(this.aggFuncSelect); + } + destroy() { + this.clearAggFuncControls(); + this.groupComp = this.destroyBean(this.groupComp); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/chartSpecificDataPanel.ts +import { AgSelect as AgSelect5, AgToggleButton as AgToggleButton3, Component as Component66, RefPlaceholder as RefPlaceholder52 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/chartMenuParamsFactory.ts +import { BeanStub as BeanStub98 } from "ag-grid-community"; +var ChartMenuParamsFactory = class extends BeanStub98 { + constructor(chartOptionsProxy) { + super(); + this.chartOptionsProxy = chartOptionsProxy; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + getDefaultColorPickerParams(expression, labelKey, options) { + return this.addValueParams( + expression, + { + label: this.chartTranslation.translate(labelKey ?? "color"), + labelWidth: "flex", + inputWidth: "flex", + labelAlignment: "top", + pickerGap: 6 + }, + options + ); + } + getDefaultNumberInputParams(expression, labelKey, options) { + return this.addValueParams( + expression, + { + label: this.chartTranslation.translate(labelKey), + labelAlignment: "top", + labelWidth: "flex", + inputWidth: "flex", + precision: options?.precision, + step: options?.step, + min: options?.min, + max: options?.max + }, + { + parseInputValue: (value) => { + const numberValue = Number(value); + return isNaN(numberValue) ? void 0 : numberValue; + }, + formatInputValue: (value) => { + return value == null ? "" : `${value}`; + } + } + ); + } + getDefaultSliderParams(expression, labelKey, defaultMaxValue, isArray) { + let value = this.chartOptionsProxy.getValue(expression) ?? 0; + if (isArray && Array.isArray(value)) { + value = value[0]; + } + const params = this.getDefaultSliderParamsWithoutValueParams(value, labelKey, defaultMaxValue); + params.onValueChange = (value2) => this.chartOptionsProxy.setValue(expression, isArray ? [value2] : value2); + return params; + } + getDefaultSliderParamsWithoutValueParams(value, labelKey, defaultMaxValue) { + return { + label: this.chartTranslation.translate(labelKey), + minValue: 0, + maxValue: Math.max(value, defaultMaxValue), + textFieldWidth: 45, + value: `${value}` + }; + } + getDefaultCheckboxParams(expression, labelKey, options) { + const value = this.chartOptionsProxy.getValue(expression); + const params = { + label: this.chartTranslation.translate(labelKey), + value, + readOnly: options?.readOnly, + passive: options?.passive + }; + params.onValueChange = (value2) => { + this.chartOptionsProxy.setValue(expression, typeof value2 === "boolean" ? value2 : void 0); + }; + return params; + } + getDefaultToggleParams(expression, labelKey, options) { + const value = this.chartOptionsProxy.getValue(expression); + const params = { + label: this.chartTranslation.translate(labelKey), + labelAlignment: "left", + labelWidth: "flex", + inputWidth: "flex", + value, + readOnly: options?.readOnly, + passive: options?.passive + }; + params.onValueChange = (value2) => { + this.chartOptionsProxy.setValue(expression, typeof value2 === "boolean" ? value2 : void 0); + }; + return params; + } + getDefaultSelectParams(expression, labelKey, dropdownOptions) { + return this.getDefaultSelectParamsWithoutValueParams( + labelKey, + dropdownOptions, + this.chartOptionsProxy.getValue(expression), + (value) => { + this.chartOptionsProxy.setValue(expression, value); + } + ); + } + getDefaultSelectParamsWithoutValueParams(labelKey, options, value, onValueChange) { + return { + label: this.chartTranslation.translate(labelKey), + labelAlignment: "top", + options, + pickerGap: 6, + value, + onValueChange + }; + } + getDefaultFontPanelParams(expression, labelKey) { + const keyMapper = (key) => `${expression}.${key}`; + return this.addEnableParams(keyMapper("enabled"), { + name: this.chartTranslation.translate(labelKey), + suppressEnabledCheckbox: false, + chartMenuParamsFactory: this, + keyMapper + }); + } + addValueParams(expression, params, options) { + const optionsValue = this.chartOptionsProxy.getValue(expression); + params.value = options?.formatInputValue ? options.formatInputValue(optionsValue) : optionsValue; + params.onValueChange = (value) => { + const optionsValue2 = options?.parseInputValue ? options.parseInputValue(value) : value; + this.chartOptionsProxy.setValue(expression, optionsValue2); + }; + return params; + } + addEnableParams(expression, params) { + params.enabled = this.chartOptionsProxy.getValue(expression) ?? false; + params.onEnableChange = (value) => this.chartOptionsProxy.setValue(expression, value); + return params; + } + getChartOptions() { + return this.chartOptionsProxy; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/chartSpecificDataPanel.ts +var ChartSpecificDataPanel = class extends Component66 { + constructor(chartMenuContext, isOpen) { + super(); + this.chartMenuContext = chartMenuContext; + this.isOpen = isOpen; + this.chartSpecificGroup = RefPlaceholder52; + this.hasContent = false; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + this.chartSvc = beans.chartSvc; + } + postConstruct() { + const title = this.getTitle(); + const chartSpecificGroupParams = { + title, + enabled: true, + suppressEnabledCheckbox: true, + suppressOpenCloseIcons: false, + cssIdentifier: "charts-data", + expanded: this.isOpen, + items: [...this.createDirectionSelect(), this.createReverseSelect(), this.createGroupTypeSelect()] + }; + this.setTemplate( + /* html */ + ` +
+ +
`, + [AgGroupComponentSelector], + { + chartSpecificGroup: chartSpecificGroupParams + } + ); + this.setDisplayed(this.hasContent); + } + refresh() { + this.hasContent = false; + this.chartSpecificGroup.setTitle(this.getTitle()); + this.updateDirectionSelect(); + this.updateReverseSelect(); + this.updateGroupTypeSelect(); + this.setDisplayed(this.hasContent); + } + getTitle() { + const chartType = this.chartMenuContext.chartController.getChartType(); + return this.chartTranslation.translate(getFullChartNameTranslationKey(chartType)); + } + createDirectionSelect() { + if (!this.chartSvc.isEnterprise()) { + return []; + } + const { chartOptionsService, chartController } = this.chartMenuContext; + const chartOptionsSeriesProxy = chartOptionsService.getSeriesOptionsProxy( + () => getSeriesType(chartController.getChartType()) + ); + const chartSeriesMenuParamsFactory = this.createManagedBean( + new ChartMenuParamsFactory(chartOptionsSeriesProxy) + ); + const options = ["horizontal", "vertical"].map((value) => ({ + value, + text: this.chartTranslation.translate(value) + })); + const params = chartSeriesMenuParamsFactory.getDefaultSelectParams("direction", "direction", options); + const onValueChange = params.onValueChange; + params.onValueChange = (value) => { + onValueChange(value); + chartController.raiseChartModelUpdateEvent(); + }; + this.directionSelect = this.createManagedBean(new AgSelect5(params)); + this.updateDirectionSelect(); + return [this.directionSelect]; + } + createReverseSelect() { + const { chartMenuParamsFactory } = this.chartMenuContext; + const params = chartMenuParamsFactory.getDefaultToggleParams("series.reverse", "reverse"); + this.reverseToggle = this.createManagedBean(new AgToggleButton3(params)); + this.updateReverseSelect(); + return this.reverseToggle; + } + updateReverseSelect() { + const isDisplayed = this.chartMenuContext.chartController.getChartType() === "pyramid"; + this.updateDisplayed(this.reverseToggle, isDisplayed); + } + updateDirectionSelect() { + const isDisplayed = canSwitchDirection(this.chartMenuContext.chartController.getChartType()); + this.updateDisplayed(this.directionSelect, isDisplayed); + } + createGroupTypeSelect() { + const { chartController, chartMenuParamsFactory } = this.chartMenuContext; + this.groupTypeSelect = this.createManagedBean( + new AgSelect5( + chartMenuParamsFactory.getDefaultSelectParamsWithoutValueParams( + "seriesGroupType", + SERIES_GROUP_TYPES.map((value) => ({ + value, + text: this.chartTranslation.translate(`${value}SeriesGroupType`) + })), + chartController.getSeriesGroupType(), + (value) => chartController.setSeriesGroupType(value) + ) + ) + ); + this.updateGroupTypeSelect(); + return this.groupTypeSelect; + } + updateGroupTypeSelect() { + const isDisplayed = ["radialColumn", "radialBar", "nightingale"].includes( + this.chartMenuContext.chartController.getChartType() + ); + this.updateDisplayed(this.groupTypeSelect, isDisplayed); + } + updateDisplayed(select, isDisplayed) { + select?.setDisplayed(isDisplayed); + if (select) { + this.hasContent = this.hasContent || isDisplayed; + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/seriesChartTypePanel.ts +import { AgCheckbox, AgSelect as AgSelect6, Component as Component67, _areEqual as _areEqual7, _clearElement as _clearElement21 } from "ag-grid-community"; +var SeriesChartTypePanel = class extends Component67 { + constructor(chartController, columns, isOpen) { + super( + /* html */ + `
` + ); + this.chartController = chartController; + this.columns = columns; + this.isOpen = isOpen; + this.selectedColIds = []; + this.chartTypeComps = /* @__PURE__ */ new Map(); + this.secondaryAxisComps = /* @__PURE__ */ new Map(); + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + this.createSeriesChartTypeGroup(this.columns); + } + refresh(columns) { + if (!_areEqual7(this.getValidColIds(columns), this.selectedColIds)) { + this.recreate(columns); + } else { + this.refreshComps(); + } + } + recreate(columns) { + this.isOpen = this.seriesChartTypeGroupComp.isExpanded(); + _clearElement21(this.getGui()); + this.destroyBean(this.seriesChartTypeGroupComp); + this.columns = columns; + this.selectedColIds = []; + this.clearComps(); + this.postConstruct(); + } + getValidColIds(columns) { + const seriesChartTypes = this.chartController.getSeriesChartTypes(); + return columns.filter((col) => col.selected && !!seriesChartTypes.filter((s2) => s2.colId === col.colId)[0]).map(({ colId }) => colId); + } + createSeriesChartTypeGroup(columns) { + this.seriesChartTypeGroupComp = this.createBean( + new AgGroupComponent({ + title: this.chartTranslation.translate("seriesChartType"), + enabled: true, + suppressEnabledCheckbox: true, + suppressOpenCloseIcons: false, + cssIdentifier: "charts-data", + expanded: this.isOpen + }) + ); + const seriesChartTypes = this.chartController.getSeriesChartTypes(); + for (const col of columns) { + if (!col.selected) { + continue; + } + const seriesChartType = seriesChartTypes.filter((s2) => s2.colId === col.colId)[0]; + if (!seriesChartType) { + continue; + } + this.selectedColIds.push(col.colId); + const seriesItemGroup = this.seriesChartTypeGroupComp.createManagedBean( + new AgGroupComponent({ + title: col.displayName, + enabled: true, + suppressEnabledCheckbox: true, + suppressOpenCloseIcons: true, + cssIdentifier: "charts-format-sub-level" + }) + ); + const isSecondaryAxisDisabled = (chartType) => ["groupedColumn", "stackedColumn", "stackedArea"].includes(chartType); + const secondaryAxisComp = this.seriesChartTypeGroupComp.createManagedBean( + new AgCheckbox({ + label: this.chartTranslation.translate("secondaryAxis"), + labelWidth: "flex", + disabled: isSecondaryAxisDisabled(seriesChartType.chartType), + value: !!seriesChartType.secondaryAxis, + onValueChange: (enabled) => this.chartController.updateSeriesChartType(col.colId, void 0, enabled) + }) + ); + seriesItemGroup.addItem(secondaryAxisComp); + const options = ["line", "area", "stackedArea", "groupedColumn", "stackedColumn"].map( + (value) => ({ + value, + text: this.chartTranslation.translate(getFullChartNameTranslationKey(value)) + }) + ); + const chartTypeComp = seriesItemGroup.createManagedBean( + new AgSelect6({ + options, + value: seriesChartType.chartType, + onValueChange: (chartType) => this.chartController.updateSeriesChartType(col.colId, chartType) + }) + ); + seriesItemGroup.addItem(chartTypeComp); + this.seriesChartTypeGroupComp.addItem(seriesItemGroup); + this.chartTypeComps.set(col.colId, chartTypeComp); + this.secondaryAxisComps.set(col.colId, secondaryAxisComp); + } + this.getGui().appendChild(this.seriesChartTypeGroupComp.getGui()); + } + refreshComps() { + const seriesChartTypes = this.chartController.getSeriesChartTypes(); + for (const colId of this.selectedColIds) { + const seriesChartType = seriesChartTypes.find((chartType) => chartType.colId === colId); + if (!seriesChartType) { + continue; + } + const chartTypeComp = this.chartTypeComps.get(colId); + const secondaryAxisComp = this.secondaryAxisComps.get(colId); + chartTypeComp?.setValue(seriesChartType.chartType); + secondaryAxisComp?.setValue(!!seriesChartType.secondaryAxis); + secondaryAxisComp?.setDisabled(this.isSecondaryAxisDisabled(seriesChartType.chartType)); + } + } + clearComps() { + this.chartTypeComps.clear(); + this.secondaryAxisComps.clear(); + } + isSecondaryAxisDisabled(chartType) { + return ["groupedColumn", "stackedColumn", "stackedArea"].includes(chartType); + } + destroy() { + this.clearComps(); + this.seriesChartTypeGroupComp = this.destroyBean(this.seriesChartTypeGroupComp); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/seriesDataPanel.ts +import { AgToggleButton as AgToggleButton4 } from "ag-grid-community"; +var SeriesDataPanel = class extends DragDataPanel { + constructor(chartController, chartOptionsService, title, allowMultipleSelect, maxSelection, valueCols, isOpen) { + super( + chartController, + allowMultipleSelect, + maxSelection, + /* html */ + `
` + ); + this.chartOptionsService = chartOptionsService; + this.title = title; + this.valueCols = valueCols; + this.isOpen = isOpen; + } + postConstruct() { + this.groupComp = this.createBean( + new AgGroupComponent({ + title: this.title, + enabled: true, + suppressEnabledCheckbox: true, + suppressOpenCloseIcons: false, + cssIdentifier: "charts-data", + expanded: this.isOpen + }) + ); + if (this.chartController.isActiveXYChart()) { + const pairedModeToggle = this.groupComp.createManagedBean( + new AgToggleButton4({ + label: this.chartTranslation.translate("paired"), + labelAlignment: "left", + labelWidth: "flex", + inputWidth: "flex", + value: this.chartOptionsService.getPairedMode(), + onValueChange: (newValue) => { + this.chartOptionsService.setPairedMode(!!newValue); + this.chartController.updateForGridChange({ maintainColState: true }); + } + }) + ); + this.groupComp.addItem(pairedModeToggle); + } + this.createGroup(this.valueCols, this.generateGetSeriesLabel(this.valueCols), "seriesAdd", "seriesSelect"); + this.getGui().appendChild(this.groupComp.getGui()); + } + refresh(valueCols) { + this.valuePillSelect?.setValueFormatter(this.generateGetSeriesLabel(valueCols)); + this.valuePillSelect?.setValues( + valueCols, + valueCols.filter((col) => col.selected) + ); + this.refreshValueSelect(valueCols); + } + generateGetSeriesLabel(valueCols) { + if (!this.chartController.isActiveXYChart()) { + return (col) => col.displayName ?? ""; + } + const selectedCols = valueCols.filter((col) => col.selected); + const isBubble = this.chartController.getChartType() === "bubble"; + const isInPairedMode = this.chartOptionsService.getPairedMode(); + const indexToAxisLabel = /* @__PURE__ */ new Map(); + indexToAxisLabel.set(0, "X"); + indexToAxisLabel.set(1, "Y"); + indexToAxisLabel.set(2, "size"); + return (col) => { + const escapedLabel = col.displayName ?? ""; + if (!col.selected) { + return escapedLabel; + } + const index = selectedCols.indexOf(col); + if (index === -1) { + return escapedLabel; + } + let axisLabel; + if (isInPairedMode) { + axisLabel = indexToAxisLabel.get(index % (isBubble ? 3 : 2)); + } else if (index === 0) { + axisLabel = "X"; + } else { + axisLabel = isBubble && index % 2 === 0 ? "size" : "Y"; + } + return `${escapedLabel} (${axisLabel})`; + }; + } + destroy() { + this.groupComp = this.destroyBean(this.groupComp); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/data/chartDataPanel.ts +var DefaultDataPanelDef = { + groups: [ + { type: "categories", isOpen: true }, + { type: "series", isOpen: true }, + { type: "seriesChartType", isOpen: true }, + { type: "chartSpecific", isOpen: true } + ] +}; +var ChartDataPanel = class extends Component68 { + constructor(chartMenuContext) { + super( + /* html */ + `
` + ); + this.chartMenuContext = chartMenuContext; + this.isSwitchCategorySeriesToggled = false; + this.restoreSwitchCategorySeriesToggleFocus = false; + this.panels = []; + this.chartController = chartMenuContext.chartController; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + this.chartSvc = beans.chartSvc; + } + postConstruct() { + this.createSwitchCategorySeriesToggle(); + this.isSwitchCategorySeriesToggled = this.chartController.isCategorySeriesSwitched(); + this.updatePanels(); + const listener = this.updatePanels.bind(this); + this.addManagedListeners(this.chartController, { + chartModelUpdate: listener, + chartApiUpdate: listener + }); + } + destroy() { + this.clearPanelComponents(); + super.destroy(); + } + updatePanels() { + const currentChartType = this.chartType; + const isSwitchCategorySeriesToggledCurrent = this.isSwitchCategorySeriesToggled; + const { dimensionCols, valueCols } = this.chartController.getColStateForMenu(); + this.chartType = this.chartController.getChartType(); + this.isSwitchCategorySeriesToggled = this.chartController.isCategorySeriesSwitched(); + const hasChangedSwitchCategorySeries = this.isSwitchCategorySeriesToggled !== isSwitchCategorySeriesToggledCurrent; + if (this.canRefresh(currentChartType, this.chartType) && !hasChangedSwitchCategorySeries) { + this.categoriesDataPanel?.refresh(dimensionCols); + this.seriesDataPanel?.refresh(valueCols); + this.seriesChartTypePanel?.refresh(valueCols); + this.chartSpecificPanel?.refresh(); + } else { + this.recreatePanels(dimensionCols, valueCols); + } + const isSwitchCategorySeriesDisplayed = supportsInvertedCategorySeries(this.chartType) && this.chartSvc.isEnterprise() && !this.chartController.isGrouping(); + _setDisplayed24(this.switchCategorySeriesToggle.getGui(), isSwitchCategorySeriesDisplayed); + if (hasChangedSwitchCategorySeries) { + this.switchCategorySeriesToggle?.setValue(this.chartController.isCategorySeriesSwitched()); + } + if (this.restoreSwitchCategorySeriesToggleFocus) { + this.restoreSwitchCategorySeriesToggleFocus = false; + if (isSwitchCategorySeriesDisplayed) { + this.switchCategorySeriesToggle.getFocusableElement().focus(); + } + } + } + canRefresh(oldChartType, newChartType) { + if (oldChartType === void 0) { + return false; + } + if (oldChartType === newChartType) { + return true; + } + const isCombo = (chartType) => ["columnLineCombo", "areaColumnCombo", "customCombo"].includes(chartType); + if (isCombo(oldChartType) && isCombo(newChartType)) { + return true; + } + return false; + } + recreatePanels(dimensionCols, valueCols) { + this.clearPanelComponents(); + const { chartType } = this; + if (!chartType) { + return; + } + const isCategorySeriesSwitched = this.chartController.isCategorySeriesSwitched(); + this.getDataPanelDef().groups?.forEach(({ type, isOpen }) => { + if (type === (isCategorySeriesSwitched ? "series" : "categories")) { + this.categoriesDataPanel = this.createBean( + new CategoriesDataPanel( + this.chartController, + this.getCategoryGroupTitle(isCategorySeriesSwitched), + this.getCategoryGroupMultipleSelect(chartType, isCategorySeriesSwitched), + dimensionCols, + isOpen + ) + ); + this.panels.push(this.categoriesDataPanel); + } else if (type === (isCategorySeriesSwitched ? "categories" : "series")) { + this.seriesDataPanel = this.createBean( + new SeriesDataPanel( + this.chartController, + this.chartMenuContext.chartOptionsService, + this.getSeriesGroupTitle(isCategorySeriesSwitched), + this.getSeriesGroupMultipleSelect(chartType, isCategorySeriesSwitched), + this.getSeriesGroupMaxSelection(chartType, isCategorySeriesSwitched), + valueCols, + isOpen + ) + ); + this.panels.push(this.seriesDataPanel); + } else if (type === "seriesChartType") { + if (this.chartController.isComboChart()) { + this.seriesChartTypePanel = this.createBean( + new SeriesChartTypePanel(this.chartController, valueCols, isOpen) + ); + this.panels.push(this.seriesChartTypePanel); + } + } else if (type === "chartSpecific") { + this.chartSpecificPanel = this.createBean(new ChartSpecificDataPanel(this.chartMenuContext, isOpen)); + this.panels.push(this.chartSpecificPanel); + } else { + _warn63(144, { type }); + } + }); + (isCategorySeriesSwitched ? this.categoriesDataPanel : this.seriesDataPanel)?.addItem( + this.switchCategorySeriesToggle.getGui() + ); + this.addPanelComponents(); + } + addPanelComponents() { + if (!this.panels.length) { + return; + } + const eDocument = _getDocument7(this.beans); + const fragment = eDocument.createDocumentFragment(); + for (const panel of this.panels) { + panel.addCss("ag-chart-data-section"); + fragment.appendChild(panel.getGui()); + } + this.getGui().appendChild(fragment); + } + clearPanelComponents() { + for (const panel of this.panels) { + panel.getGui().remove(); + this.destroyBean(panel); + } + this.panels = []; + } + getDataPanelDef() { + return this.gos.get("chartToolPanelsDef")?.dataPanel ?? DefaultDataPanelDef; + } + getCategoryGroupTitle(isCategorySeriesSwitched) { + if (isCategorySeriesSwitched) { + return this.chartTranslation.translate("seriesLabels"); + } + return this.chartTranslation.translate(this.chartController.isActiveXYChart() ? "labels" : "categories"); + } + getCategoryGroupMultipleSelect(chartType, isCategorySeriesSwitched) { + if (isCategorySeriesSwitched) { + return false; + } + return getMaxNumCategories(chartType) !== 1; + } + getSeriesGroupTitle(isCategorySeriesSwitched) { + if (isCategorySeriesSwitched) { + return this.chartTranslation.translate("categoryValues"); + } + return this.chartTranslation.translate(this.chartController.isActiveXYChart() ? "xyValues" : "series"); + } + getSeriesGroupMultipleSelect(chartType, isCategorySeriesSwitched) { + return this.getSeriesGroupMaxSelection(chartType, isCategorySeriesSwitched) !== 1; + } + getSeriesGroupMaxSelection(chartType, isCategorySeriesSwitched) { + if (isCategorySeriesSwitched) { + return void 0; + } + return getMaxNumSeries(chartType); + } + createSwitchCategorySeriesToggle() { + this.switchCategorySeriesToggle = this.createManagedBean( + new AgToggleButton5({ + label: this.chartTranslation.translate("switchCategorySeries"), + labelAlignment: "left", + labelWidth: "flex", + inputWidth: "flex", + value: this.chartController.isCategorySeriesSwitched(), + onValueChange: (value) => { + this.restoreSwitchCategorySeriesToggleFocus = true; + this.chartController.switchCategorySeries(value); + } + }) + ); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/formatPanel.ts +import { Component as Component91, _warn as _warn64 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/axis/cartesianAxisPanel.ts +import { + AgCheckbox as AgCheckbox2, + AgSelectSelector as AgSelectSelector3, + Component as Component72, + RefPlaceholder as RefPlaceholder56, + _removeFromParent as _removeFromParent14, + _setDisplayed as _setDisplayed25 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/widgets/agAngleSelect.ts +import { + AgAbstractLabel as AgAbstractLabel2, + AgInputNumberFieldSelector as AgInputNumberFieldSelector3, + RefPlaceholder as RefPlaceholder53, + _exists as _exists28, + _getActiveDomElement as _getActiveDomElement16, + _setFixedWidth +} from "ag-grid-community"; +var AgAngleSelect = class extends AgAbstractLabel2 { + constructor(config) { + super( + config, + /* html */ + `
+
+
+
+
+
+
+
+ +
+
`, + [AgInputNumberFieldSelector3] + ); + this.eLabel = RefPlaceholder53; + this.eParentCircle = RefPlaceholder53; + this.eChildCircle = RefPlaceholder53; + this.eAngleValue = RefPlaceholder53; + this.radius = 0; + this.offsetX = 0; + this.offsetY = 0; + } + wireBeans(beans) { + this.dragSvc = beans.dragSvc; + } + postConstruct() { + super.postConstruct(); + const { value, onValueChange } = this.config; + if (value != null) { + this.setValue(value, void 0, true); + } + if (onValueChange != null) { + this.onValueChange(onValueChange); + } + this.dragListener = { + eElement: this.eParentCircle, + dragStartPixels: 0, + onDragStart: () => { + this.parentCircleRect = this.eParentCircle.getBoundingClientRect(); + }, + onDragging: (e) => this.calculateAngleDrag(e), + onDragStop: () => { + } + }; + this.dragSvc?.addDragSource(this.dragListener); + this.eAngleValue.setLabel("").setLabelWidth(5).setInputWidth(45).setMin(0).setMax(360).setValue(`${this.degrees}`).onValueChange((value2) => { + if (value2 == null || value2 === "") { + value2 = "0"; + } + value2 = this.eAngleValue.normalizeValue(value2); + let floatValue = parseFloat(value2); + if (floatValue > 180) { + floatValue = floatValue - 360; + } + this.setValue(floatValue); + }); + this.updateNumberInput(); + if (_exists28(this.getValue())) { + this.eAngleValue.setValue(this.normalizeNegativeValue(this.getValue()).toString()); + } + this.addManagedListeners(this, { + fieldValueChanged: () => { + if (this.eAngleValue.getInputElement().contains(_getActiveDomElement16(this.beans))) { + return; + } + this.updateNumberInput(); + } + }); + } + updateNumberInput() { + const normalizedValue = this.normalizeNegativeValue(this.getValue()); + this.eAngleValue.setValue(normalizedValue.toString()); + } + positionChildCircle(radians) { + const rect = this.parentCircleRect || { width: 24, height: 24 }; + const eChildCircle = this.eChildCircle; + const centerX = rect.width / 2; + const centerY = rect.height / 2; + eChildCircle.style.left = `${centerX + Math.cos(radians) * 8}px`; + eChildCircle.style.top = `${centerY + Math.sin(radians) * 8}px`; + } + calculatePolar() { + const x = this.offsetX; + const y = this.offsetY; + const radians = Math.atan2(y, x); + this.degrees = this.toDegrees(radians); + this.radius = Math.sqrt(x * x + y * y); + this.positionChildCircle(radians); + } + calculateCartesian() { + const radians = this.toRadians(this.getValue()); + const radius = this.getRadius(); + this.setOffsetX(Math.cos(radians) * radius).setOffsetY(Math.sin(radians) * radius); + } + setOffsetX(offset) { + if (this.offsetX !== offset) { + this.offsetX = offset; + this.calculatePolar(); + } + return this; + } + setOffsetY(offset) { + if (this.offsetY !== offset) { + this.offsetY = offset; + this.calculatePolar(); + } + return this; + } + calculateAngleDrag(e) { + const rect = this.parentCircleRect; + const centerX = rect.width / 2; + const centerY = rect.height / 2; + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + const dx = x - centerX; + const dy = y - centerY; + const radians = Math.atan2(dy, dx); + this.setValue(radians, true); + } + toDegrees(radians) { + return radians / Math.PI * 180; + } + toRadians(degrees) { + return degrees / 180 * Math.PI; + } + normalizeNegativeValue(degrees) { + return degrees < 0 ? 360 + degrees : degrees; + } + normalizeAngle180(radians) { + radians %= Math.PI * 2; + if (radians < -Math.PI) { + radians += Math.PI * 2; + } else if (radians >= Math.PI) { + radians -= Math.PI * 2; + } + return radians; + } + getRadius() { + return this.radius; + } + setRadius(r) { + if (this.radius === r) { + return this; + } + this.radius = r; + this.calculateCartesian(); + return this; + } + onValueChange(callbackFn) { + this.addManagedListeners(this, { + fieldValueChanged: () => { + callbackFn(this.degrees); + } + }); + return this; + } + getValue(radians) { + return radians ? this.toRadians(this.degrees) : this.degrees; + } + setValue(degrees, radians, silent) { + let radiansValue; + if (!radians) { + radiansValue = this.normalizeAngle180(this.toRadians(degrees)); + } else { + radiansValue = degrees; + } + degrees = this.toDegrees(radiansValue); + if (this.degrees !== degrees) { + this.degrees = Math.floor(degrees); + this.calculateCartesian(); + this.positionChildCircle(radiansValue); + if (!silent) { + this.dispatchLocalEvent({ type: "fieldValueChanged" }); + } + } + return this; + } + setWidth(width) { + _setFixedWidth(this.getGui(), width); + return this; + } + setDisabled(disabled) { + super.setDisabled(disabled); + this.eAngleValue.setDisabled(disabled); + return this; + } + destroy() { + this.dragSvc?.removeDragSource(this.dragListener); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/fontPanel.ts +import { AgSelectSelector as AgSelectSelector2, Component as Component69, RefPlaceholder as RefPlaceholder54, _removeFromParent as _removeFromParent13 } from "ag-grid-community"; +function _capitalise(str) { + return str[0].toUpperCase() + str.substring(1).toLowerCase(); +} +var FontPanel = class extends Component69 { + constructor(params) { + super(); + this.params = params; + this.fontGroup = RefPlaceholder54; + this.activeComps = []; + this.chartOptions = params.chartMenuParamsFactory.getChartOptions(); + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const { + cssIdentifier = "charts-format-sub-level", + name: title, + enabled, + onEnableChange, + suppressEnabledCheckbox, + chartMenuParamsFactory, + keyMapper + } = this.params; + const fontGroupParams = { + cssIdentifier, + direction: "vertical", + suppressOpenCloseIcons: true, + title, + enabled, + suppressEnabledCheckbox: true, + onEnableChange: (enabled2) => { + if (onEnableChange) { + onEnableChange(enabled2); + } + }, + useToggle: !suppressEnabledCheckbox + }; + this.setTemplate( + /* html */ + `
+ + + +
+ + +
+
+
`, + [AgGroupComponentSelector, AgSelectSelector2, ColorPickerSelector], + { + fontGroup: fontGroupParams, + familySelect: this.getFamilySelectParams(), + weightStyleSelect: this.getWeightStyleSelectParams(), + sizeSelect: this.getSizeSelectParams(), + colorPicker: chartMenuParamsFactory.getDefaultColorPickerParams(keyMapper("color")) + } + ); + this.toggleCss("ag-font-panel-no-header", !title); + } + addItem(comp, prepend) { + if (prepend) { + this.fontGroup.prependItem(comp); + } else { + this.fontGroup.addItem(comp); + } + this.activeComps.push(comp); + } + setEnabled(enabled) { + this.fontGroup.setEnabled(enabled); + } + getFamilySelectParams() { + const families = [ + "Arial, sans-serif", + "Aria Black, sans-serif", + "Book Antiqua, serif", + "Charcoal, sans-serif", + "Comic Sans MS, cursive", + "Courier, monospace", + "Courier New, monospace", + "Gadget, sans-serif", + "Geneva, sans-serif", + "Helvetica, sans-serif", + "Impact, sans-serif", + "Lucida Console, monospace", + "Lucida Grande, sans-serif", + "Lucida Sans Unicode, sans-serif", + "Monaco, monospace", + "Palatino Linotype, serif", + "Palatino, serif", + "Times New Roman, serif", + "Times, serif", + "Verdana, sans-serif" + ]; + const family = this.getInitialFontValue("fontFamily"); + let initialValue = families[0]; + if (family) { + const lowerCaseValues = families.map((f) => f.toLowerCase()); + const valueIndex = lowerCaseValues.indexOf(family.toLowerCase()); + if (valueIndex >= 0) { + initialValue = families[valueIndex]; + } else { + const capitalisedFontValue = _capitalise(family); + families.push(capitalisedFontValue); + initialValue = capitalisedFontValue; + } + } + const options = families.sort().map((value) => ({ value, text: value })); + return this.params.chartMenuParamsFactory.getDefaultSelectParamsWithoutValueParams( + "font", + options, + `${initialValue}`, + (newValue) => this.setFont({ fontFamily: newValue }) + ); + } + getSizeSelectParams() { + const sizes = [8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36]; + const size = this.getInitialFontValue("fontSize"); + if (!sizes.includes(size)) { + sizes.push(size); + } + const options = sizes.sort((a, b) => a - b).map((value) => ({ value: `${value}`, text: `${value}` })); + return this.params.chartMenuParamsFactory.getDefaultSelectParamsWithoutValueParams( + "size", + options, + `${size}`, + (newValue) => this.setFont({ fontSize: parseInt(newValue, 10) }) + ); + } + getWeightStyleSelectParams() { + const weight = this.getInitialFontValue("fontWeight") ?? "normal"; + const style = this.getInitialFontValue("fontStyle") ?? "normal"; + const weightStyles = [ + { name: "normal", weight: "normal", style: "normal" }, + { name: "bold", weight: "bold", style: "normal" }, + { name: "italic", weight: "normal", style: "italic" }, + { name: "boldItalic", weight: "bold", style: "italic" } + ]; + let selectedOption = weightStyles.find((x) => x.weight === weight && x.style === style); + if (!selectedOption) { + selectedOption = { name: "predefined", weight, style }; + weightStyles.unshift(selectedOption); + } + const options = weightStyles.map((ws) => ({ + value: ws.name, + text: this.chartTranslation.translate(ws.name) + })); + return this.params.chartMenuParamsFactory.getDefaultSelectParamsWithoutValueParams( + "weight", + options, + selectedOption.name, + (newValue) => { + const selectedWeightStyle = weightStyles.find((x) => x.name === newValue); + this.setFont({ fontWeight: selectedWeightStyle.weight, fontStyle: selectedWeightStyle.style }); + } + ); + } + destroyActiveComps() { + for (const comp of this.activeComps) { + _removeFromParent13(comp.getGui()); + this.destroyBean(comp); + } + } + destroy() { + this.destroyActiveComps(); + super.destroy(); + } + setFont(font) { + const { keyMapper } = this.params; + for (const fontKey of Object.keys(font)) { + const value = font[fontKey]; + if (value) { + this.chartOptions.setValue(keyMapper(fontKey), value); + } + } + } + getInitialFontValue(fontKey) { + const { keyMapper } = this.params; + return this.chartOptions.getValue(keyMapper(fontKey)); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/axis/axisTicksPanel.ts +import { Component as Component70, RefPlaceholder as RefPlaceholder55 } from "ag-grid-community"; +var AxisTicksPanel = class extends Component70 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + this.axisTicksSizeSlider = RefPlaceholder55; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const { chartMenuUtils } = this; + const axisTicksGroupParams = chartMenuUtils.addEnableParams("tick.enabled", { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("ticks"), + suppressEnabledCheckbox: true, + useToggle: true + }); + const axisTicksColorPickerParams = chartMenuUtils.getDefaultColorPickerParams("tick.stroke"); + const axisTicksWidthSliderParams = chartMenuUtils.getDefaultSliderParams("tick.width", "width", 10); + const axisTicksSizeSliderParams = chartMenuUtils.getDefaultSliderParams("tick.size", "length", 30); + this.setTemplate( + /* html */ + `
+ + + + + +
`, + [AgGroupComponentSelector, ColorPickerSelector, AgSliderSelector], + { + axisTicksGroup: axisTicksGroupParams, + axisTicksColorPicker: axisTicksColorPickerParams, + axisTicksWidthSlider: axisTicksWidthSliderParams, + axisTicksSizeSlider: axisTicksSizeSliderParams + } + ); + } + setTickSizeSliderDisplayed(displayed) { + this.axisTicksSizeSlider.setDisplayed(displayed); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/axis/gridLinePanel.ts +import { Component as Component71 } from "ag-grid-community"; +var GridLinePanel = class extends Component71 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + this.chartOptions = chartMenuUtils.getChartOptions(); + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const gridLineGroupParams = this.chartMenuUtils.addEnableParams("gridLine.enabled", { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("gridLines"), + suppressEnabledCheckbox: true, + useToggle: true + }); + const gridLineColorPickerParams = this.getGridLineColorPickerParams("color"); + const gridLineWidthSliderParams = this.getGridLineWidthSliderParams("thickness"); + const gridLineLineDashSliderParams = this.getGridLineDashSliderParams("lineDash"); + this.setTemplate( + /* html */ + `
+ + + + + +
`, + [AgGroupComponentSelector, ColorPickerSelector, AgSliderSelector], + { + gridLineGroup: gridLineGroupParams, + gridLineColorPicker: gridLineColorPickerParams, + gridLineWidthSlider: gridLineWidthSliderParams, + gridLineLineDashSlider: gridLineLineDashSliderParams + } + ); + } + getGridLineColorPickerParams(labelKey) { + return this.chartMenuUtils.getDefaultColorPickerParams("gridLine.style", labelKey, { + formatInputValue: (value) => { + return value?.[0]?.stroke; + }, + parseInputValue: (value) => { + const styles = this.chartOptions.getValue("gridLine.style") ?? []; + if (styles.length === 0) { + return [{ stroke: value, lineDash: [] }]; + } + return [{ ...styles[0], stroke: value }]; + } + }); + } + getGridLineWidthSliderParams(labelKey) { + return this.chartMenuUtils.getDefaultSliderParams("gridLine.width", labelKey, 10); + } + getGridLineDashSliderParams(labelKey) { + const initialStyles = this.chartOptions.getValue("gridLine.style"); + const initialValue = initialStyles?.[0]?.lineDash?.[0]; + const params = this.chartMenuUtils.getDefaultSliderParamsWithoutValueParams(initialValue ?? 0, labelKey, 30); + params.onValueChange = (value) => { + const stroke = this.chartOptions.getValue("gridLine.style.0.stroke"); + this.chartOptions.setValue("gridLine.style", [ + { lineDash: [value], stroke } + ]); + }; + return params; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/axis/cartesianAxisPanel.ts +var DEFAULT_TIME_AXIS_FORMAT = "%d %B %Y"; +var CartesianAxisPanel = class extends Component72 { + constructor(axisType, options) { + super(); + this.axisType = axisType; + this.options = options; + this.axisGroup = RefPlaceholder56; + this.axisTypeSelect = RefPlaceholder56; + this.axisPositionSelect = RefPlaceholder56; + this.axisTimeFormatSelect = RefPlaceholder56; + this.activePanels = []; + this.updateFuncs = []; + const { chartOptionsService, seriesType, chartController } = options; + this.chartOptionsService = chartOptionsService; + this.chartController = chartController; + this.chartOptionsSeriesProxy = chartOptionsService.getSeriesOptionsProxy(() => seriesType); + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const { isExpandedOnInit: expanded, chartOptionsService, registerGroupComponent } = this.options; + const labelKey = this.axisType; + const axisGroupParams = { + cssIdentifier: "charts-format-top-level", + direction: "vertical", + title: this.translate(labelKey), + expanded, + suppressEnabledCheckbox: true + }; + const chartAxisOptionsProxy = chartOptionsService.getCartesianAxisOptionsProxy(this.axisType); + const chartAxisOptions = this.createManagedBean(new ChartMenuParamsFactory(chartAxisOptionsProxy)); + const chartAxisThemeOverrides = this.createManagedBean( + new ChartMenuParamsFactory(chartOptionsService.getCartesianAxisThemeOverridesProxy(this.axisType)) + ); + const axisTypeSelectParams = this.getAxisTypeSelectParams( + chartAxisOptions, + chartOptionsService.getCartesianAxisAppliedThemeOverridesProxy(this.axisType) + ); + const axisPositionSelectParams = this.getAxisPositionSelectParams(chartAxisOptions); + const axisTimeFormatSelectParams = this.getAxisTimeFormatSelectParams(chartAxisOptions); + const axisColorInputParams = this.getAxisColorInputParams(chartAxisThemeOverrides); + const axisLineWidthSliderParams = this.getAxisLineWidthSliderParams(chartAxisThemeOverrides); + this.setTemplate( + /* html */ + `
+ + + + + + + +
`, + [AgGroupComponentSelector, AgSelectSelector3, ColorPickerSelector, AgSliderSelector], + { + axisGroup: axisGroupParams, + axisTypeSelect: axisTypeSelectParams ?? void 0, + axisPositionSelect: axisPositionSelectParams ?? void 0, + axisTimeFormatSelect: axisTimeFormatSelectParams ?? void 0, + axisColorInput: axisColorInputParams, + axisLineWidthSlider: axisLineWidthSliderParams + } + ); + registerGroupComponent(this.axisGroup); + this.axisTypeSelect.setDisplayed(!!axisTypeSelectParams.options?.length); + if (!axisPositionSelectParams) { + this.removeTemplateComponent(this.axisPositionSelect); + } + const updateTimeFormatVisibility = () => { + const isTimeAxis = chartAxisOptionsProxy.getValue("type") === "time"; + _setDisplayed25(this.axisTimeFormatSelect.getGui(), isTimeAxis); + }; + if (!axisTimeFormatSelectParams) { + this.removeTemplateComponent(this.axisTimeFormatSelect); + } else { + updateTimeFormatVisibility(); + this.addManagedEventListeners({ + chartOptionsChanged: () => { + updateTimeFormatVisibility(); + } + }); + } + this.initGridLines(chartAxisThemeOverrides); + this.initAxisTicks(chartAxisThemeOverrides); + this.initAxisLabels(chartAxisThemeOverrides); + const updateFns = () => { + for (const func of this.updateFuncs) { + func(); + } + }; + this.addManagedListeners(this.chartController, { + chartUpdated: updateFns, + chartModelUpdate: () => setTimeout(() => { + if (!this.isAlive()) { + return; + } + this.refreshAxisTypeSelect(chartAxisOptions); + updateTimeFormatVisibility(); + }) + }); + } + getAxisTypeSelectParams(chartAxisOptions, chartAxisAppliedThemeOverrides) { + const chartOptions = chartAxisOptions.getChartOptions(); + const axisTypeSelectOptions = this.getAxisTypeSelectOptions(); + const params = chartAxisOptions.getDefaultSelectParams("type", "axisType", axisTypeSelectOptions); + params.onValueChange = (value) => { + const previousAxisType = chartOptions.getValue("type"); + if (value === previousAxisType) { + return; + } + const previousAxisThemeOverrides = chartAxisAppliedThemeOverrides.getValue("*"); + const previousAxisIsTimeAxis = previousAxisType === "time"; + const updatedAxisIsTimeAxis = value === "time"; + const updatedLabelFormat = previousAxisIsTimeAxis !== updatedAxisIsTimeAxis ? updatedAxisIsTimeAxis ? DEFAULT_TIME_AXIS_FORMAT : void 0 : null; + if (updatedLabelFormat === void 0) { + chartOptions.clearValue?.("label", "format"); + } + this.chartOptionsService.setCartesianCategoryAxisType(this.axisType, value); + if (updatedLabelFormat != null) { + chartOptions.setValue("label.format", updatedLabelFormat); + } + chartAxisAppliedThemeOverrides.setValue("*", previousAxisThemeOverrides); + }; + return params; + } + refreshAxisTypeSelect(chartAxisOptions) { + const options = this.getAxisTypeSelectOptions(); + const hasOptions = !!options.length; + this.axisTypeSelect.setDisplayed(hasOptions); + if (!hasOptions) { + return; + } + this.axisTypeSelect.clearOptions().addOptions(options).setValue(chartAxisOptions.getChartOptions().getValue("type")); + } + getAxisTypeSelectOptions() { + const controller = this.chartController; + const chartType = controller.getChartType(); + const supportsNumericalAxis = () => { + const testDatum = controller.getChartData()[0]; + if (!testDatum) { + return false; + } + return controller.getSelectedDimensions().every((col) => !isNaN(parseFloat(testDatum[col.colId]))); + }; + if (["heatmap", "histogram", "boxPlot", "rangeBar", "scatter", "bubble"].includes(chartType) || controller.isGrouping() || !this.isCategoryAxis() || controller.isCategorySeriesSwitched() || !supportsNumericalAxis()) { + return []; + } + return ["category", "number", "time"].map((value) => ({ + value, + text: this.translate(value) + })); + } + isCategoryAxis() { + const isHorizontal = this.chartOptionsSeriesProxy.getValue("direction") === "horizontal"; + return isHorizontal && this.axisType === "yAxis" || !isHorizontal && this.axisType === "xAxis"; + } + getAxisPositionSelectParams(chartAxisOptions) { + const axisPositionSelectOptions = ((chartType, axisType) => { + if (chartType === "heatmap") { + return null; + } + if (axisType === "xAxis") { + return [ + { value: "top", text: this.translate("top") }, + { value: "bottom", text: this.translate("bottom") } + ]; + } + if (axisType === "yAxis") { + return [ + { value: "left", text: this.translate("left") }, + { value: "right", text: this.translate("right") } + ]; + } + })(this.chartController.getChartType(), this.axisType); + if (!axisPositionSelectOptions) { + return null; + } + return chartAxisOptions.getDefaultSelectParams("position", "position", axisPositionSelectOptions); + } + getAxisTimeFormatSelectParams(chartAxisOptions) { + if (!this.isCategoryAxis()) { + return null; + } + const axisTimeFormatSelectOptions = [ + { value: "%d/%m/%Y", text: this.translate("timeFormatSlashesDDMMYYYY") }, + { value: "%m/%d/%Y", text: this.translate("timeFormatSlashesMMDDYYYY") }, + { value: "%d/%m/%y", text: this.translate("timeFormatSlashesDDMMYY") }, + { value: "%m/%d/%y", text: this.translate("timeFormatSlashesMMDDYY") }, + { value: "%d.%e.%y", text: this.translate("timeFormatDotsDDMYY") }, + { value: "%e.%d.%y", text: this.translate("timeFormatDotsMDDYY") }, + { value: "%Y-%m-%d", text: this.translate("timeFormatDashesYYYYMMDD") }, + { value: "%d %B %Y", text: this.translate("timeFormatSpacesDDMMMMYYYY") }, + { value: "%H:%M:%S", text: this.translate("timeFormatHHMMSS") }, + { value: "%I:%M:%S %p", text: this.translate("timeFormatHHMMSSAmPm") } + ]; + return chartAxisOptions.getDefaultSelectParams("label.format", "timeFormat", axisTimeFormatSelectOptions); + } + getAxisColorInputParams(chartAxisThemeOverrides) { + return chartAxisThemeOverrides.getDefaultColorPickerParams("line.stroke"); + } + getAxisLineWidthSliderParams(chartAxisThemeOverrides) { + const chartOptions = chartAxisThemeOverrides.getChartOptions(); + const getAxisLineWidth = () => { + const isAxisLineEnabled = chartOptions.getValue("line.enabled"); + if (!isAxisLineEnabled) { + return null; + } + return chartOptions.getValue("line.width"); + }; + const setAxisLineWidth = (value) => { + chartOptions.setValues([ + { expression: "line.enabled", value: value != null }, + { expression: "line.width", value: value ?? 0 } + ]); + }; + const axisLineWidthSliderParams = chartAxisThemeOverrides.getDefaultSliderParamsWithoutValueParams( + getAxisLineWidth() ?? 0, + "thickness", + 10 + ); + axisLineWidthSliderParams.onValueChange = (newValue) => { + setAxisLineWidth(newValue === 0 ? null : newValue); + }; + return axisLineWidthSliderParams; + } + initGridLines(chartAxisThemeOverrides) { + const chartType = this.chartController.getChartType(); + if (chartType === "heatmap") { + return; + } + const gridLineComp = this.createBean(new GridLinePanel(chartAxisThemeOverrides)); + this.axisGroup.addItem(gridLineComp); + this.activePanels.push(gridLineComp); + } + initAxisTicks(chartAxisThemeOverrides) { + if (!this.hasConfigurableAxisTicks()) { + return; + } + const axisTicksComp = this.createBean(new AxisTicksPanel(chartAxisThemeOverrides)); + this.axisGroup.addItem(axisTicksComp); + this.activePanels.push(axisTicksComp); + const updateTickFn = () => axisTicksComp.setTickSizeSliderDisplayed(this.isGroupedCategoryAxis()); + this.updateFuncs.push(updateTickFn); + updateTickFn(); + } + hasConfigurableAxisTicks() { + const chartType = this.chartController.getChartType(); + switch (chartType) { + case "radarLine": + case "radarArea": + case "rangeBar": + case "boxPlot": + case "waterfall": + return false; + default: + return true; + } + } + initAxisLabels(chartAxisThemeOverrides) { + const params = { + name: this.translate("labels"), + enabled: true, + suppressEnabledCheckbox: true, + chartMenuParamsFactory: chartAxisThemeOverrides, + keyMapper: (key) => `label.${key}` + }; + const labelPanelComp = this.createBean(new FontPanel(params)); + this.axisGroup.addItem(labelPanelComp); + this.activePanels.push(labelPanelComp); + this.addAdditionalLabelComps(labelPanelComp, chartAxisThemeOverrides); + } + addAdditionalLabelComps(labelPanelComp, chartAxisThemeOverrides) { + this.addLabelPadding(labelPanelComp, chartAxisThemeOverrides); + const rotationComp = this.createRotationWidget("labelRotation", chartAxisThemeOverrides); + const autoRotateCb = this.initLabelRotation(rotationComp, chartAxisThemeOverrides); + labelPanelComp.addItem(autoRotateCb); + labelPanelComp.addItem(rotationComp); + } + initLabelRotation(rotationComp, chartAxisThemeOverrides) { + const chartOptions = chartAxisThemeOverrides.getChartOptions(); + const getLabelRotationValue = () => { + return chartOptions.getValue("label.rotation"); + }; + const getLabelAutoRotateValue = () => { + return chartOptions.getValue("label.autoRotate"); + }; + const updateAutoRotate = (autoRotate2) => { + if (autoRotate2) { + this.prevRotation = getLabelRotationValue(); + } + chartOptions.setValues([ + { expression: "label.autoRotate", value: autoRotate2 }, + // Clear the rotation option when activating auto-rotate, reinstate the previous value when deactivating + { expression: "label.rotation", value: autoRotate2 ? void 0 : this.prevRotation } + ]); + rotationComp.setDisplayed(!autoRotate2); + }; + const rotation = getLabelRotationValue(); + const autoRotate = typeof rotation === "number" ? false : getLabelAutoRotateValue(); + const autoRotateCheckbox = this.createBean( + new AgCheckbox2({ + label: this.translate("autoRotate"), + value: autoRotate, + onValueChange: updateAutoRotate + }) + ); + rotationComp.setDisplayed(!autoRotate); + const autoRotateUpdateFn = () => autoRotateCheckbox.setDisplayed(this.isGroupedCategoryAxis()); + this.updateFuncs.push(autoRotateUpdateFn); + autoRotateUpdateFn(); + return autoRotateCheckbox; + } + createRotationWidget(labelKey, chartAxisThemeOverrides) { + const chartOptions = chartAxisThemeOverrides.getChartOptions(); + const getLabelRotationValue = () => { + return chartOptions.getValue("label.rotation"); + }; + const setLabelRotationValue = (value) => { + return chartOptions.setValue("label.rotation", value); + }; + const degreesSymbol = String.fromCharCode(176); + const label = `${this.chartTranslation.translate(labelKey)} ${degreesSymbol}`; + const angleSelect = new AgAngleSelect({ + label, + labelWidth: "flex", + value: getLabelRotationValue() ?? 0, + onValueChange: setLabelRotationValue + }); + this.updateFuncs.push(() => { + angleSelect.setValue(getLabelRotationValue() ?? 0); + }); + return this.createBean(angleSelect); + } + isGroupedCategoryAxis() { + const axisOptionsType = this.chartOptionsService.getCartesianAxisOptionsProxy(this.axisType).getValue("type"); + if (axisOptionsType === "grouped-category") { + return !this.isCategoryAxis(); + } + return true; + } + addLabelPadding(labelPanelComp, chartAxisThemeOverrides) { + const labelPaddingSlider = this.createBean( + new AgSlider(chartAxisThemeOverrides.getDefaultSliderParams("label.spacing", "padding", 30)) + ); + labelPanelComp.addItem(labelPaddingSlider); + } + translate(key) { + return this.chartTranslation.translate(key); + } + removeTemplateComponent(component) { + _removeFromParent14(component.getGui()); + this.destroyBean(component); + } + destroyActivePanels() { + for (const panel of this.activePanels) { + _removeFromParent14(panel.getGui()); + this.destroyBean(panel); + } + } + destroy() { + this.destroyActivePanels(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/axis/polarAxisPanel.ts +import { AgSelect as AgSelect7, Component as Component73, RefPlaceholder as RefPlaceholder57 } from "ag-grid-community"; +var PolarAxisPanel = class extends Component73 { + constructor(options) { + super(); + this.options = options; + this.axisGroup = RefPlaceholder57; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const { isExpandedOnInit: expanded, chartAxisMenuParamsFactory, registerGroupComponent } = this.options; + const axisGroupParams = { + cssIdentifier: "charts-format-top-level", + direction: "vertical", + title: this.translate("polarAxis"), + expanded, + suppressEnabledCheckbox: true + }; + const axisColorInputParams = chartAxisMenuParamsFactory.getDefaultColorPickerParams("line.stroke"); + const axisLineWidthSliderParams = chartAxisMenuParamsFactory.getDefaultSliderParams( + "line.width", + "thickness", + 10 + ); + this.setTemplate( + /* html */ + `
+ + + + +
`, + [AgGroupComponentSelector, ColorPickerSelector, AgSliderSelector], + { + axisGroup: axisGroupParams, + axisColorInput: axisColorInputParams, + axisLineWidthSlider: axisLineWidthSliderParams + } + ); + registerGroupComponent(this.axisGroup); + this.initAxis(); + this.initAxisLabels(); + this.initRadiusAxis(); + } + initAxis() { + const chartType = this.options.chartController.getChartType(); + const hasConfigurableAxisShape = ["radarLine", "radarArea"].includes(chartType); + if (hasConfigurableAxisShape) { + const options = [ + { value: "circle", text: this.translate("circle") }, + { value: "polygon", text: this.translate("polygon") } + ]; + this.axisGroup.addItem( + this.createSelect({ + labelKey: "shape", + options, + property: "shape" + }) + ); + } + if (chartType !== "pie") { + this.axisGroup.addItem( + this.createSlider({ + labelKey: "innerRadius", + defaultMaxValue: 1, + property: "innerRadiusRatio" + }) + ); + } + } + initAxisLabels() { + const params = { + name: this.translate("labels"), + enabled: true, + suppressEnabledCheckbox: true, + chartMenuParamsFactory: this.options.chartAxisMenuParamsFactory, + keyMapper: (key) => `label.${key}` + }; + const labelPanelComp = this.createManagedBean(new FontPanel(params)); + const labelOrientationComp = this.createOrientationWidget(); + labelPanelComp.addItem(labelOrientationComp); + this.axisGroup.addItem(labelPanelComp); + } + createOrientationWidget() { + const options = [ + { value: "fixed", text: this.translate("fixed") }, + { value: "parallel", text: this.translate("parallel") }, + { value: "perpendicular", text: this.translate("perpendicular") } + ]; + return this.createSelect({ + labelKey: "orientation", + options, + property: "label.orientation" + }); + } + initRadiusAxis() { + const chartSeriesType = getSeriesType(this.options.chartController.getChartType()); + if (!isRadial(chartSeriesType)) { + return; + } + const items = [ + this.createSlider({ + labelKey: "groupPadding", + defaultMaxValue: 1, + property: "paddingInner" + }), + this.createSlider({ + labelKey: "seriesPadding", + defaultMaxValue: 1, + property: "groupPaddingInner" + }) + ]; + const paddingPanelComp = this.createManagedBean( + new AgGroupComponent({ + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + suppressOpenCloseIcons: true, + enabled: true, + suppressEnabledCheckbox: true, + title: this.translate("padding"), + items + }) + ).hideEnabledCheckbox(true).hideOpenCloseIcons(true); + this.axisGroup.addItem(paddingPanelComp); + } + createSlider(config) { + const { labelKey, defaultMaxValue, step = 0.05, property } = config; + const params = this.options.chartAxisMenuParamsFactory.getDefaultSliderParams( + property, + labelKey, + defaultMaxValue + ); + params.step = step; + return this.createManagedBean(new AgSlider(params)); + } + createSelect(config) { + const { labelKey, options, property } = config; + return this.createManagedBean( + new AgSelect7(this.options.chartAxisMenuParamsFactory.getDefaultSelectParams(property, labelKey, options)) + ); + } + translate(key) { + return this.chartTranslation.translate(key); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/chart/chartPanel.ts +import { Component as Component76, RefPlaceholder as RefPlaceholder59 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/chart/backgroundPanel.ts +import { Component as Component74 } from "ag-grid-community"; +var BackgroundPanel = class extends Component74 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const chartBackgroundGroupParams = this.chartMenuUtils.addEnableParams( + "background.visible", + { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("background"), + suppressEnabledCheckbox: true, + useToggle: true + } + ); + const colorPickerParams = this.chartMenuUtils.getDefaultColorPickerParams("background.fill"); + this.setTemplate( + /* html */ + `
+ + + +
`, + [AgGroupComponentSelector, ColorPickerSelector], + { + chartBackgroundGroup: chartBackgroundGroupParams, + colorPicker: colorPickerParams + } + ); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/chart/paddingPanel.ts +import { Component as Component75, RefPlaceholder as RefPlaceholder58 } from "ag-grid-community"; +var PaddingPanel = class extends Component75 { + constructor(chartMenuUtils, chartController) { + super(); + this.chartMenuUtils = chartMenuUtils; + this.chartController = chartController; + this.paddingTopSlider = RefPlaceholder58; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const chartPaddingGroupParams = { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("padding"), + suppressEnabledCheckbox: true + }; + const getSliderParams = (property) => this.chartMenuUtils.getDefaultSliderParams("padding." + property, property, 200); + this.setTemplate( + /* html */ + `
+ + + + + + +
`, + [AgGroupComponentSelector, AgSliderSelector], + { + chartPaddingGroup: chartPaddingGroupParams, + paddingTopSlider: getSliderParams("top"), + paddingRightSlider: getSliderParams("right"), + paddingBottomSlider: getSliderParams("bottom"), + paddingLeftSlider: getSliderParams("left") + } + ); + this.addManagedEventListeners({ + chartOptionsChanged: (e) => { + this.updateTopPadding(e.chartOptions); + } + }); + } + updateTopPadding(chartOptions) { + const topPadding = [...this.chartController.getChartSeriesTypes(), "common"].map((seriesType) => chartOptions?.[seriesType]?.padding?.top).find((value) => value != null); + if (topPadding != null) { + this.paddingTopSlider.setValue(`${topPadding}`); + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/chart/chartPanel.ts +var ChartPanel = class extends Component76 { + constructor(options) { + super(); + this.options = options; + this.chartGroup = RefPlaceholder59; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const { + chartController, + chartMenuParamsFactory, + isExpandedOnInit: expanded, + registerGroupComponent + } = this.options; + const chartGroupParams = { + cssIdentifier: "charts-format-top-level", + direction: "vertical", + title: this.chartTranslation.translate("chartStyle"), + expanded, + suppressEnabledCheckbox: true, + items: [ + this.createManagedBean(new PaddingPanel(chartMenuParamsFactory, chartController)), + this.createManagedBean(new BackgroundPanel(chartMenuParamsFactory)) + ] + }; + this.setTemplate( + /* html */ + `
+ +
`, + [AgGroupComponentSelector], + { chartGroup: chartGroupParams } + ); + registerGroupComponent(this.chartGroup); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/groupExpansionFeature.ts +import { BeanStub as BeanStub99 } from "ag-grid-community"; +var GroupExpansionFeature = class extends BeanStub99 { + constructor(groupContainer) { + super(); + this.groupContainer = groupContainer; + this.id = 0; + this.groupComponents = /* @__PURE__ */ new Map(); + } + addGroupComponent(groupComponent) { + const id = this.id++; + this.groupComponents.set(id, groupComponent); + if (groupComponent.isExpanded()) { + this.expandedGroupComponent = id; + } + groupComponent.onExpandedChange((expanded) => { + if (expanded) { + const previouslyExpandedGroupComponent = this.expandedGroupComponent; + this.expandedGroupComponent = id; + if (previouslyExpandedGroupComponent != null) { + const groupComponentGui = groupComponent.getGui(); + const groupPositionInViewport = groupComponentGui.offsetTop - this.groupContainer.parentElement.scrollTop; + this.groupComponents.get(previouslyExpandedGroupComponent)?.toggleGroupExpand(false, true); + let newScrollTop = groupComponentGui.offsetTop - groupPositionInViewport; + if (newScrollTop < 0) { + newScrollTop = 0; + } + if (newScrollTop !== this.groupContainer.parentElement.scrollTop) { + this.groupContainer.parentElement.scrollTop = newScrollTop; + } + } + } else { + this.expandedGroupComponent = void 0; + } + }); + } + destroy() { + this.groupComponents.clear(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/legend/legendPanel.ts +import { AgCheckbox as AgCheckbox3, AgSelect as AgSelect8, Component as Component77, RefPlaceholder as RefPlaceholder60 } from "ag-grid-community"; +var LegendPanel = class extends Component77 { + constructor(options, chartMenuContext) { + super(); + this.options = options; + this.legendGroup = RefPlaceholder60; + this.enabledGroup = RefPlaceholder60; + this.isGradient = ["treemap", "sunburst", "heatmap"].includes(options.seriesType); + this.key = this.isGradient ? "gradientLegend" : "legend"; + this.chartController = chartMenuContext.chartController; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const { chartMenuParamsFactory, isExpandedOnInit: expanded, registerGroupComponent } = this.options; + const positionSelect = this.createManagedBean( + new AgSelect8( + chartMenuParamsFactory.getDefaultSelectParams( + `${this.key}.position`, + "position", + ["top", "right", "bottom", "left"].map((position) => ({ + value: position, + text: this.chartTranslation.translate(position) + })) + ) + ) + ); + this.enabledGroup = this.createManagedBean( + new AgGroupComponent( + chartMenuParamsFactory.addEnableParams(`${this.key}.enabled`, { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("legendEnabled"), + suppressEnabledCheckbox: true, + useToggle: true, + items: [ + this.createLabelPanel(chartMenuParamsFactory), + positionSelect, + ...this.getItems(chartMenuParamsFactory) + ] + }) + ) + ); + const legendGroupParams = { + cssIdentifier: "charts-format-top-level", + direction: "vertical", + title: this.chartTranslation.translate("legend"), + suppressEnabledCheckbox: true, + expanded, + items: [this.enabledGroup] + }; + this.setTemplate( + /* html */ + `
+ + +
`, + [AgGroupComponentSelector], + { + legendGroup: legendGroupParams + } + ); + registerGroupComponent(this.legendGroup); + const listener = this.updateLegendEnabledState.bind(this); + this.addManagedListeners(this.chartController, { + chartModelUpdate: listener, + chartApiUpdate: listener + }); + } + updateLegendEnabledState() { + const { valueCols } = this.chartController.getColStateForMenu(); + this.enabledGroup.setEnabled(valueCols.filter((vc) => vc.selected).length > 1); + } + getItems(chartMenuParamsFactory) { + const createSlider = (expression, labelKey, defaultMaxValue) => this.createManagedBean( + new AgSlider( + chartMenuParamsFactory.getDefaultSliderParams( + `${this.key}.${expression}`, + labelKey, + defaultMaxValue + ) + ) + ); + if (this.isGradient) { + return [ + this.createManagedBean( + new AgCheckbox3( + chartMenuParamsFactory.addValueParams("gradientLegend.reverseOrder", { + label: this.chartTranslation.translate("reverseDirection"), + labelWidth: "flex" + }) + ) + ), + createSlider("gradient.thickness", "thickness", 40), + createSlider("gradient.preferredLength", "preferredLength", 300), + createSlider("spacing", "spacing", 200) + ]; + } + return [ + createSlider("spacing", "spacing", 200), + createSlider("item.marker.size", "markerSize", 40), + createSlider("item.marker.strokeWidth", "markerStroke", 10), + createSlider("item.marker.padding", "itemSpacing", 20), + createSlider("item.paddingX", "layoutHorizontalSpacing", 50), + createSlider("item.paddingY", "layoutVerticalSpacing", 50) + ]; + } + createLabelPanel(chartMenuParamsFactory) { + const rootKey = this.isGradient ? "gradientLegend.scale.label" : "legend.item.label"; + const params = { + enabled: true, + suppressEnabledCheckbox: true, + chartMenuParamsFactory, + keyMapper: (key) => `${rootKey}.${key}`, + cssIdentifier: "charts-format-sub-level-no-header" + }; + return this.createManagedBean(new FontPanel(params)); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/seriesPanel.ts +import { AgSelect as AgSelect9, Component as Component88, RefPlaceholder as RefPlaceholder64, _error as _error9, _removeFromParent as _removeFromParent17 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/toggleablePanel.ts +import { Component as Component78, RefPlaceholder as RefPlaceholder61, _removeFromParent as _removeFromParent15 } from "ag-grid-community"; +var ToggleablePanel = class extends Component78 { + constructor(params) { + super(); + this.params = params; + this.toggleableGroup = RefPlaceholder61; + this.activeComps = []; + this.chartOptions = params.chartMenuParamsFactory.getChartOptions(); + } + postConstruct() { + const { tag, cssIdentifier = "charts-format-sub-level", title, suppressEnabledCheckbox } = this.params; + const groupParams = this.params.chartMenuParamsFactory.addEnableParams(`${tag}.enabled`, { + cssIdentifier, + direction: "vertical", + suppressOpenCloseIcons: true, + title, + suppressEnabledCheckbox: true, + useToggle: !suppressEnabledCheckbox + }); + this.setTemplate( + /* html */ + `
+ + +
`, + [AgGroupComponentSelector], + { + toggleableGroup: groupParams + } + ); + this.toggleCss(`ag-toggleable-group-panel-no-header`, !title); + } + addItem(comp, prepend) { + if (prepend) { + this.toggleableGroup.prependItem(comp); + } else { + this.toggleableGroup.addItem(comp); + } + this.activeComps.push(comp); + } + setEnabled(enabled) { + this.toggleableGroup.setEnabled(enabled); + } + destroyActiveComps() { + for (const comp of this.activeComps) { + _removeFromParent15(comp.getGui()); + this.destroyBean(comp); + } + } + destroy() { + this.destroyActiveComps(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/calloutPanel.ts +import { Component as Component79 } from "ag-grid-community"; +var CalloutPanel = class extends Component79 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const calloutGroupParams = { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + title: this.chartTranslation.translate("callout"), + enabled: true, + suppressOpenCloseIcons: true, + suppressEnabledCheckbox: true + }; + this.setTemplate( + /* html */ + `
+ + + + + +
`, + [AgGroupComponentSelector, AgSliderSelector], + { + calloutGroup: calloutGroupParams, + calloutLengthSlider: this.chartMenuUtils.getDefaultSliderParams("calloutLine.length", "length", 40), + calloutStrokeWidthSlider: this.chartMenuUtils.getDefaultSliderParams( + "calloutLine.strokeWidth", + "strokeWidth", + 10 + ), + labelOffsetSlider: this.chartMenuUtils.getDefaultSliderParams("calloutLabel.offset", "offset", 30) + } + ); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/capsPanel.ts +import { Component as Component80 } from "ag-grid-community"; +var CapsPanel = class extends Component80 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const capsGroupParams = { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + title: this.chartTranslation.translate("cap"), + enabled: true, + suppressOpenCloseIcons: true, + suppressEnabledCheckbox: true + }; + const capLengthRatioSliderParams = this.chartMenuUtils.getDefaultSliderParams( + "cap.lengthRatio", + "capLengthRatio", + 1 + ); + capLengthRatioSliderParams.step = 0.05; + this.setTemplate( + /* html */ + `
+ + + +
`, + [AgGroupComponentSelector, AgSliderSelector], + { + capsGroup: capsGroupParams, + capLengthRatioSlider: capLengthRatioSliderParams + } + ); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/connectorLinePanel.ts +import { Component as Component81 } from "ag-grid-community"; +var ConnectorLinePanel = class extends Component81 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const lineGroupParams = { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + title: this.chartTranslation.translate("connectorLine"), + enabled: true, + suppressOpenCloseIcons: true, + suppressEnabledCheckbox: true + }; + this.setTemplate( + /* html */ + `
+ + + + + + +
`, + [AgGroupComponentSelector, ColorPickerSelector, AgSliderSelector], + { + lineGroup: lineGroupParams, + lineColorPicker: this.chartMenuUtils.getDefaultColorPickerParams("line.stroke"), + lineStrokeWidthSlider: this.getSliderParams("strokeWidth", 10, "line.strokeWidth"), + lineDashSlider: this.getSliderParams("lineDash", 30, "line.lineDash", 1, true), + lineOpacitySlider: this.getSliderParams("strokeOpacity", 1, "line.strokeOpacity", 0.05) + } + ); + } + getSliderParams(labelKey, maxValue, seriesOptionKey, step = 1, isArray = false) { + const params = this.chartMenuUtils.getDefaultSliderParams(seriesOptionKey, labelKey, maxValue, isArray); + params.step = step; + return params; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/markersPanel.ts +import { AgSelectSelector as AgSelectSelector4, Component as Component82 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/seriesUtils.ts +function getShapeSelectOptions(chartTranslation) { + return ["square", "circle", "cross", "diamond", "plus", "triangle", "heart"].map((value) => ({ + value, + text: chartTranslation.translate(value) + })); +} + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/markersPanel.ts +var MarkersPanel = class extends Component82 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const seriesMarkersGroupParams = this.chartMenuUtils.addEnableParams("marker.enabled", { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + title: this.chartTranslation.translate("markers"), + suppressEnabledCheckbox: true, + useToggle: true, + suppressOpenCloseIcons: true + }); + this.setTemplate( + /* html */ + `
+ + + + + +
`, + [AgGroupComponentSelector, AgSelectSelector4, AgSliderSelector], + { + seriesMarkersGroup: seriesMarkersGroupParams, + seriesMarkerShapeSelect: this.chartMenuUtils.getDefaultSelectParams( + "marker.shape", + "shape", + getShapeSelectOptions(this.chartTranslation) + ), + seriesMarkerSizeSlider: this.chartMenuUtils.getDefaultSliderParams("marker.size", "size", 60), + seriesMarkerStrokeWidthSlider: this.chartMenuUtils.getDefaultSliderParams( + "marker.strokeWidth", + "strokeWidth", + 10 + ) + } + ); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/seriesItemsPanel.ts +import { AgSelectSelector as AgSelectSelector5, Component as Component83, RefPlaceholder as RefPlaceholder62, _removeFromParent as _removeFromParent16 } from "ag-grid-community"; +var SeriesItemsPanel = class extends Component83 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + this.seriesItemsGroup = RefPlaceholder62; + this.activePanels = []; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const seriesItemsGroupParams = { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + title: this.chartTranslation.translate("seriesItems"), + enabled: true, + suppressOpenCloseIcons: true, + suppressEnabledCheckbox: true + }; + this.setTemplate( + /* html */ + `
+ + + +
`, + [AgGroupComponentSelector, AgSelectSelector5], + { + seriesItemsGroup: seriesItemsGroupParams, + seriesItemSelect: this.getSeriesItemsParams() + } + ); + this.initSeriesControls(); + } + getSeriesItemsParams() { + const options = [ + { value: "positive", text: this.chartTranslation.translate("seriesItemPositive") }, + { value: "negative", text: this.chartTranslation.translate("seriesItemNegative") } + ]; + const seriesItemChangedCallback = (newValue) => { + this.destroyActivePanels(); + this.initSeriesControls(newValue); + }; + return this.chartMenuUtils.getDefaultSelectParamsWithoutValueParams( + "seriesItemType", + options, + "positive", + seriesItemChangedCallback + ); + } + initSeriesControls(itemType = "positive") { + this.initSlider("strokeWidth", 10, `item.${itemType}.strokeWidth`); + this.initSlider("lineDash", 30, `item.${itemType}.lineDash`, 1, true); + this.initSlider("strokeOpacity", 1, `item.${itemType}.strokeOpacity`, 0.05, false); + this.initSlider("fillOpacity", 1, `item.${itemType}.fillOpacity`, 0.05, false); + this.initItemLabels(itemType); + } + initSlider(labelKey, maxValue, seriesOptionKey, step = 1, isArray = false) { + const params = this.chartMenuUtils.getDefaultSliderParams(seriesOptionKey, labelKey, maxValue, isArray); + params.step = step; + const itemSlider = this.seriesItemsGroup.createManagedBean(new AgSlider(params)); + this.seriesItemsGroup.addItem(itemSlider); + this.activePanels.push(itemSlider); + } + initItemLabels(itemType) { + const sectorParams = this.chartMenuUtils.getDefaultFontPanelParams( + `item.${itemType}.label`, + "seriesItemLabels" + ); + const labelPanelComp = this.createBean(new FontPanel(sectorParams)); + this.seriesItemsGroup.addItem(labelPanelComp); + this.activePanels.push(labelPanelComp); + } + destroyActivePanels() { + for (const panel of this.activePanels) { + _removeFromParent16(panel.getGui()); + this.destroyBean(panel); + } + } + destroy() { + this.destroyActivePanels(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/shadowPanel.ts +import { Component as Component84 } from "ag-grid-community"; +var ShadowPanel = class extends Component84 { + constructor(chartMenuUtils, propertyKey = "shadow") { + super(); + this.chartMenuUtils = chartMenuUtils; + this.propertyKey = propertyKey; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const propertyNamespace = this.propertyKey; + const shadowGroupParams = this.chartMenuUtils.addEnableParams( + `${propertyNamespace}.enabled`, + { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: this.chartTranslation.translate("shadow"), + suppressEnabledCheckbox: true, + useToggle: true + } + ); + const shadowColorPickerParams = this.chartMenuUtils.getDefaultColorPickerParams(`${propertyNamespace}.color`); + this.setTemplate( + /* html */ + `
+ + + + + + +
`, + [AgGroupComponentSelector, ColorPickerSelector, AgSliderSelector], + { + shadowGroup: shadowGroupParams, + shadowColorPicker: shadowColorPickerParams, + shadowBlurSlider: this.getSliderParams("blur", 0, 20), + shadowXOffsetSlider: this.getSliderParams("xOffset", -10, 10), + shadowYOffsetSlider: this.getSliderParams("yOffset", -10, 10) + } + ); + } + getSliderParams(property, minValue, defaultMaxValue) { + const expression = `${this.propertyKey}.${property}`; + const params = this.chartMenuUtils.getDefaultSliderParams(expression, property, defaultMaxValue); + params.minValue = minValue; + return params; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/tileSpacingPanel.ts +import { Component as Component85 } from "ag-grid-community"; +var TileSpacingPanel = class extends Component85 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const groupParams = { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + enabled: true, + suppressOpenCloseIcons: true, + suppressEnabledCheckbox: true + }; + this.setTemplate( + /* html */ + `
+ + + + + + + + +
`, + [AgGroupComponentSelector, AgSliderSelector], + { + groupSpacing: { ...groupParams, title: this.chartTranslation.translate("group") }, + tileSpacing: { ...groupParams, title: this.chartTranslation.translate("tile") }, + groupPaddingSlider: this.getSliderParams("padding", "group.padding"), + groupSpacingSlider: this.getSliderParams("spacing", "group.gap"), + tilePaddingSlider: this.getSliderParams("padding", "tile.padding"), + tileSpacingSlider: this.getSliderParams("spacing", "tile.gap") + } + ); + } + getSliderParams(labelKey, key) { + return this.chartMenuUtils.getDefaultSliderParams(key, labelKey, 10); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/tooltipPanel.ts +import { AgSelectSelector as AgSelectSelector6, Component as Component86, RefPlaceholder as RefPlaceholder63 } from "ag-grid-community"; +function _capitalise2(str) { + return str[0].toUpperCase() + str.substring(1); +} +var TooltipPanel = class extends Component86 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + this.tooltipMode = RefPlaceholder63; + } + postConstruct() { + const { chartMenuUtils, beans } = this; + const propertyKey = "tooltip"; + const chartTranslation = beans.chartTranslation; + const tooltipGroupParams = chartMenuUtils.addEnableParams(`${propertyKey}.enabled`, { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + suppressOpenCloseIcons: true, + title: chartTranslation.translate("tooltips"), + suppressEnabledCheckbox: true, + useToggle: true + }); + const tooltipModeLocaleKey = "tooltipMode"; + const tooltipModeSelectionOptions = ["single", "shared", "compact"].map((value) => ({ + value, + text: chartTranslation.translate(`${tooltipModeLocaleKey}${_capitalise2(value)}`) + })); + const tooltipModeExpression = `${propertyKey}.mode`; + const tooltipModeSelectParams = chartMenuUtils.getDefaultSelectParams( + tooltipModeExpression, + tooltipModeLocaleKey, + tooltipModeSelectionOptions + ); + this.setTemplate( + /* html */ + `
+ + + +
`, + [AgGroupComponentSelector, AgSelectSelector6], + { + tooltipGroup: tooltipGroupParams, + tooltipMode: tooltipModeSelectParams + } + ); + this.addManagedEventListeners({ + chartOptionsChanged: () => { + const tooltipModeValue = chartMenuUtils.getChartOptions().getValue(tooltipModeExpression); + this.tooltipMode.setValue(tooltipModeValue, true); + } + }); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/whiskersPanel.ts +import { Component as Component87 } from "ag-grid-community"; +var WhiskersPanel = class extends Component87 { + constructor(chartMenuUtils) { + super(); + this.chartMenuUtils = chartMenuUtils; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const whiskersGroupParams = { + cssIdentifier: "charts-format-sub-level", + direction: "vertical", + title: this.chartTranslation.translate("whisker"), + enabled: true, + suppressOpenCloseIcons: true, + suppressEnabledCheckbox: true + }; + this.setTemplate( + /* html */ + `
+ + + + + + + +
`, + [AgGroupComponentSelector, ColorPickerSelector, AgSliderSelector], + { + whiskersGroup: whiskersGroupParams, + whiskerColorPicker: this.chartMenuUtils.getDefaultColorPickerParams("whisker.stroke"), + whiskerThicknessSlider: this.chartMenuUtils.getDefaultSliderParams( + "whisker.strokeWidth", + "strokeWidth", + 10 + ), + whiskerOpacitySlider: this.chartMenuUtils.getDefaultSliderParams( + "whisker.strokeOpacity", + "strokeOpacity", + 1 + ), + whiskerLineDashSlider: this.chartMenuUtils.getDefaultSliderParams( + "whisker.lineDash", + "lineDash", + 30, + true + ), + whiskerLineDashOffsetSlider: this.chartMenuUtils.getDefaultSliderParams( + "whisker.lineDashOffset", + "lineDashOffset", + 30 + ) + } + ); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/series/seriesPanel.ts +var tooltips = "tooltips"; +var strokeWidth = "strokeWidth"; +var lineWidth = "lineWidth"; +var lineDash = "lineDash"; +var lineOpacity = "lineOpacity"; +var fillOpacity = "fillOpacity"; +var labels = "labels"; +var shadow = "shadow"; +var stageLabels = "stageLabels"; +var markers = "markers"; +var SeriesPanel = class extends Component88 { + constructor(options) { + super(); + this.options = options; + this.seriesGroup = RefPlaceholder64; + this.activePanels = []; + this.widgetFuncs = { + lineWidth: () => this.initStrokeWidth(lineWidth), + [strokeWidth]: () => this.initStrokeWidth("strokeWidth"), + lineColor: () => this.initLineColor(), + [lineDash]: () => this.initLineDash(), + [lineOpacity]: () => this.initOpacity("strokeOpacity"), + [fillOpacity]: () => this.initOpacity("fillOpacity"), + markers: () => new MarkersPanel(this.chartMenuUtils), + [labels]: () => this.initLabels(), + sectorLabels: () => this.initSectorLabels(), + [shadow]: () => new ShadowPanel(this.chartMenuUtils), + [tooltips]: () => new TooltipPanel(this.options.chartMenuParamsFactory), + bins: () => this.initBins(), + whiskers: () => new WhiskersPanel(this.chartMenuUtils), + caps: () => new CapsPanel(this.chartMenuUtils), + connectorLine: () => new ConnectorLinePanel(this.chartMenuUtils), + seriesItems: () => new SeriesItemsPanel(this.chartMenuUtils), + tileSpacing: () => new TileSpacingPanel(this.chartMenuUtils), + shape: () => this.initShape(), + size: () => this.initSize("size", "size"), + minSize: () => this.initSize("size", "minSize"), + maxSize: () => this.initSize("maxSize", "maxSize"), + dropoff: () => this.initDropOff(), + stageLabels: () => this.initStageLabels() + }; + this.seriesWidgetMappings = { + bar: [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels, shadow], + pie: [tooltips, strokeWidth, lineOpacity, fillOpacity, labels, "sectorLabels", shadow], + donut: [tooltips, strokeWidth, lineOpacity, fillOpacity, labels, "sectorLabels", shadow], + line: [tooltips, lineWidth, lineDash, lineOpacity, markers, labels], + scatter: [tooltips, "shape", "size", strokeWidth, labels], + bubble: [tooltips, "shape", "minSize", "maxSize", strokeWidth, labels], + area: [tooltips, lineWidth, lineDash, lineOpacity, fillOpacity, markers, labels, shadow], + histogram: [tooltips, "bins", strokeWidth, lineDash, lineOpacity, fillOpacity, labels, shadow], + "radial-column": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels], + "radial-bar": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels], + "radar-line": [tooltips, strokeWidth, lineDash, lineOpacity, markers, labels], + "radar-area": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, markers, labels], + nightingale: [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels], + "box-plot": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, "whiskers", "caps"], + "range-bar": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels], + "range-area": [tooltips, lineWidth, lineDash, lineOpacity, fillOpacity, markers, labels, shadow], + treemap: [tooltips, "tileSpacing"], + sunburst: [tooltips], + heatmap: [tooltips, labels, "lineColor", lineWidth, lineOpacity], + waterfall: [tooltips, "connectorLine", "seriesItems"], + funnel: [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels, "dropoff", stageLabels, shadow], + "cone-funnel": [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels, stageLabels], + pyramid: [tooltips, strokeWidth, lineDash, lineOpacity, fillOpacity, labels, stageLabels, shadow] + }; + this.seriesType = options.seriesType; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const { + isExpandedOnInit: expanded, + chartOptionsService, + chartController, + registerGroupComponent + } = this.options; + const seriesGroupParams = { + cssIdentifier: "charts-format-top-level", + direction: "vertical", + title: this.translate("series"), + expanded, + suppressEnabledCheckbox: true + }; + this.setTemplate( + /* html */ + `
+ + +
`, + [AgGroupComponentSelector], + { seriesGroup: seriesGroupParams } + ); + registerGroupComponent(this.seriesGroup); + this.chartMenuUtils = this.createManagedBean( + new ChartMenuParamsFactory(chartOptionsService.getSeriesOptionsProxy(() => this.seriesType)) + ); + this.addManagedListeners(chartController, { chartSeriesChartTypeChanged: this.refreshWidgets.bind(this) }); + this.refreshWidgets(); + } + refreshWidgets() { + const { chartController } = this.options; + this.destroyActivePanels(); + const chart = chartController.getChartProxy().getChart(); + chart.waitForUpdate().then(() => { + const componentWasRemoved = !this.isAlive(); + if (componentWasRemoved) { + return; + } + if (chartController.isComboChart()) { + this.updateSeriesType(); + this.initSeriesSelect(); + } + for (const w of this.seriesWidgetMappings[this.seriesType] ?? []) { + const widgetFuncResult = this.widgetFuncs[w](); + let widget; + if (Array.isArray(widgetFuncResult)) { + const comp = this.createBean(widgetFuncResult[0]); + widget = comp; + widgetFuncResult[1](comp); + } else { + widget = this.createBean(widgetFuncResult); + } + this.seriesGroup.addItem(widget); + this.activePanels.push(widget); + } + }).catch((e) => _error9(105, { e })); + } + initSeriesSelect() { + const seriesSelect = this.createBean( + new AgSelect9( + this.chartMenuUtils.getDefaultSelectParamsWithoutValueParams( + "seriesType", + this.getSeriesSelectOptions(), + `${this.seriesType}`, + (newValue) => { + this.seriesType = newValue; + this.refreshWidgets(); + } + ) + ) + ); + this.seriesGroup.addItem(seriesSelect); + this.activePanels.push(seriesSelect); + } + initLineColor() { + return new ColorPicker(this.chartMenuUtils.getDefaultColorPickerParams("stroke", "strokeColor")); + } + initStrokeWidth(labelKey, expression) { + return new AgSlider( + this.chartMenuUtils.getDefaultSliderParams( + expression ? `${expression}.${labelKey}` : "strokeWidth", + labelKey, + 10 + ) + ); + } + initLineDash(expression) { + return new AgSlider( + this.chartMenuUtils.getDefaultSliderParams( + expression ? `${expression}.lineDash` : "lineDash", + "lineDash", + 30, + true + ) + ); + } + initOpacity(type, expression) { + const params = this.chartMenuUtils.getDefaultSliderParams(expression ? `${expression}.${type}` : type, type, 1); + params.step = 0.05; + return new AgSlider(params); + } + initDropOff() { + const dropOffGroup = new ToggleablePanel({ + tag: "dropOff", + cssIdentifier: "charts-format-sub-level", + title: this.translate("dropOff"), + suppressEnabledCheckbox: false, + chartMenuParamsFactory: this.chartMenuUtils + }); + const addItems = (groupComponent) => { + for (const comp of [ + this.initStrokeWidth("strokeWidth", "dropOff"), + this.initLineDash("dropOff"), + this.initOpacity("strokeOpacity", "dropOff"), + this.initOpacity("fillOpacity", "dropOff") + ]) { + const managed = groupComponent.createManagedBean(comp); + groupComponent.addItem(managed); + this.activePanels.push(managed); + } + }; + return [dropOffGroup, addItems]; + } + initLabels() { + const isPieChart = isPieChartSeries(this.seriesType); + const seriesOptionLabelProperty = isPieChart ? "calloutLabel" : "label"; + const labelKey = isPieChart ? "calloutLabels" : "labels"; + const labelParams = this.chartMenuUtils.getDefaultFontPanelParams(seriesOptionLabelProperty, labelKey); + const fontPanel = new FontPanel(labelParams); + const addItems = (labelPanelComp) => { + if (isPieChart) { + const calloutPanelComp = labelPanelComp.createManagedBean(new CalloutPanel(this.chartMenuUtils)); + labelPanelComp.addItem(calloutPanelComp); + this.activePanels.push(calloutPanelComp); + } + if (this.seriesType === "range-bar") { + const options = [ + { value: "inside", text: this.translate("inside") }, + { value: "outside", text: this.translate("outside") } + ]; + const placementSelect = labelPanelComp.createManagedBean( + new AgSelect9( + this.chartMenuUtils.getDefaultSelectParams("label.placement", "labelPlacement", options) + ) + ); + labelPanelComp.addItem(placementSelect); + this.activePanels.push(placementSelect); + const paddingSlider = labelPanelComp.createManagedBean( + new AgSlider(this.chartMenuUtils.getDefaultSliderParams("label.padding", "padding", 200)) + ); + labelPanelComp.addItem(paddingSlider); + this.activePanels.push(paddingSlider); + } + }; + return [fontPanel, addItems]; + } + initSectorLabels() { + const sectorParams = this.chartMenuUtils.getDefaultFontPanelParams("sectorLabel", "sectorLabels"); + const fontPanel = new FontPanel(sectorParams); + const addItems = (sectorPanelComp) => { + const positionRatioParams = this.chartMenuUtils.getDefaultSliderParams( + "sectorLabel.positionRatio", + "positionRatio", + 1 + ); + positionRatioParams.step = 0.05; + const positionRatioComp = sectorPanelComp.createManagedBean(new AgSlider(positionRatioParams)); + sectorPanelComp.addItem(positionRatioComp); + }; + return [fontPanel, addItems]; + } + initStageLabels() { + return new FontPanel(this.chartMenuUtils.getDefaultFontPanelParams("stageLabel", stageLabels)); + } + initBins() { + const params = this.chartMenuUtils.getDefaultSliderParams("binCount", "histogramBinCount", 20); + const chartOptions = this.chartMenuUtils.getChartOptions(); + const value = (chartOptions.getValue("bins") ?? chartOptions.getValue("calculatedBins", true)).length; + params.value = `${value}`; + params.maxValue = Math.max(value, 20); + return new AgSlider(params); + } + initShape() { + return new AgSelect9( + this.chartMenuUtils.getDefaultSelectParams("shape", "shape", getShapeSelectOptions(this.chartTranslation)) + ); + } + initSize(expression, labelKey) { + return new AgSlider(this.chartMenuUtils.getDefaultSliderParams(expression, labelKey, 60)); + } + getSeriesSelectOptions() { + const activeSeriesTypes = this.getActiveSeriesTypes(); + return ["area", "bar", "line"].filter((seriesType) => activeSeriesTypes.includes(seriesType)).map((value) => ({ value, text: this.translate(value) })); + } + updateSeriesType() { + const activeSeriesTypes = this.getActiveSeriesTypes(); + const invalidSeriesType = !activeSeriesTypes.includes(this.seriesType); + if (invalidSeriesType && activeSeriesTypes.length > 0) { + this.seriesType = activeSeriesTypes[0]; + } + } + getActiveSeriesTypes() { + return this.options.chartController.getActiveSeriesChartTypes().map((s2) => getSeriesType(s2.chartType)); + } + translate(key) { + return this.chartTranslation.translate(key); + } + destroyActivePanels() { + for (const panel of this.activePanels) { + _removeFromParent17(panel.getGui()); + this.destroyBean(panel); + } + } + destroy() { + this.destroyActivePanels(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/titles/titlesPanel.ts +import { Component as Component90, RefPlaceholder as RefPlaceholder65 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/titles/titlePanel.ts +import { AgInputTextField as AgInputTextField4, Component as Component89 } from "ag-grid-community"; +var TitlePanel = class extends Component89 { + constructor(chartMenuUtils, name, key) { + super( + /* html */ + `
` + ); + this.chartMenuUtils = chartMenuUtils; + this.name = name; + this.key = key; + this.chartOptions = chartMenuUtils.getChartOptions(); + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + this.initFontPanel(); + } + hasTitle() { + const title = this.chartOptions.getValue(this.key); + return title?.enabled && title.text && title.text.length > 0; + } + initFontPanel() { + const hasTitle = this.hasTitle(); + const fontPanelParams = { + name: this.chartTranslation.translate(this.name), + enabled: hasTitle, + suppressEnabledCheckbox: false, + chartMenuParamsFactory: this.chartMenuUtils, + keyMapper: (key) => `${this.key}.${key}`, + onEnableChange: (enabled) => this.onEnableChange(enabled) + }; + this.fontPanel = this.createManagedBean(new FontPanel(fontPanelParams)); + this.fontPanel.addItem(this.createBean(new AgInputTextField4(this.getTextInputParams())), true); + this.fontPanel.addItem(this.createBean(new AgSlider(this.getSpacingSliderParams()))); + this.getGui().appendChild(this.fontPanel.getGui()); + } + getTextInputParams() { + return this.chartMenuUtils.addValueParams(`${this.key}.text`, { + label: this.chartTranslation.translate("title"), + labelAlignment: "top" + }); + } + getSpacingSliderParams() { + return this.chartMenuUtils.getDefaultSliderParams(`${this.key}.spacing`, "spacing", 100); + } + onEnableChange(enabled) { + this.chartOptions.setValue(`${this.key}.enabled`, enabled); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/titles/chartTitlePanel.ts +var ChartTitlePanel = class extends TitlePanel { + wireBeans(beans) { + super.wireBeans(beans); + this.chartMenuSvc = beans.chartMenuSvc; + } + postConstruct() { + this.titlePlaceholder = this.chartTranslation.translate("titlePlaceholder"); + super.postConstruct(); + this.addManagedEventListeners({ + chartTitleEdit: () => { + this.fontPanel.setEnabled(this.hasTitle()); + } + }); + } + getTextInputParams() { + const params = super.getTextInputParams(); + if (this.shouldOverrideTextWithPlaceholder(params.value)) { + params.value = this.titlePlaceholder; + } + return params; + } + getSpacingSliderParams() { + const params = super.getSpacingSliderParams(); + params.value = "10"; + return params; + } + onEnableChange(enabled) { + if (this.chartMenuSvc.doesChartToolbarExist()) { + const topPadding = this.chartOptions.getValue("padding.top"); + this.chartOptions.setValue("padding.top", enabled ? topPadding - 20 : topPadding + 20); + } + this.chartOptions.setValue(`${this.key}.enabled`, enabled); + const currentTitleText = this.chartOptions.getValue(`${this.key}.text`); + if (enabled && this.shouldOverrideTextWithPlaceholder(currentTitleText)) { + this.chartOptions.setValue(`${this.key}.text`, this.titlePlaceholder); + } + } + shouldOverrideTextWithPlaceholder(currentTitleText) { + return currentTitleText === "Title" || currentTitleText?.trim().length === 0; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/titles/titlesPanel.ts +var TitlesPanel = class extends Component90 { + constructor(options) { + super(); + this.options = options; + this.titleGroup = RefPlaceholder65; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + const { + chartMenuParamsFactory, + chartAxisMenuParamsFactory, + chartOptionsService, + seriesType, + isExpandedOnInit: expanded = false, + registerGroupComponent + } = this.options; + const axisTitlePanels = []; + if (isCartesian(seriesType) && seriesType !== "pyramid") { + const createAxisParamsFactory = (axisType) => this.createManagedBean( + new ChartMenuParamsFactory(chartOptionsService.getCartesianAxisThemeOverridesProxy(axisType)) + ); + axisTitlePanels.push( + this.createManagedBean(new TitlePanel(createAxisParamsFactory("xAxis"), "horizontalAxisTitle", "title")) + ); + axisTitlePanels.push( + this.createManagedBean(new TitlePanel(createAxisParamsFactory("yAxis"), "verticalAxisTitle", "title")) + ); + } else if (isPolar(seriesType)) { + axisTitlePanels.push( + this.createManagedBean(new TitlePanel(chartAxisMenuParamsFactory, "polarAxisTitle", "title")) + ); + } + const titleGroupParams = { + cssIdentifier: "charts-format-top-level", + direction: "vertical", + title: this.chartTranslation.translate("chartTitles"), + expanded, + suppressEnabledCheckbox: true, + items: [ + this.createManagedBean(new ChartTitlePanel(chartMenuParamsFactory, "chartTitle", "title")), + this.createManagedBean(new TitlePanel(chartMenuParamsFactory, "chartSubtitle", "subtitle")), + ...axisTitlePanels + ] + }; + this.setTemplate( + /* html */ + `
+ +
`, + [AgGroupComponentSelector], + { titleGroup: titleGroupParams } + ); + registerGroupComponent(this.titleGroup); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/format/formatPanel.ts +var DefaultFormatPanelDef = { + groups: [{ type: "chart" }, { type: "titles" }, { type: "legend" }, { type: "series" }, { type: "axis" }] +}; +var AXIS_KEYS = ["axis", "horizontalAxis", "verticalAxis"]; +var FormatPanel = class extends Component91 { + constructor(chartMenuContext) { + super( + /* html */ + `
` + ); + this.chartMenuContext = chartMenuContext; + } + postConstruct() { + this.groupExpansionFeature = this.createManagedBean(new GroupExpansionFeature(this.getGui())); + this.chartPanelFeature = this.createManagedBean( + new ChartPanelFeature( + this.chartMenuContext.chartController, + this.getGui(), + "ag-chart-format-section", + (_chartType, seriesType) => this.createPanels(seriesType) + ) + ); + this.chartPanelFeature.refreshPanels(); + } + createPanels(seriesType) { + let panelExpandedOnInit = false; + this.getFormatPanelDef().groups?.forEach(({ type: group, isOpen: isExpandedOnInit = false }) => { + if (!this.isGroupPanelShownInSeries(group, seriesType)) { + return; + } + if (isExpandedOnInit) { + if (panelExpandedOnInit) { + _warn64(145, { group }); + } + panelExpandedOnInit = true; + } + const registerGroupComponent = (groupComponent) => this.groupExpansionFeature.addGroupComponent(groupComponent); + const opts = { + ...this.chartMenuContext, + isExpandedOnInit, + seriesType, + registerGroupComponent + }; + switch (group) { + case "chart": + this.chartPanelFeature.addComponent(new ChartPanel(opts)); + break; + case "titles": + this.chartPanelFeature.addComponent(new TitlesPanel(opts)); + break; + case "legend": + this.chartPanelFeature.addComponent(new LegendPanel(opts, this.chartMenuContext)); + break; + case "axis": + if (isPolar(seriesType)) { + this.chartPanelFeature.addComponent(new PolarAxisPanel(opts)); + } else if (isCartesian(seriesType)) { + this.chartPanelFeature.addComponent(new CartesianAxisPanel("xAxis", opts)); + this.chartPanelFeature.addComponent(new CartesianAxisPanel("yAxis", opts)); + } + break; + case "horizontalAxis": + this.chartPanelFeature.addComponent(new CartesianAxisPanel("xAxis", opts)); + break; + case "verticalAxis": + this.chartPanelFeature.addComponent(new CartesianAxisPanel("yAxis", opts)); + break; + case "series": + this.chartPanelFeature.addComponent(new SeriesPanel(opts)); + break; + default: + _warn64(147, { group }); + } + }); + } + getFormatPanelDef() { + const userProvidedFormatPanelDef = this.gos.get("chartToolPanelsDef")?.formatPanel; + return userProvidedFormatPanelDef ? userProvidedFormatPanelDef : DefaultFormatPanelDef; + } + isGroupPanelShownInSeries(group, seriesType) { + const enable = ["chart", "titles", "legend", "series"].includes(group) || isCartesian(seriesType) && AXIS_KEYS.includes(group) || isPolar(seriesType) && group === "axis"; + const disable = isFunnel(seriesType) && group === "legend" || isFunnel(seriesType) && AXIS_KEYS.includes(group); + return enable && !disable; + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/chartSettingsPanel.ts +import { + Component as Component94, + RefPlaceholder as RefPlaceholder66, + _areEqual as _areEqual8, + _clearElement as _clearElement22, + _createIconNoSpan as _createIconNoSpan27, + _getAbsoluteWidth as _getAbsoluteWidth2, + _radioCssClass as _radioCssClass2, + _setDisplayed as _setDisplayed26 +} from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniChartsContainer.ts +import { Component as Component93, KeyCode as KeyCode34, _setAriaLabel as _setAriaLabel21, _warn as _warn65 } from "ag-grid-community"; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/miniChart.ts +import { Component as Component92, _error as _error10 } from "ag-grid-community"; +var CANVAS_CLASS = "ag-chart-mini-thumbnail-canvas"; +var MiniChart = class extends Component92 { + constructor(container, agChartsExports, tooltipName) { + super(); + this.agChartsExports = agChartsExports; + this.tooltipName = tooltipName; + this.size = 58; + this.padding = 5; + const { _Scene } = agChartsExports; + this.root = new _Scene.Group(); + const canvasElement = container.ownerDocument.createElement("canvas"); + const scene = new _Scene.Scene({ + canvasElement, + pixelRatio: container.ownerDocument.defaultView?.devicePixelRatio ?? 1, + width: this.size, + height: this.size, + willReadFrequently: false + }); + scene.canvas.element.classList.add(CANVAS_CLASS); + scene.setRoot(this.root); + scene.setContainer(container); + this.scene = scene; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + this.scene.canvas.element.title = this.chartTranslation.translate(this.tooltipName); + try { + this.scene.render(); + } catch (e) { + _error10(108, { e }); + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/miniChartHelpers.ts +import { _last as _last19 } from "ag-grid-community"; +function createColumnRects(params) { + const { + stacked, + size, + padding, + xScalePadding, + xScaleDomain, + yScaleDomain, + agChartsExports: { _Scene } + } = params; + const xScale = new _Scene.CategoryScale(); + xScale.domain = xScaleDomain; + xScale.range = [padding, size - padding]; + xScale.paddingInner = xScalePadding; + xScale.paddingOuter = xScalePadding; + const yScale = new _Scene.LinearScale(); + yScale.domain = yScaleDomain; + yScale.range = [size - padding, padding]; + const createBars = (series, xScale2, yScale2) => { + return series.map((datum, i) => { + const top = yScale2.convert(datum); + const rect = new _Scene.Rect(); + rect.x = xScale2.convert(i); + rect.y = top; + rect.width = xScale2.bandwidth; + rect.height = yScale2.convert(0) - top; + rect.strokeWidth = 0; + rect.crisp = true; + return rect; + }); + }; + if (stacked) { + return params.data.map((d) => createBars(d, xScale, yScale)); + } + return createBars(params.data, xScale, yScale); +} +function prepareXYScales(_Scene, data, size, padding) { + const xDomain = []; + const yDomain = []; + for (const item of data) { + for (const [x, y] of item) { + xDomain.push(x); + yDomain.push(y); + } + } + const xScale = new _Scene.LinearScale(); + xScale.domain = [Math.min(...xDomain), Math.max(...xDomain)]; + xScale.range = [padding, size - padding]; + const yScale = new _Scene.LinearScale(); + yScale.domain = [Math.min(...yDomain), Math.max(...yDomain)]; + yScale.range = [size - padding, padding]; + return { xScale, yScale }; +} +function prepareLinearScene(_Scene, data, size, padding) { + const xDomain = [0, data[0].length - 1]; + const yDomain = data.reduce( + (acc, curr) => { + for (const datum of curr) { + if (datum < acc[0]) { + acc[0] = datum; + } + if (datum > acc[1]) { + acc[1] = datum; + } + } + return acc; + }, + [Infinity, -Infinity] + ); + yDomain[0]--; + yDomain[yDomain.length - 1]++; + const xScale = new _Scene.LinearScale(); + xScale.domain = xDomain; + xScale.range = [padding, size - padding]; + const yScale = new _Scene.LinearScale(); + yScale.domain = yDomain; + yScale.range = [size - padding, padding]; + return { xScale, yScale }; +} +function createXPathCommands(data, xScale, yScale) { + return data.map( + (series) => series.map((datum, i) => [ + i > 0 ? "lineTo" : "moveTo", + xScale.convert(i), + yScale.convert(datum) + ]) + ); +} +function createXYPathCommands(shape, xScale, yScale) { + return shape.map(([x, y], i) => [i > 0 ? "lineTo" : "moveTo", xScale.convert(x), yScale.convert(y)]); +} +function closePath(commandSegments) { + const closingCommand = commandSegments[0]; + const first = commandSegments[1]; + const last = _last19(commandSegments); + if (first[1] !== last[1] || first[2] !== last[2]) { + commandSegments.push([closingCommand[0], first[1], first[2]]); + } + return commandSegments; +} +function createPath(_Scene, commands) { + const path = new _Scene.Path(); + commands.forEach(([command, x, y]) => path.path[command](x, y)); + return path; +} +function createAreaPathCommands(commands, yScale, stacked) { + return commands.map((pathCommands, index, all) => { + const closingPath = stacked ? closePathViaPreviousSeries(all, index, yScale) : closePathViaOrigin(pathCommands, yScale); + const closingPathCommands = [...closingPath].reverse().map(([_, x, y]) => ["lineTo", x, y]); + const first = pathCommands[0]; + const last = _last19(closingPathCommands); + if (first[1] !== last[1] || first[2] !== last[2]) { + closingPathCommands.push(["lineTo", first[1], first[2]]); + } + return [...pathCommands, ...closingPathCommands]; + }); +} +function closePathViaPreviousSeries(all, index, yScale) { + if (index === 0) { + return closePathViaOrigin(all[index], yScale); + } + return [...all[index - 1]]; +} +function closePathViaOrigin(pathCommands, yScale) { + return pathCommands.map(([c, x]) => [c, x, yScale.convert(0)]); +} +function commandsToPath(_Scene, commands) { + const path = createPath(_Scene, commands); + path.fill = void 0; + path.lineCap = "round"; + path.strokeWidth = 3; + return path; +} +function createShapePaths({ _Scene }, root, shapes, size, padding) { + const { xScale, yScale } = prepareXYScales(_Scene, shapes, size, padding); + const openPathsCommands = shapes.map((shape) => createXYPathCommands(shape, xScale, yScale)); + const shapesCommands = openPathsCommands.map((path) => closePath(path)); + const shapePaths = shapesCommands.map((shapeCommands) => commandsToPath(_Scene, shapeCommands)); + const paths = shapePaths.reduce((acc, curr) => acc.concat(curr), []); + const pathsGroup = new _Scene.Group(); + pathsGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding * 2, size - padding * 2)); + pathsGroup.append(paths); + root.append(pathsGroup); + return paths; +} +function createLinePaths({ _Scene }, root, data, size, padding) { + const { xScale, yScale } = prepareLinearScene(_Scene, data, size, padding); + const pathCommands = createXPathCommands(data, xScale, yScale); + const paths = pathCommands.map((commands) => commandsToPath(_Scene, commands)); + const pathsGroup = new _Scene.Group(); + pathsGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding * 2, size - padding * 2)); + pathsGroup.append(paths); + root.append(pathsGroup); + return paths; +} +function createAreaPaths(_Scene, root, data, size, padding, stacked = false) { + const { xScale, yScale } = prepareLinearScene(_Scene, data, size, padding); + const pathCommands = createAreaPathCommands(createXPathCommands(data, xScale, yScale), yScale, stacked); + const areasGroup = new _Scene.Group(); + areasGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding * 2, size - padding * 2)); + const paths = pathCommands.map((commands) => createPath(_Scene, commands)); + areasGroup.append(paths); + root.append(areasGroup); + return paths; +} +function stackData(data) { + return data.map( + (stack, sindex, array) => stack.map((_y, i) => array.slice(0, sindex + 1).reduce((p, c) => p + c[i], 0)) + ); +} +function normalizeStackData(data) { + const colSum = data.map((_, index) => data.reduce((acc, cur) => Math.max(acc, cur[index]), 0)); + return data.map((stack) => stack.map((y, index) => y / colSum[index] * 19)); +} +function createPolarPaths(agChartsExports, root, data, size, radius, innerRadius, markerSize = 0) { + const { _Scene } = agChartsExports; + const angleScale = new _Scene.LinearScale(); + angleScale.domain = [0, 7]; + angleScale.range = [-Math.PI, Math.PI].map((angle) => angle + Math.PI / 2); + const radiusScale = new _Scene.LinearScale(); + radiusScale.domain = [0, 10]; + radiusScale.range = [radius, innerRadius]; + const markers2 = []; + const center = size / 2; + const paths = data.map((series) => { + const path = new _Scene.Path(); + path.strokeWidth = 1; + path.strokeOpacity = 0.5; + path.lineCap = "round"; + path.fill = void 0; + path.fillOpacity = 0.8; + series.forEach((datum, i) => { + const angle = angleScale.convert(i); + const r = radius + innerRadius - radiusScale.convert(datum); + const x = r * Math.cos(angle) + center; + const y = r * Math.sin(angle) + center; + path.path[i > 0 ? "lineTo" : "moveTo"](x, y); + if (markerSize > 0) { + const marker = new _Scene.Marker({ shape: "circle" }); + marker.x = x; + marker.y = y; + marker.size = markerSize; + markers2.push(marker); + } + }); + path.path.closePath(); + return path; + }); + const group = new _Scene.Group(); + group.append([...paths, ...markers2]); + root.append(group); + return { paths, markers: markers2 }; +} +function accumulateData(data) { + let [min, max] = [Infinity, -Infinity]; + const processedData = data.reduce((acc, curr, currIndex) => { + const previous = currIndex > 0 ? acc[currIndex - 1] : void 0; + acc[currIndex] ?? (acc[currIndex] = []); + const current = acc[currIndex]; + curr.forEach((datum, datumIndex) => { + if (previous) { + datum += previous[datumIndex]; + } + current[datumIndex] = datum; + if (current[datumIndex] < min) { + min = current[datumIndex]; + } + if (current[datumIndex] > max) { + max = current[datumIndex]; + } + }); + return acc; + }, []); + return { processedData, min, max }; +} + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/funnel/miniFunnel.ts +var FUNNEL_SHAPES = [ + [ + [13, 16], + [13, 12], + [3, 12], + [3, 16] + ], + [ + [12, 11], + [12, 7], + [4, 7], + [4, 11] + ], + [ + [10.125, 6], + [10.125, 1.5], + [5.875, 1.5], + [5.875, 6] + ] +]; +var MiniFunnelClass = class extends MiniChart { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, tooltipName = "funnelTooltip", data = FUNNEL_SHAPES) { + super(container, agChartsExports, tooltipName); + this.shapes = createShapePaths(agChartsExports, this.root, data, this.size, this.padding); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + for (const bar of this.shapes) { + bar.fill = fills[0]; + bar.stroke = strokes[0]; + bar.strokeWidth = 0; + } + } +}; +var MiniFunnel = { + chartType: "funnel", + miniChart: MiniFunnelClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/funnel/miniConeFunnel.ts +var CONE_FUNNEL_SHAPES = [ + [ + [13, 16], + [10.75, 11.5], + [5.25, 11.5], + [3, 16] + ], + [ + [10.75, 11.5], + [8.875, 6], + [7.125, 6], + [5.25, 11.5] + ], + [ + [8.875, 6], + [8.875, 1.5], + [7.125, 1.5], + [7.125, 6] + ] +]; +var MiniConeFunnelClass = class extends MiniFunnelClass { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, tooltipName = "coneFunnelTooltip") { + super(container, agChartsExports, fills, strokes, _isCustomTheme, tooltipName, CONE_FUNNEL_SHAPES); + } + updateColors(fills, strokes) { + this.shapes.forEach((bar, i) => { + bar.fill = fills[0]; + bar.fillOpacity = 1 - i * 0.2; + bar.stroke = strokes[0]; + bar.strokeWidth = 0; + }); + } +}; +var MiniConeFunnel = { + chartType: "coneFunnel", + miniChart: MiniConeFunnelClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/funnel/miniPyramid.ts +var PYRAMID_SHAPES = [ + [ + [8, 16], + [10, 12], + [6, 12] + ], + [ + [10.5, 11], + [12.5, 7], + [3.5, 7], + [5.5, 11] + ], + [ + [13, 6], + [15.5, 1.5], + [0.5, 1.5], + [3, 6] + ] +]; +var MiniPyramidClass = class extends MiniFunnelClass { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, tooltipName = "pyramidTooltip") { + super(container, agChartsExports, fills, strokes, _isCustomTheme, tooltipName, PYRAMID_SHAPES); + } + updateColors(fills, strokes) { + this.shapes.forEach((bar, i) => { + bar.fill = fills[i]; + bar.stroke = strokes[i]; + bar.strokeWidth = 0; + }); + } +}; +var MiniPyramid = { + chartType: "pyramid", + miniChart: MiniPyramidClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/miniChartWithAxes.ts +var MiniChartWithAxes = class extends MiniChart { + constructor(container, agChartsExports, tooltipName) { + super(container, agChartsExports, tooltipName); + this.stroke = "gray"; + this.axisOvershoot = 3; + } + postConstruct() { + const { _Scene } = this.agChartsExports; + const size = this.size; + const padding = this.padding; + const leftAxis = new _Scene.Line(); + leftAxis.x1 = padding; + leftAxis.y1 = padding; + leftAxis.x2 = padding; + leftAxis.y2 = size - padding + this.axisOvershoot; + leftAxis.stroke = this.stroke; + const bottomAxis = new _Scene.Line(); + bottomAxis.x1 = padding - this.axisOvershoot + 1; + bottomAxis.y1 = size - padding; + bottomAxis.x2 = size - padding + 1; + bottomAxis.y2 = size - padding; + bottomAxis.stroke = this.stroke; + const root = this.root; + root.append(leftAxis); + root.append(bottomAxis); + super.postConstruct(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/column/miniColumn.ts +var MiniColumnClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "groupedColumnTooltip"); + this.columnData = [2, 3, 4]; + const { root, columnData, size, padding } = this; + this.columns = createColumnRects({ + stacked: false, + root, + data: columnData, + size, + padding, + xScaleDomain: [0, 1, 2], + yScaleDomain: [0, 4], + xScalePadding: 0.3, + agChartsExports + }); + root.append(this.columns); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.columns.forEach((column, i) => { + column.fill = fills[i]; + column.stroke = strokes[i]; + }); + } +}; +var MiniColumn = { + chartType: "groupedColumn", + miniChart: MiniColumnClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/column/miniStackedColumn.ts +import { _flatten } from "ag-grid-community"; +var miniStackedColumnData = [ + [8, 12, 16], + [6, 9, 12], + [2, 3, 4] +]; +var MiniStackedColumnClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, data = miniStackedColumnData, yScaleDomain = [0, 16], tooltipName = "stackedColumnTooltip") { + super(container, agChartsExports, tooltipName); + const { root, size, padding } = this; + this.stackedColumns = createColumnRects({ + stacked: true, + root, + data, + size, + padding, + xScaleDomain: [0, 1, 2], + yScaleDomain, + xScalePadding: 0.3, + agChartsExports + }); + root.append(_flatten(this.stackedColumns)); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.stackedColumns.forEach((series, i) => { + for (const column of series) { + column.fill = fills[i]; + column.stroke = strokes[i]; + } + }); + } +}; +var MiniStackedColumn = { + chartType: "stackedColumn", + miniChart: MiniStackedColumnClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/column/miniNormalizedColumn.ts +var miniNormalizedColumnData = [ + [10, 10, 10], + [6, 7, 8], + [2, 4, 6] +]; +var MiniNormalizedColumnClass = class extends MiniStackedColumnClass { + constructor(container, agChartsExports, fills, strokes, isCustomTheme) { + super( + container, + agChartsExports, + fills, + strokes, + isCustomTheme, + miniNormalizedColumnData, + [0, 10], + "normalizedColumnTooltip" + ); + } +}; +var MiniNormalizedColumn = { + chartType: "normalizedColumn", + miniChart: MiniNormalizedColumnClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/bar/miniBar.ts +var MiniBarClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "groupedBarTooltip"); + const { _Scene } = agChartsExports; + const padding = this.padding; + const size = this.size; + const data = [2, 3, 4]; + const yScale = new _Scene.CategoryScale(); + yScale.domain = [0, 1, 2]; + yScale.range = [padding, size - padding]; + yScale.paddingInner = 0.3; + yScale.paddingOuter = 0.3; + const xScale = new _Scene.LinearScale(); + xScale.domain = [0, 4]; + xScale.range = [size - padding, padding]; + const bottom = xScale.convert(0); + const height = yScale.bandwidth; + this.bars = data.map((datum, i) => { + const rect = new _Scene.Rect(); + rect.x = padding; + rect.y = yScale.convert(i); + rect.width = bottom - xScale.convert(datum); + rect.height = height; + rect.strokeWidth = 0; + rect.crisp = true; + return rect; + }); + this.updateColors(fills, strokes); + this.root.append(this.bars); + } + updateColors(fills, strokes) { + this.bars.forEach((bar, i) => { + bar.fill = fills[i]; + bar.stroke = strokes[i]; + }); + } +}; +var MiniBar = { + chartType: "groupedBar", + miniChart: MiniBarClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/bar/miniStackedBar.ts +import { _flatten as _flatten2 } from "ag-grid-community"; +var miniStackedBarData = [ + [8, 12, 16], + [6, 9, 12], + [2, 3, 4] +]; +var MiniStackedBarClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, data = miniStackedBarData, xScaleDomain = [0, 16], tooltipName = "stackedBarTooltip") { + super(container, agChartsExports, tooltipName); + const { _Scene } = agChartsExports; + const size = this.size; + const padding = this.padding; + const yScale = new _Scene.CategoryScale(); + yScale.domain = [0, 1, 2]; + yScale.range = [padding, size - padding]; + yScale.paddingInner = 0.3; + yScale.paddingOuter = 0.3; + const xScale = new _Scene.LinearScale(); + xScale.domain = xScaleDomain; + xScale.range = [size - padding, padding]; + const bottom = xScale.convert(0); + const height = yScale.bandwidth; + this.bars = data.map( + (series) => series.map((datum, i) => { + const rect = new _Scene.Rect(); + rect.x = padding; + rect.y = yScale.convert(i); + rect.width = bottom - xScale.convert(datum); + rect.height = height; + rect.strokeWidth = 0; + rect.crisp = true; + return rect; + }) + ); + this.updateColors(fills, strokes); + this.root.append(_flatten2(this.bars)); + } + updateColors(fills, strokes) { + this.bars.forEach( + (series, i) => series.forEach((bar) => { + bar.fill = fills[i]; + bar.stroke = strokes[i]; + }) + ); + } +}; +var MiniStackedBar = { + chartType: "stackedBar", + miniChart: MiniStackedBarClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/bar/miniNormalizedBar.ts +var miniNormalizedBarData = [ + [10, 10, 10], + [6, 7, 8], + [2, 4, 6] +]; +var MiniNormalizedBarClass = class extends MiniStackedBarClass { + constructor(container, agChartsExports, fills, strokes, isCustomTheme) { + super( + container, + agChartsExports, + fills, + strokes, + isCustomTheme, + miniNormalizedBarData, + [0, 10], + "normalizedBarTooltip" + ); + } +}; +var MiniNormalizedBar = { + chartType: "normalizedBar", + miniChart: MiniNormalizedBarClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/pie/miniDonut.ts +var MiniDonutClass = class extends MiniChart { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, centerRadiusScaler = 0.6, tooltipName = "donutTooltip") { + super(container, agChartsExports, tooltipName); + const { + size, + padding, + agChartsExports: { _Scene } + } = this; + const radius = (size - padding * 2) / 2; + const center = radius + padding; + const toRadians = _Scene.toRadians; + const angles = [ + [toRadians(-90), toRadians(30)], + [toRadians(30), toRadians(120)], + [toRadians(120), toRadians(180)], + [toRadians(180), toRadians(210)], + [toRadians(210), toRadians(240)], + [toRadians(240), toRadians(270)] + ]; + this.sectors = angles.map(([startAngle, endAngle]) => { + const sector = new _Scene.Sector(); + sector.centerX = center; + sector.centerY = center; + sector.innerRadius = radius * centerRadiusScaler; + sector.outerRadius = radius; + sector.startAngle = startAngle; + sector.endAngle = endAngle; + sector.stroke = void 0; + sector.strokeWidth = 0; + sector.inset = 0.75; + return sector; + }); + this.updateColors(fills, strokes); + this.root.append(this.sectors); + } + updateColors(fills, strokes) { + this.sectors.forEach((sector, i) => { + sector.fill = fills[i % fills.length]; + sector.stroke = strokes[i % strokes.length]; + }); + } +}; +var MiniDonut = { + chartType: "donut", + miniChart: MiniDonutClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/pie/miniPie.ts +var MiniPieClass = class extends MiniDonutClass { + constructor(container, agChartsExports, fills, strokes, isCustomTheme) { + super(container, agChartsExports, fills, strokes, isCustomTheme, 0, "pieTooltip"); + } +}; +var MiniPie = { + chartType: "pie", + miniChart: MiniPieClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/line/miniLine.ts +var miniLineData = [ + [1, 3, 5], + [2, 6, 4], + [5, 3, 1] +]; +var MiniLineClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, data = miniLineData, tooltipName = "lineTooltip") { + super(container, agChartsExports, tooltipName); + const { size, padding, root } = this; + this.lines = createLinePaths(agChartsExports, root, data, size, padding); + this.updateColors(fills, strokes); + } + updateColors(fills, _strokes) { + this.lines.forEach((line, i) => { + line.stroke = fills[i]; + }); + } +}; +var MiniLine = { + chartType: "line", + miniChart: MiniLineClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/line/miniStackedLine.ts +var miniStackedLineData = stackData(miniLineData); +var MiniStackedLineClass = class extends MiniLineClass { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, data = miniStackedLineData, tooltipName = "stackedLineTooltip") { + super(container, agChartsExports, fills, strokes, _isCustomTheme, data, tooltipName); + } +}; +var MiniStackedLine = { + chartType: "stackedLine", + miniChart: MiniStackedLineClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/line/miniNormalizedLine.ts +var miniNormalizedLineData = normalizeStackData(miniStackedLineData); +var MiniNormalizedLineClass = class extends MiniLineClass { + constructor(container, agChartsExports, fills, strokes, isCustomTheme, data = miniNormalizedLineData, tooltipName = "normalizedLineTooltip") { + super(container, agChartsExports, fills, strokes, isCustomTheme, data, tooltipName); + } +}; +var MiniNormalizedLine = { + chartType: "normalizedLine", + miniChart: MiniNormalizedLineClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/scatter/miniScatter.ts +var MiniScatterClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "scatterTooltip"); + const { + size, + padding, + agChartsExports: { _Scene } + } = this; + const data = [ + [ + [0.3, 3], + [1.1, 0.9], + [2, 0.4], + [3.4, 2.4] + ], + [ + [0, 0.3], + [1, 2], + [2.4, 1.4], + [3, 0] + ] + ]; + const xScale = new _Scene.LinearScale(); + xScale.domain = [-0.5, 4]; + xScale.range = [padding * 2, size - padding]; + const yScale = new _Scene.LinearScale(); + yScale.domain = [-0.5, 3.5]; + yScale.range = [size - padding, padding]; + const points = []; + data.forEach((series) => { + series.forEach(([x, y]) => { + const arc = new _Scene.Arc(); + arc.strokeWidth = 0; + arc.centerX = xScale.convert(x); + arc.centerY = yScale.convert(y); + arc.radius = 2.5; + points.push(arc); + }); + }); + this.points = points; + this.updateColors(fills, strokes); + const pointsGroup = new _Scene.Group(); + pointsGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding * 2, size - padding * 2)); + pointsGroup.append(this.points); + this.root.append(pointsGroup); + } + updateColors(fills, strokes) { + this.points.forEach((line, i) => { + line.stroke = strokes[i % strokes.length]; + line.fill = fills[i % fills.length]; + }); + } +}; +var MiniScatter = { + chartType: "scatter", + miniChart: MiniScatterClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/scatter/miniBubble.ts +var MiniBubbleClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "bubbleTooltip"); + const { + size, + padding, + agChartsExports: { _Scene } + } = this; + const data = [ + [ + [0.1, 0.3, 5], + [0.5, 0.4, 7], + [0.2, 0.8, 7] + ], + [ + [0.8, 0.7, 5], + [0.7, 0.3, 9] + ] + ]; + const xScale = new _Scene.LinearScale(); + xScale.domain = [0, 1]; + xScale.range = [padding * 2, size - padding]; + const yScale = new _Scene.LinearScale(); + yScale.domain = [0, 1]; + yScale.range = [size - padding, padding]; + const points = []; + data.forEach((series) => { + series.forEach(([x, y, radius]) => { + const arc = new _Scene.Arc(); + arc.strokeWidth = 0; + arc.centerX = xScale.convert(x); + arc.centerY = yScale.convert(y); + arc.radius = radius; + arc.fillOpacity = 0.7; + points.push(arc); + }); + }); + this.points = points; + this.updateColors(fills, strokes); + const pointsGroup = new _Scene.Group(); + pointsGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding * 2, size - padding * 2)); + pointsGroup.append(this.points); + this.root.append(pointsGroup); + } + updateColors(fills, strokes) { + this.points.forEach((line, i) => { + line.stroke = strokes[i % strokes.length]; + line.fill = fills[i % fills.length]; + }); + } +}; +var MiniBubble = { + chartType: "bubble", + miniChart: MiniBubbleClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/area/miniArea.ts +var miniAreaData = miniLineData; +var MiniAreaClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, data = miniAreaData, tooltipName = "groupedAreaTooltip", stacked = false) { + super(container, agChartsExports, tooltipName); + this.areas = createAreaPaths(agChartsExports._Scene, this.root, data, this.size, this.padding, stacked); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.areas.forEach((area, i) => { + area.fill = fills[i]; + area.stroke = strokes[i]; + area.strokeWidth = 1; + area.strokeOpacity = 0.75; + area.fillOpacity = 0.7; + }); + } +}; +var MiniArea = { + chartType: "area", + miniChart: MiniAreaClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/area/miniStackedArea.ts +var miniStackedAreaData = stackData(miniAreaData); +var MiniStackedAreaClass = class extends MiniAreaClass { + constructor(container, agChartsExports, fills, strokes, _isCustomTheme, data = miniStackedAreaData, tooltipName = "stackedAreaTooltip") { + super(container, agChartsExports, fills, strokes, _isCustomTheme, data, tooltipName, true); + } + updateColors(fills, strokes) { + this.areas.forEach((area, i) => { + area.fill = fills[i]; + area.stroke = strokes[i]; + }); + } +}; +var MiniStackedArea = { + chartType: "stackedArea", + miniChart: MiniStackedAreaClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/area/miniNormalizedArea.ts +var miniNormalizedAreaData = normalizeStackData(miniStackedAreaData); +var MiniNormalizedAreaClass = class extends MiniStackedAreaClass { + constructor(container, agChartsExports, fills, strokes, isCustomTheme, data = miniNormalizedAreaData, tooltipName = "normalizedAreaTooltip") { + super(container, agChartsExports, fills, strokes, isCustomTheme, data, tooltipName); + } +}; +var MiniNormalizedArea = { + chartType: "normalizedArea", + miniChart: MiniNormalizedAreaClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/histogram/miniHistogram.ts +var MiniHistogramClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "histogramTooltip"); + const { + padding, + size, + agChartsExports: { _Scene } + } = this; + const data = [2, 5, 11, 13, 10, 6, 1]; + const xScale = new _Scene.LinearScale(); + xScale.domain = [0, data.length]; + xScale.range = [padding, size - padding]; + const yScale = new _Scene.LinearScale(); + yScale.domain = [0, data.reduce((a, b) => Math.max(a, b), 0)]; + yScale.range = [size - padding, padding]; + const bottom = yScale.convert(0); + this.bars = data.map((datum, i) => { + const top = yScale.convert(datum); + const left = xScale.convert(i); + const right = xScale.convert(i + 1); + const rect = new _Scene.Rect(); + rect.x = left; + rect.y = top; + rect.width = right - left; + rect.height = bottom - top; + rect.strokeWidth = 1; + rect.strokeOpacity = 0.75; + rect.crisp = true; + return rect; + }); + this.updateColors(fills, strokes); + this.root.append(this.bars); + } + updateColors([fill], [stroke]) { + for (const bar of this.bars) { + bar.fill = fill; + bar.stroke = stroke; + } + } +}; +var MiniHistogram = { + chartType: "histogram", + miniChart: MiniHistogramClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/miniChartWithPolarAxes.ts +var MiniChartWithPolarAxes = class extends MiniChart { + constructor(container, agChartsExports, tooltipName) { + super(container, agChartsExports, tooltipName); + this.stroke = "gray"; + this.showRadiusAxisLine = true; + this.showAngleAxisLines = true; + } + postConstruct() { + const { _Scene } = this.agChartsExports; + const size = this.size; + const padding = this.padding; + const combinedPadding = padding * 2; + const axisLineRadius = (size - combinedPadding) / 2; + const gridRadii = this.showAngleAxisLines ? [axisLineRadius, axisLineRadius * 0.8, axisLineRadius * 0.6, axisLineRadius * 0.4] : []; + const radiusAxisLine = new _Scene.Line(); + radiusAxisLine.x1 = size / 2; + radiusAxisLine.y1 = padding; + radiusAxisLine.x2 = size / 2; + radiusAxisLine.y2 = size - padding - axisLineRadius - gridRadii[gridRadii.length - 1]; + radiusAxisLine.stroke = this.stroke; + radiusAxisLine.strokeOpacity = 0.5; + radiusAxisLine.fill = void 0; + radiusAxisLine.visible = this.showRadiusAxisLine; + const x = padding + axisLineRadius; + this.gridLines = gridRadii.map((radius, index) => { + const gridLine = new _Scene.Path(); + gridLine.path.arc(x, x, radius, 0, 2 * Math.PI); + gridLine.strokeWidth = 1; + gridLine.stroke = this.stroke; + gridLine.strokeOpacity = index === 0 ? 0.5 : 0.2; + gridLine.fill = void 0; + return gridLine; + }); + const root = this.root; + root.append(radiusAxisLine); + if (this.gridLines.length > 0) { + root.append(this.gridLines); + } + super.postConstruct(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/polar/miniRadialColumn.ts +var MiniRadialColumnClass = class extends MiniChartWithPolarAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "radialColumnTooltip"); + this.data = [ + [6, 8, 10, 2, 6, 5], + [4, 4, 3, 6, 4, 4], + [5, 4, 2, 9, 8, 9] + ]; + this.showRadiusAxisLine = false; + const { + padding, + size, + data, + agChartsExports: { _Scene } + } = this; + const radius = (size - padding * 2) / 2; + const innerRadiusRatio = 0.4; + const axisInnerRadius = radius * innerRadiusRatio; + const angleScale = new _Scene.CategoryScale(); + angleScale.domain = data[0].map((_, index) => index); + angleScale.range = [0, 2 * Math.PI]; + angleScale.paddingInner = 0; + angleScale.paddingOuter = 0; + const bandwidth = angleScale.bandwidth * 0.7; + const { processedData, max } = accumulateData(data); + const radiusScale = new _Scene.LinearScale(); + radiusScale.domain = [0, max]; + radiusScale.range = [axisInnerRadius, radius]; + const center = this.size / 2; + this.series = processedData.map((series, seriesIndex) => { + const firstSeries = seriesIndex === 0; + const previousSeries = firstSeries ? void 0 : processedData[seriesIndex - 1]; + const seriesGroup = new _Scene.TranslatableGroup({ zIndex: 1e6 }); + const seriesColumns = series.map((datum, i) => { + const previousDatum = previousSeries?.[i]; + const outerRadius = radiusScale.convert(datum); + const innerRadius = radiusScale.convert(previousDatum ?? 0); + const startAngle = angleScale.convert(i); + const endAngle = startAngle + bandwidth; + const columnWidth = _Scene.getRadialColumnWidth(startAngle, endAngle, radius, 0.5, 0.5); + const column = new _Scene.RadialColumnShape(); + column.columnWidth = columnWidth; + column.innerRadius = innerRadius; + column.outerRadius = outerRadius; + column.startAngle = startAngle; + column.endAngle = endAngle; + column.isBeveled = true; + column.axisInnerRadius = axisInnerRadius; + column.axisOuterRadius = radius; + column.stroke = void 0; + column.strokeWidth = 0; + return column; + }); + seriesGroup.append(seriesColumns); + seriesGroup.translationX = center; + seriesGroup.translationY = center; + return seriesGroup; + }); + this.root.append(this.series); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.series.forEach((group, i) => { + for (const sector of group.children()) { + sector.fill = fills[i % fills.length]; + sector.stroke = strokes[i % strokes.length]; + } + }); + } +}; +var MiniRadialColumn = { + chartType: "radialColumn", + miniChart: MiniRadialColumnClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/polar/miniRadialBar.ts +var MiniRadialBarClass = class extends MiniChartWithPolarAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "radialBarTooltip"); + this.data = [ + [6, 8, 10], + [4, 4, 3], + [5, 4, 2] + ]; + this.showRadiusAxisLine = false; + const { + size, + padding, + data, + agChartsExports: { _Scene } + } = this; + const radius = (size - padding) / 2; + const innerRadiusRatio = 0.4; + const innerRadius = radius * innerRadiusRatio; + const radiusScale = new _Scene.CategoryScale(); + radiusScale.domain = data[0].map((_, index) => index); + radiusScale.range = [innerRadius, radius]; + radiusScale.paddingInner = 0.5; + radiusScale.paddingOuter = 0; + const bandwidth = radiusScale.bandwidth; + const { processedData, max } = accumulateData(data); + const angleScale = new _Scene.LinearScale(); + angleScale.domain = [0, Math.ceil(max * 1.5)]; + const start = 3 / 2 * Math.PI; + const end = start + 2 * Math.PI; + angleScale.range = [start, end]; + const center = size / 2; + this.series = processedData.map((series, index) => { + const previousSeries = index < 0 ? void 0 : processedData[index - 1]; + const seriesGroup = new _Scene.Group({ zIndex: 1e6 }); + const seriesSectors = series.map((datum, i) => { + const previousDatum = previousSeries?.[i] ?? 0; + const outerRadius = radiusScale.convert(i); + const innerRadius2 = outerRadius - bandwidth; + const startAngle = angleScale.convert(previousDatum); + const endAngle = angleScale.convert(datum); + const sector = new _Scene.Sector(); + sector.centerX = center; + sector.centerY = center; + sector.innerRadius = innerRadius2; + sector.outerRadius = outerRadius; + sector.startAngle = startAngle; + sector.endAngle = endAngle; + sector.stroke = void 0; + sector.strokeWidth = 0; + return sector; + }); + seriesGroup.append(seriesSectors); + return seriesGroup; + }); + this.root.append(this.series); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.series.forEach((group, i) => { + for (const sector of group.children()) { + sector.fill = fills[i % fills.length]; + sector.stroke = strokes[i % strokes.length]; + } + }); + } +}; +var MiniRadialBar = { + chartType: "radialBar", + miniChart: MiniRadialBarClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/polar/miniRadarLine.ts +var MiniRadarLineClass = class extends MiniChartWithPolarAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "radarLineTooltip"); + this.markerSize = 4; + this.data = [ + [8, 7, 8, 7, 8, 8, 7, 8], + [6, 8, 5, 10, 6, 7, 4, 6], + [0, 3, 3, 5, 4, 4, 2, 0] + ]; + this.showRadiusAxisLine = false; + const { size, padding, root, data } = this; + const radius = (size - padding * 2) / 2; + const innerRadius = 0; + const { paths, markers: markers2 } = createPolarPaths( + agChartsExports, + root, + data, + size, + radius, + innerRadius, + this.markerSize + ); + this.lines = paths; + this.markers = markers2; + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.lines.forEach((line, i) => { + const n = this.data[i].length; + line.stroke = fills[i]; + const startIdx = i * n; + const endIdx = startIdx + n; + const markers2 = this.markers.slice(startIdx, endIdx); + for (const marker of markers2) { + marker.stroke = strokes[i]; + marker.fill = fills[i]; + } + }); + } +}; +var MiniRadarLine = { + chartType: "radarLine", + miniChart: MiniRadarLineClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/polar/miniRadarArea.ts +var MiniRadarAreaClass = class extends MiniChartWithPolarAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "radarAreaTooltip"); + this.data = [ + [8, 10, 5, 7, 4, 1, 5, 8], + [1, 1, 2, 7, 7, 8, 10, 1], + [4, 5, 9, 9, 4, 2, 3, 4] + ]; + const { size, padding, root, data } = this; + this.showRadiusAxisLine = false; + const radius = (size - padding * 2) / 2; + const innerRadius = radius - size * 0.3; + this.areas = createPolarPaths(agChartsExports, root, data, size, radius, innerRadius).paths; + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.areas.forEach((area, i) => { + area.fill = fills[i]; + area.stroke = strokes[i]; + }); + } +}; +var MiniRadarArea = { + chartType: "radarArea", + miniChart: MiniRadarAreaClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/polar/miniNightingale.ts +var MiniNightingaleClass = class extends MiniChartWithPolarAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "nightingaleTooltip"); + this.data = [ + [6, 10, 9, 8, 7, 8], + [4, 6, 5, 4, 5, 5], + [3, 5, 4, 3, 4, 7] + ]; + this.showRadiusAxisLine = false; + const { + size, + padding, + data, + agChartsExports: { _Scene } + } = this; + const radius = (size - padding * 2) / 2; + const angleScale = new _Scene.CategoryScale(); + angleScale.domain = data[0].map((_, index) => index); + angleScale.range = [-Math.PI, Math.PI]; + angleScale.paddingInner = 0; + angleScale.paddingOuter = 0; + const bandwidth = angleScale.bandwidth * 0.7; + const { processedData, max } = accumulateData(data); + const radiusScale = new _Scene.LinearScale(); + radiusScale.domain = [0, max]; + radiusScale.range = [0, radius]; + const center = size / 2; + this.series = processedData.map((series, index) => { + const previousSeries = index < 0 ? void 0 : processedData[index - 1]; + const seriesGroup = new _Scene.Group({ zIndex: 1e6 }); + const seriesSectors = series.map((datum, i) => { + const previousDatum = previousSeries?.[i]; + const outerRadius = radiusScale.convert(datum); + const innerRadius = radiusScale.convert(previousDatum ?? 0); + const startAngle = angleScale.convert(i); + const endAngle = startAngle + bandwidth; + const sector = new _Scene.Sector(); + sector.centerX = center; + sector.centerY = center; + sector.innerRadius = innerRadius; + sector.outerRadius = outerRadius; + sector.startAngle = startAngle; + sector.endAngle = endAngle; + sector.stroke = void 0; + sector.strokeWidth = 0; + return sector; + }); + seriesGroup.append(seriesSectors); + return seriesGroup; + }); + this.root.append(this.series); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.series.forEach((group, i) => { + for (const sector of group.children()) { + sector.fill = fills[i % fills.length]; + sector.stroke = strokes[i % strokes.length]; + } + }); + } +}; +var MiniNightingale = { + chartType: "nightingale", + miniChart: MiniNightingaleClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/statistical/miniRangeBar.ts +var MiniRangeBarClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "rangeBarTooltip"); + const data = [3, 3.5, 3]; + this.bars = this.createRangeBar(this.root, data, this.size, this.padding, "vertical"); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.bars.forEach((bar, i) => { + bar.fill = fills[i]; + bar.stroke = strokes[i]; + }); + } + createRangeBar(root, data, size, padding, direction) { + const barAlongX = direction === "horizontal"; + const scalePadding = 2 * padding; + const { _Scene } = this.agChartsExports; + const xScale = new _Scene.CategoryScale(); + xScale.domain = data.map((_, index) => index); + xScale.range = [padding, size - padding]; + xScale.paddingInner = 0.3; + xScale.paddingOuter = 0.3; + const lowRatio = 0.7; + const highRatio = 1.3; + const yScale = new _Scene.LinearScale(); + yScale.domain = [ + data.reduce((a, b) => Math.min(a, b), Infinity) * lowRatio, + data.reduce((a, b) => Math.max(a, b), 0) * highRatio + ]; + yScale.range = [scalePadding, size - scalePadding]; + const width = xScale.bandwidth; + const bars = data.map((datum, i) => { + const [low, high] = [datum * lowRatio, datum * highRatio]; + const x = xScale.convert(i); + const y = yScale.convert(low); + const height = yScale.convert(high) - y; + const rect = new _Scene.Rect(); + rect.x = barAlongX ? y : x; + rect.y = barAlongX ? x : y; + rect.width = barAlongX ? height : width; + rect.height = barAlongX ? width : height; + rect.strokeWidth = 0; + rect.crisp = true; + return rect; + }); + root.append(bars); + return bars; + } +}; +var MiniRangeBar = { + chartType: "rangeBar", + miniChart: MiniRangeBarClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/statistical/miniRangeArea.ts +var MiniRangeAreaClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "rangeAreaTooltip"); + const period = 4; + const dataSeriesMidpoints = [ + zigzag({ offset: 0.375 * period, length: period, pattern: { low: 3, high: 5, period } }), + zigzag({ offset: 0.375 * period, length: period, pattern: { low: 2.25, high: 4.25, period } }), + zigzag({ offset: 0.75 * period, length: period, pattern: { low: 2.5, high: 4.5, period } }) + ]; + const dataSeriesWidth = 1.75; + const data = dataSeriesMidpoints.map( + (series) => series.map(([x, y]) => ({ + x, + low: y - 0.5 * dataSeriesWidth, + high: y + 0.5 * dataSeriesWidth + })) + ); + const { lines, areas } = this.createRangeArea(this.root, data, this.size, this.padding); + this.lines = lines; + this.areas = areas; + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + fills = swapArrayItems(fills, 1, 2); + strokes = swapArrayItems(strokes, 1, 2); + this.lines.forEach(([highLine, lowLine], i) => { + highLine.fill = void 0; + highLine.stroke = strokes[i]; + lowLine.fill = void 0; + lowLine.stroke = strokes[i]; + }); + this.areas.forEach((area, i) => { + area.fill = fills[i]; + }); + } + createRangeArea(root, data, size, padding) { + const xMin = data.reduce((acc, series) => series.reduce((acc2, { x }) => Math.min(acc2, x), acc), Infinity); + const xMax = data.reduce((acc, series) => series.reduce((acc2, { x }) => Math.max(acc2, x), acc), -Infinity); + const yMin = data.reduce((acc, series) => series.reduce((acc2, { low }) => Math.min(acc2, low), acc), Infinity); + const yMax = data.reduce( + (acc, series) => series.reduce((acc2, { high }) => Math.max(acc2, high), acc), + -Infinity + ); + const { _Scene } = this.agChartsExports; + const xScale = new _Scene.LinearScale(); + xScale.domain = [xMin, xMax]; + xScale.range = [padding, size - padding]; + const scalePadding = 2 * padding; + const yScale = new _Scene.LinearScale(); + yScale.domain = [yMin, yMax]; + yScale.range = [size - scalePadding, scalePadding]; + const lines = []; + const areas = []; + const lowPoints = data.map((series) => { + const highLine = new _Scene.Path(); + const lowLine = new _Scene.Path(); + const area = new _Scene.Path(); + lines.push([highLine, lowLine]); + areas.push(area); + highLine.strokeWidth = 0; + lowLine.strokeWidth = 0; + area.strokeWidth = 0; + area.fillOpacity = 0.8; + highLine.path.clear(); + lowLine.path.clear(); + area.path.clear(); + return series.map((datum, datumIndex) => { + const { x, low, high } = datum; + const scaledX = xScale.convert(x); + const yLow = yScale.convert(low); + const yHigh = yScale.convert(high); + const command = datumIndex > 0 ? "lineTo" : "moveTo"; + highLine.path[command](scaledX, yHigh); + lowLine.path[command](scaledX, yLow); + area.path[command](scaledX, yHigh); + return [scaledX, yLow]; + }); + }); + lowPoints.forEach((seriesLowPoints, seriesIndex) => { + const n = seriesLowPoints.length - 1; + const area = areas[seriesIndex]; + for (let datumIndex = n; datumIndex >= 0; datumIndex--) { + const [x, y] = seriesLowPoints[datumIndex]; + area.path["lineTo"](x, y); + } + }); + root.append(areas.concat(...lines)); + return { lines, areas }; + } +}; +function zigzag(options) { + const { offset, length, pattern } = options; + const points = getZigzagInflectionPoints(offset, length, pattern); + const xMin = 0; + const xMax = length; + if (points.length === 0 || points[0][0] !== xMin) { + points.unshift(getZigzagPoint(xMin, offset, pattern)); + } + if (points[points.length - 1][0] !== xMax) { + points.push(getZigzagPoint(xMax, offset, pattern)); + } + return points; + function getZigzagInflectionPoints(offset2, length2, pattern2) { + const { period } = pattern2; + const scaledOffset = offset2 / period; + const patternInflectionPoints = [0, 0.5]; + const inflectionPoints = patternInflectionPoints.map((x) => x - scaledOffset).map(getRemainderAbs).sort((a, b) => a - b); + const repeatedPoints = Array.from( + { length: Math.floor(inflectionPoints.length * (period / length2)) }, + (_, i) => inflectionPoints[i % inflectionPoints.length] + Math.floor(i / inflectionPoints.length) + ); + return repeatedPoints.map((x) => x * period).map((x) => getZigzagPoint(x, offset2, pattern2)); + } + function getZigzagPoint(x, offset2, pattern2) { + return [x, getZigzagValue(offset2 + x, pattern2)]; + } + function getZigzagValue(x, pattern2) { + const { low, high, period } = pattern2; + const scaledX = getRemainderAbs(x / period); + const y = scaledX > 0.5 ? 1 - 2 * (scaledX - 0.5) : 2 * scaledX; + return low + (high - low) * y; + } +} +function getRemainderAbs(value) { + const remainder = value % 1; + return remainder < 0 ? remainder + 1 : remainder; +} +function swapArrayItems(items, leftIndex, rightIndex) { + const results = [...items]; + const temp = results[leftIndex]; + results[leftIndex] = results[rightIndex]; + results[rightIndex] = temp; + return results; +} +var MiniRangeArea = { + chartType: "rangeArea", + miniChart: MiniRangeAreaClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/statistical/miniBoxPlot.ts +var MiniBoxPlotClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes, isCustomTheme) { + super(container, agChartsExports, "boxPlotTooltip"); + const { + size, + padding, + agChartsExports: { _Scene } + } = this; + const data = [11, 11.5, 10.5]; + const maxRatio = 1.2; + const q3Ratio = 1.1; + const q1Ratio = 0.9; + const minRatio = 0.8; + const yScale = new _Scene.LinearScale(); + yScale.domain = [ + data.reduce((a, b) => Math.min(a, b), Infinity) * minRatio, + data.reduce((a, b) => Math.max(a, b), 0) * maxRatio + ]; + yScale.range = [size - 1.5 * padding, padding]; + const xScale = new _Scene.CategoryScale(); + xScale.domain = data.map((_, index) => index); + xScale.range = [padding, size - padding]; + xScale.paddingInner = 0.4; + xScale.paddingOuter = 0.2; + const bandwidth = Math.round(xScale.bandwidth); + const halfBandWidth = Math.round(xScale.bandwidth / 2); + this.boxPlotGroups = data.map((datum, i) => { + const [minValue, q1Value, q3Value, maxValue] = [ + datum * minRatio, + datum * q1Ratio, + datum * q3Ratio, + datum * maxRatio + ]; + const top = Math.round(yScale.convert(q3Value)); + const left = Math.round(xScale.convert(i)); + const right = Math.round(left + bandwidth); + const bottom = Math.round(yScale.convert(q1Value)); + const min = Math.round(yScale.convert(minValue)); + const mid = Math.round(yScale.convert(datum)); + const max = Math.round(yScale.convert(maxValue)); + const whiskerX = left + halfBandWidth; + const boxPlotGroup = new _Scene.Group(); + const box = new _Scene.Rect(); + const median = new _Scene.Line(); + const topWhisker = new _Scene.Line(); + const bottomWhisker = new _Scene.Line(); + const topCap = new _Scene.Line(); + const bottomCap = new _Scene.Line(); + box.x = left; + box.y = top; + box.width = bandwidth; + box.height = bottom - top; + box.strokeWidth = 1; + box.strokeOpacity = 0.75; + box.crisp = true; + this.setLineProperties(median, left, right, mid, mid); + this.setLineProperties(topWhisker, whiskerX, whiskerX, max, top); + this.setLineProperties(bottomWhisker, whiskerX, whiskerX, min, bottom); + this.setLineProperties(topCap, left, right, max, max); + this.setLineProperties(bottomCap, left, right, min, min); + boxPlotGroup.append([box, median, topWhisker, bottomWhisker, topCap, bottomCap]); + return boxPlotGroup; + }); + this.updateColors(fills, strokes, isCustomTheme); + this.root.append(this.boxPlotGroups); + } + updateColors(fills, strokes, isCustomTheme) { + const { _Theme } = this.agChartsExports; + this.boxPlotGroups.forEach((group, i) => { + for (const node of group.children()) { + const fill = fills[i % fills.length]; + node.fill = isCustomTheme ? fill : _Theme.resolveOperation({ $mix: [fill, { $ref: "backgroundColor" }, 0.7] }); + node.stroke = strokes[i % strokes.length]; + } + }); + } + setLineProperties(line, x1, x2, y1, y2) { + line.x1 = x1; + line.x2 = x2; + line.y1 = y1; + line.y2 = y2; + line.strokeOpacity = 0.75; + } +}; +var MiniBoxPlot = { + chartType: "boxPlot", + miniChart: MiniBoxPlotClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/hierarchical/miniTreemap.ts +var MiniTreemapClass = class extends MiniChart { + constructor(container, agChartsExports, fills, strokes, isCustomTheme) { + super(container, agChartsExports, "treemapTooltip"); + const { + size, + padding, + agChartsExports: { _Scene } + } = this; + const data = [ + [1, 1], + [3, 2, 1] + ]; + const treeSize = data.length; + const treePadding = treeSize % 2 === 0 ? 0.3 : 0.2; + const range = [padding, size - padding]; + const columns = data.length; + const columnParts = columns * (columns + 1) / 2; + const columnPadding = treePadding / (columns - 1); + const availableRange = range[1] - range[0]; + const availableWidth = availableRange - treePadding; + let previousX = range[0]; + this.rects = data.reduce((rects, d, columnIndex) => { + rects ?? (rects = []); + const widthRatio = (columns - columnIndex) / columnParts; + const width = availableWidth * widthRatio; + const rows = d.length; + const rowParts = d.reduce((parts, ratio) => parts + ratio, 0); + const rowPadding = treePadding / (rows - 1 || 1); + const availableHeight = rows > 1 ? availableRange - treePadding : availableRange; + let previousY = range[0]; + const xRects = d.map((ratio) => { + const rect = new _Scene.Rect(); + const height = availableHeight * ratio / rowParts; + rect.x = previousX; + rect.y = previousY; + rect.width = width; + rect.height = height; + rect.strokeWidth = 0.75; + rect.crisp = true; + previousY += height + rowPadding; + return rect; + }); + previousX += width + columnPadding; + rects.push(...xRects); + return rects; + }, []); + this.updateColors(fills, strokes, isCustomTheme); + const rectGroup = new _Scene.Group(); + rectGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding, size - padding)); + rectGroup.append(this.rects); + this.root.append(rectGroup); + } + updateColors(fills, strokes, isCustomTheme) { + const { _Theme } = this.agChartsExports; + this.rects.forEach((rect, i) => { + rect.fill = fills[i % strokes.length]; + rect.stroke = isCustomTheme ? strokes[i % strokes.length] : _Theme.resolveOperation({ $ref: "backgroundColor" }); + }); + } +}; +var MiniTreemap = { + chartType: "treemap", + miniChart: MiniTreemapClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/hierarchical/miniSunburst.ts +var MiniSunburstClass = class extends MiniChartWithPolarAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "sunburstTooltip"); + // Hierarchical data using multidimensional array + this.data = [ + [[], []], + [[], []], + [[], []] + ]; + // Rotate the chart by the given angle (-90 degrees) + this.angleOffset = -Math.PI / 2; + this.innerRadiusRatio = 0; + this.showRadiusAxisLine = false; + this.showAngleAxisLines = false; + const { + data, + size, + padding, + angleOffset, + innerRadiusRatio, + agChartsExports: { _Scene } + } = this; + const radius = (size - padding * 2) / 2; + const angleRange = [angleOffset + 0, angleOffset + 2 * Math.PI]; + const angleExtent = Math.abs(angleRange[1] - angleRange[0]); + const radiusRange = [radius * innerRadiusRatio, radius]; + const radiusExtent = Math.abs(radiusRange[1] - radiusRange[0]); + let maxDepth = 0; + const findMaxDepth = (data2, parentDepth) => { + for (const child of data2) { + const depth = parentDepth + 1; + maxDepth = Math.max(maxDepth, depth); + findMaxDepth(child, depth); + } + }; + findMaxDepth(data, 0); + const radiusRatio = radiusExtent / maxDepth; + const center = this.size / 2; + const startAngle = angleRange[0]; + this.series = []; + const createSectors = (data2, depth, startAngle2, availableAngle, group) => { + const isArray = Array.isArray(data2); + if (!isArray) { + return; + } + const childDepth = depth + 1; + let previousAngle = startAngle2; + data2.forEach((child, childIndex, children) => { + let childGroup = group; + if (!childGroup) { + childGroup = new _Scene.Group(); + this.series.push(childGroup); + } + const innerRadius = radiusRange[0] + depth * radiusRatio; + const outerRadius = radiusRange[0] + childDepth * radiusRatio; + const angleRatio = 1 / children.length; + const start = previousAngle; + const end = start + availableAngle * angleRatio; + const sector = new _Scene.Sector(); + sector.centerX = center; + sector.centerY = center; + sector.innerRadius = innerRadius; + sector.outerRadius = outerRadius; + sector.startAngle = start; + sector.endAngle = end; + sector.stroke = void 0; + sector.strokeWidth = 0; + sector.inset = 0.75; + previousAngle = end; + childGroup.append(sector); + createSectors(child, childDepth, start, Math.abs(end - start), childGroup); + }); + }; + createSectors(data, 0, startAngle, angleExtent); + this.root.append(this.series); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.series.forEach((group, i) => { + for (const sector of group.children()) { + sector.fill = fills[i % fills.length]; + sector.stroke = strokes[i % strokes.length]; + } + }); + } +}; +var MiniSunburst = { + chartType: "sunburst", + miniChart: MiniSunburstClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/specialized/miniHeatmap.ts +var MiniHeatmapClass = class extends MiniChart { + constructor(container, agChartsExports, fills, strokes, isCustomTheme) { + super(container, agChartsExports, "heatmapTooltip"); + const { + size, + padding, + agChartsExports: { _Scene } + } = this; + const heatmapSize = 3; + const data = Array.from( + { length: heatmapSize }, + (_, __) => Array.from({ length: heatmapSize }, (_2, yIndex) => yIndex) + ); + const domain = data.map((_, index) => index); + const xScale = new _Scene.CategoryScale(); + xScale.domain = domain; + xScale.range = [padding, size - padding]; + xScale.paddingInner = 0.01; + xScale.paddingOuter = 0.1; + const yScale = new _Scene.CategoryScale(); + yScale.domain = domain; + yScale.range = [padding, size - padding]; + yScale.paddingInner = 0.01; + yScale.paddingOuter = 0.1; + const width = xScale.bandwidth ?? 0; + const height = yScale.bandwidth ?? 0; + this.rects = data.reduce((rects, d, index) => { + rects ?? (rects = []); + const xRects = d.map((_, yIndex) => { + const rect = new _Scene.Rect(); + rect.x = xScale.convert(index); + rect.y = yScale.convert(yIndex); + rect.width = width; + rect.height = height; + rect.strokeWidth = 0; + rect.crisp = true; + return rect; + }); + rects.push(...xRects); + return rects; + }, []); + this.updateColors(fills, strokes, isCustomTheme); + const rectGroup = new _Scene.Group(); + rectGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding, size - padding)); + rectGroup.append(this.rects); + this.root.append(rectGroup); + } + updateColors(fills, strokes, isCustomTheme) { + const { _Theme, _Util } = this.agChartsExports; + const colorRange = isCustomTheme ? [fills[0], fills[1]] : _Theme.resolveOperation({ $palette: "divergingColors" }); + const stroke = isCustomTheme ? strokes[0] : _Theme.resolveOperation({ $ref: "backgroundColor" }); + const fillFn = _Util.interpolateColor(colorRange[0], colorRange[1]); + this.rects.forEach((rect, i) => { + rect.fill = fillFn(i * 0.2); + rect.stroke = stroke; + }); + } +}; +var MiniHeatmap = { + chartType: "heatmap", + miniChart: MiniHeatmapClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/specialized/miniWaterfall.ts +var MiniWaterfallClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes, isCustomTheme) { + super(container, agChartsExports, "waterfallTooltip"); + this.data = [4, 3, -3, 6, -3]; + this.bars = this.createWaterfall(this.root, this.data, this.size, this.padding, "vertical").bars; + this.updateColors(fills, strokes, isCustomTheme); + } + updateColors(fills, strokes, isCustomTheme) { + const { + data, + agChartsExports: { _Theme } + } = this; + const positive = { + fill: isCustomTheme ? fills[0] : _Theme.resolveOperation({ $palette: "altUp.fill" }), + stroke: isCustomTheme ? strokes[0] : _Theme.resolveOperation({ $palette: "altUp.stroke" }) + }; + const negative = { + fill: isCustomTheme ? fills[1] : _Theme.resolveOperation({ $palette: "altDown.fill" }), + stroke: isCustomTheme ? strokes[1] : _Theme.resolveOperation({ $palette: "altDown.stroke" }) + }; + this.bars.forEach((bar, i) => { + const isPositive = data[i] >= 0; + bar.fill = isPositive ? positive.fill : negative.fill; + bar.stroke = isPositive ? positive.stroke : negative.stroke; + }); + } + createWaterfall(root, data, size, padding, direction) { + const scalePadding = 2 * padding; + const { processedData, min, max } = accumulateData(data.map((d) => [d])); + const flatData = processedData.reduce((flat, d) => flat.concat(d), []); + const { _Scene } = this.agChartsExports; + const yScale = new _Scene.LinearScale(); + yScale.domain = [Math.min(min, 0), max]; + yScale.range = [size - scalePadding, scalePadding]; + const xScale = new _Scene.CategoryScale(); + xScale.domain = data.map((_, index) => index); + xScale.range = [padding, size - padding]; + xScale.paddingInner = 0.2; + xScale.paddingOuter = 0.3; + const width = xScale.bandwidth; + const connectorLine = new _Scene.Path(); + connectorLine.stroke = "#575757"; + connectorLine.strokeWidth = 0; + const pixelAlignmentOffset = Math.floor(connectorLine.strokeWidth) % 2 / 2; + const connectorPath = connectorLine.path; + connectorPath.clear(); + const barAlongX = direction === "horizontal"; + const bars = flatData.map((datum, i) => { + const previousDatum = i > 0 ? flatData[i - 1] : 0; + const rawValue = data[i]; + const isPositive = rawValue > 0; + const currY = Math.round(yScale.convert(datum)); + const trailY = Math.round(yScale.convert(previousDatum)); + const y = (isPositive ? currY : trailY) - pixelAlignmentOffset; + const bottomY = (isPositive ? trailY : currY) + pixelAlignmentOffset; + const height = Math.abs(bottomY - y); + const x = xScale.convert(i); + const rect = new _Scene.Rect(); + rect.x = barAlongX ? y : x; + rect.y = barAlongX ? x : y; + rect.width = barAlongX ? height : width; + rect.height = barAlongX ? width : height; + rect.strokeWidth = 0; + rect.crisp = true; + const moveTo = currY + pixelAlignmentOffset; + const lineTo = trailY + pixelAlignmentOffset; + if (i > 0) { + const lineToX = barAlongX ? lineTo : rect.x; + const lineToY = barAlongX ? rect.y : lineTo; + connectorPath.lineTo(lineToX, lineToY); + } + const moveToX = barAlongX ? moveTo : rect.x; + const moveToY = barAlongX ? rect.y : moveTo; + connectorPath.moveTo(moveToX, moveToY); + return rect; + }); + root.append([connectorLine, ...bars]); + return { bars }; + } +}; +var MiniWaterfall = { + chartType: "waterfall", + miniChart: MiniWaterfallClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/combo/miniColumnLineCombo.ts +var MiniColumnLineComboClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "columnLineComboTooltip"); + this.columnData = [3, 4]; + this.lineData = [[5, 4, 6, 5, 4]]; + const { root, columnData, lineData, size, padding } = this; + this.columns = createColumnRects({ + stacked: false, + root, + data: columnData, + size, + padding, + xScaleDomain: [0, 1], + yScaleDomain: [0, 4], + xScalePadding: 0.5, + agChartsExports + }); + root.append(this.columns); + this.lines = createLinePaths(agChartsExports, root, lineData, size, padding); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.columns.forEach((bar, i) => { + bar.fill = fills[i]; + bar.stroke = strokes[i]; + }); + this.lines.forEach((line, i) => { + line.stroke = fills[i + 2]; + }); + } +}; +var MiniColumnLineCombo = { + chartType: "columnLineCombo", + miniChart: MiniColumnLineComboClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/combo/miniAreaColumnCombo.ts +var MiniAreaColumnComboClass = class extends MiniChartWithAxes { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "areaColumnComboTooltip"); + this.columnData = [3, 4.5]; + this.areaData = [[5, 4, 6, 5, 4]]; + const { + root, + columnData, + areaData, + size, + padding, + agChartsExports: { _Scene } + } = this; + this.columns = createColumnRects({ + stacked: false, + root, + data: columnData, + size, + padding, + xScaleDomain: [0, 1], + yScaleDomain: [0, 6], + xScalePadding: 0.5, + agChartsExports + }); + const xScale = new _Scene.CategoryScale(); + xScale.range = [padding, size - padding]; + xScale.domain = [0, 1, 2, 3, 4]; + xScale.paddingInner = 1; + xScale.paddingOuter = 0; + const yScale = new _Scene.LinearScale(); + yScale.range = [size - padding, padding]; + yScale.domain = [0, 6]; + const pathData = []; + const yZero = yScale.convert(0); + const firstX = xScale.convert(0); + areaData.forEach((series, i) => { + const points = pathData[i] || (pathData[i] = []); + series.forEach((data, j) => { + const yDatum = data; + const xDatum = j; + const x = xScale.convert(xDatum); + const y = yScale.convert(yDatum); + points[j] = { x, y }; + }); + const lastX = xScale.convert(series.length - 1); + pathData[i].push( + { + x: lastX, + y: yZero + }, + { + x: firstX, + y: yZero + } + ); + }); + this.areas = pathData.map((points) => { + const area = new _Scene.Path(); + area.strokeWidth = 0; + area.fillOpacity = 0.8; + const path = area.path; + points.forEach((point, i) => path[i > 0 ? "lineTo" : "moveTo"](point.x, point.y)); + return area; + }); + const areaGroup = new _Scene.Group(); + areaGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding * 2, size - padding * 2)); + const columnGroup = new _Scene.Group(); + columnGroup.setClipRect(new _Scene.BBox(padding, padding, size - padding * 2, size - padding * 2)); + areaGroup.append(this.areas); + columnGroup.append(this.columns); + root.append(areaGroup); + root.append(columnGroup); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.areas.forEach((area, i) => { + area.fill = fills[i]; + area.stroke = strokes[i]; + }); + this.columns.forEach((bar, i) => { + bar.fill = fills[i + 1]; + bar.stroke = strokes[i + 1]; + }); + } +}; +var MiniAreaColumnCombo = { + chartType: "areaColumnCombo", + miniChart: MiniAreaColumnComboClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniCharts/combo/miniCustomCombo.ts +var MiniCustomComboClass = class extends MiniChart { + constructor(container, agChartsExports, fills, strokes) { + super(container, agChartsExports, "customComboTooltip"); + this.columnData = [3, 4]; + this.lineData = [[5, 4, 6, 5, 4]]; + const { + root, + columnData, + lineData, + size, + padding, + agChartsExports: { _Scene } + } = this; + this.columns = createColumnRects({ + stacked: false, + root, + data: columnData, + size, + padding, + xScaleDomain: [0, 1], + yScaleDomain: [0, 4], + xScalePadding: 0.5, + agChartsExports + }); + root.append(this.columns); + this.lines = createLinePaths(this.agChartsExports, root, lineData, size, padding); + const axisStroke = "grey"; + const axisOvershoot = 3; + const leftAxis = new _Scene.Line(); + leftAxis.x1 = padding; + leftAxis.y1 = padding; + leftAxis.x2 = padding; + leftAxis.y2 = size - padding + axisOvershoot; + leftAxis.stroke = axisStroke; + const bottomAxis = new _Scene.Line(); + bottomAxis.x1 = padding - axisOvershoot + 1; + bottomAxis.y1 = size - padding; + bottomAxis.x2 = size - padding + 1; + bottomAxis.y2 = size - padding; + bottomAxis.stroke = axisStroke; + const penIcon = new _Scene.Path(); + this.buildPenIconPath(penIcon); + penIcon.fill = "whitesmoke"; + penIcon.stroke = "darkslategrey"; + penIcon.strokeWidth = 1; + root.append([bottomAxis, leftAxis, penIcon]); + this.updateColors(fills, strokes); + } + updateColors(fills, strokes) { + this.columns.forEach((bar, i) => { + bar.fill = fills[i]; + bar.stroke = strokes[i]; + }); + this.lines.forEach((line, i) => { + line.stroke = fills[i + 2]; + }); + } + buildPenIconPath(penIcon) { + const { path } = penIcon; + path.moveTo(25.76, 43.46); + path.lineTo(31.27, 48.53); + path.moveTo(49.86, 22); + path.lineTo(49.86, 22); + path.cubicCurveTo(49.01994659053345, 21.317514933510974, 47.89593834348529, 21.09645997825817, 46.86, 21.41); + path.lineTo(46.86, 21.41); + path.cubicCurveTo(45.55460035985361, 21.77260167850787, 44.38777081121966, 22.517979360321792, 43.51, 23.55); + path.lineTo(25.51, 43.8); + path.lineTo(25.43, 43.89); + path.lineTo(23.01, 51.89); + path.lineTo(22.83, 52.46); + path.lineTo(31.02, 48.86); + path.lineTo(49.02, 28.52); + path.lineTo(49.02, 28.52); + path.cubicCurveTo(49.940716461596224, 27.521914221246085, 50.54302631059587, 26.2720342455763, 50.75, 24.93); + path.lineTo(50.75, 24.93); + path.cubicCurveTo(50.95363374988308, 23.866379846512814, 50.62080640232334, 22.77066734274871, 49.86, 22); + path.closePath(); + path.moveTo(41.76, 25.5); + path.lineTo(47.34, 30.5); + path.moveTo(40.74, 26.65); + path.lineTo(46.25, 31.71); + } +}; +var MiniCustomCombo = { + chartType: "customCombo", + miniChart: MiniCustomComboClass +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/miniChartsContainer.ts +var miniChartMapping = { + columnGroup: { + column: { range: true, pivot: true, enterprise: false, icon: MiniColumn }, + stackedColumn: { range: true, pivot: true, enterprise: false, icon: MiniStackedColumn }, + normalizedColumn: { range: true, pivot: true, enterprise: false, icon: MiniNormalizedColumn } + }, + barGroup: { + bar: { range: true, pivot: true, enterprise: false, icon: MiniBar }, + stackedBar: { range: true, pivot: true, enterprise: false, icon: MiniStackedBar }, + normalizedBar: { range: true, pivot: true, enterprise: false, icon: MiniNormalizedBar } + }, + pieGroup: { + pie: { range: true, pivot: true, enterprise: false, icon: MiniPie }, + donut: { range: true, pivot: true, enterprise: false, icon: MiniDonut }, + doughnut: { range: true, pivot: true, enterprise: false, icon: MiniDonut } + }, + lineGroup: { + line: { range: true, pivot: true, enterprise: false, icon: MiniLine }, + stackedLine: { range: true, pivot: true, enterprise: false, icon: MiniStackedLine }, + normalizedLine: { range: true, pivot: true, enterprise: false, icon: MiniNormalizedLine } + }, + scatterGroup: { + scatter: { range: true, pivot: true, enterprise: false, icon: MiniScatter }, + bubble: { range: true, pivot: true, enterprise: false, icon: MiniBubble } + }, + areaGroup: { + area: { range: true, pivot: true, enterprise: false, icon: MiniArea }, + stackedArea: { range: true, pivot: true, enterprise: false, icon: MiniStackedArea }, + normalizedArea: { range: true, pivot: true, enterprise: false, icon: MiniNormalizedArea } + }, + polarGroup: { + radarLine: { range: true, pivot: false, enterprise: true, icon: MiniRadarLine }, + radarArea: { range: true, pivot: false, enterprise: true, icon: MiniRadarArea }, + nightingale: { range: true, pivot: false, enterprise: true, icon: MiniNightingale }, + radialColumn: { range: true, pivot: false, enterprise: true, icon: MiniRadialColumn }, + radialBar: { range: true, pivot: false, enterprise: true, icon: MiniRadialBar } + }, + statisticalGroup: { + boxPlot: { range: true, pivot: false, enterprise: true, icon: MiniBoxPlot }, + histogram: { range: true, pivot: false, enterprise: false, icon: MiniHistogram }, + rangeBar: { range: true, pivot: false, enterprise: true, icon: MiniRangeBar }, + rangeArea: { range: true, pivot: false, enterprise: true, icon: MiniRangeArea } + }, + hierarchicalGroup: { + treemap: { range: true, pivot: true, enterprise: true, icon: MiniTreemap }, + sunburst: { range: true, pivot: true, enterprise: true, icon: MiniSunburst } + }, + specializedGroup: { + heatmap: { range: true, pivot: false, enterprise: true, icon: MiniHeatmap }, + waterfall: { range: true, pivot: false, enterprise: true, icon: MiniWaterfall } + }, + combinationGroup: { + columnLineCombo: { range: true, pivot: true, enterprise: false, icon: MiniColumnLineCombo }, + areaColumnCombo: { range: true, pivot: true, enterprise: false, icon: MiniAreaColumnCombo }, + customCombo: { range: true, pivot: true, enterprise: false, icon: MiniCustomCombo } + }, + funnelGroup: { + funnel: { range: true, pivot: false, enterprise: true, icon: MiniFunnel }, + coneFunnel: { range: true, pivot: false, enterprise: true, icon: MiniConeFunnel }, + pyramid: { range: true, pivot: false, enterprise: true, icon: MiniPyramid } + } +}; +var DEFAULT_CHART_GROUPS = { + columnGroup: ["column", "stackedColumn", "normalizedColumn"], + barGroup: ["bar", "stackedBar", "normalizedBar"], + pieGroup: ["pie", "donut"], + lineGroup: ["line", "stackedLine", "normalizedLine"], + areaGroup: ["area", "stackedArea", "normalizedArea"], + scatterGroup: ["scatter", "bubble"], + polarGroup: ["radarLine", "radarArea", "nightingale", "radialColumn", "radialBar"], + statisticalGroup: ["boxPlot", "histogram", "rangeBar", "rangeArea"], + hierarchicalGroup: ["treemap", "sunburst"], + specializedGroup: ["heatmap", "waterfall"], + funnelGroup: ["funnel", "coneFunnel", "pyramid"], + combinationGroup: ["columnLineCombo", "areaColumnCombo", "customCombo"] +}; +var MiniChartsContainer = class extends Component93 { + constructor(chartController, fills, strokes, isCustomTheme, chartGroups = DEFAULT_CHART_GROUPS) { + super( + /* html */ + `
` + ); + this.wrappers = /* @__PURE__ */ new Map(); + this.chartController = chartController; + this.fills = fills; + this.strokes = strokes; + this.isCustomTheme = isCustomTheme; + this.chartGroups = { ...chartGroups }; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + if (!this.chartController.customComboExists() && this.chartGroups.combinationGroup) { + this.chartGroups.combinationGroup = this.chartGroups.combinationGroup.filter( + (chartType) => chartType !== "customCombo" + ); + } + const eGui = this.getGui(); + const isEnterprise = this.chartController.isEnterprise(); + const isPivotChart = this.chartController.isPivotChart(); + const isRangeChart = !isPivotChart; + const displayedMenuGroups = Object.keys(this.chartGroups).map((group) => { + const menuGroup = group in miniChartMapping ? miniChartMapping[group] : void 0; + if (!menuGroup) { + _warn65(148, { group }); + return null; + } + const chartGroupValues = this.chartGroups[group] ?? []; + const menuItems = chartGroupValues.map((chartType) => { + const menuItem = chartType in menuGroup ? menuGroup[chartType] : void 0; + if (!menuItem) { + _warn65(149, { group, chartType }); + return null; + } + if (!isEnterprise && menuItem.enterprise) { + return null; + } + if (isRangeChart && menuItem.range) { + return menuItem; + } + if (isPivotChart && menuItem.pivot) { + return menuItem; + } + return null; + }).filter((menuItem) => menuItem != null); + if (menuItems.length === 0) { + return null; + } + return { + label: this.chartTranslation.translate(group), + items: menuItems + }; + }).filter((menuGroup) => menuGroup != null); + for (const { label, items } of displayedMenuGroups) { + const groupComponent = this.createBean( + new AgGroupComponent({ + title: label, + suppressEnabledCheckbox: true, + enabled: true, + suppressOpenCloseIcons: true, + cssIdentifier: "charts-settings", + direction: "horizontal", + suppressKeyboardNavigation: true + }) + ); + for (const menuItem of items) { + const { miniChart: MiniClass, chartType } = menuItem.icon; + const miniWrapper = document.createElement("div"); + miniWrapper.classList.add("ag-chart-mini-thumbnail"); + miniWrapper.setAttribute("tabindex", "0"); + miniWrapper.setAttribute("role", "button"); + const miniClassChartType = chartType; + const listener = () => { + this.chartController.setChartType(miniClassChartType); + this.updateSelectedMiniChart(); + }; + this.addManagedListeners(miniWrapper, { + click: listener, + keydown: (event) => { + if (event.key == KeyCode34.ENTER || event.key === KeyCode34.SPACE) { + event.preventDefault(); + listener(); + } + } + }); + this.wrappers.set(miniClassChartType, miniWrapper); + this.createBean( + new MiniClass(miniWrapper, this.beans.agChartsExports, this.fills, this.strokes, this.isCustomTheme) + ); + groupComponent.addItem(miniWrapper); + } + eGui.appendChild(groupComponent.getGui()); + } + this.updateSelectedMiniChart(); + } + updateSelectedMiniChart() { + const selectedChartType = this.chartController.getChartType(); + this.wrappers.forEach((miniChart, miniChartType) => { + const selected = miniChartType === selectedChartType; + miniChart.classList.toggle("ag-selected", selected); + const chartName = this.chartTranslation.translate(getFullChartNameTranslationKey(miniChartType)); + const ariaLabel = selected ? `${chartName}. ${this.chartTranslation.translate("ariaChartSelected")}` : chartName; + _setAriaLabel21(miniChart, ariaLabel); + }); + } + destroy() { + this.wrappers.clear(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/settings/chartSettingsPanel.ts +var ChartSettingsPanel = class extends Component94 { + constructor(chartController) { + super( + /* html */ + `
+
+
+
+ +
+
+
+ +
+
+
` + ); + this.chartController = chartController; + this.eMiniChartsContainer = RefPlaceholder66; + this.eNavBar = RefPlaceholder66; + this.eCardSelector = RefPlaceholder66; + this.ePrevBtn = RefPlaceholder66; + this.eNextBtn = RefPlaceholder66; + this.miniChartsContainers = []; + this.cardItems = []; + this.activePaletteIndex = 0; + this.palettes = []; + this.themes = []; + } + postConstruct() { + this.resetPalettes(); + const isRtl = this.gos.get("enableRtl"); + this.ePrevBtn.insertAdjacentElement( + "afterbegin", + _createIconNoSpan27(isRtl ? "chartsThemeNext" : "chartsThemePrevious", this.beans) + ); + this.eNextBtn.insertAdjacentElement( + "afterbegin", + _createIconNoSpan27(isRtl ? "chartsThemePrevious" : "chartsThemeNext", this.beans) + ); + this.addManagedElementListeners(this.ePrevBtn, { click: () => this.setActivePalette(this.getPrev(), "left") }); + this.addManagedElementListeners(this.eNextBtn, { click: () => this.setActivePalette(this.getNext(), "right") }); + const reset = () => this.resetPalettes(true); + this.addManagedListeners(this.chartController, { + chartTypeChanged: reset, + chartApiUpdate: reset + }); + this.scrollSelectedIntoView(); + } + scrollSelectedIntoView() { + setTimeout(() => { + const isMiniChartsContainerVisible = (miniChartsContainers) => { + return !miniChartsContainers.getGui().classList.contains("ag-hidden"); + }; + const currentMiniChartContainer = this.miniChartsContainers.find(isMiniChartsContainerVisible); + const currentChart = currentMiniChartContainer.getGui().querySelector(".ag-selected"); + if (currentChart) { + const parent = currentChart.offsetParent; + if (parent) { + this.eMiniChartsContainer.scrollTo(0, parent.offsetTop); + } + } + }, 250); + } + resetPalettes(forceReset) { + const palettes = this.chartController.getPalettes(); + const chartGroups = this.gos.get("chartToolPanelsDef")?.settingsPanel?.chartGroupsDef; + if (_areEqual8(palettes, this.palettes) && !forceReset || this.isAnimating) { + return; + } + this.palettes = palettes; + this.themes = this.chartController.getThemeNames(); + this.activePaletteIndex = this.themes.findIndex((name) => name === this.chartController.getChartThemeName()); + this.cardItems = []; + _clearElement22(this.eCardSelector); + this.destroyMiniCharts(); + const { themes } = this; + this.palettes.forEach((palette, index) => { + const isActivePalette = this.activePaletteIndex === index; + const { fills = [], strokes = [] } = palette; + const themeName = themes[index]; + const isCustomTheme = !isStockTheme(themeName, this.beans.agChartsExports._Theme); + const miniChartsContainer = this.createBean( + new MiniChartsContainer(this.chartController, fills, strokes, isCustomTheme, chartGroups) + ); + this.miniChartsContainers.push(miniChartsContainer); + this.eMiniChartsContainer.appendChild(miniChartsContainer.getGui()); + this.addCardLink(index); + if (isActivePalette) { + miniChartsContainer.updateSelectedMiniChart(); + } else { + miniChartsContainer.setDisplayed(false); + } + }); + _setDisplayed26(this.eNavBar, this.palettes.length > 1); + _radioCssClass2(this.cardItems[this.activePaletteIndex], "ag-selected", "ag-not-selected"); + } + addCardLink(index) { + const link = document.createElement("div"); + link.classList.add("ag-chart-settings-card-item"); + this.addManagedElementListeners(link, { + click: () => { + this.setActivePalette(index, index < this.activePaletteIndex ? "left" : "right"); + } + }); + this.eCardSelector.appendChild(link); + this.cardItems.push(link); + } + getPrev() { + let prev = this.activePaletteIndex - 1; + if (prev < 0) { + prev = this.palettes.length - 1; + } + return prev; + } + getNext() { + let next = this.activePaletteIndex + 1; + if (next >= this.palettes.length) { + next = 0; + } + return next; + } + setActivePalette(index, animationDirection) { + if (this.isAnimating || this.activePaletteIndex === index) { + return; + } + _radioCssClass2(this.cardItems[index], "ag-selected", "ag-not-selected"); + const currentPalette = this.miniChartsContainers[this.activePaletteIndex]; + const currentGui = currentPalette.getGui(); + const futurePalette = this.miniChartsContainers[index]; + const nextGui = futurePalette.getGui(); + currentPalette.updateSelectedMiniChart(); + futurePalette.updateSelectedMiniChart(); + const multiplier = animationDirection === "left" ? -1 : 1; + const final = nextGui.style.left = `${_getAbsoluteWidth2(this.getGui()) * multiplier}px`; + this.activePaletteIndex = index; + this.isAnimating = true; + const animatingClass = "ag-animating"; + futurePalette.setDisplayed(true); + currentPalette.addCss(animatingClass); + futurePalette.addCss(animatingClass); + this.chartController.setChartThemeName(this.themes[index]); + window.setTimeout(() => { + currentGui.style.left = `${-parseFloat(final)}px`; + nextGui.style.left = "0px"; + }, 0); + window.setTimeout(() => { + this.isAnimating = false; + currentPalette.removeCss(animatingClass); + futurePalette.removeCss(animatingClass); + currentPalette.setDisplayed(false); + }, 300); + } + destroyMiniCharts() { + _clearElement22(this.eMiniChartsContainer); + this.miniChartsContainers = this.destroyBeans(this.miniChartsContainers); + } + destroy() { + this.destroyMiniCharts(); + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/tabbedChartMenu.ts +var TAB_DATA = "data"; +var TAB_FORMAT = "format"; +var TabbedChartMenu = class extends Component95 { + constructor(panels, chartMenuContext) { + super(); + this.panels = panels; + this.chartMenuContext = chartMenuContext; + this.tabs = []; + } + wireBeans(beans) { + this.chartTranslation = beans.chartTranslation; + } + postConstruct() { + for (const panel of this.panels) { + const panelType = panel.replace("chart", "").toLowerCase(); + const panelComp = this.createPanel(panelType); + const tabItem = this.createTab(panel, panelType, panelComp); + this.tabs.push(tabItem); + this.addDestroyFunc(() => this.destroyBean(panelComp)); + } + this.tabbedLayout = new AgTabbedLayout({ + items: this.tabs, + cssClass: "ag-chart-tabbed-menu", + keepScrollPosition: true, + suppressFocusBodyOnOpen: true, + suppressTrapFocus: true, + enableCloseButton: true, + closeButtonAriaLabel: this.chartTranslation.translate("ariaChartMenuClose"), + onCloseClicked: () => { + this.eventSource?.focus({ preventScroll: true }); + this.dispatchLocalEvent({ type: "closed" }); + } + }); + this.createBean(this.tabbedLayout); + } + createTab(name, title, panelComp) { + const eWrapperDiv = _createElement19({ tag: "div", cls: `ag-chart-tab ag-chart-${title}` }); + this.createBean(panelComp); + eWrapperDiv.appendChild(panelComp.getGui()); + const translatedTitle = this.chartTranslation.translate(title); + const titleEl = _createElement19({ tag: "div", children: translatedTitle }); + return { + title: titleEl, + titleLabel: translatedTitle, + bodyPromise: AgPromise13.resolve(eWrapperDiv), + getScrollableContainer: () => { + const scrollableContainer = eWrapperDiv.querySelector(".ag-scrollable-container"); + return scrollableContainer || eWrapperDiv; + }, + name + }; + } + showTab(tab) { + const tabItem = this.tabs[tab]; + this.tabbedLayout.showItem(tabItem); + } + getGui() { + return this.tabbedLayout?.getGui(); + } + showMenu(eventSource, suppressFocus) { + this.eventSource = eventSource; + if (!suppressFocus) { + this.tabbedLayout?.focusHeader(true); + } + } + destroy() { + if (this.parentComponent?.isAlive()) { + this.destroyBean(this.parentComponent); + } + super.destroy(); + } + createPanel(panelType) { + switch (panelType) { + case TAB_DATA: + return new ChartDataPanel(this.chartMenuContext); + case TAB_FORMAT: + return new FormatPanel(this.chartMenuContext); + default: + return new ChartSettingsPanel(this.chartMenuContext.chartController); + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/menu/chartMenu.ts +var ChartMenu = class extends Component96 { + constructor(eChartContainer, eMenuPanelContainer, chartMenuContext) { + super( + /* html */ + `
` + ); + this.eChartContainer = eChartContainer; + this.eMenuPanelContainer = eMenuPanelContainer; + this.chartMenuContext = chartMenuContext; + this.buttons = { + chartLink: { iconName: "linked", callback: () => this.chartMenuSvc.toggleLinked(this.chartMenuContext) }, + chartUnlink: { + iconName: "unlinked", + callback: () => this.chartMenuSvc.toggleLinked(this.chartMenuContext) + }, + chartDownload: { + iconName: "chartsDownload", + callback: () => this.chartMenuSvc.downloadChart(this.chartMenuContext) + }, + chartMenu: { iconName: "chartsMenu", callback: (eventSource) => this.showMenuList(eventSource) } + }; + this.panels = []; + this.menuVisible = false; + this.chartController = chartMenuContext.chartController; + } + wireBeans(beans) { + this.chartMenuSvc = beans.chartMenuSvc; + this.chartMenuListFactory = beans.chartMenuListFactory; + } + postConstruct() { + this.chartToolbar = this.createManagedBean(new ChartToolbar()); + this.getGui().appendChild(this.chartToolbar.getGui()); + this.refreshToolbarAndPanels(); + this.addManagedEventListeners({ + chartCreated: (e) => { + if (e.chartId === this.chartController.getChartId()) { + const showDefaultToolPanel = Boolean(this.gos.get("chartToolPanelsDef")?.defaultToolPanel); + if (showDefaultToolPanel) { + this.showMenu({ panel: this.defaultPanel, suppressFocus: true }); + } + } + } + }); + this.addManagedListeners(this.chartController, { + chartLinkedChanged: this.refreshToolbarAndPanels.bind(this) + }); + this.refreshMenuClasses(); + this.addManagedListeners(this.chartController, { chartApiUpdate: this.refreshToolbarAndPanels.bind(this) }); + } + isVisible() { + return this.menuVisible; + } + getExtraPaddingDirections() { + return ["chartMenu", "chartLink", "chartUnlink", "chartDownload"].some( + (v) => this.chartToolbarOptions.includes(v) + ) ? ["top"] : []; + } + refreshToolbarAndPanels() { + this.initToolbarOptionsAndPanels(); + this.updateToolbar(); + } + initToolbarOptionsAndPanels() { + const { panels, defaultPanel } = this.chartMenuSvc.getChartToolPanels(this.chartController); + this.panels = panels; + this.defaultPanel = defaultPanel; + this.chartToolbarOptions = this.chartMenuSvc.getChartToolbarOptions(); + } + updateToolbar() { + const buttons = this.chartToolbarOptions.map((buttonName) => { + const { iconName, callback } = this.buttons[buttonName]; + return { + buttonName, + iconName, + callback + }; + }); + this.chartToolbar.updateParams({ buttons }); + } + createMenuPanel(defaultTab) { + const menuPanel = this.menuPanel = this.createBean( + new AgPanel({ + height: "100%", + closable: true, + hideTitleBar: true, + cssIdentifier: "chart-menu" + }) + ); + menuPanel.setParentComponent(this); + this.eMenuPanelContainer.appendChild(menuPanel.getGui()); + this.tabbedMenu = this.createBean(new TabbedChartMenu(this.panels, this.chartMenuContext)); + this.addManagedListeners(this.tabbedMenu, { + closed: () => { + this.hideMenu(); + } + }); + this.addManagedListeners(menuPanel, { destroyed: () => this.destroyBean(this.tabbedMenu) }); + return new AgPromise14((res) => { + window.setTimeout(() => { + menuPanel.setBodyComponent(this.tabbedMenu); + this.tabbedMenu.showTab(defaultTab); + res(menuPanel); + }, 100); + }); + } + showContainer(eventSource, suppressFocus) { + if (!this.menuPanel) { + return; + } + this.menuVisible = true; + this.refreshMenuClasses(); + this.tabbedMenu.showMenu(eventSource, suppressFocus); + } + showMenu(params) { + const { panel, eventSource, suppressFocus } = params ?? {}; + if (this.menuPanel && !panel) { + this.showContainer(eventSource, suppressFocus); + } else { + const menuPanel = panel || this.defaultPanel; + let tab = this.panels.indexOf(menuPanel); + if (tab < 0) { + _warn66(143, { panel }); + tab = this.panels.indexOf(this.defaultPanel); + } + if (this.menuPanel) { + this.tabbedMenu.showTab(tab); + this.showContainer(eventSource, suppressFocus); + } else { + this.createMenuPanel(tab).then(() => this.showContainer(eventSource, suppressFocus)); + } + } + } + hideMenu() { + this.menuVisible = false; + this.refreshMenuClasses(); + } + refreshMenuClasses() { + this.eChartContainer.classList.toggle("ag-chart-menu-visible", this.menuVisible); + this.eChartContainer.classList.toggle("ag-chart-menu-hidden", !this.menuVisible); + } + showMenuList(eventSource) { + this.chartMenuListFactory.showMenuList({ + eventSource, + showMenu: () => this.showMenu({ eventSource }), + chartMenuContext: this.chartMenuContext, + closeOnElementClick: this.eChartContainer + }); + } + destroy() { + super.destroy(); + if (this.menuPanel?.isAlive()) { + this.destroyBean(this.menuPanel); + } + if (this.tabbedMenu?.isAlive()) { + this.destroyBean(this.tabbedMenu); + } + } +}; + +// packages/ag-grid-enterprise/src/charts/chartComp/services/chartOptionsService.ts +import { BeanStub as BeanStub100, _error as _error11 } from "ag-grid-community"; +var CARTESIAN_AXIS_TYPES = ["number", "category", "time", "grouped-category"]; +var POLAR_AXIS_TYPES = ["angle-category", "angle-number", "radius-category", "radius-number"]; +var VALID_AXIS_TYPES = [...CARTESIAN_AXIS_TYPES, ...POLAR_AXIS_TYPES]; +var ChartOptionsService = class extends BeanStub100 { + constructor(chartController) { + super(); + this.chartController = chartController; + } + getChartThemeOverridesProxy() { + return { + getValue: (expression) => this.getChartOption(expression), + setValue: (expression, value) => this.setChartThemeOverrides([{ expression, value }]), + setValues: (properties) => this.setChartThemeOverrides(properties) + }; + } + getAxisThemeOverridesProxy() { + return { + getValue: (expression) => this.getAxisProperty(expression), + setValue: (expression, value) => this.setAxisThemeOverrides([{ expression, value }]), + setValues: (properties) => this.setAxisThemeOverrides(properties) + }; + } + getCartesianAxisOptionsProxy(axisType) { + return { + getValue: (expression) => this.getCartesianAxisProperty(axisType, expression), + setValue: (expression, value) => this.setCartesianAxisOptions(axisType, [{ expression, value }]), + setValues: (properties) => this.setCartesianAxisOptions(axisType, properties), + clearValue: (parentExpression, key) => this.clearCartesianAxisOptions(axisType, parentExpression, key) + }; + } + getCartesianAxisThemeOverridesProxy(axisType) { + return { + getValue: (expression) => this.getCartesianAxisProperty(axisType, expression), + setValue: (expression, value) => this.setCartesianAxisThemeOverrides(axisType, [{ expression, value }]), + setValues: (properties) => this.setCartesianAxisThemeOverrides(axisType, properties) + }; + } + getCartesianAxisAppliedThemeOverridesProxy(axisType) { + return { + getValue: (expression) => this.getCartesianAxisThemeOverride( + axisType, + // Allow the caller to specify a wildcard expression to retrieve the whole set of overrides + expression === "*" ? null : expression + ), + setValue: (expression, value) => this.setCartesianAxisThemeOverrides( + axisType, + // Allow the caller to specify a wildcard expression to set the whole set of overrides + [{ expression: expression === "*" ? null : expression, value }] + ), + setValues: (properties) => this.setCartesianAxisThemeOverrides(axisType, properties) + }; + } + getSeriesOptionsProxy(getSelectedSeries) { + return { + getValue: (expression, calculated) => this.getSeriesOption(getSelectedSeries(), expression, calculated), + setValue: (expression, value) => this.setSeriesOptions(getSelectedSeries(), [{ expression, value }]), + setValues: (properties) => this.setSeriesOptions(getSelectedSeries(), properties) + }; + } + /** + * Determine the set of theme overrides that should be retained when transitioning from one chart type to another. + */ + getPersistedChartThemeOverrides(existingChartOptions, existingAxes, existingChartType, targetChartType) { + const retainedThemeOverrideKeys = this.getRetainedChartThemeOverrideKeys(existingChartType, targetChartType); + const retainedChartAxisThemeOverrideKeys = this.getRetainedChartAxisThemeOverrideKeys( + null, + existingChartType, + targetChartType + ); + const targetChartOptions = this.createChartOptions(); + for (const expression of retainedThemeOverrideKeys) { + const value = this.retrieveChartOptionsThemeOverride(existingChartOptions, existingChartType, expression); + if (value !== void 0) { + this.assignChartOptionsThemeOverride(targetChartOptions, targetChartType, expression, value); + } + } + if (existingAxes) { + this.assignPersistedAxisOverrides({ + existingAxes, + retainedChartAxisThemeOverrideKeys, + existingChartOptions, + targetChartOptions, + existingChartType, + targetChartType + }); + } + return targetChartOptions.theme.overrides; + } + assignPersistedAxisOverrides(params) { + const { + existingAxes, + retainedChartAxisThemeOverrideKeys, + existingChartOptions, + targetChartOptions, + existingChartType, + targetChartType + } = params; + for (const { expression, targetAxisTypes } of retainedChartAxisThemeOverrideKeys) { + for (const existingAxisType of existingAxes.map((axis) => axis.type)) { + const value = this.retrieveChartOptionsThemeOverride( + existingChartOptions, + existingChartType, + ["axes", existingAxisType, expression].join(".") + ); + if (value !== void 0) { + for (const targetAxisType of targetAxisTypes) { + this.assignChartOptionsThemeOverride( + targetChartOptions, + targetChartType, + ["axes", targetAxisType, expression].join("."), + value + ); + } + } + } + } + } + getRetainedChartThemeOverrideKeys(existingChartType, targetChartType) { + const UNIVERSAL_PERSISTED_THEME_OVERRIDES = ["animation"]; + const PERSISTED_CARTESIAN_CHART_THEME_OVERRIDES = ["zoom", "navigator"]; + const chartSpecificThemeOverrideKeys = ((previousChartType, updatedChartType) => { + const expressions = new Array(); + if (isCartesian(getSeriesType(previousChartType)) && isCartesian(getSeriesType(updatedChartType))) { + expressions.push(...PERSISTED_CARTESIAN_CHART_THEME_OVERRIDES); + } + return expressions; + })(existingChartType, targetChartType); + return [...UNIVERSAL_PERSISTED_THEME_OVERRIDES, ...chartSpecificThemeOverrideKeys]; + } + getRetainedChartAxisThemeOverrideKeys(axisType, existingChartType, targetChartType) { + if (isCartesian(getSeriesType(existingChartType)) && isCartesian(getSeriesType(targetChartType))) { + const retainedKeys = this.getRetainedCartesianAxisThemeOverrideKeys(axisType); + return retainedKeys.map((expression) => ({ expression, targetAxisTypes: CARTESIAN_AXIS_TYPES })); + } + return []; + } + getRetainedCartesianAxisThemeOverrideKeys(axisType) { + const axisPositionSuffixes = axisType === "xAxis" ? ["", ".top", ".bottom"] : axisType === "yAxis" ? ["", ".left", ".right"] : ["", ".left", ".right", ".top", ".bottom"]; + const PERSISTED_CARTESIAN_AXIS_THEME_OVERRIDES = ["crosshair"]; + const expressions = new Array(); + for (const expression of PERSISTED_CARTESIAN_AXIS_THEME_OVERRIDES) { + for (const axisPositionSuffix of axisPositionSuffixes) { + expressions.push(`${expression}${axisPositionSuffix}`); + } + } + return expressions; + } + getChartOption(expression) { + return get(this.getChart(), expression, void 0); + } + setChartThemeOverrides(properties) { + const chartType = this.getChartType(); + const chartOptions = this.createChartOptions(); + for (const { expression, value } of properties) { + this.assignChartOptionsThemeOverride(chartOptions, chartType, expression, value); + } + this.applyChartOptions(chartOptions); + } + applyChartOptions(chartOptions, options) { + if (Object.keys(chartOptions).length === 0) { + return; + } + this.updateChart(chartOptions); + const shouldRaiseEvent = !options?.silent; + if (shouldRaiseEvent) { + this.raiseChartOptionsChangedEvent(); + } + } + awaitChartOptionUpdate(func) { + const chart = this.chartController.getChartProxy().getChart(); + chart.waitForUpdate().then(() => func()).catch((e) => _error11(108, { e })); + } + getAxisProperty(expression) { + return get(this.getChart().axes?.x, expression, void 0); + } + setAxisThemeOverrides(properties) { + const chart = this.getChart(); + const chartType = this.getChartType(); + const chartOptions = this.createChartOptions(); + for (const { expression, value } of properties) { + const relevantAxes = Object.values(chart.axes ?? {}).filter((axis) => { + const parts = expression.split("."); + let current = axis; + for (const part of parts) { + if (!(part in current)) { + return false; + } + current = current[part]; + } + return true; + }); + if (!relevantAxes) { + continue; + } + for (const axis of relevantAxes) { + if (!this.isValidAxisType(axis)) { + continue; + } + this.assignChartAxisThemeOverride(chartOptions, chartType, axis.type, null, expression, value); + } + } + this.applyChartOptions(chartOptions); + } + getCartesianAxisProperty(axisType, expression) { + const axes = this.getChartAxes(); + const axis = this.getCartesianAxis(axes, axisType); + return get(axis, expression, void 0); + } + getCartesianAxisThemeOverride(axisType, expression) { + const axes = this.getChartAxes(); + const chartAxis = this.getCartesianAxis(axes, axisType); + if (!chartAxis || !this.isValidAxisType(chartAxis)) { + return void 0; + } + const chartType = this.getChartType(); + const chartOptions = this.getChart().getOptions(); + return this.retrieveChartAxisThemeOverride( + chartOptions, + chartType, + chartAxis.type, + axisType === "yAxis" ? ["left", "right"] : ["bottom", "top"], + expression + ); + } + setCartesianAxisThemeOverrides(axisType, properties) { + const axes = this.getChartAxes(); + const chartAxis = this.getCartesianAxis(axes, axisType); + if (!chartAxis || !this.isValidAxisType(chartAxis)) { + return; + } + const chartType = this.getChartType(); + const chartOptions = this.createChartOptions(); + for (const { expression, value } of properties) { + this.assignChartAxisThemeOverride( + chartOptions, + chartType, + chartAxis.type, + axisType === "yAxis" ? ["left", "right"] : ["bottom", "top"], + expression, + value + ); + } + this.applyChartOptions(chartOptions); + } + setCartesianAxisOptions(axisType, properties) { + this.updateCartesianAxisOptions(axisType, (chartOptions) => { + const axisId = axisType === "yAxis" ? "y" : "x"; + for (const { expression, value } of properties) { + this.assignChartOption(chartOptions, `axes.${axisId}.${expression}`, value); + } + }); + } + clearCartesianAxisOptions(axisType, parentExpression, key) { + this.updateCartesianAxisOptions(axisType, (chartOptions) => { + const axisId = axisType === "yAxis" ? "y" : "x"; + this.clearChartOption(chartOptions, `axes.${axisId}.${parentExpression}`, key); + }); + } + updateCartesianAxisOptions(axisType, updateFunc) { + const existingChartOptions = this.getChart().getOptions(); + const axisOptions = "axes" in existingChartOptions ? existingChartOptions.axes : void 0; + if (!existingChartOptions || !axisOptions) { + return; + } + const axes = this.getChartAxes(); + const chartAxis = this.getCartesianAxis(axes, axisType); + if (!chartAxis) { + return; + } + const chartOptions = this.createChartOptions(); + chartOptions.axes = axisOptions; + updateFunc(chartOptions, chartAxis, existingChartOptions); + this.applyChartOptions(chartOptions); + } + setCartesianCategoryAxisType(axisType, value) { + this.updateCartesianAxisOptions(axisType, (chartOptions, chartAxis, existingChartOptions) => { + const chartType = this.getChartType(); + this.assignPersistedAxisOverrides({ + existingAxes: [chartAxis], + retainedChartAxisThemeOverrideKeys: this.getRetainedChartAxisThemeOverrideKeys( + axisType, + chartType, + chartType + ), + existingChartOptions, + targetChartOptions: chartOptions, + existingChartType: chartType, + targetChartType: chartType + }); + this.assignChartOption(chartOptions, `axes.x.type`, value); + this.chartController.setCategoryAxisType(value); + }); + } + getCartesianAxis(axes, axisType) { + if (axes.length < 2) { + return void 0; + } + switch (axisType) { + case "xAxis": + return axes[0].direction === "x" ? axes[0] : axes[1]; + case "yAxis": + return axes[1].direction === "y" ? axes[1] : axes[0]; + } + } + getSeriesOption(seriesType, expression, calculated) { + const series = this.getChart().series.find((s2) => isMatchingSeries(seriesType, s2)); + return get(calculated ? series : series?.properties.toJson(), expression, void 0); + } + setSeriesOptions(seriesType, properties) { + const chartOptions = this.createChartOptions(); + for (const { expression, value } of properties) { + this.assignChartOptionsSeriesThemeOverride(chartOptions, seriesType, `series.${expression}`, value); + } + this.applyChartOptions(chartOptions); + } + getPairedMode() { + return this.chartController.getChartProxy().isPaired(); + } + setPairedMode(paired) { + this.chartController.getChartProxy().setPaired(paired); + } + getChartAxes() { + const chart = this.getChart(); + return Object.values(chart.axes ?? {}); + } + retrieveChartAxisThemeOverride(chartOptions, chartType, axisType, axisPositions, expression) { + if (axisPositions) { + for (const axisPosition of axisPositions) { + const value = this.retrieveChartOptionsThemeOverride( + chartOptions, + chartType, + ["axes", axisType, axisPosition, ...expression ? [expression] : []].join(".") + ); + if (value === void 0) { + continue; + } + return value; + } + } else { + return this.retrieveChartOptionsThemeOverride( + chartOptions, + chartType, + ["axes", axisType, ...expression ? [expression] : []].join(".") + ); + } + } + assignChartAxisThemeOverride(chartOptions, chartType, axisType, axisPositions, expression, value) { + if (axisPositions) { + for (const axisPosition of axisPositions) { + this.assignChartOptionsThemeOverride( + chartOptions, + chartType, + ["axes", axisType, axisPosition, ...expression ? [expression] : []].join("."), + value + ); + } + } else { + this.assignChartOptionsThemeOverride( + chartOptions, + chartType, + ["axes", axisType, ...expression ? [expression] : []].join("."), + value + ); + } + } + isValidAxisType(chartAxis) { + return VALID_AXIS_TYPES.includes(chartAxis.type); + } + getChartType() { + return this.chartController.getChartType(); + } + getChart() { + return this.chartController.getChartProxy().getChart(); + } + updateChart(chartOptions) { + const chartRef = this.chartController.getChartProxy().getChartRef(); + chartRef.skipAnimations(); + chartRef.updateDelta(chartOptions); + } + createChartOptions() { + const chartOptions = { + theme: { + overrides: {} + } + }; + return chartOptions; + } + retrieveChartOptionsThemeOverride(chartOptions, chartType, expression) { + const chartSeriesTypes = this.getChartThemeOverridesSeriesTypeKeys(chartType); + for (const seriesType of chartSeriesTypes) { + const value = this.retrieveChartOptionsSeriesThemeOverride(chartOptions, seriesType, expression); + if (value === void 0) { + continue; + } + return value; + } + return void 0; + } + assignChartOptionsThemeOverride(chartOptions, chartType, expression, value) { + const chartSeriesTypes = this.getChartThemeOverridesSeriesTypeKeys(chartType); + for (const seriesType of chartSeriesTypes) { + this.assignChartOptionsSeriesThemeOverride(chartOptions, seriesType, expression, value); + } + } + retrieveChartOptionsSeriesThemeOverride(chartOptions, seriesType, expression) { + return this.retrieveChartOption( + chartOptions, + ["theme", "overrides", seriesType, ...expression ? [expression] : []].join(".") + ); + } + assignChartOptionsSeriesThemeOverride(chartOptions, seriesType, expression, value) { + this.assignChartOption( + chartOptions, + ["theme", "overrides", seriesType, ...expression ? [expression] : []].join("."), + value + ); + } + getChartThemeOverridesSeriesTypeKeys(chartType) { + const chartSeriesTypes = this.chartController.getChartSeriesTypes(chartType); + if (this.chartController.isComboChart()) { + chartSeriesTypes.push("common"); + } + return chartSeriesTypes; + } + retrieveChartOption(chartOptions, expression) { + return get(chartOptions, expression, void 0); + } + assignChartOption(chartOptions, expression, value) { + set(chartOptions, expression, value); + } + clearChartOption(chartOptions, parentExpression, key) { + const parentObject = get(chartOptions, parentExpression, void 0); + if (parentObject) { + delete parentObject[key]; + } + } + raiseChartOptionsChangedEvent() { + const chartModel = this.chartController.getChartModel(); + this.eventSvc.dispatchEvent({ + type: "chartOptionsChanged", + chartId: chartModel.chartId, + chartType: chartModel.chartType, + chartThemeName: this.chartController.getChartThemeName(), + chartOptions: chartModel.chartOptions + }); + } +}; +function isMatchingSeries(seriesType, series) { + return isSeriesType(seriesType) && series.type === seriesType; +} + +// packages/ag-grid-enterprise/src/charts/chartComp/gridChartComp.ts +var GridChartComp = class extends Component97 { + constructor(params) { + super( + /* html */ + ` +
+
+
+
+
+
+
+
+
+ ` + ); + this.eChart = RefPlaceholder67; + this.eWrapper = RefPlaceholder67; + this.eChartContainer = RefPlaceholder67; + this.eMenuContainer = RefPlaceholder67; + this.eEmpty = RefPlaceholder67; + this.params = params; + } + wireBeans(beans) { + this.crossFilterService = beans.chartCrossFilterSvc; + this.chartTranslation = beans.chartTranslation; + this.chartMenuSvc = beans.chartMenuSvc; + this.focusSvc = beans.focusSvc; + this.popupSvc = beans.popupSvc; + this.enterpriseChartProxyFactory = beans.enterpriseChartProxyFactory; + this.environment = beans.environment; + } + postConstruct() { + const modelParams = { + ...this.params, + chartType: getCanonicalChartType(this.params.chartType), + chartThemeName: this.getThemeName() + }; + const isRtl = this.gos.get("enableRtl"); + this.eWrapper.classList.add(isRtl ? "ag-rtl" : "ag-ltr"); + const model = this.createBean(new ChartDataModel(modelParams)); + this.chartController = this.createManagedBean(new ChartController(model)); + this.chartOptionsService = this.createManagedBean(new ChartOptionsService(this.chartController)); + this.validateCustomThemes(); + this.createChart(); + if (this.params.insideDialog) { + this.addDialog(); + } else { + this.addManagedEventListeners({ + stylesChanged: this.updateTheme.bind(this) + }); + this.updateTheme(); + } + this.addMenu(); + this.addManagedElementListeners(this.getGui(), { focusin: this.setActiveChartCellRange.bind(this) }); + this.addManagedListeners(this.chartController, { chartModelUpdate: this.update.bind(this) }); + this.addManagedPropertyListeners( + ["chartThemeOverrides", "chartThemes"], + this.reactivePropertyUpdate.bind(this) + ); + this.update(); + this.raiseChartCreatedEvent(); + } + updateTheme() { + this.environment.applyThemeClasses(this.getGui()); + } + createChart() { + let chartInstance = void 0; + if (this.chartProxy) { + chartInstance = this.chartProxy.destroy({ keepChartInstance: true }); + } + const crossFilterCallback = (event, reset) => { + const ctx = this.params.crossFilteringContext; + ctx.lastSelectedChartId = reset ? "" : this.chartController.getChartId(); + if (reset) { + this.params.crossFilteringResetCallback(); + } + this.crossFilterService.filter(event, reset); + }; + const chartType = this.chartController.getChartType(); + const chartProxyParams = { + agChartsExports: this.beans.agChartsExports, + chartType, + chartInstance, + getChartThemeName: this.getChartThemeName.bind(this), + getChartThemes: this.getChartThemes.bind(this), + customChartThemes: this.gos.get("customChartThemes"), + styleNonce: this.gos.get("styleNonce"), + getGridOptionsChartThemeOverrides: () => this.getGridOptionsChartThemeOverrides(), + getExtraPaddingDirections: () => this.chartMenu?.getExtraPaddingDirections() ?? [], + apiChartThemeOverrides: this.params.chartThemeOverrides, + crossFiltering: this.params.crossFiltering ?? false, + crossFilterCallback, + parentElement: this.eChart, + grouping: this.chartController.isGrouping(), + chartThemeToRestore: this.params.chartThemeName, + chartOptionsToRestore: this.params.chartOptionsToRestore, + chartPaletteToRestore: this.params.chartPaletteToRestore, + seriesChartTypes: this.chartController.getSeriesChartTypes(), + translate: (toTranslate) => this.chartTranslation.translate(toTranslate), + context: _addGridCommonParams29(this.gos, {}) + }; + this.params.chartOptionsToRestore = void 0; + this.chartType = chartType; + this.chartProxy = this.createChartProxy(chartProxyParams); + if (!this.chartProxy) { + _warn67(138, { chartType: chartProxyParams.chartType }); + return; + } + this.chartController.setChartProxy(this.chartProxy); + this.createMenuContext(); + } + createMenuContext() { + if (this.chartMenuContext) { + return; + } + const chartMenuParamsFactory = this.createManagedBean( + new ChartMenuParamsFactory(this.chartOptionsService.getChartThemeOverridesProxy()) + ); + const chartAxisMenuParamsFactory = this.createManagedBean( + new ChartMenuParamsFactory(this.chartOptionsService.getAxisThemeOverridesProxy()) + ); + this.chartMenuContext = { + chartController: this.chartController, + chartOptionsService: this.chartOptionsService, + chartMenuParamsFactory, + chartAxisMenuParamsFactory + }; + } + getChartThemeName() { + return this.chartController.getChartThemeName(); + } + getChartThemes() { + return this.chartController.getThemeNames(); + } + getGridOptionsChartThemeOverrides() { + return this.gos.get("chartThemeOverrides"); + } + createChartProxy(chartProxyParams) { + const { chartType } = chartProxyParams; + switch (chartType) { + case "column": + case "bar": + case "groupedColumn": + case "stackedColumn": + case "normalizedColumn": + case "groupedBar": + case "stackedBar": + case "normalizedBar": + return new BarChartProxy(chartProxyParams); + case "pie": + case "donut": + case "doughnut": + return new PieChartProxy(chartProxyParams); + case "area": + case "stackedArea": + case "normalizedArea": + return new AreaChartProxy(chartProxyParams); + case "line": + case "stackedLine": + case "normalizedLine": + return new LineChartProxy(chartProxyParams); + case "scatter": + case "bubble": + return new ScatterChartProxy(chartProxyParams); + case "columnLineCombo": + case "areaColumnCombo": + case "customCombo": + return new ComboChartProxy(chartProxyParams); + } + const enterpriseChartProxy = this.enterpriseChartProxyFactory?.createChartProxy(chartProxyParams); + if (!enterpriseChartProxy) { + throw _errMsg2(251, { chartType }); + } + return enterpriseChartProxy; + } + addDialog() { + const title = this.chartTranslation.translate(this.params.pivotChart ? "pivotChartTitle" : "rangeChartTitle"); + const { width, height } = this.getBestDialogSize(); + const afterGuiAttached = this.params.focusDialogOnOpen ? () => setTimeout(() => _focusInto11(this.getGui())) : void 0; + this.chartDialog = new Dialog({ + resizable: true, + movable: true, + maximizable: true, + title, + width, + height, + component: this, + centered: true, + closable: true, + afterGuiAttached, + postProcessPopupParams: { + type: "chart" + } + }); + this.createBean(this.chartDialog); + this.chartDialog.addEventListener("destroyed", () => { + this.destroy(); + this.chartMenuSvc.hideAdvancedSettings(); + const lastFocusedCell = this.focusSvc.getFocusedCell(); + setTimeout(() => { + if (this.focusSvc.isAlive()) { + if (lastFocusedCell) { + this.focusSvc.setFocusedCell({ ...lastFocusedCell, forceBrowserFocus: true }); + } else { + _focusGridInnerElement(this.beans); + } + } + }); + }); + } + getBestDialogSize() { + const popupParent = this.popupSvc.getPopupParent(); + const maxWidth = _getAbsoluteWidth3(popupParent) * 0.75; + const maxHeight = _getAbsoluteHeight2(popupParent) * 0.75; + const ratio = 0.553; + const chart = this.chartProxy.getChart(); + let width = this.params.insideDialog ? 850 : chart.width; + let height = this.params.insideDialog ? 470 : chart.height; + if (width > maxWidth || height > maxHeight) { + width = Math.min(width, maxWidth); + height = Math.round(width * ratio); + if (height > maxHeight) { + height = maxHeight; + width = Math.min(width, Math.round(height / ratio)); + } + } + return { width, height }; + } + addMenu() { + if (!this.params.crossFiltering) { + this.chartMenu = this.createBean( + new ChartMenu(this.eChartContainer, this.eMenuContainer, this.chartMenuContext) + ); + this.eChartContainer.appendChild(this.chartMenu.getGui()); + } + } + update(params) { + if (params?.chartId) { + const validUpdate = this.chartController.update(params); + if (!validUpdate) { + return; + } + } + const updatedChartType = this.chartTypeChanged(params); + const persistedThemeOverrides = updatedChartType || this.chartEmpty ? ((updatedChartType2) => { + const currentChartType = this.chartType; + const targetChartType = updatedChartType2; + const existingChartInstance = this.chartProxy.getChart(); + const existingChartOptions = existingChartInstance?.getOptions(); + const existingAxes = Object.values(existingChartInstance?.axes ?? {}); + return this.chartOptionsService.getPersistedChartThemeOverrides( + existingChartOptions, + existingAxes, + currentChartType, + targetChartType ?? currentChartType + ); + })(updatedChartType) : void 0; + if (updatedChartType) { + this.createChart(); + } + if (persistedThemeOverrides && params?.chartThemeOverrides) { + _mergeDeep5(persistedThemeOverrides, params.chartThemeOverrides); + } + const updatedThemeOverrides = persistedThemeOverrides ?? params?.chartThemeOverrides; + this.updateChart(updatedThemeOverrides); + if (params?.chartId) { + this.chartProxy.getChart().waitForUpdate().then(() => { + this.chartController.raiseChartApiUpdateEvent(); + }); + } + } + updateChart(updatedOverrides) { + const { chartProxy } = this; + const selectedCols = this.chartController.getSelectedValueColState(); + const data = this.chartController.getChartData(); + const chartEmpty = this.handleEmptyChart(data, selectedCols.length); + this.chartEmpty = chartEmpty; + if (chartEmpty) { + if (updatedOverrides) { + this.chartController.updateThemeOverrides(updatedOverrides); + } + return; + } + const chartUpdateParams = this.chartController.getChartUpdateParams(updatedOverrides); + chartProxy.update(chartUpdateParams); + this.chartProxy.getChart().waitForUpdate().then(() => { + this.chartController.raiseChartUpdatedEvent(); + }); + } + chartTypeChanged(updateParams) { + const [currentType, updatedChartType] = [this.chartController.getChartType(), updateParams?.chartType]; + const targetChartType = updatedChartType ? getCanonicalChartType(updatedChartType) : void 0; + if (this.chartType !== currentType) { + return targetChartType ?? currentType; + } + if (targetChartType && currentType !== targetChartType) { + return targetChartType; + } + return null; + } + getChartModel() { + return this.chartController.getChartModel(); + } + getChartImageDataURL(fileFormat) { + return this.chartProxy.getChartImageDataURL(fileFormat); + } + handleEmptyChart(data, numFields) { + const pivotModeDisabled = this.chartController.isPivotChart() && !this.chartController.isPivotMode(); + const chartType = this.chartController.getChartType(); + let minFieldsRequired = 1; + if (this.chartController.isActiveXYChart()) { + minFieldsRequired = chartType === "bubble" ? 3 : 2; + } else if (isHierarchical(getSeriesType(chartType))) { + minFieldsRequired = 0; + } + const isEmptyChart = numFields < minFieldsRequired || data.length === 0; + if (this.eChart) { + const isEmpty = pivotModeDisabled || isEmptyChart; + _setDisplayed27(this.eChart, !isEmpty); + _setDisplayed27(this.eEmpty, isEmpty); + } + if (pivotModeDisabled) { + this.eEmpty.textContent = this.chartTranslation.translate("pivotChartRequiresPivotMode"); + return true; + } + if (isEmptyChart) { + this.eEmpty.textContent = this.chartTranslation.translate("noDataToChart"); + return true; + } + return false; + } + downloadChart(dimensions, fileName, fileFormat) { + this.chartProxy.downloadChart(dimensions, fileName, fileFormat); + } + openChartToolPanel(panel) { + const menuPanel = panel ? CHART_TOOL_PANEL_MENU_OPTIONS[panel] : panel; + this.chartMenu.showMenu({ panel: menuPanel }); + } + closeChartToolPanel() { + this.chartMenu.hideMenu(); + } + getChartId() { + return this.chartController.getChartId(); + } + getUnderlyingChart() { + return this.chartProxy.getChartRef(); + } + crossFilteringReset() { + this.chartProxy.crossFilteringReset(); + } + setMaximized(maximized) { + this.chartDialog?.setMaximized(maximized); + } + setActiveChartCellRange(focusEvent) { + if (this.getGui().contains(focusEvent.relatedTarget)) { + return; + } + this.chartController.setChartRange(true); + } + getThemeName() { + const availableChartThemes = this.gos.get("chartThemes") || DEFAULT_THEMES; + if (availableChartThemes.length === 0) { + throw new Error(_errMsg2(254)); + } + const { chartThemeName } = this.params; + return availableChartThemes.includes(chartThemeName) ? chartThemeName : availableChartThemes[0]; + } + getAllKeysInObjects(objects) { + const allValues = {}; + for (const obj of objects.filter((obj2) => obj2 != null)) { + for (const key of Object.keys(obj)) { + allValues[key] = null; + } + } + return Object.keys(allValues); + } + validateCustomThemes() { + const suppliedThemes = this.getChartThemes(); + const customChartThemes = this.gos.get("customChartThemes"); + if (customChartThemes) { + for (const customThemeName of this.getAllKeysInObjects([customChartThemes])) { + if (!suppliedThemes.includes(customThemeName)) { + _warn67(139, { customThemeName }); + } + } + } + } + reactivePropertyUpdate() { + this.chartController.setChartThemeName(this.getThemeName(), true); + const chartId = this.getChartId(); + const modelType = this.chartController.isCrossFilterChart() ? "crossFilter" : this.getChartModel().modelType; + const chartThemeOverrides = this.gos.get("chartThemeOverrides") || {}; + this.update({ + type: `${modelType}ChartUpdate`, + chartId, + chartThemeOverrides + }); + } + raiseChartCreatedEvent() { + this.chartProxy.getChart().waitForUpdate().then(() => { + this.eventSvc.dispatchEvent({ + type: "chartCreated", + chartId: this.chartController.getChartId() + }); + }); + } + raiseChartDestroyedEvent() { + this.eventSvc.dispatchEvent({ + type: "chartDestroyed", + chartId: this.chartController.getChartId() + }); + } + destroy() { + super.destroy(); + if (this.chartProxy) { + this.chartProxy.destroy(); + } + this.destroyBean(this.chartMenu); + if (this.chartDialog?.isAlive()) { + this.destroyBean(this.chartDialog); + } + this.onDestroyColorSchemeChangeListener?.(); + const eGui = this.getGui(); + _clearElement23(eGui); + _removeFromParent18(eGui); + this.raiseChartDestroyedEvent(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartModelMigration.ts +import { _errMsg as _errMsg3 } from "ag-grid-community"; +var DEBUG = false; +function upgradeChartModel(model) { + const originalVersion = model.version; + if (model.version == null) { + model.version = heuristicVersionDetection(model); + } + model = migrateIfBefore("23.0.0", model, migrateV23); + model = migrateIfBefore("24.0.0", model, migrateV24); + model = migrateIfBefore("25.1.0", model, migrateV25_1); + model = migrateIfBefore("26.0.0", model, migrateV26); + model = migrateIfBefore("26.1.0", model, migrateV26_1); + model = migrateIfBefore("26.2.0", model, migrateV26_2); + model = migrateIfBefore("28.0.0", model, migrateV28); + model = migrateIfBefore("28.2.0", model, migrateV28_2); + model = migrateIfBefore("29.0.0", model, migrateV29); + model = migrateIfBefore("29.1.0", model, migrateV29_1); + model = migrateIfBefore("29.2.0", model, migrateV29_2); + model = migrateIfBefore("30.0.0", model, migrateV30); + model = migrateIfBefore("31.0.0", model, migrateV31); + model = migrateIfBefore("32.0.0", model, migrateV32); + model = migrateIfBefore("33.0.0", model, migrateV33); + model = migrateIfBefore("34.0.0", model, migrateV34); + model = cleanup(model); + model = migrateIfBefore(VERSION, model, (m) => m); + if (DEBUG && originalVersion !== model.version) { + console.log("AG Grid: ChartModel migration complete", { model }); + } + return model; +} +function migrateV23(model) { + model = jsonRename("chartOptions.legend.item.marker.type", "shape", model); + model = jsonRename("chartOptions.seriesDefaults.marker.type", "shape", model); + model = jsonRename("chartOptions.legend.padding", "spacing", model); + return model; +} +function migrateV24(model) { + model = jsonDelete("chartOptions.seriesDefaults.marker.minSize", model); + const { + chartType, + chartPalette, + // Migrate. + chartOptions: { xAxis, yAxis, ...chartOptions }, + ...chartModel + } = model; + const axesTypes = getLegacyAxisType(chartType); + const axes = axesTypes?.map((type, i) => ({ + type, + ...i === 0 ? xAxis : yAxis + })); + const LEGACY_PALETTES = { + borneo: "ag-default", + material: "ag-material", + bright: "ag-vivid" + }; + return { + chartType, + chartThemeName: LEGACY_PALETTES[chartPalette] ?? "ag-default", + chartOptions: { + ...chartOptions, + axes, + xAxis, + yAxis + }, + ...chartModel + }; +} +function migrateV25_1(model) { + model = jsonRename("chartOptions.seriesDefaults.label.minRequiredAngle", "minAngle", model); + return model; +} +function migrateV26(model) { + const highlightOptUpdate = ({ dimOpacity, ...opts }) => ({ + ...opts, + ...dimOpacity != null ? { series: { dimOpacity } } : {} + }); + model = jsonMutate("chartOptions.seriesDefaults.highlightStyle", model, highlightOptUpdate); + model = jsonDelete("chart", model); + model = jsonDelete("chartOptions.seriesDefaults.tooltipClass", model); + model = jsonDelete("chartOptions.seriesDefaults.tooltipTracking", model); + model = jsonDeleteDefault("chartOptions.axes[].label.rotation", 0, model); + model = jsonDeleteDefault("chartOptions.axes[].label.rotation", 335, model); + return model; +} +function migrateV26_1(model) { + const highlightOptUpdate = ({ item, series, ...opts }) => ({ + item: { ...opts, ...item }, + ...series ? { series } : {} + }); + model = jsonMutate("chartOptions.seriesDefaults.highlightStyle", model, highlightOptUpdate); + model = jsonMutate("chartOptions.series[].highlightStyle", model, highlightOptUpdate); + return model; +} +function migrateV26_2(model) { + model = jsonMove("chartOptions.seriesDefaults.fill.opacity", "chartOptions.seriesDefaults.fillOpacity", model); + model = jsonMove("chartOptions.seriesDefaults.stroke.opacity", "chartOptions.seriesDefaults.strokeOpacity", model); + model = jsonMove("chartOptions.seriesDefaults.stroke.width", "chartOptions.seriesDefaults.strokeWidth", model); + model = jsonDelete("chartOptions.seriesDefaults.fill", model); + model = jsonDelete("chartOptions.seriesDefaults.stroke", model); + model = jsonDelete("chartOptions.seriesDefaults.callout.colors", model); + model = jsonDelete("chartOptions.xAxis", model); + model = jsonDelete("chartOptions.yAxis", model); + const { + chartType: providedChartType, + // disable no-unused-vars because `series` is required here, even though + // unused, because it serves to take the `series` key out of otherChartOptions + // eslint-disable-next-line @typescript-eslint/no-unused-vars + chartOptions: { axes, series, seriesDefaults, ...otherChartOptions }, + ...otherModelProps + } = model; + const chartType = getCanonicalChartType(providedChartType); + const seriesType = getSeriesType(chartType); + const seriesTypes = [seriesType]; + const chartTypeMixin = {}; + if (!isPieChartSeries(seriesType)) { + const minimalAxis = { top: {}, bottom: {}, left: {}, right: {} }; + const updatedAxes = axes.map(({ type, ...axisProps }) => ({ + [type]: { ...minimalAxis, ...axisProps } + })).reduce(merge, {}); + for (const v of ALL_AXIS_TYPES.filter((v2) => updatedAxes[v2] == null)) { + updatedAxes[v] = { ...minimalAxis }; + } + chartTypeMixin.axes = updatedAxes; + } + const updatedChartOptions = seriesTypes.map((t) => ({ + [t]: { + ...chartTypeMixin, + series: seriesDefaults, + ...otherChartOptions + } + })).reduce(merge, {}); + model = { + ...otherModelProps, + chartType, + chartOptions: updatedChartOptions + }; + return model; +} +function migrateV28(model) { + model = jsonDelete("chartOptions.*.title.padding", model); + model = jsonDelete("chartOptions.*.subtitle.padding", model); + model = jsonDelete("chartOptions.*.axes.*.title.padding", model); + model = jsonBackfill("chartOptions.*.axes.*.title.enabled", false, model); + return model; +} +function migrateV28_2(model) { + model = jsonRename("chartOptions.pie.series.callout", "calloutLine", model); + model = jsonRename("chartOptions.pie.series.label", "calloutLabel", model); + model = jsonRename("chartOptions.pie.series.labelKey", "sectorLabelKey", model); + model = jsonRename("chartOptions.pie.series.labelName", "sectorLabelName", model); + model = jsonRename("chartOptions.donut.series.callout", "calloutLine", model); + model = jsonRename("chartOptions.donut.series.label", "calloutLabel", model); + model = jsonRename("chartOptions.donut.series.labelKey", "sectorLabelKey", model); + model = jsonRename("chartOptions.donut.series.labelName", "sectorLabelName", model); + return model; +} +function migrateV29(model) { + model = jsonMoveIfMissing("chartOptions.scatter.series.fill", "chartOptions.scatter.series.marker.fill", model); + model = jsonMoveIfMissing( + "chartOptions.scatter.series.fillOpacity", + "chartOptions.scatter.series.marker.fillOpacity", + model + ); + model = jsonMoveIfMissing("chartOptions.scatter.series.stroke", "chartOptions.scatter.series.marker.stroke", model); + model = jsonMoveIfMissing( + "chartOptions.scatter.series.strokeOpacity", + "chartOptions.scatter.series.marker.strokeOpacity", + model + ); + model = jsonMoveIfMissing( + "chartOptions.scatter.series.strokeWidth", + "chartOptions.scatter.series.marker.strokeWidth", + model + ); + model = jsonMove("chartOptions.scatter.series.paired", "chartOptions.scatter.paired", model); + return model; +} +function migrateV29_1(model) { + model = jsonDelete("chartOptions.axes[].tick.count", model); + return model; +} +function migrateV29_2(model) { + const tooltipOptUpdate = ({ tracking, ...opts }) => { + const output = { ...opts }; + if (tracking === false) { + output.position ?? (output.position = { type: "pointer" }); + output.range ?? (output.range = "nearest"); + } else if (tracking === true) { + output.position ?? (output.position = { type: "node" }); + output.range ?? (output.range = "nearest"); + } + return output; + }; + model = jsonMutate("chartOptions.*.tooltip", model, tooltipOptUpdate); + return model; +} +function migrateV30(model) { + model = jsonRename("chartOptions.pie.series.labelKey", "sectorLabelKey", model); + model = jsonRename("chartOptions.pie.series.labelName", "sectorLabelName", model); + model = migrateV29_1(model); + model = migrateV29_2(model); + model = jsonDelete("chartOptions.*.series.flipXY", model); + model = jsonAdd("chartOptions.common.legend.enabled", true, model); + model = jsonBackfill("chartOptions.common.legend.position", "right", model); + return model; +} +function migrateV31(model) { + const V30_LEGACY_PALETTES = { + "ag-pastel": "ag-sheets", + "ag-solar": "ag-polychroma" + }; + const updatedModel = jsonRename("chartOptions.column", "bar", model); + const chartThemeName = V30_LEGACY_PALETTES[updatedModel.chartThemeName] || updatedModel.chartThemeName; + return { + ...updatedModel, + chartThemeName + }; +} +function migrateV32(model) { + model = jsonMutateProperty("chartOptions.*.autoSize", true, model, (parent, targetProp) => { + if (parent[targetProp] === true) { + } else if (parent[targetProp] === false) { + parent["minHeight"] = 600; + parent["minWidth"] = 300; + } + delete parent[targetProp]; + }); + return model; +} +function migrateV33(model) { + model = jsonDelete("chartOptions.*.axes.category.label.format", model); + model = jsonDelete("chartOptions.*.axes.category.crosshair.label.format", model); + model = jsonDelete("chartOptions.*.axes.angle-category.label.format", model); + model = jsonDelete("chartOptions.*.axes.radius-category.label.format", model); + model = jsonRename("chartOptions.*.axes.*.label.padding", "spacing", model); + model = jsonRename("chartOptions.*.navigator.miniChart.label.padding", "spacing", model); + model = jsonDelete("chartOptions.*.axes.*.crossLines.label.className", model); + model = jsonMutateProperty("chartOptions.*.axes.*.crossLines.label.position", true, model, (parent, targetProp) => { + if (typeof parent[targetProp] === "string") { + parent[targetProp] = parent[targetProp].replace(/([A-Z])/, "-$1").toLowerCase(); + } + }); + model = jsonDelete("chartOptions.bullet", model); + model = jsonRenameEnumValues("chartOptions.bar.series.label.placement", model, { + inside: "inside-center", + outside: "inside-end" + }); + model = jsonRenameEnumValues("chartOptions.waterfall.series.item.*.label.placement", model, { + inside: "inside-center", + start: "outside-start", + end: "outside-end" + }); + model = jsonDelete("chartOptions.*.navigator.min", model); + model = jsonDelete("chartOptions.*.navigator.max", model); + model = jsonDelete("chartOptions.*.zoom.ratioX", model); + model = jsonDelete("chartOptions.*.zoom.ratioY", model); + model = jsonDelete("chartOptions.*.zoom.rangeX", model); + model = jsonDelete("chartOptions.*.zoom.rangeY", model); + return model; +} +function migrateV34(model) { + const highlightUpdate = (parent, targetProp) => { + const highlightStyle = parent[targetProp]; + if (highlightStyle == null) { + return; + } + const highlight = {}; + if (highlightStyle.item) { + highlight.highlightedItem = highlightStyle.item; + } + if (highlightStyle.series) { + const { dimOpacity, ...seriesOpts } = highlightStyle.series; + if (dimOpacity != null) { + highlight.unhighlightedSeries = { opacity: dimOpacity }; + } + if (Object.keys(seriesOpts).length > 0) { + highlight.highlightedSeries = seriesOpts; + } + } + delete parent[targetProp]; + parent.highlight = highlight; + }; + jsonMutateProperty("chartOptions.series[].highlightStyle", true, model, highlightUpdate); + return model; +} +function cleanup(model) { + model = jsonDelete("chartOptions.*.width", model); + model = jsonDelete("chartOptions.*.height", model); + model = jsonBackfill("chartOptions.*.axes.category.label.autoRotate", true, model); + return model; +} +function heuristicVersionDetection(model) { + const modelAny = model; + if (model.version != null) { + return model.version; + } + const hasKey = (obj, ...keys) => { + return Object.keys(obj || {}).some((k) => keys.includes(k)); + }; + const chartOptions = modelAny.chartOptions; + const seriesOptions = hasKey(chartOptions, "seriesDefaults") ? chartOptions?.seriesDefaults : chartOptions?.[Object.keys(chartOptions)[0]]; + const hints = { + "27.0.0": hasKey(modelAny, "seriesChartTypes"), + "26.2.0": !hasKey(chartOptions, "seriesDefaults"), + "26.1.0": hasKey(seriesOptions?.highlightStyle, "item"), + "26.0.0": hasKey(seriesOptions?.highlightStyle, "series"), + // '26.0.0': modelAny.chart === undefined, + "25.1.0": hasKey(seriesOptions?.label, "minAngle"), + "25.0.0": hasKey(modelAny, "modelType", "aggFunc", "unlinkChart", "suppressChartRanges") || hasKey(seriesOptions, "lineDash", "lineDashOffset"), + "24.0.0": hasKey(modelAny, "chartThemeName", "chart") || hasKey(chartOptions, "series"), + "23.2.0": hasKey(chartOptions, "navigator"), + "23.0.0": hasKey(chartOptions?.legend?.item?.marker, "shape"), + "22.1.0": hasKey(modelAny, "chartPalette", "chartType") + }; + const defaultVersion = "27.1.0"; + const matchingHints = Object.entries(hints).filter(([_, match]) => match); + if (DEBUG) { + console.log("AG Grid: ChartModel migration", { heuristicVersionCandidates: matchingHints }); + } + const [heuristicVersion = defaultVersion] = matchingHints[0]; + if (DEBUG) { + console.log("AG Grid: ChartModel migration", { heuristicVersion }); + } + return heuristicVersion; +} +function migrateIfBefore(maxVersion, model, migration) { + if (versionNumber(maxVersion) > versionNumber(model.version)) { + if (DEBUG) { + console.log("AG Grid: ChartModel migration", { migratingTo: maxVersion }); + } + const result = migration(model); + result.version = maxVersion; + if (DEBUG) { + console.log("AG Grid: ChartModel migration", { migratedTo: maxVersion, result }); + } + return result; + } + return model; +} +function versionParts(versionRaw) { + const version = versionRaw.includes("-beta") ? versionRaw.replace(/-beta.*/, "") : versionRaw; + const split = typeof version === "string" ? version.split(".").map((v) => Number(v)) : []; + if (split.length !== 3 || split.some((v) => isNaN(v))) { + throw new Error(_errMsg3(253, { version })); + } + return { + major: split[0], + minor: split[1], + patch: split[2] + }; +} +function versionNumber(version) { + const { major, minor, patch } = versionParts(version); + return major * 1e4 + minor * 100 + patch; +} +function jsonDeleteDefault(path, defaultValue, json) { + return jsonMutateProperty(path, true, json, (parent, prop) => { + if (parent[prop] === defaultValue) { + delete parent[prop]; + } + }); +} +function jsonBackfill(path, defaultValue, json) { + return jsonMutateProperty(path, false, json, (parent, prop) => { + if (parent[prop] == null) { + parent[prop] = defaultValue; + } + }); +} +function jsonAdd(path, value, json) { + if (typeof path === "string") { + path = path.split("."); + } + const nextPath = path[0]; + if (path.length > 1) { + json[nextPath] = jsonAdd(path.slice(1), value, json[nextPath] ?? {}); + } + const hasProperty = Object.keys(json).includes(nextPath); + if (!hasProperty) { + json[nextPath] = value; + } + return json; +} +function jsonMove(from, to, json) { + let valueToMove = void 0; + let valueFound = false; + json = jsonMutateProperty(from, true, json, (parent, prop) => { + valueFound = true; + valueToMove = parent[prop]; + delete parent[prop]; + }); + if (!valueFound) { + return json; + } + return jsonMutateProperty(to, false, json, (parent, prop) => { + parent[prop] = valueToMove; + }); +} +function jsonMoveIfMissing(from, to, json) { + let valueToMove = void 0; + let valueFound = false; + json = jsonMutateProperty(from, true, json, (parent, prop) => { + valueFound = true; + valueToMove = parent[prop]; + delete parent[prop]; + }); + if (!valueFound) { + return json; + } + return jsonMutateProperty(to, false, json, (parent, prop) => { + if (parent[prop] === void 0) { + parent[prop] = valueToMove; + } + }); +} +function jsonRename(path, renameTo, json) { + return jsonMutateProperty(path, true, json, (parent, prop) => { + parent[renameTo] = parent[prop]; + delete parent[prop]; + }); +} +function jsonDelete(path, json) { + return jsonMutateProperty(path, true, json, (parent, prop) => delete parent[prop]); +} +function jsonMutateProperty(path, skipMissing, json, mutator) { + const pathElements = path instanceof Array ? path : path.split("."); + const parentPathElements = pathElements.slice(0, pathElements.length - 1); + const targetName = pathElements[pathElements.length - 1]; + return jsonMutate(parentPathElements, json, (parent) => { + const hasProperty = Object.keys(parent).includes(targetName); + if (skipMissing && !hasProperty) { + return parent; + } + const result = { ...parent }; + mutator(result, targetName); + return result; + }); +} +function jsonMutate(path, json, mutator) { + const pathElements = path instanceof Array ? path : path.split("."); + json = { ...json }; + if (pathElements.length === 0) { + return mutator(json); + } else if (pathElements[0].startsWith("{")) { + const pathOptions = pathElements[0].substring(1, pathElements[0].lastIndexOf("}")).split(","); + for (const pathOption of pathOptions) { + if (json[pathOption] != null) { + json[pathOption] = jsonMutate(pathElements.slice(1), json[pathOption], mutator); + } + } + } else if (pathElements[0].endsWith("[]")) { + const arrayName = pathElements[0].substring(0, path[0].indexOf("[")); + if (json[arrayName] instanceof Array) { + json[arrayName] = json[arrayName].map((v) => jsonMutate(pathElements.slice(1), v, mutator)); + } + } else if (pathElements[0] === "*") { + for (const jsonProp of Object.keys(json)) { + json[jsonProp] = jsonMutate(pathElements.slice(1), json[jsonProp], mutator); + } + } else if (json[pathElements[0]] != null) { + json[pathElements[0]] = jsonMutate(pathElements.slice(1), json[pathElements[0]], mutator); + } + return json; +} +function jsonRenameEnumValues(path, json, values) { + return jsonMutateProperty(path, true, json, (parent, targetProp) => { + if (typeof parent[targetProp] === "string") { + parent[targetProp] = values[targetProp] ?? targetProp; + } + }); +} +var merge = (r, n) => ({ ...r, ...n }); + +// packages/ag-grid-enterprise/src/charts/chartService.ts +var ChartService = class extends BeanStub101 { + constructor() { + super(...arguments); + this.beanName = "chartSvc"; + // we destroy all charts bound to this grid when grid is destroyed. activeCharts contains all charts, including + // those in developer provided containers. + this.activeCharts = /* @__PURE__ */ new Set(); + this.activeChartComps = /* @__PURE__ */ new Set(); + // this shared (singleton) context is used by cross filtering in line and area charts + this.crossFilteringContext = { + lastSelectedChartId: "" + }; + this.isEnterprise = () => this.agChartsExports.isEnterprise; + } + wireBeans(beans) { + this.visibleCols = beans.visibleCols; + this.rangeSvc = beans.rangeSvc; + this.agChartsExports = beans.agChartsExports; + } + updateChart(params) { + if (this.activeChartComps.size === 0) { + _warn68(124); + return; + } + const chartComp = [...this.activeChartComps].find((chartComp2) => chartComp2.getChartId() === params.chartId); + if (!chartComp) { + _warn68(125, { chartId: params.chartId }); + return; + } + chartComp.update(params); + } + getChartModels() { + const models = []; + const versionedModel = (c) => { + return { ...c, version: VERSION }; + }; + for (const c of this.activeChartComps) { + models.push(versionedModel(c.getChartModel())); + } + return models; + } + getChartRef(chartId) { + let chartRef; + for (const cr of this.activeCharts) { + if (cr.chartId === chartId) { + chartRef = cr; + } + } + return chartRef; + } + getChartComp(chartId) { + let chartComp; + for (const comp of this.activeChartComps) { + if (comp.getChartId() === chartId) { + chartComp = comp; + } + } + return chartComp; + } + getChartImageDataURL(params) { + let url; + for (const c of this.activeChartComps) { + if (c.getChartId() === params.chartId) { + url = c.getChartImageDataURL(params.fileFormat); + } + } + return url; + } + downloadChart(params) { + const chartComp = Array.from(this.activeChartComps).find((c) => c.getChartId() === params.chartId); + chartComp?.downloadChart(params.dimensions, params.fileName, params.fileFormat); + } + openChartToolPanel(params) { + const chartComp = Array.from(this.activeChartComps).find((c) => c.getChartId() === params.chartId); + chartComp?.openChartToolPanel(params.panel); + } + closeChartToolPanel(chartId) { + const chartComp = Array.from(this.activeChartComps).find((c) => c.getChartId() === chartId); + chartComp?.closeChartToolPanel(); + } + createChartFromCurrentRange(chartType = "groupedColumn", fromApi) { + const cellRange = this.getSelectedRange(); + return this.createChart({ cellRange, chartType, focusDialogOnOpen: !fromApi }); + } + restoreChart(model, chartContainer) { + if (!model) { + _warn68(126); + return; + } + if (model.version !== VERSION) { + model = upgradeChartModel(model); + } + let cellRange; + let pivotChart; + let suppressChartRanges; + let chartPaletteToRestore; + if (model.modelType === "pivot") { + this.gos.updateGridOptions({ options: { pivotMode: true }, source: "pivotChart" }); + cellRange = this.createCellRange(void 0, true); + pivotChart = true; + suppressChartRanges = true; + } else { + cellRange = this.createCellRange(model.cellRange); + chartPaletteToRestore = model.chartPalette; + suppressChartRanges = model.suppressChartRanges; + } + if (!cellRange) { + return; + } + return this.createChart({ + ...model, + cellRange, + pivotChart, + suppressChartRanges, + chartContainer, + chartOptionsToRestore: model.chartOptions, + chartPaletteToRestore + }); + } + createRangeChart(params, fromApi) { + const cellRange = this.createCellRange(params.cellRange); + if (!cellRange) { + return; + } + return this.createChart({ + ...params, + cellRange, + focusDialogOnOpen: !fromApi + }); + } + createPivotChart(params, fromApi) { + this.gos.updateGridOptions({ options: { pivotMode: true }, source: "pivotChart" }); + const cellRange = this.createCellRange(void 0, true); + if (!cellRange) { + return; + } + return this.createChart({ + ...params, + cellRange, + pivotChart: true, + suppressChartRanges: true, + focusDialogOnOpen: !fromApi + }); + } + createCrossFilterChart(params, fromApi) { + const cellRange = this.createCellRange(params.cellRange); + if (!cellRange) { + return; + } + const suppressChartRangesSupplied = typeof params.suppressChartRanges !== "undefined" && params.suppressChartRanges !== null; + const suppressChartRanges = suppressChartRangesSupplied ? params.suppressChartRanges : true; + return this.createChart({ + ...params, + cellRange, + suppressChartRanges, + crossFiltering: true, + crossFilteringSort: params.sort, + focusDialogOnOpen: !fromApi + }); + } + createChart(params) { + const validationResult = validateCreateParams(params, this.agChartsExports.isEnterprise); + if (!validationResult) { + return void 0; + } + params = validationResult === true ? params : validationResult; + const { chartType, chartContainer } = params; + const createChartContainerFunc = this.gos.getCallback("createChartContainer"); + const gridChartParams = { + ...params, + chartId: this.generateId(), + chartType: getCanonicalChartType(chartType), + insideDialog: !(chartContainer || createChartContainerFunc), + crossFilteringContext: this.crossFilteringContext, + crossFilteringResetCallback: () => { + for (const c of this.activeChartComps) { + c.crossFilteringReset(); + } + } + }; + const chartComp = new GridChartComp(gridChartParams); + this.createBean(chartComp); + const chartRef = this.createChartRef(chartComp); + if (chartContainer) { + chartContainer.appendChild(chartRef.chartElement); + } else if (createChartContainerFunc) { + createChartContainerFunc(chartRef); + } else { + chartComp.addEventListener("destroyed", () => { + this.activeChartComps.delete(chartComp); + this.activeCharts.delete(chartRef); + }); + } + return chartRef; + } + createChartRef(chartComp) { + const chartRef = { + destroyChart: () => { + if (this.activeCharts.has(chartRef)) { + this.destroyBean(chartComp); + this.activeChartComps.delete(chartComp); + this.activeCharts.delete(chartRef); + } + }, + focusChart: () => { + _focusInto12(chartComp.getGui()); + }, + chartElement: chartComp.getGui(), + chart: chartComp.getUnderlyingChart(), + chartId: chartComp.getChartModel().chartId, + setMaximized: chartComp.setMaximized.bind(chartComp) + }; + this.activeCharts.add(chartRef); + this.activeChartComps.add(chartComp); + return chartRef; + } + getSelectedRange() { + const ranges = this.rangeSvc?.getCellRanges(); + if (!ranges || ranges.length === 0) { + return { columns: [] }; + } + const uCols = /* @__PURE__ */ new Set(); + let startRowIndex = Number.MAX_VALUE; + let endRowIndex = -Number.MAX_VALUE; + for (const { startRow: sr, endRow: er, columns: cols } of ranges) { + if (!(sr && er)) { + continue; + } + for (const col of cols) { + uCols.add(col); + } + let { rowIndex: sRowIndex, rowPinned: startRowPinned } = sr; + let { rowIndex: eRowIndex, rowPinned: endRowPinned } = er; + if (startRowPinned === "top") { + if (endRowPinned === "top") { + continue; + } + sRowIndex = 0; + } + if (endRowPinned === "bottom") { + if (startRowPinned === "bottom") { + continue; + } + eRowIndex = this.beans.pageBounds.getLastRow(); + } + if (sRowIndex !== void 0) { + startRowIndex = Math.min(startRowIndex, sRowIndex); + } + if (eRowIndex !== void 0) { + endRowIndex = Math.max(endRowIndex, eRowIndex); + } + } + if (startRowIndex === Number.MAX_VALUE || endRowIndex === -Number.MAX_VALUE) { + return { columns: [] }; + } + const columns = Array.from(uCols); + return { + // Don't specify id here, as it should be chart-specific + // but we don't have that context yet + columns, + startColumn: columns[0], + startRow: { + rowIndex: startRowIndex, + rowPinned: void 0 + }, + endRow: { + rowIndex: endRowIndex, + rowPinned: void 0 + } + }; + } + generateId() { + return `id-${Math.random().toString(36).substring(2, 18)}`; + } + createCellRange(cellRangeParams, allRange) { + const rangeParams = allRange ? { + rowStartIndex: null, + rowStartPinned: void 0, + rowEndIndex: null, + rowEndPinned: void 0, + columns: this.visibleCols.allCols.map((col) => col.getColId()) + } : cellRangeParams; + const cellRange = rangeParams && this.rangeSvc?.createPartialCellRangeFromRangeParams(rangeParams, true); + if (!cellRange) { + _warn68(127, { allRange }); + } + return cellRange; + } + destroy() { + for (const chart of this.activeCharts) { + chart.destroyChart(); + } + super.destroy(); + } +}; + +// packages/ag-grid-enterprise/src/charts/chartsApi.ts +function getChartModels(beans) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.getChartModels()); +} +function getChartRef(beans, chartId) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.getChartRef(chartId)); +} +function getChartImageDataURL(beans, params) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.getChartImageDataURL(params)); +} +function downloadChart(beans, params) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.downloadChart(params)); +} +function openChartToolPanel(beans, params) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.openChartToolPanel(params)); +} +function closeChartToolPanel(beans, params) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.closeChartToolPanel(params.chartId)); +} +function createRangeChart(beans, params) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.createRangeChart(params, true)); +} +function createPivotChart(beans, params) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.createPivotChart(params, true)); +} +function createCrossFilterChart(beans, params) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.createCrossFilterChart(params, true)); +} +function updateChart(beans, params) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.updateChart(params)); +} +function restoreChart(beans, chartModel, chartContainer) { + return beans.frameworkOverrides.wrapIncoming(() => beans.chartSvc?.restoreChart(chartModel, chartContainer)); +} + +// packages/ag-grid-enterprise/src/charts/integratedChartsModule.css +var integratedChartsModule_default = `.ag-chart{display:flex;height:100%;position:relative;width:100%}.ag-chart-components-wrapper{display:flex}.ag-chart-canvas-wrapper,.ag-chart-components-wrapper{flex:1 1 auto;position:relative}.ag-chart-menu{background:var(--ag-background-color);background-color:color-mix(in srgb,transparent,var(--ag-background-color) 30%);border-radius:var(--ag-border-radius);display:flex;flex-direction:row;gap:20px;padding:4px 2px;position:absolute;top:8px;width:auto;--ag-icon-size:20px}:where(.ag-ltr) .ag-chart-menu{justify-content:right;right:calc(var(--ag-cell-horizontal-padding) + var(--ag-spacing) - 4px)}:where(.ag-rtl) .ag-chart-menu{justify-content:left;left:calc(var(--ag-cell-horizontal-padding) + var(--ag-spacing) - 4px)}.ag-chart-docked-container{min-width:var(--ag-chart-menu-panel-width);position:relative}:where(.ag-chart-menu-hidden)~.ag-chart-docked-container{display:none}.ag-chart-tabbed-menu{display:flex;flex-direction:column;height:100%;overflow:hidden;width:100%}.ag-chart-tabbed-menu-header{cursor:default;flex:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-chart-tabbed-menu-body{align-items:stretch;display:flex;flex:1 1 auto;overflow:hidden;position:relative}.ag-chart-tabbed-menu-body:after{background:linear-gradient(var(--ag-background-color),transparent);content:"";display:block;height:16px;left:0;position:absolute;right:0;top:0}.ag-chart-tab{overflow:hidden;overflow-y:auto;width:100%}.ag-chart-settings{overflow-x:hidden}.ag-chart-settings-wrapper{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;width:100%}.ag-chart-settings-nav-bar{align-items:center;border-top:solid var(--ag-border-width) var(--ag-border-color);display:flex;height:30px;padding:0 10px;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.ag-chart-settings-card-selector{align-items:center;display:flex;flex:1 1 auto;height:100%;justify-content:space-around;padding:0 10px}.ag-chart-settings-card-item{background-color:var(--ag-foreground-color);border-radius:4px;cursor:pointer;height:8px;position:relative;width:8px;&.ag-not-selected{opacity:.2}&.ag-selected{background-color:var(--ag-accent-color)}}.ag-chart-settings-card-item:before{background-color:transparent;content:" ";display:block;height:20px;left:50%;margin-left:-10px;margin-top:-10px;position:absolute;top:50%;width:20px}.ag-chart-settings-next,.ag-chart-settings-prev{flex:none;position:relative}.ag-chart-settings-next:focus-within,.ag-chart-settings-prev:focus-within{border-radius:1px;box-shadow:var(--ag-focus-shadow)}.ag-chart-settings-next-button,.ag-chart-settings-prev-button{cursor:pointer;height:100%;left:0;opacity:0;position:absolute;top:0;width:100%}.ag-chart-settings-mini-charts-container{flex:1 1 auto;overflow:hidden auto;position:relative}.ag-chart-settings-mini-wrapper{display:flex;flex-direction:column;left:0;min-height:100%;overflow:hidden;padding-bottom:var(--ag-widget-container-vertical-padding);position:absolute;top:0;width:100%;&.ag-animating{transition:left .3s;transition-timing-function:ease-in-out}}.ag-chart-mini-thumbnail{border:solid var(--ag-border-width) var(--ag-border-color);border-radius:5px;cursor:pointer;padding:1px;&.ag-selected{border-color:var(--ag-accent-color);border-width:calc(var(--ag-border-width) + 1px);padding:unset}&:focus-visible{border-color:var(--ag-accent-color);box-shadow:var(--ag-focus-shadow)}}.ag-chart-mini-thumbnail-canvas{display:block}.ag-chart-advanced-settings-wrapper,.ag-chart-data-wrapper,.ag-chart-format-wrapper{display:flex;flex-direction:column;padding-bottom:16px;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ag-chart-advanced-settings-wrapper,.ag-chart-data-wrapper{height:100%;overflow-y:auto}.ag-chart-advanced-settings{background-color:var(--ag-chrome-background-color)}.ag-chart-advanced-settings,.ag-chart-advanced-settings-wrapper{width:100%}.ag-chart-advanced-settings-wrapper{padding-bottom:0}.ag-chart-advanced-settings-section{border-bottom:solid var(--ag-border-width) var(--ag-border-color);display:flex;margin:0;padding-bottom:var(--ag-widget-container-vertical-padding);padding-top:var(--ag-widget-container-vertical-padding)}.ag-chart-empty-text{align-items:center;background-color:var(--ag-background-color);display:flex;height:100%;justify-content:center;top:0;width:100%}.ag-charts-font-size-color{align-self:stretch;display:flex;justify-content:space-between}.ag-chart-menu-icon{border-radius:var(--ag-border-radius);cursor:pointer;margin:2px 0;opacity:.8}.ag-chart-menu-icon:hover{opacity:1}.ag-chart-menu-toolbar-button{background-color:unset;border:0;border-radius:1px;padding:0 2px}.ag-chart-data-column-drag-handle{margin-left:var(--ag-spacing)}.ag-chart-data-section,.ag-chart-format-section{display:flex;margin:0;:where(.ag-label:not(.ag-group-title-bar)){color:var(--ag-chart-menu-label-color)}:where(.ag-label-align-top .ag-label){margin-bottom:var(--ag-widget-vertical-spacing);margin-top:calc(var(--ag-widget-vertical-spacing)*.5)}:where(.ag-slider.ag-label-align-top .ag-label){margin-bottom:0}.ag-label{display:inline-block}}.ag-chart-menu-panel{--ag-panel-background-color:var(--ag-chrome-background-color)}:where(.ag-ltr) .ag-chart-menu-panel{border-left:solid var(--ag-border-width) var(--ag-border-color)}:where(.ag-rtl) .ag-chart-menu-panel{border-right:solid var(--ag-border-width) var(--ag-border-color)}.ag-chart-data-wrapper,.ag-chart-format-wrapper{margin:0;padding:0}.ag-group{.ag-charts-data-group-item{padding-bottom:var(--ag-widget-container-vertical-padding);position:relative}.ag-charts-data-group-item:where(:not(:last-child)){margin-bottom:var(--ag-spacing)}.ag-charts-advanced-settings-top-level-group-title-bar{background-color:unset;position:relative}.ag-charts-data-group-item:where(:not(.ag-charts-format-sub-level-group,.ag-pill-select,.ag-select)){height:var(--ag-list-item-height)}.ag-charts-data-group-item:where(.ag-picker-field){margin-top:var(--ag-spacing)}.ag-charts-advanced-settings-top-level-group-item,.ag-charts-format-top-level-group-item{margin:var(--ag-spacing) 0}.ag-charts-format-sub-level-group-container{display:flex;flex-direction:column;padding:var(--ag-widget-vertical-spacing) 0}.ag-charts-settings-group-container{border-top:none;display:grid;font-weight:500;grid-template-columns:60px 1fr 60px 1fr 60px;row-gap:8px;:where(.ag-chart-mini-thumbnail:nth-child(3n+1)){grid-column:1}:where(.ag-chart-mini-thumbnail:nth-child(3n+2)){grid-column:3}:where(.ag-chart-mini-thumbnail:nth-child(3n+3)){grid-column:5}}.ag-charts-data-group-title-bar,.ag-charts-format-top-level-group-title-bar,.ag-charts-settings-group-title-bar{border-top:none;font-weight:500;margin:0;padding:var(--ag-widget-container-vertical-padding) var(--ag-widget-container-horizontal-padding);position:relative}.ag-charts-format-sub-level-group-title-bar{background:none;font-weight:500;padding:var(--ag-widget-vertical-spacing) 0}&.ag-charts-data-group,&.ag-charts-format-top-level-group{border-top:solid var(--ag-border-width) var(--ag-border-color)}.ag-charts-data-group-container,.ag-charts-format-top-level-group-container,.ag-charts-settings-group-container{margin:0;padding:0 var(--ag-widget-container-horizontal-padding)}.ag-charts-format-sub-level-group-item,.ag-charts-format-sub-level-no-header-group-item,.ag-charts-format-top-level-group-item{margin-bottom:var(--ag-widget-vertical-spacing)}&.ag-charts-format-sub-level-group,&.ag-charts-format-top-level-group,.ag-charts-format-sub-level-group-item:last-child,.ag-charts-format-top-level-group-item{margin:0;padding:0}.ag-charts-advanced-settings-top-level-group-container{margin:0}.ag-charts-advanced-settings-top-level-group-container,.ag-charts-advanced-settings-top-level-group-title-bar{padding:0 var(--ag-widget-container-horizontal-padding)}.ag-charts-advanced-settings-top-level-group-item{margin-bottom:0;margin-top:calc(var(--ag-widget-vertical-spacing)*2)}}.ag-chart-settings-card-item.ag-not-selected:hover{opacity:.35}.ag-angle-select{align-items:center;display:flex}.ag-angle-select-wrapper{display:flex}.ag-angle-select-parent-circle{background-color:var(--ag-background-color);border:solid var(--ag-border-width) var(--ag-border-color);border-radius:12px;display:block;height:24px;position:relative;width:24px}.ag-angle-select-child-circle{background-color:var(--ag-foreground-color);border-radius:3px;height:6px;left:12px;margin-left:-3px;margin-top:-4px;position:absolute;top:4px;width:6px}.ag-slider-wrapper{display:flex;:where(.ag-input-field){flex:1 1 auto}}.ag-color-panel{display:flex;flex-direction:column;padding:var(--ag-spacing);text-align:center;width:100%}.ag-spectrum-color{cursor:default;flex:1 1 auto;overflow:visible;position:relative}.ag-spectrum-color,.ag-spectrum-fill{border-radius:var(--ag-border-radius)}.ag-spectrum-fill{inset:0;position:absolute}.ag-spectrum-val{background-image:linear-gradient(0deg,#000,hsla(20,42%,65%,0));cursor:pointer}.ag-spectrum-dragger{background:#000;border:var(--ag-color-picker-thumb-border-width) solid #fff;border-radius:var(--ag-color-picker-thumb-size);box-shadow:0 0 2px 0 rgba(0,0,0,.24);cursor:pointer;height:var(--ag-color-picker-thumb-size);pointer-events:none;position:absolute;width:var(--ag-color-picker-thumb-size)}.ag-spectrum-alpha,.ag-spectrum-hue{cursor:default}.ag-spectrum-hue-background{background:linear-gradient(270deg,red 3%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);height:100%;width:100%}.ag-spectrum-alpha-background{background:linear-gradient(to right,var(--ag-internal-spectrum-alpha-color-from),var(--ag-internal-spectrum-alpha-color-to)),url('data:image/svg+xml;utf8,') 0 0 /4px 4px;height:100%;width:100%}.ag-spectrum-tool{cursor:pointer;height:var(--ag-color-picker-track-size);margin-bottom:10px;position:relative}.ag-spectrum-slider,.ag-spectrum-tool{border-radius:var(--ag-color-picker-thumb-size)}.ag-spectrum-slider{border:var(--ag-color-picker-thumb-border-width) solid #fff;box-shadow:0 1px 4px 0 rgba(0,0,0,.37);height:var(--ag-color-picker-thumb-size);margin-top:calc(var(--ag-color-picker-track-size)/2*-1 + var(--ag-color-picker-thumb-size)/2*-1);pointer-events:none;position:absolute;width:var(--ag-color-picker-thumb-size)}:where(.ag-spectrum-alpha) .ag-spectrum-slider{background:linear-gradient(to bottom,var(--ag-internal-spectrum-alpha-color),var(--ag-internal-spectrum-alpha-color)) var(--ag-background-color)}.ag-recent-colors{display:flex;gap:6px;margin:10px var(--ag-spacing) 2px}.ag-recent-color{border:solid var(--ag-border-width) var(--ag-border-color);cursor:pointer}.ag-angle-select[disabled]{opacity:.5;pointer-events:none}:where(.ag-ltr) .ag-angle-select-field,:where(.ag-ltr) .ag-slider-field{margin-right:calc(var(--ag-spacing)*2)}:where(.ag-rtl) .ag-angle-select-field,:where(.ag-rtl) .ag-slider-field{margin-left:calc(var(--ag-spacing)*2)}.ag-color-dialog{border-radius:5px}:where(.ag-color-picker){.ag-picker-field-wrapper{padding-left:var(--ag-spacing);padding-right:var(--ag-spacing)}.ag-picker-field-display{align-items:center;display:flex;flex-direction:row;min-height:var(--ag-list-item-height)}}:where(.ag-ltr) .ag-color-picker-color,:where(.ag-ltr) .ag-color-picker-value{margin-right:var(--ag-spacing)}:where(.ag-rtl) .ag-color-picker-color,:where(.ag-rtl) .ag-color-picker-value{margin-left:var(--ag-spacing)}.ag-spectrum-tools{padding:10px 0 0}.ag-spectrum-alpha-background,.ag-spectrum-hue-background{border-radius:var(--ag-color-picker-track-border-radius)}.ag-color-input-color,.ag-color-picker-color,.ag-recent-color{border-radius:var(--ag-color-picker-color-border-radius)}.ag-spectrum-sat{background-image:linear-gradient(90deg,#fff,hsla(20,42%,65%,0))}.ag-recent-color,.ag-spectrum-color,.ag-spectrum-slider{&:where(:not(:disabled,[readonly])):focus-visible{box-shadow:var(--ag-focus-shadow)}}.ag-color-input-color,.ag-color-picker-color{border:solid var(--ag-border-width) var(--ag-border-color);height:var(--ag-icon-size);width:var(--ag-icon-size)}:where(.ag-ltr) .ag-color-input .ag-input-field-input{padding-left:calc(var(--ag-icon-size) + var(--ag-spacing)*2)}:where(.ag-rtl) .ag-color-input .ag-input-field-input{padding-right:calc(var(--ag-icon-size) + var(--ag-spacing)*2)}:where(.ag-color-input) .ag-color-input-color{position:absolute}:where(.ag-ltr) :where(.ag-color-input) .ag-color-input-color{margin-left:var(--ag-spacing)}:where(.ag-rtl) :where(.ag-color-input) .ag-color-input-color{margin-right:var(--ag-spacing)}.ag-range-field{align-items:center;display:flex;:where(.ag-input-wrapper){height:100%}}.ag-range-field-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;height:100%;overflow:visible;padding:0;width:100%;&:disabled{opacity:.5}}.ag-range-field-input{&::-webkit-slider-runnable-track{background-color:var(--ag-border-color);border-radius:1.5px;height:3px;margin:0;padding:0;width:100%}&::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:var(--ag-background-color);border:solid var(--ag-border-width) var(--ag-border-color);border-radius:100%;height:var(--ag-icon-size);margin:0;padding:0;transform:translateY(calc(var(--ag-icon-size)*-.5 + 1.5px));width:var(--ag-icon-size)}&:focus::-webkit-slider-thumb{border-color:var(--ag-accent-color);box-shadow:var(--ag-focus-shadow)}&:active::-webkit-slider-runnable-track{background-color:var(--ag-accent-color)}}.ag-range-field-input{&::-moz-range-track{background-color:var(--ag-border-color);border-radius:1.5px;height:3px;margin:0;padding:0;width:100%}&::-moz-ag-range-thumb{-moz-appearance:none;appearance:none;background-color:var(--ag-background-color);border:solid var(--ag-border-width) var(--ag-border-color);border-radius:100%;height:var(--ag-icon-size);margin:0;padding:0;transform:translateY(calc(var(--ag-icon-size)*-.5 + 1.5px));width:var(--ag-icon-size)}&:focus::-moz-ag-range-thumb{border-color:var(--ag-accent-color);box-shadow:var(--ag-focus-shadow)}&:active::-moz-ag-range-track{background-color:var(--ag-accent-color)}}`; + +// packages/ag-grid-enterprise/src/charts/utils/validGridChartsVersion.ts +var VERSION_CHECKING_FIRST_GRID_MAJOR_VERSION = 28; +var VERSION_CHECKING_FIRST_CHARTS_MAJOR_VERSION = 6; +function isValidVersion(version) { + return version?.match(/\d+\.\d+\.\d+/); +} +function isValidMajorVersion({ + gridMajorVersion, + chartsMajorVersion +}) { + const gridMajor = parseInt(gridMajorVersion, 10); + const chartsMajor = parseInt(chartsMajorVersion, 10); + const gridMajorDifference = gridMajor - VERSION_CHECKING_FIRST_GRID_MAJOR_VERSION; + const chartsMajorDifference = chartsMajor - VERSION_CHECKING_FIRST_CHARTS_MAJOR_VERSION; + const isFirstOrAfterVersion = gridMajorDifference >= 0; + return gridMajorDifference === chartsMajorDifference && isFirstOrAfterVersion; +} +function gridChartVersion(gridVersion) { + if (!gridVersion || !isValidVersion(gridVersion)) { + return void 0; + } + const [gridMajor, gridMinor] = gridVersion.split(".") || []; + const gridMajorMinor = `${gridMajor}.${gridMinor}.x`; + const gridMajorNumber = parseInt(gridMajor, 10); + const chartsMajor = gridMajorNumber - VERSION_CHECKING_FIRST_GRID_MAJOR_VERSION + VERSION_CHECKING_FIRST_CHARTS_MAJOR_VERSION; + if (chartsMajor < 0) { + return void 0; + } + const chartsMinor = gridMinor; + const chartsMajorMinor = `${chartsMajor}.${chartsMinor}.x`; + return { + gridMajorMinor, + chartsMajorMinor + }; +} +function validGridChartsVersionErrorMessage({ + type, + gridVersion, + chartsVersion +}) { + const invalidMessage = "AG Grid: AG Grid version is incompatible. Please see https://www.ag-grid.com/javascript-data-grid/modules/ for more information."; + if (!gridVersion) { + return invalidMessage; + } + const version = gridChartVersion(gridVersion); + if (!version) { + return invalidMessage; + } + const { gridMajorMinor, chartsMajorMinor } = version; + if (type === "incompatible") { + return `AG Grid version ${gridVersion} and AG Charts version ${chartsVersion} is not supported. AG Grid version ${gridMajorMinor} should be used with AG Chart ${chartsMajorMinor}. Please see https://www.ag-grid.com/javascript-data-grid/modules/ for more information.`; + } else if (type === "invalidCharts") { + return `AG Grid version ${gridMajorMinor} should be used with AG Chart ${chartsMajorMinor} not ${chartsVersion}. Please see https://www.ag-grid.com/javascript-data-grid/modules/ for more information.`; + } + return invalidMessage; +} +function validGridChartsVersion({ + gridVersion, + chartsVersion +}) { + if (!isValidVersion(chartsVersion)) { + return { + isValid: false, + message: validGridChartsVersionErrorMessage({ type: "invalidCharts", gridVersion, chartsVersion }) + }; + } + if (!isValidVersion(gridVersion)) { + return { + isValid: false, + message: validGridChartsVersionErrorMessage({ type: "invalidGrid", gridVersion, chartsVersion }) + }; + } + const [gridMajor, gridMinor] = gridVersion.split(".") || []; + const [chartsMajor, chartsMinor, chartsPatch] = chartsVersion.split(".") || []; + const isValidMajor = isValidMajorVersion({ + gridMajorVersion: gridMajor, + chartsMajorVersion: chartsMajor + }); + if (isValidMajor && gridMinor === chartsMinor || chartsPatch.includes("beta")) { + return { + isValid: true + }; + } else if (!isValidMajor || gridMinor !== chartsMinor) { + return { + isValid: false, + message: validGridChartsVersionErrorMessage({ type: "incompatible", gridVersion, chartsVersion }) + }; + } + return { + isValid: false, + message: validGridChartsVersionErrorMessage({ type: "invalid", gridVersion, chartsVersion }) + }; +} + +// packages/ag-grid-enterprise/src/charts/integratedChartsModule.ts +var icons = { + // shown on top right of chart when chart is linked to range data (click to unlink) + linked: "linked", + // shown on top right of chart when chart is not linked to range data (click to link) + unlinked: "unlinked", + // icon to open charts menu + chartsMenu: "menu-alt", + // download chart + chartsDownload: "save", + // Edit Chart menu item shown in Integrated Charts menu + chartsMenuEdit: "chart", + // Advanced Settings menu item shown in Integrated Charts menu + chartsMenuAdvancedSettings: "settings", + // shown in Integrated Charts menu add fields + chartsMenuAdd: "plus", + // shown in Integrated Charts tool panel color picker + chartsColorPicker: "small-down", + // previous in Integrated Charts settings tool panel theme switcher + chartsThemePrevious: "previous", + // next in Integrated Charts settings tool panel theme switcher + chartsThemeNext: "next" +}; +var apiFunctions = { + getChartModels, + getChartRef, + getChartImageDataURL, + downloadChart, + openChartToolPanel, + closeChartToolPanel, + createRangeChart, + createPivotChart, + createCrossFilterChart, + updateChart, + restoreChart +}; +var dependsOn = [ + CellSelectionModule, + EnterpriseCoreModule, + _SharedDragAndDropModule5, + _PopupModule5, + MenuItemModule +]; +var moduleName2 = "IntegratedCharts"; +var GridChartsModule = { + moduleName: "GridCharts", + version: VERSION, + dependsOn, + // included to avoid other false positive warnings about missing modules + validate: () => { + return { + isValid: false, + message: `AG Grid: As of v33, the "GridChartsModule" has been deprecated. Please use "IntegratedChartsModule.with(...)" instead. + ${_preInitErrMsg2(257)}` + }; + } +}; +var IntegratedChartsModule = { + moduleName: moduleName2, + version: VERSION, + dependsOn, + // included to avoid other false positive warnings about missing modules + validate: () => { + return { + isValid: false, + message: _preInitErrMsg2(257) + }; + }, + with: (params) => { + params.setup(); + params.setGridContext?.(true); + if (params.isEnterprise && params.setLicenseKey) { + const chartsManager = { + setLicenseKey: params.setLicenseKey + }; + LicenseManager.setChartsLicenseManager(chartsManager); + } + return { + moduleName: moduleName2, + version: VERSION, + icons, + apiFunctions, + dependsOn, + css: [integratedChartsModule_default], + validate: () => { + return validGridChartsVersion({ + gridVersion: VERSION, + chartsVersion: params.VERSION + }); + }, + beans: [ + // bind the params to the constructor to avoid the need for static properties + AgChartsExports.bind(null, params), + ChartService, + ChartTranslationService, + ChartCrossFilterService, + ChartMenuListFactory, + ChartMenuService, + // Include enterprise beans for now for all users as tiny compared to charts bundle size + EnterpriseChartProxyFactory, + AdvancedSettingsMenuFactory + ] + }; + } +}; + +// packages/ag-grid-enterprise/src/allEnterpriseModule.ts +import { AllCommunityModule } from "ag-grid-community"; +var dependsOn2 = [ + AllCommunityModule, + ClipboardModule, + ColumnsToolPanelModule, + ExcelExportModule, + FiltersToolPanelModule, + NewFiltersToolPanelModule, + MasterDetailModule, + ColumnMenuModule, + ContextMenuModule, + CellSelectionModule, + RichSelectModule, + RowNumbersModule, + RowGroupingModule, + RowGroupingPanelModule, + GroupFilterModule, + ServerSideRowModelModule, + ServerSideRowModelApiModule, + FormulaModule, + SetFilterModule, + MultiFilterModule, + AdvancedFilterModule, + SideBarModule, + StatusBarModule, + ViewportRowModelModule, + PivotModule, + TreeDataModule, + FindModule, + BatchEditModule, + RowGroupingEditModule, + AiToolkitModule +]; +var moduleName3 = "AllEnterprise"; +var AllEnterpriseModule = { + with: (params) => ({ + moduleName: moduleName3, + version: VERSION, + dependsOn: [...dependsOn2, IntegratedChartsModule.with(params), SparklinesModule.with(params)] + }), + moduleName: moduleName3, + version: VERSION, + dependsOn: dependsOn2 +}; + +// packages/ag-grid-enterprise/src/main.ts +export * from "ag-grid-community"; +export { + AdvancedFilterModule, + AggregationModule, + AiToolkitModule, + AllEnterpriseModule, + BatchEditModule, + CellSelectionModule, + ClipboardModule, + ColumnMenuModule, + ColumnsToolPanelModule, + ContextMenuModule, + ExcelExportModule, + FiltersToolPanelModule, + FindModule, + FormulaModule, + GridChartsModule, + GroupFilterModule, + IntegratedChartsModule, + GridLicenseManager as LicenseManager, + MasterDetailModule, + MenuModule, + MultiFilterModule, + NewFiltersToolPanelModule, + PivotModule, + RangeSelectionModule, + RichSelectModule, + RowGroupingEditModule, + RowGroupingModule, + RowGroupingPanelModule, + RowNumbersModule, + ServerSideRowModelApiModule, + ServerSideRowModelModule, + SetFilterModule, + SideBarModule, + SparklinesModule, + StatusBarModule, + TreeDataModule, + ViewportRowModelModule, + AgColorPicker as _AgColorPicker, + AgColorPickerSelector as _AgColorPickerSelector, + AgContextMenuService as _AgContextMenuService, + AgDialog as _AgDialog, + AgGroupComponent as _AgGroupComponent, + AgGroupComponentSelector as _AgGroupComponentSelector, + AgInputRange as _AgInputRange, + AgInputRangeSelector as _AgInputRangeSelector, + AgMenuItemComponent as _AgMenuItemComponent, + AgMenuItemRenderer as _AgMenuItemRenderer, + AgMenuList as _AgMenuList, + AgPanel as _AgPanel, + AgSlider as _AgSlider, + AgSliderSelector as _AgSliderSelector, + AgTabbedLayout as _AgTabbedLayout, + AgVirtualList as _AgVirtualList, + AgVirtualListDragFeature as _AgVirtualListDragFeature, + distributeGroupValue, + exportMultipleSheetsAsExcel, + getMultipleSheetsAsExcel +}; diff --git a/src/grid-e/package.json b/src/grid-e/package.json new file mode 100644 index 0000000..51592da --- /dev/null +++ b/src/grid-e/package.json @@ -0,0 +1,131 @@ +{ + "name": "ag-grid-enterprise", + "version": "35.2.0", + "description": "Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue", + "main": "./dist/package/main.cjs.js", + "types": "./dist/types/src/main.d.ts", + "module": "./main.esm.mjs", + "exports": { + ".": { + "import": "./dist/package/main.esm.mjs", + "types": "./dist/types/src/main.d.ts", + "require": "./dist/package/main.cjs.js", + "default": "./dist/package/main.cjs.js" + }, + "./styles/ag-grid-no-native-widgets.css": "./styles/ag-grid-no-native-widgets.css", + "./styles/ag-grid-no-native-widgets.min.css": "./styles/ag-grid-no-native-widgets.min.css", + "./styles/ag-grid.css": "./styles/ag-grid.css", + "./styles/ag-grid.min.css": "./styles/ag-grid.min.css", + "./styles/ag-theme-alpine-no-font.css": "./styles/ag-theme-alpine-no-font.css", + "./styles/ag-theme-alpine-no-font.min.css": "./styles/ag-theme-alpine-no-font.min.css", + "./styles/ag-theme-alpine.css": "./styles/ag-theme-alpine.css", + "./styles/ag-theme-alpine.min.css": "./styles/ag-theme-alpine.min.css", + "./styles/ag-theme-balham-no-font.css": "./styles/ag-theme-balham-no-font.css", + "./styles/ag-theme-balham-no-font.min.css": "./styles/ag-theme-balham-no-font.min.css", + "./styles/ag-theme-balham.css": "./styles/ag-theme-balham.css", + "./styles/ag-theme-balham.min.css": "./styles/ag-theme-balham.min.css", + "./styles/ag-theme-material-no-font.css": "./styles/ag-theme-material-no-font.css", + "./styles/ag-theme-material-no-font.min.css": "./styles/ag-theme-material-no-font.min.css", + "./styles/ag-theme-material.css": "./styles/ag-theme-material.css", + "./styles/ag-theme-material.min.css": "./styles/ag-theme-material.min.css", + "./styles/ag-theme-quartz-no-font.css": "./styles/ag-theme-quartz-no-font.css", + "./styles/ag-theme-quartz-no-font.min.css": "./styles/ag-theme-quartz-no-font.min.css", + "./styles/ag-theme-quartz.css": "./styles/ag-theme-quartz.css", + "./styles/ag-theme-quartz.min.css": "./styles/ag-theme-quartz.min.css", + "./styles/agGridAlpineFont.css": "./styles/agGridAlpineFont.css", + "./styles/agGridAlpineFont.min.css": "./styles/agGridAlpineFont.min.css", + "./styles/agGridBalhamFont.css": "./styles/agGridBalhamFont.css", + "./styles/agGridBalhamFont.min.css": "./styles/agGridBalhamFont.min.css", + "./styles/agGridClassicFont.css": "./styles/agGridClassicFont.css", + "./styles/agGridClassicFont.min.css": "./styles/agGridClassicFont.min.css", + "./styles/agGridMaterialFont.css": "./styles/agGridMaterialFont.css", + "./styles/agGridMaterialFont.min.css": "./styles/agGridMaterialFont.min.css", + "./styles/agGridQuartzFont.css": "./styles/agGridQuartzFont.css", + "./styles/agGridQuartzFont.min.css": "./styles/agGridQuartzFont.min.css", + "./styles": "./styles/_index.scss" + }, + "sideEffects": [ + "./styles/ag-grid-no-native-widgets.css", + "./styles/ag-grid-no-native-widgets.min.css", + "./styles/ag-grid.css", + "./styles/ag-grid.min.css", + "./styles/ag-theme-alpine-no-font.css", + "./styles/ag-theme-alpine-no-font.min.css", + "./styles/ag-theme-alpine.css", + "./styles/ag-theme-alpine.min.css", + "./styles/ag-theme-balham-no-font.css", + "./styles/ag-theme-balham-no-font.min.css", + "./styles/ag-theme-balham.css", + "./styles/ag-theme-balham.min.css", + "./styles/ag-theme-material-no-font.css", + "./styles/ag-theme-material-no-font.min.css", + "./styles/ag-theme-material.css", + "./styles/ag-theme-material.min.css", + "./styles/ag-theme-quartz-no-font.css", + "./styles/ag-theme-quartz-no-font.min.css", + "./styles/ag-theme-quartz.css", + "./styles/ag-theme-quartz.min.css", + "./styles/agGridAlpineFont.css", + "./styles/agGridAlpineFont.min.css", + "./styles/agGridBalhamFont.css", + "./styles/agGridBalhamFont.min.css", + "./styles/agGridClassicFont.css", + "./styles/agGridClassicFont.min.css", + "./styles/agGridMaterialFont.css", + "./styles/agGridMaterialFont.min.css", + "./styles/agGridQuartzFont.css", + "./styles/agGridQuartzFont.min.css" + ], + "repository": { + "type": "git", + "url": "https://github.com/ag-grid/ag-grid.git" + }, + "keywords": [ + "ag", + "ag-grid", + "datagrid", + "data-grid", + "datatable", + "data-table", + "grid", + "table", + "react", + "table", + "angular", + "angular-component", + "react", + "react-component", + "reactjs", + "vue", + "vuejs" + ], + "author": "Sean Landsman ", + "license": "Commercial", + "bugs": { + "url": "https://github.com/ag-grid/ag-grid/issues" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie >= 0", + "not ie_mob >= 0", + "not blackberry > 0" + ], + "homepage": "https://www.ag-grid.com/", + "dependencies": { + "ag-grid-community": "35.2.0" + }, + "optionalDependencies": { + "ag-charts-community": "13.2.0", + "ag-charts-enterprise": "13.2.0" + }, + "devDependencies": { + "ag-charts-community": "13.2.0", + "ag-charts-enterprise": "13.2.0", + "@types/jest": "^29.5.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.7.0", + "jest-canvas-mock": "2.5.2", + "canvas": "^3.2.1" + } +} diff --git a/src/sigpro.editor.js b/src/sigpro.editor.js new file mode 100644 index 0000000..4c1407e --- /dev/null +++ b/src/sigpro.editor.js @@ -0,0 +1,19 @@ +const { $, isF } = window.SigPro + +export const Editor = p => { + let { value: v, class: x } = p, i = $(0), s = $(""), c = $(0), t = $(0), o = $(0), S = () => window.getSelection().rangeCount ? window.getSelection().getRangeAt(0) : 0, R, r, E = "😀 😊 😉 🧐 😮 🤔 😅 😂 😍 😘 🥰 👍 👎 👌 🤝 🤞 👋 👏 🙌 🙏 💪 ☝️ 👇 👈 👉 🖕 ✅ ⚠️ 🚀 📢 ✉️ ❤️".split(" "), + U = () => { t(t() + 1); R && c(R.innerText.length) }, N = () => { if (R) { let H = R.innerHTML; isF(v) ? v(H) : p.onchange?.(H); U() } }, + X = (m, k = null) => { R?.focus(); if (r) { let w = window.getSelection(); w.removeAllRanges(); w.addRange(r) } document.execCommand(m, 0, k); r = 0; N() }, + q = (k, Z = null) => { t(); if (!R || i()) return 0; try { if (k == 'formatBlock') { let n = window.getSelection().getRangeAt(0).commonAncestorContainer; while (n && n !== R) { if (n.tagName === Z) return 1; n = n.parentNode } return 0 } return document.queryCommandState(k) } catch (e) { return 0 } }, + hU = f => { if (f) { let d = new FileReader; d.onload = e => { let I = f.type.startsWith('image/'), z = e.target.result; X("insertHTML", I ? div({ style: "display:inline-block;resize:both;overflow:hidden;vertical-align:bottom;width:200px;border:1px dashed #ccc;padding:2px;cursor:pointer", class: "resizable-img-container" }, [img({ src: z, style: "width:100%;height:100%;object-fit:contain;pointer-events:none" })]) : a({ href: z, download: f.name, contenteditable: "false", style: "display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border:1px solid #ccc;border-radius:4px;background:#f9f9f9;text-decoration:none;color:#333;font-size:12px;margin:2px;cursor:pointer" }, [span({ class: "icon-[lucide--paperclip] w-3 h-3" }), f.name])) }; d.readAsDataURL(f) } }, + B = (I, m, k) => button({ type: "button", class: () => `btn btn-ghost btn-xs ${q(m, k) ? 'btn-active bg-primary/20' : ''}`, onclick: () => typeof m == 'function' ? m() : X(m, k) }, [span({ class: `icon-[lucide--${I}]` })]); + + return div({ class: `border border-base-300 rounded-box bg-base-100 overflow-hidden flex flex-col ${x||""}` }, [ + div({ class: "flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20" }, [ + div({ class: "flex flex-wrap gap-1 flex-1" }, [B("bold", "bold"), B("italic", "italic"), B("underline", "underline"), input({ type: "color", class: "w-5 h-5 p-0 bg-transparent cursor-pointer", oninput: e => X("foreColor", e.target.value) }), span({ class: "w-px h-5 bg-base-300 mx-1" }), B("align-left", "justifyLeft"), B("align-center", "justifyCenter"), B("align-right", "justifyRight"), span({ class: "w-px h-5 bg-base-300 mx-1" }), B("list", "insertUnorderedList"), B("list-ordered", "insertOrderedList"), B("indent-decrease", "outdent"), B("indent-increase", "indent"), B("quote", () => X("formatBlock", q('formatBlock', 'BLOCKQUOTE') ? 'P' : 'BLOCKQUOTE'), 'BLOCKQUOTE'), span({ class: "w-px h-5 bg-base-300 mx-1" }), B("link", () => { let u = prompt('URL:'); u && X("createLink", u) }), B("paperclip", () => { let I = document.createElement('input'); I.type = 'file'; I.onchange = e => hU(e.target.files[0]); I.click() }), div({ class: "relative" }, [B("smile", () => { r = S(); o(!o()) }), div({ class: "absolute top-full left-0 mt-1 p-2 bg-base-100 border shadow-xl rounded-box w-52 z-50 flex flex-wrap gap-1", style: () => o() ? "" : "display:none" }, E.map(e => span({ class: "cursor-pointer p-1 text-lg", onclick: () => { X("insertText", e); o(0) } }, e)))]), B("undo-2", "undo"), B("redo-2", "redo")]), B("code-2", () => { if (!i()) s(R?.innerHTML || ""); else if (R) { R.innerHTML = s(); N() } i(!i()) })]), + div({ class: "relative flex-1 flex flex-col", onclick: () => o(0) }, [ + div({ ref: l => { if (l && !R) { R = l; l.innerHTML = (isF(v) ? v() : v) || ""; document.execCommand("defaultParagraphSeparator", 0, "br"); l.onclick = e => { let c = e.target.closest('.resizable-img-container'); if (c) { let I = c.querySelector('img'); I && (k => { let O = document.createElement('div'); O.style = "position:fixed;top:0;left:0;width:100%;height:100%;background:#000e;z-index:9999;display:flex;align-items:center;justify-content:center;cursor:zoom-out"; O.onclick = () => O.remove(); let M = document.createElement('img'); M.src = k; M.style = "max-width:95%;max-height:95%"; O.appendChild(M); document.body.appendChild(O) })(I.src) } } } }, style: () => `min-height:22rem;${i() ? 'display:none' : ''}`, class: "p-4 outline-none text-base-content leading-relaxed [&>div]:m-0 [&>p]:m-0 [&>div]:min-h-[1em] [&_.resizable-img-container]:hover:border-primary [&_blockquote]:border-l-4 [&_blockquote]:border-base-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_ul]:list-disc [&_ul]:pl-8 [&_ol]:list-decimal [&_ol]:pl-8", contenteditable: "true", oninput: N, onkeydown: e => e.key === 'Tab' && (e.preventDefault(), X("indent")), onkeyup: () => { U(); r = S() }, onmouseup: N, onpaste: e => { e.preventDefault(); X('insertText', e.clipboardData.getData('text/plain')) }, ondrop: e => { e.preventDefault(); hU(e.dataTransfer.files[0]) }, ondragover: e => e.preventDefault() }), + textarea({ class: "w-full flex-1 min-h-[22rem] p-4 font-mono text-sm bg-base-200 border-0", style: () => i() ? '' : 'display:none', value: s, oninput: e => { s(e.target.value); if (R) R.innerHTML = e.target.value; p.onchange?.(e.target.value) } })]), + div({ class: "px-3 py-1 border-t text-[10px] text-right opacity-60" }, [span(() => c())]) + ]) +} \ No newline at end of file diff --git a/src/sigpro.grid.js b/src/sigpro.grid.js new file mode 100644 index 0000000..a9105f4 --- /dev/null +++ b/src/sigpro.grid.js @@ -0,0 +1,205 @@ +const { h, watch, onUnmount } = window.SigPro + +import { + ModuleRegistry, + ValidationModule, + ColumnAutoSizeModule, + CellStyleModule, + QuickFilterModule, + RowSelectionModule, + TextEditorModule, + ClientSideRowModelModule, + themeQuartz, + createGrid, + NumberFilterModule, + TextFilterModule, + DateFilterModule +} from "ag-grid-community"; +import { + MultiFilterModule, + SetFilterModule, + CellSelectionModule, + PivotModule, + MasterDetailModule, + SideBarModule, + ColumnsToolPanelModule, + ColumnMenuModule, + StatusBarModule, + ExcelExportModule, + ClipboardModule, + ContextMenuModule +} from "./grid-e"; + +ModuleRegistry.registerModules([ + ValidationModule, + ColumnAutoSizeModule, + CellStyleModule, + QuickFilterModule, + RowSelectionModule, + TextEditorModule, + ClientSideRowModelModule, + MultiFilterModule, + CellSelectionModule, + PivotModule, + MasterDetailModule, + SideBarModule, + ColumnsToolPanelModule, + ColumnMenuModule, + StatusBarModule, + ExcelExportModule, + ClipboardModule, + NumberFilterModule, + TextFilterModule, + SetFilterModule, + DateFilterModule, + ContextMenuModule +]); + +const Grid = (props) => { + const { data, options, api, on, class: className, style = "height: 100%; width: 100%", dark } = props; + let gridApi = null; + let cleanupFn = null; + + const getDark = () => + dark !== undefined + ? (typeof dark === 'function' ? dark() : dark) + : document.documentElement.getAttribute('data-theme') === 'dark' || + window.matchMedia('(prefers-color-scheme: dark)').matches; + + const getTheme = () => { + const isDark = getDark(); + + if (isDark) { + return themeQuartz.withParams({ + headerFontSize: 14, + headerVerticalPaddingScale: 0.4, + rowVerticalPaddingScale: 0.4, + backgroundColor: "#1d1d1d", + foregroundColor: "#ffffff", + headerBackgroundColor: "#2a2a2a", + headerForegroundColor: "#ffffff", + oddRowBackgroundColor: "#262626", + borderColor: "#404040", + browserColorScheme: "dark" + }); + } + + return themeQuartz.withParams({ + browserColorScheme: "light", + headerFontSize: 14, + headerVerticalPaddingScale: 0.4, + rowVerticalPaddingScale: 0.4 + }); + }; + + const initGrid = (container) => { + if (cleanupFn) { + cleanupFn(); + cleanupFn = null; + } + if (gridApi && !gridApi.isDestroyed()) { + gridApi.destroy(); + if (api) api.current = null; + gridApi = null; + } + + if (!container) return; + + const initialData = typeof data === "function" ? data() : data; + const initialOptions = typeof options === "function" ? options() : options; + + const commonEvents = [ + 'onFilterChanged', 'onModelUpdated', 'onGridSizeChanged', + 'onFirstDataRendered', 'onRowValueChanged', 'onSelectionChanged', + 'onCellClicked', 'onCellDoubleClicked', 'onCellValueChanged', + 'onRowClicked', 'onSortChanged', 'onContextMenu', + 'onColumnResized', 'onColumnMoved', 'onRowDataUpdated', + 'onCellEditingStarted', 'onCellEditingStopped', + 'onPaginationChanged', 'onBodyScroll' + ]; + + const eventHandlers = {}; + commonEvents.forEach(eventName => { + if (on?.[eventName]) { + eventHandlers[eventName] = (params) => on[eventName](params); + } + }); + + const gridOptions = { + ...initialOptions, + theme: getTheme(), + rowData: initialData || [], + onGridReady: (params) => { + gridApi = params.api; + if (api) api.current = gridApi; + if (on?.onGridReady) on.onGridReady(params); + + if (initialOptions?.autoSizeColumns) { + params.api.autoSizeAllColumns(); + } + }, + ...eventHandlers + }; + + gridApi = createGrid(container, gridOptions); + + const stopData = watch(() => { + if (!gridApi || gridApi.isDestroyed()) return; + const newData = typeof data === "function" ? data() : data; + if (Array.isArray(newData)) { + const currentData = gridApi.getGridOption("rowData"); + if (newData !== currentData) { + gridApi.setGridOption("rowData", newData); + } + } + }); + + const stopTheme = watch(() => { + if (!gridApi || gridApi.isDestroyed()) return; + getDark(); + const newTheme = getTheme(); + const currentTheme = gridApi.getGridOption("theme"); + if (JSON.stringify(newTheme) !== JSON.stringify(currentTheme)) { + gridApi.setGridOption("theme", newTheme); + } + }); + + const stopOptions = watch(() => { + if (!gridApi || gridApi.isDestroyed() || !options) return; + const newOptions = typeof options === "function" ? options() : options; + if (newOptions) { + Object.entries(newOptions).forEach(([key, val]) => { + try { + gridApi.setGridOption(key, val); + } catch (e) { } + }); + } + }); + + cleanupFn = () => { + stopData(); + stopTheme(); + stopOptions(); + if (gridApi && !gridApi.isDestroyed()) { + gridApi.destroy(); + if (api) api.current = null; + gridApi = null; + } + }; + + onUnmount(() => { + if (cleanupFn) { + cleanupFn(); + cleanupFn = null; + } + }); + }; + + return h("div", { + class: className, + style: style, + ref: initGrid + }); +}; + +export { Grid }; \ No newline at end of file